Version 3 (modified by 18 years ago) ( diff ) | ,
---|
Using AODV with the testbed
Currently, we support AODV-UU protocol 0.9.1 on kernel version 2.6.12. Using the application and prototype definition format, we can currently specify
- the interface to run on
- enable logging
- enable route table logging
For Experimenters
- Step 1: In order to use AODV routing protocol in your experiment, make sure you use the baseline.ndz image on your nodes that has aodv installed.
- Step 2: Use the following experiment script. This will launch both the traffic generator and AODV on the nodes. AODV currently logs locally to the node every N secs which is configurable. However, in the future, this will be OMLized to log into the database instead.
AODV router prototype and app defs are installed on all consoles. So users should be able to use it from any console
Experiment script
################################################## # AODV with OTG # Every node has two prototypes: sender/receiver and AODV # AODV rt table logs are reported every 4 secs on the nodes to # /var/log/aodv.rtlog # These will soon be OMLized to report to the database instead ################################################## Experiment.name = "tutorial-aodv" Experiment.project = "orbit:tutorial" # # Define nodes used in experiment # defNodes('sender', [1,2]) {|node| node.image = nil # assume the right image to be on disk node.prototype("test:proto:sender", { 'destinationHost' => '192.168.1.1', 'packetSize' => 1024, 'rate' => 300, 'protocol' => 'udp' }) node.net.w0.mode = "master" } defNodes('receiver', [1,1]) {|node| node.image = nil # assume the right image to be on disk node.prototype("test:proto:receiver" , { 'hostname' => '192.168.1.1', 'protocol' => 'udp_libmac' }) node.net.w0.mode = "managed" } defNodes('everyone',[[1,1],[1,2]]) {|node| node.image = nil node.prototype("test:proto:aodvrouter", { 'interface' => 'ath0', #Run aodvd on interface ath0 'log' => nil, #Enable logging 'routelog' => 4 #Enable routing table logging every 4 secs }) } allNodes.net.w0 { |w| w.type = 'b' w.essid = "helloworld" w.ip = "%192.168.%x.%y" } # # Now, start the application # whenAllInstalled() {|node| #First start AODV daemon on all nodes NodeSet['everyone'].startApplications wait 10 #Then start receiver and sender NodeSet['receiver'].startApplications wait 30 NodeSet['sender'].startApplications wait 180 Experiment.done }
For Developers
The application definition and prototype definitions corresponding to AODV router are as follows
Application definition
# # Create an application representation from scratch # require 'handler/appDefinition' a = AppDefinition.create('test:app:aodvd') a.name = "aodvd" a.version(0, 0, 1) a.shortDescription = "AODV routing protocol" a.description = <<TEXT AODV launch TEXT # addProperty(name, description, mnemonic, type, isDynamic = false, constraints = nil) a.addProperty('interface', 'Interface to run on', ?i, String, false) a.addProperty('log', 'Enable logging', ?l, String, false) a.addProperty('rttable', 'Log rting table every N secs', ?r, String, false) a.path = "/usr/sbin/aodvd" if $0 == __FILE__ require 'stringio' require 'rexml/document' include REXML sio = StringIO.new() a.to_xml.write(sio, 2) sio.rewind puts sio.read sio.rewind doc = Document.new(sio) t = AppDefinition.from_xml(doc.root) puts puts "-------------------------" puts t.to_xml.write($stdout, 2) end
Prototype definition
# # Define a prototype # require 'handler/prototype' require 'handler/filter' require 'handler/appDefinition' p = Prototype.create("test:proto:aodvrouter") p.name = "AODV daemon" p.description = "Nodes which receive packets" p.defProperty('interface', 'Interface to listen on') p.defProperty('log', 'Enable logging') p.defProperty('routelog', 'Enable logging') aodvd = p.addApplication('aodvd', "test:app:aodvd") aodvd.bindProperty('interface') aodvd.bindProperty('log') aodvd.bindProperty('rttable','routelog') if $0 == __FILE__ p.to_xml.write($stdout, 2) puts end
Note:
See TracWiki
for help on using the wiki.