This is an old revision of the document!
The Wisconsin Wireless Rover (WiRover) project implements a bandwidth aggregated wide-area wireless access technology for the Internet, especially suited for users on the move, often in vehicles. The goal is to exploit diversity to provide a reliable and high-quality Internet connection.
MAR: A Commuter Router Infrastructure for the Mobile Internet
Exploiting Diversity to Enhance Multimedia Streaming Over Cellular Links
Task Table
Task Name | Sub-task | Details | Owner | Date completed |
---|---|---|---|---|
Dynamically scan interfaces | - | The system should be able to adjust to iface going up or down and changing IP addresses | Josh | DONE |
- | Spawn off a thread | This code to be a thread to dynamically scan interfaces on the go | Josh | N/A |
- | Route Patching | Need to code up some functions to patch routing when needed (or turn off network manager) | - | - |
Setup proxy | - | All packets will be encapsulated and sent to the proxy | Josh | DONE |
- | Proxy NAT | The proxy will also need a NAT to translate packets for multiple WiRovers | Josh/Rob | DONE |
Test Scripts | - | Scripts to test the code base | - | - |
- | Log Test Output | Keep a log of test output so we can go back and see when/where things broke | - | DONE |
Code Cleaning | General clean up | Lots of code to clean up | Josh/Rob | DONE |
- | Parameter File | Have all the parameters read from a file | Josh/Rob | DONE |
- | Better Logging | If a crash happens we need enough info to figure out what caused the crash | Josh/Rob | DONE |
- | Break Up Long Functions | - | Josh/Rob | - |
- | Remove Hard Coded Values | - | - | - |
- | Remove Globals | - | Josh/Rob | DONE |
Demo | Basic demo | Run round robin in the lab | All | DONE |
- | Weighted round robin | In lab | Josh | DONE |
- | Video demo | In lab or in a car | All | - |
Deployment | - | What needs to be done before deployment can happen? | - | - |
- | MTU Problems | For iPhone and other devices (N800) | Rob | DONE |
- | Set up DNS for WiRover | When we have code updates we need to be able to remote into the machine and update it | - | DONE |
- | Bus Install | Need remote access and log/info about crashes | - | - |
- | Push Updates | If new code version | - | - |
- | Usage Stats | Need to be able to collect general stats like number of unique IP, average usage, length of use, etc. | - | - |
Currently being worked on by Joshua Hare, Rob Madden, and Jordan Walker
Previously worked on by Ryan Pfeffer, Nick Leaf, and Sharad Saha.
Gmail Account for getting mar status emails:
user: wisconsin.rover@gmail.com
pass: soekris;
WiNGS-Laptop-3
WiNGS-Laptop-4 (eeepc 900A)
WiNGS-Laptop-5 (eeepc 900A)
WiNGS-Laptop-6 (eeepc 900A)
Ubuntu EEEPC/Easy Peasy Configuration
SVN Howto for MAR:
[rmadden@corral mar]$ svn ls file:///home/svn/mar OR svn ls svn+ssh://username@corral.wail.wisc.edu/home/svn/mar mar_eeepc/ mar_linux/ mar_soekris/
[rmadden@corral wirover]$ svn ls file:///home/svn/wirover OR svn ls svn+ssh://username@corral.wail.wisc.edu/home/svn/wirover wicontroller/ wigateway/
wireless28:~ robmadden$ svn ls svn+ssh://svn@corral.wail.wisc.edu/home/svn/wiscosvn@corral.wail.wisc.edu's password: wirover/
Checkout modules over ssh:
svn co svn+ssh://username@corral.wail.wisc.edu/home/svn/(project)/(module)
wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco
Checkout the bus tracker over ssh:
svn co svn+ssh://username@corral.wail.wisc.edu/home/svn/bus_tracker
How to make a branch over ssh:
svn copy svn+ssh://username@corral.wail.wisc.edu/home/svn/mar/mar_eeepc/(copy_from) svn+ssh://username@corral.wail.wisc.edu/home/svn/mar/mar_eeepc/branches/(branch_name)
How to make a tag over ssh:
svn copy svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/wirover/ svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/tags/wirover-0.1 -m "Tagging the 0.1 releaes of the 'wirover' project."
Set up a dyndns.com account
Install ddclient package on eeepc, set up for wirover1.dyndns.org.
Future boxes can be added by adding host wirover2, etc.
From Nick Leaf
MAR has two “ends,” so to speak. The inward-facing end is the NAT and wireless AP. On the MAR laptop, this function is taken care of by the internal wifi interface. MAR captures all packets on this interface. The outward-facing end is one or more EVDO cards. MAR captures all packets on either interface, though it mostly only deals with the network and transport layers.
Most of the action takes place in mar_msg.c, in the process_outbound_pkt and process_inbound_pkt functions. Outbound packets are those heading from clients on the AP to the EVDO network, and inbound packets are those heading towards the AP clients. UDP (except for DNS packets on port 53) and ICMP traffic is blocked; only TCP traffic is passed.
Every time process_outbound_pkt receives a SYN from an AP client on a connection that does not already exist, it creates entries in the hashtables for that connection. See lines 387-453 in mar_msg.c. There are two tables, one for outbound packets and one for inbound packets. The key for the outbound hashtable key is computed from the AP client's IP, the AP client's port, and the destination server's IP and port. The inbound hashtable key is computed from the server's IP and port, and the EVDO interface's IP and port.
Because the routing cache is maintained by the kernel separately from the routing tables, manipulating the routing tables may not have an immediate effect on the kernel's choice of path for a given packet. To avoid a non-deterministic lag between the time that a new route is entered into the kernel routing tables and the time that a new lookup in those route tables is performed, use ip route flush cache. Once the route cache has been emptied, new route lookups (if not by a packet, then manually with ip route get) will result in a new lookup to the kernel routing tables.
BIOS Changes
OpenWRT Settings (backed up in svn as config/dd-wrt-config.bin):
Administration Tab
Setup Tab
Wireless Tab
On ubuntu machine:
cat enabled > /sys/class/net/eth0/device/power/wakeup Add ethernet card driver to MODULES_WHITELIST in /etc/default/acpi-support Write 'wol_setup' script : ethtool -s (interface) wol g Modify scripts in /etc/acpi/suspend.d
I started out with a fresh install of ubuntu 9.04 on a HP desktop machine.
To setup the madwifi driver
Setup DNSmasq for the AP:
Setup the linksys AP for now
Then setup no_proxy per connection striping.