Google Summer of Code 2007

We invite Google Summer of Code participants to have a crack at the projects listed below. Be sure to read the descriptions carefully and contact us (cu-wireless-dev@lists.cuwireless.net) if you have questions before applying for the project.

Develop an 802.11 link adaptation for CUWiN that exports an ETT-like link metric for CUWiN's routing daemon, hslsd, to use.
 
Replace Zebra on CUWiN routers
Replace Zebra on CUWiN routers with a compact library for managing routes, the appearance and disappearance of network interfaces and tunnels, and NetBSD's forwarding table. The module you need to produce is commonly called a Routing Information Base (RIB). Make CUWiN's routing daemon, hslsd, work with your module.
Community Domain Name Service & Service Discovery
CUWiN has designs for a community name service that puts subscribers in control of their name on the 'Net, and lets them advertise web servers and chat-client "presence" information to their neighbors. Some code exists in a very rough form. Finish it.
Distribute IPv4 & IPv6 prefixes on a community mesh
CUWiN would like for everybody who belongs to a community mesh to have their own global IP number, so that they can run their own web server, place & receive VoIP telephone calls without grotty hacks like STUN, and generally be a first-class network citizen.

To that end, CUWiN needs a system for automatically distributing global IP numbers to subscriber's mesh nodes. The global numbers may come from any number of sources, including a DHCP server, IPv6 prefix advertisements, or manual configuration.

Let us say that each router on the wireless mesh has a pool of zero or more global IP numbers that it can allocate to itself and to other routers on the mesh. Write a daemon that advertises the pool's availability throughout the routing domain, that grants and requests "leases" on IP numbers from pools throughout the domain, and that configures the router and subscribers' home PCs with "leased" IP numbers.

Miniturization
CUWiN routers with very small amounts of RAM and Flash storage need to embed both a DHCP server and client. Replace or modify the ISC DHCP server and client that CUWiN uses. Aim to fit both the server and client in 100kB of Flash or less, without compression. Make CUWiN's dhcpselect program work with the new client & server.
Create a web template system for embedded web apps
Create a web template system for embedded web apps written in C that works similarly to Template Attribute Language (TAL), except that it will interpolate C expressions instead of Python expressions, and it will interpolate text stored in ClearSilver HDF objects. Re-use expat, scew, and ClearSilver as appropriate. Make your solution as small as you can without sacrificing essential functions of a web template language.
Diagram WiFi Protocol Packets
Interpreting an 802.11 packet trace is difficult even for an expert, because available tools display packet traces as rows and rows of text. One who reads a packet trace that is shown in this way has to do mental arithmetic on packet timestamps and compare hexadecimal station and network identifiers with each other in order to extract the most elementary information.

CUWiN asks you to design and program a display of 802.11 packet traces that help the expert and the novice alike to grasp essential facts about the WiFi activity captured in any trace.

Your display will diagram each packet on a timeline, drawing each packet as a rectangle whose height is proportional to the packet's signal strength, whose leftmost extent is set by the packet timestamp, and whose width is set by the packet's duration. The timeline will be drawn as a thin line with "ticks" at regular time intervals. Some packet-rectangles will be drawn on top of the timeline (that is, their bottom side just touches the timeline), and some will be drawn on the bottom (their top just touches the timeline). The operator will be able to assign one 802.11 stations to be drawn on top of the timeline, and one on bottom, in order to get a picture of the pairwise interaction of the two stations.

A more sophisticated display shows damaged portions packets, it infers packets that are "missing" from the trace (for example, 802.11 Acknowledgements) and draw their "ghosts," it may draw more than one timeline simultaneously, and it may distinguish 802.11 Control, Data, and Management packets, and 802.11 packets belonging to different networks (BSSIDs), by the changing the packets' shape, color, or texture.

When you are finished, you will have produced a network diagnostic tool that provides powerful visual explanations of why 802.11 networks work and do not work.

Wireshark, the open-source network protocol analyzer, with its versatile display and filters, may provide foundations for you to build your packet display on. The Cairo graphics library may aid your display of the timeline and packets.