Name | Last modified | Size | Description | |
---|---|---|---|---|
Parent Directory | - | |||
more-release-one/ | 2009-07-16 14:52 | - | ||
more-release-one.tgz | 2011-06-13 17:49 | 37K | ||
As packaged here, MORE supports a limited set of features:
We are planning to address the missing features in the near future, depending on the demand.
As implemented here, MORE is a userspace program that communicates with the wireless network interface via raw sockets to route its packets from the source to the destination.
MORE has been built on Click modular router and tested on Atheros 802.11 a/b/g cards driven by the MadWifi driver on Linux 2.6. Running on other systems will require some porting.
To truly test MORE, you will need at least 3 machines (source, destination and a forwarder) equipped with an Atheros wireless interface. To sum up, the steps required are:
MadWifi is only needed to run Click with MORE, not build it.
Follow the download instructions from madwifi-project.org. MORE should work fine with both madwifi-old and madwifi-ng. However, this package has been specifically prepared for the release madwifi-0.9.3.3. Follow the installation instructions from the driver package on your testbed machines.
If you previously had madwifi installed, you might have to remove the old modules. That could require bringing the interface down and unloading the module ath_pci.
Follow the download instructions from ucla.edu. This package was tested on Click releases 1.5.0 and 1.6.0.
To build Click with MORE, you need to place MORE source code as a subdirectory to one of the enabled subdirectories in the /elements tree. For example you can place the source files under elements/local, but do not forget to --enable-local in the configure. Alternatively, place the source files in a subdirectory of /elements/wifi.
MORE uses very few elements from click -- from userlevel, standard, ethernet, and wifi. Make sure that these element directories are enabled. MORE was tested in userlevel only. You can disable linuxmodule, app, aqm, tcpudp, ip, icmp for faster build. If you are building on a different machine than the testbed, you might consider adding LDFLAGS=--static.
Build the userlevel click binary and place it on your testbed machines.
A core component of the package is the script config.py. When executed on a testbed machine, it ensures that the wireless interface is in the monitor ("raw") mode and generates a a Click configuration file including both MORE and a straw-man single-path router (SPP).
To compute static routing, you need to measure all-pair delivery probabilities in the selected transmitter configuration (channel, bitrate, tx power). Included in the package is a simple tool links.py that takes care of that.
Like other scripts in this package, links.py uses nodes.py and a common format of node list for management -- for each node in your testbed the list includes the line:
[IP] [MAC] [HOSTNAME]The scripts assume you can ssh root@IP without passwords (e.g., using keys). MAC is the hardware address of the wireless device and HOSTNAME is for convenience. To find the MAC you can run (on the subject testbed machine):
./config.py > /dev/nullWith default settings, it should read:
using wifi0 / ath0 MAC 00:11:22:33:44:55
NOTE: the assumed directory for click, config.py and startup.sh is /root/more. To change it, update RUNTIME_DIR in nodes.py. The default name for the node list is ./nodes.
The link measurement format used for computation is:
[transmitter] [receiver] [bitrate] [delivery-prob]Where bitrate is the IEEE (2x) bit-rate (i.e, 5.5Mb/s is bitrate 11).
To install Madwifi:
make make install
To configure and build click (assuming MORE is under elements/local):
./configure --enable-wifi --enable-local make # copy userlevel/click to the testbed machines
To setup runtime environment:
# create the 'nodes' file, e.g. 10.0.0.1 00:AA:BB:CC:DD:EE host1 10.0.0.2 00:AA:BB:CC:DD:FF host2 # put click, config.py and startup.sh in your runtime dir on the testbed
To setup all nodes on a common channel, e.g. 4, and (and to quickly check if the 'nodes' file is correct):
exec.py nodes 'iwconfig ath0 channel 4'
To measure links at 1Mb/s:
links.py -r 2 -o links2 # it takes a while! # output in links2 could look like this: host1 host2 2 0.5 host2 host1 2 1.0
To run experiment:
quickrun.py links2 host1 host2 spp quickrun.py links2 host1 host2 more # this writes the routing configuration to (spp|more).feed # executes it # and dumps the counters' readings to (spp|more).statsThe resulting Python-parsable .stats file contains a dictionary storing, for each hostname in nodes, a list of 5 strings: outgoing DATA packets, outgoing ACK packets, incoming packets, packets received (at sink), average rate of packets received (at sink). For example:
{ 'host1' : ['4200', '0', '64', '0', '0'] , 'host2' : ['0', '64', '4188', '4160', '70.92'] , }We see host2 received 4160 packets at average rate of 70.92 per second.