Kernel AODV
Created by Luke Klein-Berndt
National Institute of Standards and Technology
http://w3.antd.nist.gov/wctg/aodv_kernel/
---------------------------------
Kernel AODV is a loadable kernel module for Linux. It implements AODV routing
between computers equipped with WLAN devices. Kernel AODV began as an update to
the MadHoc implementation of the AODV protocol. However it has evolved into a
completely separate implementation.
Version 2.0.1 improvements:
* Fixed an error that occurs on ARMs when they do 64bits differently
* Thanks to S. Peter Li for coming up with this fix!
Version 2.0 improvements:
* Updated to AODV draft version 11.
* Managed internet gatewaying.
* Monitor wireles signal strength.
* Fixed buffer size for /proc Route Table.
* Fixed Expanding Ring Search.
Version 1.5 improvements:
* Supports multiple interfaces.
* Based on draft 10 of AODV.
* Runs on ARM based PDAs.
* Completely redesigned and improved internal message handling system.
* Simplified installation process.
Version 1.0 features:
* Since it is a Kernel module it runs in the Kernel space instead of the user
space, which allows for better access to resources.
* Uses Netfilters from the 2.4 Kernel to capture packets going in and out of the
node instead of using the libcap library.
* Uses a Proc file to update the user about current routes and statistics for
that node.
Contact:
If you have any questions, concerns or comments please feel free to contact Luke
Klein-Berndt at: kleinb@nist.gov
Requirements:
* Linux with Kernel 2.4.
* Packet Forwarding enabled. This can be set by making sure there is a line in
/etc/sysconfig/network which says: FORWARD_IPV4=yes.
* Netfilters. If you don't have it installed you need to reconfigure the your
Kernel options and then rebuild the Kernel. There is a HOWTO manual on this
which maybe helpful.
* A networking card is needed. If it is a wireless card have it configured in Ad
Hoc mode. If you are unsure on how to do this look for information on iwconfig
and setting up a wireless network under Linux.
* The source files for the Linux kernel you have installed. It should be located
in the /usr/src/linux directory. If they are not you can download them from:
http://www.kernel.org
Installation:
* Download the file.
* Unpack it - tar xvfz kernel_aodv_2.0.tar.gz.
* Switch into the new directory and run - make.
* If notice any errors during compilation you may need to alter the Makefile.
The Makefile contains instructions on how to do this.
Usage:
Once Kernel AODV is compiled you can try running it. Make sure you are root and
run - insmod kernel_aodv.o.
Now start up atleast two other nodes. With all the nodes in range, check the
routing table - cat /proc/aodv/route_table. Each node should appear in the
routing table. There maybe multiple entries for nodes with more than one
interface.
Once you verify that all nodes are able communicate try setting up a
configuration where multiple hops would be needed, i.e. A---B---C. Now try
pinging across the nodes. If this works you are up in running. If not, refer to
the troubleshooting section.
Options:
* The amount of information Kernel AODV displays on the console terminal is
selectable. If you want to see the operational messages add -DMESSAGES to the
MODCFLAGS line in the Makefile. To trace the operation add -DTRACE to
MODCFLAGS. Run make clean and then make.
* It is possible to prevent Kernel AODV from sending Hello Messages out on a
device - insmod kernel_aodv.o block_dev=eth1.
* Kernel AODV is also able to make use of the loopback (lo) device - insmod
kernel_aodv.o use_lo=1.
* If you would like to limit Kernel AODV to only using one interface you can
specify the device it should use - insmod kernel_aodv.o aodv_dev=eth0
* If you are using a gateway to an external network (aka the internet) you
can specify a subnet that all the AODV nodes are in. Any internet address
outside of the range is assumed to be on the External Network and is
passed to the gateway. 0s are used as wild-cards when specifying the subnet.
insmod kernel_aodv.o aodv_subnet=129.6.230.0
Proc files:
* AODV Routing table - /proc/aodv/route_table .
* List of timers - /proc/aodv/timer_queue .
* List of RREQs - /proc/aodv/rreq_id_queue .
Managed Internet Gatewaying:
Ver 2.0 of Kernel AODV introduces managed internet gatewaying. If an IP
address is outside of a subnet it is assumed that the address is on the
external network. In order to successfully gateway you will need one node
with two network interfaces. One of these interfaces will be used to connect
to the external network while the other will be used to communicate with other
AODV nodes. The gatewaying nodes then has to be configured using - netconf.
After the conrect settings for accessing the internet are entered, the node
should be able to access the Internet before Kernel AODV is started. The
other nodes which are going to use the gatewaying node also have to
reconfigure using netconf. They will want to use the same DNS servers as the
gatewaying node except as a gateway they will use the IP address of the
gatewaying nodes interface which is connected to the AODV network. IPTABLES
is used to do NAT, allowing AODV nodes to access the external network. IPTABLES
should be installed on the gatewaying node. A sample script, start_gateway.sh
has been included. It will have to be configured before use.
For example:
Node A - the gatewaying nodes
eth0- connected to internet
IP= 129.6.53.50
eth1- WLAN connected to other AODV nodes
IP= 129.6.230.5
(use start_gateway.sh or start IPTABLES manually)
insmod kernel_aodv.o aodv_dev=eth1 aodv_subnet=129.6.230.0
Node B - AODV node
eth0- connected to other AODV nodes
IP=129.6.230.4
insmod kernel_aodv.o aodv_subnet=129.6.230.0
Node B has been configured using netconf so that its default
gateway is the IP of Node A's eth1
Troubleshooting:
Q: When I try pinging I get, Network Unreachable.
A: You probably have a routing problem unrelated to Kernel AODV. Try doing the
same thing except without Kernel AODV running on either computer. If the
problem persists the next thing to check is the routing table. If you don't see
a default route run - "route add default dev eth0".
Q: The route between two Neighboring nodes is not too stable even though they
are next to each other.
A: Check to make sure the wireless settings are the same on all the nodes. The
iwconfig utility will be helpful. Make sure that encryption is turned off and
that the rate is the same on all the nodes. You may want to try - iwconfig eth0
rate 2. It is recommended that you try a rate of 2 because that is the rate at
which broadcast messages are sent at. Setting the rate to 2 means that unicast
packets and broadcast packets will be sent at the same rate.
Q: Kernel AODV seems to be able to find routes between nodes but I am unable to
ping between them.
A: Make sure you have IP forwarding turned on. Try echo 1 >
/proc/sys/net/ipv4/ip_forward . Also make sure you do not have a
uni-directional link. Check the routing table on each node to make sure it can
see the other nodes.
Q: Something doesn't seem right but I can't figure out what.
A: Try all of the solutions listed above. None of them will do any damage and
one might fix a problem you did not even know you had! If that does not work
send an email describing you problem to: kleinb@nist.gov .
Created: 11/05/01 Updated: 08/15/02
NIST is an agency of the U.S. Commerce Department's Technology Administration
评论0