Download Latest Version FB-AODV_1.1.tar.gz (52.5 kB)
Email in envelope

Get an email when there's a new version of FB-AODV and WCIM routing

Home
Name Modified Size InfoDownloads / Week
FB-AODV_1.1.tar.gz 2014-02-26 52.5 kB
README 2014-02-26 5.7 kB
README.ABOUT 2014-02-26 1.6 kB
Totals: 3 Items   59.7 kB 0
Flow-Based AODV (FB-AODV) routing protocol with Weighted Contention and Interference routing Metric (WCIM)
Miguel Catalán Cid
Wireless Network Group (WNG) - Univesitat Politecnica de Catalunya (UPC)
http://genweb.upc.edu/wireless

This work is supported by the Spanish Government through project TEC2009-11453 and FEDER.
------------------------------------------------
Plese, use start-aodv.sh for routing protocol module initilization

FLOW-BASED ROUTING:
-In FB-AODV, routes are based on flows. Each unique flow is determined by a source, a destination and a ToS. The available ToS are defined and can be modified in tos.c. 

-Kernel r outing is based on Routing Policiy DataBase (RPDB). IP RULES are used in order to point each source to a routing table (up to 255). In each routing table, the routes for the different flows from a unique source are defined. 
Default routes from the Internet are created in the main route table. 

- For control or debug purposes, it is possible to route flows without ToS (i.e. 0x00) between neighbors (RREQ-RREP messages are not used).
 
- In order to route flows, it is needed to use iptables MANGLE. Usual linux kernels support only eight different ToS or DSCP:
TOS: 0x00, 0x04, 0x08, 0x10
Example: itpables -t mangle -A OUTPUT -p ICMP -j TOS --set-tos 0x10
TOS (DSCP): 0x0c (0x03), 0x14 (0x05), 0x18 (0x06), 0x1C (0x07) - 
Example: iptables -t mangle -A OUTPUT -p UDP --dport 1234 -j DSCP --set-dscp 0x03



GATEWAYS AND INTERNET:

-The routing protocol supports multiple gateways. A gateway should start the kernel module with the option aodv_gateway = 1. It announces itself using ST-RREQ messages (based on AODV-ST). The receivers select a gateway as default by means of the minimum routing metric (Hop Count or ETT).

-Access Point and Gateways should apply NAT

-A gateway cannot be an intermediate node in a route to the Internet through another Gateway. 




ROUTING METRICS:
-The routing protocol implements three different routing metrics: Hop count, ETT (link quality aware) and WCIM (link quality, interference and load aware).

-ETT and WCIM require link quality estimations. Error rate estimation is based on Hello's exchange (like ETX metric). Nominal rate estimation is based on Packet-Pair messages (like WCETT metric). If the rates are fixed, packet-pair messages can be deactivated.

-WCIM metric needs load computation (based on the ToS of the flows) and load information exchange (using the Hello messages)



PROC FILESYSTEM:
/proc/fbaodv
It prints a lot of information about the routing protocol procedures: timers, routes, neighbors, link quality estimations...

--------------------------------------------

aodv.h - All definitions (timers, messages and structures)

aodv_dev - Handles initalizing the device you want to have AODV use.

aodv_neigh - Handles neighboring nodes. A neighboring node is one that is one hop away. If we lose communication we know there is a link break.
 Creating of one-hop routes between neighbors for control purposes

aodv_neigh_2h – WCIM needs information about two-hop neighbors. They are discovered by means of the Hello messages

aodv_route - Everything needed for routes to other nodes. 

aodv_thread - This is the process that handles all the task. It is a loop that pulls tasks out of the queue and then sends them to the right function.

fbaodv_protocol - This is used when the module gets load and unload. All of the queues get initalized here. The proc filesystem is created here and netfilters are started and stopped.

gw_list – Maintenance  of the discovered gateways. Default gateway selection

hello - Handles the sending and receiving of Hello messages. The sending of Hello messages is triggered by a timer.
 Neighbors (one- and two-hops) discovering. ETX computation.

packet_in - Incoming packets are handled here. If the packet has the AODV port number it goes through other processing.

packet_out - All outgoing packets go through here. If they are not broadcast packets, AODV will check to see if there is a route to the destination in the AODV routing table.
 Packets with both source and destination external to the mesh network, are accepted (NF_ACCEPT). The rest are routed according to FB-AODV. If a route exists, are accepted. If not, they are queued during route discovering. Packet without a supported ToS or arriving to an intermediate node without an active route, are discarded. 

packet_queue – It handles the queuing  and awaking of packets during a route discovery. 

probe_ett – It handles the packet-pair mechanism if ETT or WCIM metric are used (and rate is not fixed)

rerr - Handles the creation and processing of route error messages. Route error messages get built based upon a broken link. Any link that uses this link as a next hop gets added into the Route error message and unicast it to the source.

route_alg – ETT and WCIM metric computation

rpdb – It handles the RPDB using RTNETLINK sockets. Rules and route tables.

rrep - Handles the RREP packets which contain new routes.

rreq - When you don't have a route you send out a RREQ.

socket - 
Socket used for FB-AODV signaling messages. 

src_list – It handles the table of sources with active flows 

st_rreq – Gateway announcement and discovery

task_queue - All major proccessing that needs to be done is  placed
into the task queue. 

timer_queue - There is a queue of task that is ordered by the time
 they should be started. A timer is set to go off when the first task
is due. That task then gets passed off to the AODV thread.

tos – Definition of supported ToS: average packet size and rate

utils - If you can not find a function anywhere else, it is probably here.

Source: README, updated 2014-02-26