fixed sample scripts to work with EMANE 0.9.x
(Boeing r1893)
This commit is contained in:
parent
5c9c8bfff7
commit
96dd48e3c3
2 changed files with 74 additions and 19 deletions
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python -i
|
#!/usr/bin/python -i
|
||||||
|
|
||||||
# Copyright (c)2010-2013 the Boeing Company.
|
# Copyright (c)2010-2014 the Boeing Company.
|
||||||
# See the LICENSE file included in this distribution.
|
# See the LICENSE file included in this distribution.
|
||||||
|
|
||||||
# Example CORE Python script that attaches N nodes to an EMANE 802.11abg
|
# Example CORE Python script that attaches N nodes to an EMANE 802.11abg
|
||||||
|
@ -61,7 +61,11 @@ def main():
|
||||||
names = EmaneIeee80211abgModel.getnames()
|
names = EmaneIeee80211abgModel.getnames()
|
||||||
values = list(EmaneIeee80211abgModel.getdefaultvalues())
|
values = list(EmaneIeee80211abgModel.getdefaultvalues())
|
||||||
# TODO: change any of the EMANE 802.11 parameter values here
|
# TODO: change any of the EMANE 802.11 parameter values here
|
||||||
values[ names.index('pathlossmode') ] = 'pathloss'
|
try:
|
||||||
|
values[ names.index('pathlossmode') ] = 'pathloss'
|
||||||
|
except ValueError:
|
||||||
|
values[ names.index('propagationmodel') ] = 'precomputed'
|
||||||
|
|
||||||
session.emane.setconfig(wlan.objid, EmaneIeee80211abgModel._name, values)
|
session.emane.setconfig(wlan.objid, EmaneIeee80211abgModel._name, values)
|
||||||
services_str = "zebra|OSPFv3MDR|vtysh|IPForward"
|
services_str = "zebra|OSPFv3MDR|vtysh|IPForward"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Copyright (c)2011-2012 the Boeing Company.
|
# Copyright (c)2011-2014 the Boeing Company.
|
||||||
# See the LICENSE file included in this distribution.
|
# See the LICENSE file included in this distribution.
|
||||||
#
|
#
|
||||||
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
|
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
|
||||||
|
@ -48,11 +48,23 @@ except ImportError:
|
||||||
from core.misc import ipaddr
|
from core.misc import ipaddr
|
||||||
from core.misc.utils import mutecall
|
from core.misc.utils import mutecall
|
||||||
from core.constants import QUAGGA_STATE_DIR
|
from core.constants import QUAGGA_STATE_DIR
|
||||||
|
from core.emane.emane import Emane
|
||||||
from core.emane.bypass import EmaneBypassModel
|
from core.emane.bypass import EmaneBypassModel
|
||||||
from core.emane.rfpipe import EmaneRfPipeModel
|
from core.emane.rfpipe import EmaneRfPipeModel
|
||||||
import emaneeventservice
|
|
||||||
import emaneeventpathloss
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
import emaneeventservice
|
||||||
|
import emaneeventpathloss
|
||||||
|
except Exception, e:
|
||||||
|
try:
|
||||||
|
from emanesh.events import EventService
|
||||||
|
from emanesh.events import PathlossEvent
|
||||||
|
except Exception, e2:
|
||||||
|
raise ImportError, "failed to import EMANE Python bindings:\n%s\n%s" % \
|
||||||
|
(e, e2)
|
||||||
|
|
||||||
|
# global Experiment object (for interaction with 'python -i')
|
||||||
|
exp = None
|
||||||
|
|
||||||
# move these to core.misc.utils
|
# move these to core.misc.utils
|
||||||
def readstat():
|
def readstat():
|
||||||
|
@ -423,6 +435,7 @@ class Experiment(object):
|
||||||
'''
|
'''
|
||||||
prefix = ipaddr.IPv4Prefix("10.0.0.0/16")
|
prefix = ipaddr.IPv4Prefix("10.0.0.0/16")
|
||||||
self.session = pycore.Session()
|
self.session = pycore.Session()
|
||||||
|
self.session.node_count = str(numnodes + 1)
|
||||||
self.session.master = True
|
self.session.master = True
|
||||||
self.session.location.setrefgeo(47.57917,-122.13232,2.00000)
|
self.session.location.setrefgeo(47.57917,-122.13232,2.00000)
|
||||||
self.session.location.refscale = 150.0
|
self.session.location.refscale = 150.0
|
||||||
|
@ -446,7 +459,7 @@ class Experiment(object):
|
||||||
if values is None:
|
if values is None:
|
||||||
values = cls.getdefaultvalues()
|
values = cls.getdefaultvalues()
|
||||||
self.session.emane.setconfig(self.net.objid, cls._name, values)
|
self.session.emane.setconfig(self.net.objid, cls._name, values)
|
||||||
self.session.emane.startup()
|
self.session.instantiate()
|
||||||
|
|
||||||
self.info("waiting %s sec (TAP bring-up)" % 2)
|
self.info("waiting %s sec (TAP bring-up)" % 2)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
@ -504,24 +517,46 @@ class Experiment(object):
|
||||||
def setpathloss(self, numnodes):
|
def setpathloss(self, numnodes):
|
||||||
''' Send EMANE pathloss events to connect all NEMs in a chain.
|
''' Send EMANE pathloss events to connect all NEMs in a chain.
|
||||||
'''
|
'''
|
||||||
service = emaneeventservice.EventService()
|
if self.session.emane.version < self.session.emane.EMANE091:
|
||||||
e = emaneeventpathloss.EventPathloss(1)
|
service = emaneeventservice.EventService()
|
||||||
|
e = emaneeventpathloss.EventPathloss(1)
|
||||||
|
old = True
|
||||||
|
else:
|
||||||
|
if self.session.emane.version == self.session.emane.EMANE091:
|
||||||
|
dev = 'lo'
|
||||||
|
else:
|
||||||
|
dev = self.session.obj('ctrlnet').brname
|
||||||
|
service = EventService(eventchannel=("224.1.2.8", 45703, dev),
|
||||||
|
otachannel=None)
|
||||||
|
old = False
|
||||||
|
|
||||||
for i in xrange(1, numnodes + 1):
|
for i in xrange(1, numnodes + 1):
|
||||||
rxnem = i
|
rxnem = i
|
||||||
# inform rxnem that it can hear node to the left with 10dB noise
|
# inform rxnem that it can hear node to the left with 10dB noise
|
||||||
txnem = rxnem - 1
|
txnem = rxnem - 1
|
||||||
e.set(0, txnem, 10.0, 10.0)
|
|
||||||
if txnem > 0:
|
if txnem > 0:
|
||||||
service.publish(emaneeventpathloss.EVENT_ID,
|
if old:
|
||||||
|
e.set(0, txnem, 10.0, 10.0)
|
||||||
|
service.publish(emaneeventpathloss.EVENT_ID,
|
||||||
emaneeventservice.PLATFORMID_ANY, rxnem,
|
emaneeventservice.PLATFORMID_ANY, rxnem,
|
||||||
emaneeventservice.COMPONENTID_ANY, e.export())
|
emaneeventservice.COMPONENTID_ANY, e.export())
|
||||||
|
else:
|
||||||
|
e = PathlossEvent()
|
||||||
|
e.append(txnem, forward=10.0, reverse=10.0)
|
||||||
|
service.publish(rxnem, e)
|
||||||
# inform rxnem that it can hear node to the right with 10dB noise
|
# inform rxnem that it can hear node to the right with 10dB noise
|
||||||
txnem = rxnem + 1
|
txnem = rxnem + 1
|
||||||
e.set(0, txnem, 10.0, 10.0)
|
if txnem > numnodes:
|
||||||
if txnem <= numnodes:
|
continue
|
||||||
|
if old:
|
||||||
|
e.set(0, txnem, 10.0, 10.0)
|
||||||
service.publish(emaneeventpathloss.EVENT_ID,
|
service.publish(emaneeventpathloss.EVENT_ID,
|
||||||
emaneeventservice.PLATFORMID_ANY, rxnem,
|
emaneeventservice.PLATFORMID_ANY, rxnem,
|
||||||
emaneeventservice.COMPONENTID_ANY, e.export())
|
emaneeventservice.COMPONENTID_ANY, e.export())
|
||||||
|
else:
|
||||||
|
e = PathlossEvent()
|
||||||
|
e.append(txnem, forward=10.0, reverse=10.0)
|
||||||
|
service.publish(rxnem, e)
|
||||||
|
|
||||||
def setneteffects(self, bw = None, delay = None):
|
def setneteffects(self, bw = None, delay = None):
|
||||||
''' Set link effects for all interfaces attached to the network node.
|
''' Set link effects for all interfaces attached to the network node.
|
||||||
|
@ -668,7 +703,14 @@ def main():
|
||||||
sys.stderr.write("ignoring command line argument: '%s'\n" % a)
|
sys.stderr.write("ignoring command line argument: '%s'\n" % a)
|
||||||
|
|
||||||
results = {}
|
results = {}
|
||||||
exp = Experiment(opt = opt, start=datetime.datetime.now())
|
starttime = datetime.datetime.now()
|
||||||
|
exp = Experiment(opt = opt, start=starttime)
|
||||||
|
exp.info("Starting wlanemanetests.py tests %s" % starttime.ctime())
|
||||||
|
|
||||||
|
# system sanity checks here
|
||||||
|
emanever, emaneverstr = Emane.detectversionfromcmd()
|
||||||
|
if opt.verbose:
|
||||||
|
exp.info("Detected EMANE version %s" % (emaneverstr,))
|
||||||
|
|
||||||
# bridged
|
# bridged
|
||||||
exp.info("setting up bridged tests 1/2 no link effects")
|
exp.info("setting up bridged tests 1/2 no link effects")
|
||||||
|
@ -708,8 +750,11 @@ def main():
|
||||||
rfpipevals = list(EmaneRfPipeModel.getdefaultvalues())
|
rfpipevals = list(EmaneRfPipeModel.getdefaultvalues())
|
||||||
rfpnames = EmaneRfPipeModel.getnames()
|
rfpnames = EmaneRfPipeModel.getnames()
|
||||||
rfpipevals[ rfpnames.index('datarate') ] = '4294967295' # max value
|
rfpipevals[ rfpnames.index('datarate') ] = '4294967295' # max value
|
||||||
rfpipevals[ rfpnames.index('pathlossmode') ] = '2ray'
|
if emanever < Emane.EMANE091:
|
||||||
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '1'
|
rfpipevals[ rfpnames.index('pathlossmode') ] = '2ray'
|
||||||
|
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '1'
|
||||||
|
else:
|
||||||
|
rfpipevals[ rfpnames.index('propagationmodel') ] = '2ray'
|
||||||
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
||||||
cls=EmaneRfPipeModel, values=rfpipevals)
|
cls=EmaneRfPipeModel, values=rfpipevals)
|
||||||
exp.setnodes()
|
exp.setnodes()
|
||||||
|
@ -726,8 +771,11 @@ def main():
|
||||||
rfpipevals[ rfpnames.index('datarate') ] = '54000'
|
rfpipevals[ rfpnames.index('datarate') ] = '54000'
|
||||||
# TX delay != propagation delay
|
# TX delay != propagation delay
|
||||||
#rfpipevals[ rfpnames.index('delay') ] = '5000'
|
#rfpipevals[ rfpnames.index('delay') ] = '5000'
|
||||||
rfpipevals[ rfpnames.index('pathlossmode') ] = '2ray'
|
if emanever < Emane.EMANE091:
|
||||||
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '1'
|
rfpipevals[ rfpnames.index('pathlossmode') ] = '2ray'
|
||||||
|
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '1'
|
||||||
|
else:
|
||||||
|
rfpipevals[ rfpnames.index('propagationmodel') ] = '2ray'
|
||||||
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
||||||
cls=EmaneRfPipeModel, values=rfpipevals)
|
cls=EmaneRfPipeModel, values=rfpipevals)
|
||||||
exp.setnodes()
|
exp.setnodes()
|
||||||
|
@ -742,8 +790,11 @@ def main():
|
||||||
rfpipevals = list(EmaneRfPipeModel.getdefaultvalues())
|
rfpipevals = list(EmaneRfPipeModel.getdefaultvalues())
|
||||||
rfpnames = EmaneRfPipeModel.getnames()
|
rfpnames = EmaneRfPipeModel.getnames()
|
||||||
rfpipevals[ rfpnames.index('datarate') ] = '54000'
|
rfpipevals[ rfpnames.index('datarate') ] = '54000'
|
||||||
rfpipevals[ rfpnames.index('pathlossmode') ] = 'pathloss'
|
if emanever < Emane.EMANE091:
|
||||||
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '0'
|
rfpipevals[ rfpnames.index('pathlossmode') ] = 'pathloss'
|
||||||
|
rfpipevals[ rfpnames.index('defaultconnectivitymode') ] = '0'
|
||||||
|
else:
|
||||||
|
rfpipevals[ rfpnames.index('propagationmodel') ] = 'precomputed'
|
||||||
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
exp.createemanesession(numnodes=opt.numnodes, verbose=opt.verbose,
|
||||||
cls=EmaneRfPipeModel, values=rfpipevals)
|
cls=EmaneRfPipeModel, values=rfpipevals)
|
||||||
exp.setnodes()
|
exp.setnodes()
|
||||||
|
|
Loading…
Reference in a new issue