Write modular components to add new networking functionality to Clack.
Use Java GUI programming to create visualizations of router behavior or traffic passing through the router
Create command-line programs that run on top of a Clack router to inspect/modify router state (e.g arp -a, ifconfig) or generate traffic to run through your virtual network (e.g. ping, wget)
The best way to learn about how to code with clack is to read the Clack Router Developer Docs and to work with the source code and javadocs found in the Downloads section of the main page. If you still have concerns after contacting these sources, feel free to email us.
ICMP Destination unreachable generation: While our ARP component errors when no response if received, currently a dest unreach is not generated.
Link-state routing component (ie: OSPF): We recently finished a RIP implementation that has been used as a course assignment, so all of the routing
interfaces are documented here . Extending
Clack to also support a link-state protocol will be very useful.
(DONE) NAT component: demonstrate different types of NAT, symmetric, half-cone, etc and provide a basic visulization of a the internal translation tables.
Firewall / Intrusion detection component: This could make for a very fun class assigment, since Clack networks are virtual, meaning that students can use real tools to pen-test each other's IDS/firewall. Providing a Clack application to configure your system is probably a good idea.
Weighted-Fair-Queueing (WFQ): Clack already demonstrates basic queueing principles, and we are currently creating a new visualization for RED queues. WFQ would be another useful queueing discipline to demonstrate visually.
Etherenet switch/bridge: Demonstrate Ethernet switching, possibly including port learning and rapid spanning tree protocol (RTSP).
Generic TCP and UDP flow generation: Create a generic command-line mechanism for generate TCP or UDP traffic at a particular rate. The iperf tool would be a good example to clone.
traceroute: Simple implementation of traceroute.
ARP utility: A command-line utility to view and modify arp entries on a router. Based on the 'arp' unix utility.
Cisco commands: Currently clack supports unix-like commands for viewing and modify configuration information include routing tables. Clack could also support the Cisco commands.
Disconnected Virtual Networks:
Allowing use of Clack without VNS for simple demos that do not require
Internet connectivity to be effective. This will involve getting the
actually topology from a local file, not from VNS, and rewriting all
VNS and firewall assumptions that are embedded in the startup configuration
High Priority GUI for creating topologies: Right now, users cannot change the number of routers in a virtual network, or their connectivity, without the help of Clack admins. We would like users to graphically be able to build their own networks. A good amount of the code for this is already written, but it has not been integrated and tested.
High Priority Directional links in network view: Currently, interfaces within the network view are connected by a single link, which lights up whenever a packet is sent in either direction. We want to modify this so users can tell the direction of transmitted traffic.
Ethereal Filters: Add filtering capabilities to Ethereal, so that users can control what packets are visible in the top ''packet list'' window. Ideally, this would use intelligent drop down boxes so that students would not need to remember any kind of filter syntax. For example, we would have a ''src IP'' filter drop down that would list all source IP's currently in the table, and allow the user to select one or more to allow.
TCP endhost visualizations:. We have a simple Internet compatable TCP implementation, and had a nice ``hierarchical component'' that let the user explore within the TCP stack. It was 80% done and we haven't had time to finish it yet. We were also planning on adding some stuff similar to the "Timeline" and "TCP State" views in VTA . Existing code is mainly in packages net.clackrouter.component.tcp and net.clackrouter.gui.tcp. Contact us if you are interested.
More/better Ethereal parsers: There are more network level and application level protocols that Clack's ethereal packet analyzer could parse and show. The TCP and UDP parsers could also stand to be cleaned up.
Clean up IPPacket class: Better interface for accessing IPPacket fields. As of now, they still use the old ByteBuffer getters/setters inherited from long ago.
High Priority Clack Demos: A series of demos (both video and live) that show major capabilities of Clack. Definitely need: 1) RIP routing 2) ethereal 3) TCP vs. UDP 4) REDQueue