[CUWiN-Dev] more summer of code projects
David Young
dyoung at pobox.com
Mon Apr 24 18:49:44 CDT 2006
1 Cross-build CUWiN on non-i386 architectures
CUWiN is based on NetBSD, which runs on a large number machine
architectures, including 64-bit AMD, ARM, i386, MIPS, PowerPC,
32- and 64-bit SPARC. NetBSD also runs in Xen virtual machines.
NetBSD comes with a script, build.sh, that builds the
cross-compilation toolchain, kernel, and user programs, for
every architecture that NetBSD supports. Changing the target
architecture is a simple matter of changing the '-m' option
argument to build.sh.
The CUWiN system uses build.sh to cross-build NetBSD from Linux
and Mac OS X, however, CUWiN does not build for more than one
architecture.
Revamp the CUWiN build system to exploit NetBSD's ability to
cross-build for non-i386 machine architectures. Add to the
CUWiN build script, mkstaboot, an '-m <architecture>' option.
Demonstrate either a CUWiN CD-ROM for a non-i386 system, or a
kernel with memory-disk root for non-i386, or both.
2 Discovering and selecting Internet gateways on a dynamic mesh
network.
Community wireless "mesh" networks are usually "multi-homed,"
that is, they connect to the Internet in more than one place.
Multi-homing on community wireless meshes is complicated by the
presence of Network Address Translation (NAT) at the gateways.
Dynamic wireless links compound the complexity.
Write a daemon that advertises, discovers, and selects IPv4
gateways. Select IPv4 gateways that are "best" according to the
routing metrics. Protect against severance of TCP sessions with
a change of NAT gateway.
CUWiN favors a solution that involves tunneling to one or more
IPv4 gateways and using the pf stateful firewall to "stick" a TCP
session to its NAT gateway. If you understand IP-in-IP tunnels,
stateful firewalls, and IP routing, the intricacies (and evils)
of NAT, this may be the project for you!
3 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.
4 Configuration information store
Have you ever botched the configuration of a wireless router
at the tip-top of your steeply-slanting roof in the middle of a
thunderstorm? Did a lot of people depend on that wireless router?
Did it take a long time to restore the router to working order?
Did you need a ladder to do it?
Sometimes CUWiN routers end up in places where it is inconvenient
or dangerous to plug your laptop into the ethernet or serial
port to manage them. Sometimes an operator has no choice but
to reconfigure a router "over the air." If an operator tunes
to the wrong frequency channel, for instance, or deactivates the
wrong wireless interface, they might lose control of the router.
Commercial routers by Cisco, Juniper, NextHop, and others,
centralize the configuration of the router in a transactional
configuration information store that has commit/auto-rollback and
undo/redo functions. An operator can make tentative and, more
importantly, incorrect configuration choices (e.g., deactivating
the wireless interface he sends his configuration commands
over!) with confidence, because the router will "roll back"
to the last good configuration if several seconds pass without
operator activity.
Create a configuration information store for the CUWiN system.
The store should be structured as a tree, with individual
configuration items named by slash-delimited paths from the root
of the tree. The operations on the tree are these:
value = get(path)
old_value = set(path, value)
create_container(path)
delete_container(path)
handle = start_listen(path)
stop_listen(handle)
stream = serialize(path)
deserialize(path, stream)
set_redo_action(path, action_string)
set_undo_action(path, action_string)
generation = get_generation()
redo(generation)
undo(generation)
commit(generation)
Applications that use the store (e.g., an SNMP server or a web
configurator) will control it by sending operations over a socket.
An application can monitor the state of configuration items at
a certain path by registering as a "listener" for that path.
Applications label a path with both a "redo" and an "undo"
action; these are shell commands that the store runs to apply
a make a configuration change "live," and to "revert" a change,
respectively. For example, consider this tree:
/interfaces
/interfaces/0
/interfaces/0/name = eth0
/interfaces/0/addresses
/interfaces/0/addresses/ipv4
/interfaces/0/addresses/ipv4/0 = 192.168.1.1
The path /interfaces/0/addresses/ipv4/0 may be labeled by the
redo-action
ifconfig $(../../../name) inet $(.) alias
and undo-action
ifconfig $(../../../name) inet $(.) -alias
Where the $() notation interpolates the value stored at a path.
This configuration manager should be versatile enough to
configure any kind of networked appliance. It could work with
Quagga/BIRD/XORP.
You only need to produce a simple command-line app for the store.
TBD finish specs for this.
This is an ambitious project for one summer.
5 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.
Dave
--
David Young OJC Technologies
dyoung at ojctech.com Urbana, IL * (217) 278-3933
More information about the CU-Wireless-Dev
mailing list