Table of Contents

The Wisconsin Wireless Rover (WiRover)

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.

Prior Work

MAR: A Commuter Router Infrastructure for the Mobile Internet
Exploiting Diversity to Enhance Multimedia Streaming Over Cellular Links

Details

Currently being worked on by Joshua Hare, Rob Madden, and Jordan Walker
Previously worked on by Ryan Pfeiffer, Nick Leaf, and Sharad Saha.

Gmail Account for getting mar status emails:

user: wisconsin.rover@gmail.com
pass: soekris;

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.

Hardware

WiNGS-Laptop-3

WiNGS-Laptop-4 (eeepc 900A)

WiNGS-Laptop-5 (eeepc 900A)

WiNGS-Laptop-6 (eeepc 900A)

WiNGS-Laptop-7 (lenovo S10)

Ubuntu EEEPC/Easy Peasy Configuration

How to get project source

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 current version of WiRover System (checks out code for Gateway/Controller)

          svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/

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/dotfiles
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wirover
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/wirover
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/wirover/data
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wisco/wirover/demo
          wireless28:~ robmadden$ svn co svn+ssh://svn@corral.wail.wisc.edu/home/svn/wirover_k

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."

Bus Tracker Details

General Setup/Linksys DD-WRT Setup/DHCP and DNS on WiGateway

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

Services Tab

NAT/QoS 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.

General Setup/Linksys DD-WRT Setup/DHCP and DNS on Linksys Box

/etc/resolv.conf

OpenWRT Settings (backed up in svn as config/dd-wrt-config.bin):

Administration Tab

Setup Tab

Wireless Tab

NAT/QoS Tab

Setup the linksys AP for now

BusWatch Setup

MAR ('mar_eeepc') Details (Original MAR)

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.

Video Stream Setup

sudo apt-get install uvc
sudo apt-get install vlc
sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list && sudo apt-get -q update && sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring && sudo apt-get -q update
sudo apt-get update
sudo apt-get purge ffmpeg x264 libx264-dev
sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libsdl1.2-dev libtheora-dev libx11-dev libxvidcore4-dev zlib1g-dev
git clone git://git.videolan.org/x264.git
cd x264
./configure
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1" --default
cd ..
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3" --default

Netlink sockets will send notifications from the kernel to the user space of links going up and down, changes to IP addresses, and changes to routes. It can also be used to add and remove routes.