$Id$ Here are more research & development tasks. *** See also: trunk/doc/local/summer-of-code *** Set appropriate carrier-sense thresholds Sanjit Biswas @ MIT tells me the carrier-sense threshold is set way higher than the typical Rx signal strength on the MIT Roofnet. This may help explain bad performance. Transmit power control & attendant carrier-sense adjustments Operate at lower power to reduce self-interference and also to be more "neighborly." For Atheros h/w, we may need outside help. IPv4/IPv6 NAT Traversal Most of our Internet-connected wireless nodes are unreachable from the CUWiN office, because they are behind NAT firewalls. Teredo, , lets IPv6 packets traverse NAT firewalls. Program a Teredo pseudo-interface, teredo(4), for NetBSD. Your interface should support client/relay/server modes. stf(4), the 6to4 pseudo-interface, may be a useful starting point. Mitigate self-interference Power control matters. Also, we can use a metric like James Stevens' Least Interference Routing does, with adaptations for 802.11, to use routes that minimize the number of links that are interfered with by a packet stream. OPN / MS Research's MultiNet: We can improve the connectivity of community nets without using more radios if you can operate with one radio on more than one network. Sam Leffler's Multi-BSS support is a good starting-off point. Channel agility Make coordinated changes of channel on the network, and/or operate on more than one channel as in MS MultiNet. How should nodes decide to change channel? Is there any advantage if a receiver that is impaired by local interference tunes to an interference-free channel, and its neighbors change to its channel before transmitting to it, or does the channel-switching overhead absorb the performance gain? Datasheets suggest that we can switch channels in 100us-200us. Can we really? Multicast Make community meshes an efficient broadcast medium by adding multicast routing; deal with nuances of multicast forwarding on wireless (packet duplication); use different metrics for multicast? Ports Mac OS X It's BSD, so it might not be *too* difficult to port net80211 and the *BSD wireless drivers. Then we can run hslsd/etx "in the usual way." Lots of work. Apple should support this development, since it makes *so* much sense. Sick Sascha on 'em? Debuggability We need to add sparse kernel dumps (hard), and reserve a partition to collect them on the nodes (easy). We should collect netbsd.gdb kernels for releases and put them in some known location. For our development/testing builds, we should also collect the netbsd.gdb kernels somewhere. We should build all of our daemons and utilities w/ -g -DDEBUG, and collect unstripped versions for releases (and optionally for development builds). Improve the HSLS bootstrap condition When router R detects a new peer, P, whose originator address is not in R's routing table, then R should wait ten seconds (say) and initiate bootstrap on the interface where it hears P. Multi-threaded hslsd It makes sense to run the Hello protocol, LSU generation/relaying, and the "decision" process in separate threads. hslsd, our HSLS daemon, does not do that. Let's make it so. Switch to Quagga We're using Zebra, which is dead as a doornail. It should be trivial to switch to Quagga, but we will need to test carefully when we do. We may have already switched. User interface Need to be able to reconfigure individual interfaces for different roles (AP, mesh, subscriber). Need to set firewall/bandwidth-shaping rules. Set log destination. Set subscriber's machine names & addresses. Select gateway. Directional antennas There are some promising, cheap technologies that can add adaptive antennas to 802.11b: "Commodity-Class Phased Array Antennas" (Jim Kajiya), Motia Javelin, Atheros' latest products, Airgo "True MIMO". Need docs to add driver support for these. Need to figure out what combination of antennas to use. Need to find a source for cheap, compact antenna arrays. Need to integrate with routing, probably following UDAAN findings. Drivers ACX-100 (not suitable?) ADMtek ADM8211B/C (I have docs, just need time. So close!) Ralink RT2500 (There's now an OpenBSD driver. Just needs to be ported.) Realtek RTL8185 (I have a sample card, and about half the docs I need) Intel drivers iwi(4), ipw(4) are already in -current. Intel's cards may not be suitable for CUWiN. QoS We can control delay and differentiate service for voice/video/bulk data by computing metrics delay/jitter/whatever metrics, computing SPF on different combinations of metrics, and using different routing tables for different types of traffic. Whew, that could be a big project. It may be possible to control jitter/delay on the mesh with some driver modifications that make forwarding decisions concurrent with packet reception ... I'm still thinking about this. ettadapt Expected Transmission Time (ETT)-based rate adaptation, with hooks for routing daemons (hslsd) to read metrics out of the kernel. Update, Wed Aug 17 20:10:20 CDT 2005: There is now SampleRate by John Bicket. It only works with the Atheros radio. It needs hooks for reading the ETT per client/peer out of the kernel. It's not clear whether/how we can keep ETT up-to-date for idle clients/peers. libett An hslsd module that reads ETT metrics out of the kernel, matches them with IPv6/IPv4 peers using the NDP/ARP tables, and sets metrics in the link-state database. Quagga improvements This needs more articulation, but I have grave concerns about Quagga reliability. The zserv socket sends no success/failure indications. Zserv error-checking is virtually non-existent. Neither Zebra nor the protocol daemons are prepared to handle protocol-daemon crashes/restarts. Cross-building Developers can build on Linux. Needs testing on FreeBSD, OpenBSD, Mac OS X. Maintenance is key. $Id$