def wifisession(opt): ''' Run a test wifi session. ''' session = Ns3Session(persistent=True, duration=opt.duration) session.name = "ns3wifi" session.filename = session.name + ".py" session.node_count = str(opt.numnodes + 1) add_to_server(session) wifi = session.addobj(cls=Ns3WifiNet, name="wlan1") wifi.setposition(30, 30, 0) wifi.phy.Set("RxGain", ns.core.DoubleValue(18.0)) prefix = ipaddr.IPv4Prefix("10.0.0.0/16") nodes = [] for i in xrange(1, opt.numnodes + 1): node = session.addnode(name = "n%d" % i) node.newnetif(wifi, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) nodes.append(node) session.setupconstantmobility() wifi.usecorepositions() # PHY tracing #wifi.phy.EnableAsciiAll("ns3wifi") session.thread = session.run(vis=False) return session
def test(numnodes, testsec,session): # node list n = [] # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") # emulated network net = session.addobj(cls = pycore.nodes.WlanNode) net.setposition(x=150.0,y=100.0) #,nodedir='/home/josh/.Haggle' for i in xrange(1, numnodes + 1): tmp = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i) tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) n.append(tmp) net.link(n[0].netif(0), n[-1].netif(0)) n[0].setposition(x=150.0,y=153.0) n[1].setposition(x=364.0,y=202.0) # n[0].term("bash") #n[0].cmd(["su","-","josh"]) #n[0].cmd(["echo","hi",">","/home/josh/.Haggle/josh.log"]) '''
def test(options): prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) if options.enablesdt: session.location.setrefgeo(47.57917, -122.13232, 50.0) # GUI default session.location.refscale = 100.0 session.options.enablesdt = True session.options.sdturl = options.sdturl wlanid = options.numnodes + 1 net = session.addobj(cls=pycore.nodes.WlanNode, name="wlan%d" % wlanid, objid=wlanid, verbose=True) values = list(BasicRangeModel.getdefaultvalues()) #values[0] = 5000000 # 5000km range net.setmodel(BasicRangeModel, values) for i in xrange(1, options.numnodes + 1): tmp = session.addobj(cls=pycore.nodes.LxcNode, name="n%d" % i, objid=i) tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) # set increasing Z coordinates tmp.setposition(10, 10, 100 * i) n.append(tmp) # example setting node n2 to a high altitude #n[1].setposition(10, 10, 2000000) # 2000km #session.sdt.updatenode(n[1].objid, 0, 10, 10, 2000000) n[0].term("bash") # wait for rate seconds to allow ebtables commands to commit time.sleep(EbtablesQueue.rate)
def createbridgedsession(self, numnodes, verbose=False): ''' Build a topology consisting of the given number of LxcNodes connected to a WLAN. ''' # IP subnet prefix = ipaddr.IPv4Prefix("10.0.0.0/16") self.session = pycore.Session() # emulated network self.net = self.session.addobj(cls=pycore.nodes.WlanNode, name="wlan1") prev = None for i in xrange(1, numnodes + 1): addr = "%s/%s" % (prefix.addr(i), 32) tmp = self.session.addobj(cls=pycore.nodes.CoreNode, objid=i, name="n%d" % i) tmp.newnetif(self.net, [addr]) self.nodes.append(tmp) self.session.services.addservicestonode(tmp, "router", "IPForward", self.verbose) self.session.services.bootnodeservices(tmp) self.staticroutes(i, prefix, numnodes) # link each node in a chain, with the previous node if prev: self.net.link(prev.netif(0), tmp.netif(0)) prev = tmp
def topology(self, numnodes, linkprob, verbose = False): """ Build a topology consisting of the given number of ManetNodes connected to a WLAN and probabilty of links and set the session, WLAN, and node list objects. """ # IP subnet prefix = ipaddr.IPv4Prefix("10.14.0.0/16") self.session = pycore.Session() # emulated network self.net = self.session.addobj(cls = pycore.nodes.WlanNode) for i in xrange(1, numnodes + 1): addr = "%s/%s" % (prefix.addr(i), 32) tmp = self.session.addobj(cls = ManetNode, ipaddr = addr, objid= "%d" % i, name = "n%d" % i) tmp.newnetif(self.net, [addr]) self.nodes.append(tmp) # connect nodes with probability linkprob for i in xrange(numnodes): for j in xrange(i + 1, numnodes): r = random.random() if r < linkprob: if self.verbose: self.info("linking (%d,%d)" % (i, j)) self.net.link(self.nodes[i].netif(0), self.nodes[j].netif(0)) # force one link to avoid partitions (should check if this is needed) j = i while j == i: j = random.randint(0, numnodes - 1) if self.verbose: self.info("linking (%d,%d)" % (i, j)) self.net.link(self.nodes[i].netif(0), self.nodes[j].netif(0)) self.nodes[i].boot() # run the boot.sh script on all nodes to start Quagga for i in xrange(numnodes): self.nodes[i].cmd(["./%s" % self.nodes[i].bootsh])
def ltesession(opt): ''' Run a test LTE session. ''' session = Ns3Session(persistent=True, duration=opt.duration) lte = session.addobj(cls=Ns3LteNet, name="wlan1") lte.setsubchannels(range(25), range(50, 100)) if opt.verbose: ascii = ns.network.AsciiTraceHelper() stream = ascii.CreateFileStream('/tmp/ns3lte.tr') lte.lte.EnableAsciiAll(stream) #ns.core.LogComponentEnable("EnbNetDevice", ns.core.LOG_LEVEL_INFO) #ns.core.LogComponentEnable("UeNetDevice", ns.core.LOG_LEVEL_INFO) #lte.lte.EnableLogComponents() prefix = ipaddr.IPv4Prefix("10.0.0.0/16") mobb = None nodes = [] for i in xrange(1, opt.numnodes + 1): node = session.addnode(name="n%d" % i) mob = ns.mobility.ConstantPositionMobilityModel() mob.SetPosition(ns.core.Vector3D(10.0 * i, 0.0, 0.0)) if i == 1: lte.setnodeb(node) # first node is nodeb mobb = mob node.newnetif(lte, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) nodes.append(node) if i == 1: (tmp, ns3dev) = lte.findns3dev(node) lte.lte.AddMobility(ns3dev.GetPhy(), mob) if i > 1: lte.linknodeb(node, nodes[0], mob, mobb) session.thread = session.run(vis=opt.visualize) return session
def wifisession(opt): ''' Run a test wifi session. ''' #myservice = "Olsrd4Service" myservice = "CcnOlsrNS3Service" numWirelessNode = 16 numWiredNode = 0 ns.core.Config.SetDefault("ns3::WifiMacQueue::MaxPacketNumber", ns.core.UintegerValue(100)) session = Ns3Session(persistent=True, duration=opt.duration) session.cfg['ccnx_dir'] = '/home/clauz/clone-git/ccnx/' session.cfg['olsr_dir'] = '/home/clauz/clone-git/olsrd-ccninfo/' session.cfg['rbn_dir'] = '/home/clauz/clone-git/routingbyname/' session.name = "ns3ccn" session.filename = session.name + ".py" session.node_count = str(numWirelessNode + numWiredNode + 1) session.services.importcustom("/home/clauz/.core/myservices") add_to_server(session) wifi = session.addobj(cls=Ns3WifiNet, name="wlan1", rate="OfdmRate54Mbps") wifi.setposition(150, 150, 0) wifi.phy.Set("RxGain", ns.core.DoubleValue(20.0)) prefix = ipaddr.IPv4Prefix("10.0.0.0/16") def ourmacaddress(n): return MacAddr.fromstring("02:02:00:00:00:%02x" % n) nodes = [] for i in range(4): for j in range(4): k = 1 + i * 4 + j node = session.addnode(name="n%d" % k) node.newnetif(wifi, ["%s/%s" % (prefix.addr(k), prefix.prefixlen)], hwaddr=ourmacaddress(k)) session.services.addservicestonode(node, "router", myservice, verbose=True) nodes.append(node) session.setupconstantmobility() for i in range(4): for j in range(4): k = i * 4 + j nodes[k].setns3position(100 * j, 100 * i, 0) nodes[k].setposition(100 * j, 100 * i, 0) #wifi.usecorepositions() # PHY tracing #wifi.phy.EnableAsciiAll("ns3wifi") session.thread = session.run(vis=False) for node in nodes: session.services.bootnodeservices(node) return session
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage=usagestr) parser.set_defaults(numnodes=5) parser.add_option("-n", "--numnodes", dest="numnodes", type=int, help="number of nodes") def usage(msg=None, err=0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) if 'server' in globals(): server.addsession(session) # emulated Ethernet switch switch = session.addobj(cls=pycore.nodes.SwitchNode, name="switch") switch.setposition(x=80, y=50) print "creating %d nodes with addresses from %s" % \ (options.numnodes, prefix) for i in xrange(1, options.numnodes + 1): tmp = session.addobj(cls=pycore.nodes.CoreNode, name="n%d" % i, objid=i) tmp.newnetif(switch, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) tmp.cmd([SYSCTL_BIN, "net.ipv4.icmp_echo_ignore_broadcasts=0"]) tmp.setposition(x=150 * i, y=150) n.append(tmp) session.node_count = str(options.numnodes + 1) session.instantiate() # start a shell on node 1 n[1].term("bash") print "elapsed time: %s" % (datetime.datetime.now() - start)
def test(numnodes, testsec): # node list n = [] # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session() # emulated network net = session.addobj(cls = pycore.nodes.SwitchNode) for i in xrange(1, numnodes + 1): tmp = session.addobj(cls = pycore.nodes.LxcNode, name = "n%d" % i) tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) n.append(tmp) n[0].cmd(["iperf", "-s", "-D"]) n[-1].icmd(["iperf", "-t", str(int(testsec)), "-c", str(prefix.addr(1))]) n[0].cmd(["killall", "-9", "iperf"]) session.shutdown()
def createemanesession(self, numnodes, verbose=False, cls=None, values=None): ''' Build a topology consisting of the given number of LxcNodes connected to an EMANE WLAN. ''' prefix = ipaddr.IPv4Prefix("10.0.0.0/16") self.session = pycore.Session() self.session.node_count = str(numnodes + 1) self.session.master = True self.session.location.setrefgeo(47.57917, -122.13232, 2.00000) self.session.location.refscale = 150.0 self.session.cfg['emane_models'] = "RfPipe, Ieee80211abg, Bypass" self.session.emane.loadmodels() self.net = self.session.addobj(cls=pycore.nodes.EmaneNode, objid=numnodes + 1, name="wlan1") self.net.verbose = verbose #self.session.emane.addobj(self.net) for i in xrange(1, numnodes + 1): addr = "%s/%s" % (prefix.addr(i), 32) tmp = self.session.addobj(cls=pycore.nodes.CoreNode, objid=i, name="n%d" % i) #tmp.setposition(i * 20, 50, None) tmp.setposition(50, 50, None) tmp.newnetif(self.net, [addr]) self.nodes.append(tmp) self.session.services.addservicestonode(tmp, "router", "IPForward", self.verbose) if values is None: values = cls.getdefaultvalues() self.session.emane.setconfig(self.net.objid, cls._name, values) self.session.instantiate() self.info("waiting %s sec (TAP bring-up)" % 2) time.sleep(2) for i in xrange(1, numnodes + 1): tmp = self.nodes[i - 1] self.session.services.bootnodeservices(tmp) self.staticroutes(i, prefix, numnodes)
def __init__(self, numnodes, ipv4prefix='10.0.0.0/30', ipv6prefix='a::/126'): assert numnodes > 1 Topology.__init__(self, numnodes) self.net = [] p4 = ipaddr.IPv4Prefix(ipv4prefix) p6 = ipaddr.IPv6Prefix(ipv6prefix) self.net.append(self.session.addobj(cls=pycore.nodes.SwitchNode)) addrlist = [ '%s/%s' % (p4.addr(1), p4.prefixlen), '%s/%s' % (p6.addr(1), p6.prefixlen) ] self.n[0].newnetif(self.net[0], addrlist=addrlist, ifname='eth0') for i in xrange(1, numnodes - 1): addrlist = [ '%s/%s' % (p4.addr(2), p4.prefixlen), '%s/%s' % (p6.addr(2), p6.prefixlen) ] self.n[i].newnetif(self.net[i - 1], addrlist=addrlist, ifname='eth0') p4 += 1 p6 += 1 self.net.append(self.session.addobj(cls=pycore.nodes.SwitchNode)) addrlist = [ '%s/%s' % (p4.addr(1), p4.prefixlen), '%s/%s' % (p6.addr(1), p6.prefixlen) ] self.n[i].newnetif(self.net[i], addrlist=addrlist, ifname='eth1') i += 1 addrlist = [ '%s/%s' % (p4.addr(2), p4.prefixlen), '%s/%s' % (p6.addr(2), p6.prefixlen) ] self.n[i].newnetif(self.net[i - 1], addrlist=addrlist, ifname='eth0')
def __init__(self, numnodes, linkprob=0.35, seed=None, ipv4prefix='10.0.0.0/8', ipv6prefix='a::/64'): assert numnodes > 1 Topology.__init__(self, numnodes) if seed is not None: random.seed(seed) self.net = self.session.addobj(cls=pycore.nodes.WlanNode) p4 = ipaddr.IPv4Prefix(ipv4prefix) p6 = ipaddr.IPv6Prefix(ipv6prefix) for i in xrange(numnodes): addrlist = [ '%s/%s' % (p4.addr(i + 1), 32), '%s/%s' % (p6.addr(i + 1), 128) ] self.n[i].newnetif(self.net, addrlist=addrlist, ifname='eth0') # connect nodes with probability linkprob for i in xrange(numnodes): netif = self.n[i].netif(0) for j in xrange(i + 1, numnodes): r = random.random() if r < linkprob: self.net.link(netif, self.n[j].netif(0)) if not self.net._linked[netif]: # force one link to avoid partitions j = i while j == i: j = random.randint(0, numnodes - 1) self.net.link(netif, self.n[j].netif(0))
def wifisession(opt): ''' Run a random walk wifi session. ''' session = Ns3Session(persistent=True, duration=opt.duration) session.name = "ns3wifirandomwalk" session.filename = session.name + ".py" session.node_count = str(opt.numnodes + 1) add_to_server(session) wifi = session.addobj(cls=Ns3WifiNet, name="wlan1", rate="OfdmRate12Mbps") wifi.setposition(30, 30, 0) # for improved connectivity wifi.phy.Set("RxGain", ns.core.DoubleValue(18.0)) prefix = ipaddr.IPv4Prefix("10.0.0.0/16") services_str = "zebra|OSPFv3MDR|vtysh|IPForward" nodes = [] for i in xrange(1, opt.numnodes + 1): node = session.addnode(name = "n%d" % i) node.newnetif(wifi, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) nodes.append(node) session.services.addservicestonode(node, "router", services_str, opt.verbose) session.services.bootnodeservices(node) session.setuprandomwalkmobility(bounds=(1000.0, 750.0, 0)) # PHY tracing #wifi.phy.EnableAsciiAll("ns3wifirandomwalk") # mobility tracing #session.setupmobilitytracing(wifi, "ns3wifirandomwalk.mob.tr", # nodes, verbose=True) session.startns3mobility(refresh_ms=150) # start simulation # session.instantiate() ? session.thread = session.run(vis=opt.viz) return session
def wimaxsession(opt): ''' Run a test wimax session. ''' session = Ns3Session(persistent=True, duration=opt.duration) wimax = session.addobj(cls=Ns3WimaxNet, name="wlan1") #wimax.wimax.EnableLogComponents() prefix = ipaddr.IPv4Prefix("10.0.0.0/16") # create one classifier for ICMP (protocol 1) traffic # src port low/high, dst port low/high, protocol, priority #classifier = (0, 65000, 0, 65000, 1, 1) classifier = (0, 65000, 0, 65000, 17, 1) nodes = [] for i in xrange(1, opt.numnodes + 1): node = session.addnode(name = "n%d" % i) if i == 1: wimax.setbasestation(node) node.newnetif(wimax, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) if i > 2: wimax.addflow(nodes[-1], node, classifier, classifier) nodes.append(node) session.setupconstantmobility() session.thread = session.run(vis=False) return session
def __init__(self, prefix = None, gw = None, metric = None): try: self.prefix = ipaddr.IPv4Prefix(prefix) except Exception, e: raise ValueError, "Invalid prefix given to Route object: %s\n%s" % \ (prefix, e)
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage = usagestr) parser.set_defaults(waittime = 0.2, numnodes = 0, bridges = 0, retries = 0, logfile = None, services = None) parser.add_option("-w", "--waittime", dest = "waittime", type = float, help = "number of seconds to wait between node creation" \ " (default = %s)" % parser.defaults["waittime"]) parser.add_option("-n", "--numnodes", dest = "numnodes", type = int, help = "number of nodes (default = unlimited)") parser.add_option("-b", "--bridges", dest = "bridges", type = int, help = "number of nodes per bridge; 0 = one bridge " \ "(def. = %s)" % parser.defaults["bridges"]) parser.add_option("-r", "--retry", dest = "retries", type = int, help = "number of retries on error (default = %s)" % \ parser.defaults["retries"]) parser.add_option("-l", "--log", dest = "logfile", type = str, help = "log memory usage to this file (default = %s)" % \ parser.defaults["logfile"]) parser.add_option("-s", "--services", dest = "services", type = str, help = "pipe-delimited list of services added to each " \ "node (default = %s)\n(Example: 'zebra|OSPFv2|OSPFv3|" \ "IPForward')" % parser.defaults["services"]) def usage(msg = None, err = 0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) (options, args) = parser.parse_args() for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() prefix = ipaddr.IPv4Prefix("10.83.0.0/16") print "Testing how many network namespace nodes this machine can create." print " - %s" % linuxversion() mem = memfree() print " - %.02f GB total memory (%.02f GB swap)" % \ (mem['total']/GBD, mem['stotal']/GBD) print " - using IPv4 network prefix %s" % prefix print " - using wait time of %s" % options.waittime print " - using %d nodes per bridge" % options.bridges print " - will retry %d times on failure" % options.retries print " - adding these services to each node: %s" % options.services print " " lfp = None if options.logfile is not None: # initialize a csv log file header lfp = open(options.logfile, "a") lfp.write("# log from howmanynodes.py %s\n" % time.ctime()) lfp.write("# options = %s\n#\n" % options) lfp.write("# numnodes,%s\n" % ','.join(MEMKEYS)) lfp.flush() session = pycore.Session(persistent=True) switch = session.addobj(cls = pycore.nodes.SwitchNode) switchlist.append(switch) print "Added bridge %s (%d)." % (switch.brname, len(switchlist)) i = 0 retry_count = options.retries while True: i += 1 # optionally add a bridge (options.bridges nodes per bridge) try: if options.bridges > 0 and switch.numnetif() >= options.bridges: switch = session.addobj(cls = pycore.nodes.SwitchNode) switchlist.append(switch) print "\nAdded bridge %s (%d) for node %d." % \ (switch.brname, len(switchlist), i) except Exception, e: print "At %d bridges (%d nodes) caught exception:\n%s\n" % \ (len(switchlist), i-1, e) break # create a node try: n = session.addobj(cls = pycore.nodes.LxcNode, name = "n%d" % i) n.newnetif(switch, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) n.cmd([SYSCTL_BIN, "net.ipv4.icmp_echo_ignore_broadcasts=0"]) if options.services is not None: session.services.addservicestonode(n, "", options.services, verbose=False) n.boot() nodelist.append(n) if i % 25 == 0: print "\n%s nodes created " % i, mem = memfree() free = mem['free'] + mem['buff'] + mem['cached'] swap = mem['stotal'] - mem['sfree'] print "(%.02f/%.02f GB free/swap)" % (free/GBD , swap/GBD), if lfp: lfp.write("%d," % i) lfp.write("%s\n" % ','.join(str(mem[x]) for x in MEMKEYS)) lfp.flush() else: sys.stdout.write(".") sys.stdout.flush() time.sleep(options.waittime) except Exception, e: print "At %d nodes caught exception:\n" % i, e if retry_count > 0: print "\nWill retry creating node %d." % i shutil.rmtree(n.nodedir, ignore_errors = True) retry_count -= 1 i -= 1 time.sleep(options.waittime) continue else: print "Stopping at %d nodes!" % i break
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage = usagestr) parser.set_defaults(numnodes = 5) parser.add_option("-n", "--numnodes", dest = "numnodes", type = int, help = "number of nodes") def usage(msg = None, err = 0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") # session with some EMANE initialization cfg = {'verbose': 'false'} session = pycore.Session(cfg = cfg, persistent = True) session.master = True session.location.setrefgeo(47.57917,-122.13232,2.00000) session.location.refscale = 150.0 session.cfg['emane_models'] = "RfPipe, Ieee80211abg, Bypass" session.emane.loadmodels() if 'server' in globals(): server.addsession(session) # EMANE WLAN print "creating EMANE WLAN wlan1" wlan = session.addobj(cls = pycore.nodes.EmaneNode, name = "wlan1") wlan.setposition(x=80,y=50) names = EmaneIeee80211abgModel.getnames() values = list(EmaneIeee80211abgModel.getdefaultvalues()) # TODO: change any of the EMANE 802.11 parameter values here try: values[ names.index('pathlossmode') ] = '2ray' except ValueError: values[ names.index('propagationmodel') ] = '2ray' session.emane.setconfig(wlan.objid, EmaneIeee80211abgModel._name, values) services_str = "zebra|OSPFv3MDR|vtysh|IPForward" print "creating %d nodes with addresses from %s" % \ (options.numnodes, prefix) for i in xrange(1, options.numnodes + 1): tmp = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i, objid=i) tmp.newnetif(wlan, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) tmp.cmd([SYSCTL_BIN, "net.ipv4.icmp_echo_ignore_broadcasts=0"]) tmp.setposition(x=150*i,y=150) session.services.addservicestonode(tmp, "", services_str, verbose=False) n.append(tmp) # this starts EMANE, etc. session.node_count = str(options.numnodes + 1) session.instantiate() # start a shell on node 1 n[1].term("bash") print "elapsed time: %s" % (datetime.datetime.now() - start)
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage=usagestr) parser.set_defaults(numnodes=5) parser.add_option("-n", "--numnodes", dest="numnodes", type=int, help="number of nodes") def usage(msg=None, err=0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) if options.numnodes >= 255: usage("invalid number of nodes: %s" % options.numnodes) for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() session = pycore.Session(persistent=True) if 'server' in globals(): server.addsession(session) print "creating %d nodes" % options.numnodes left = None prefix = None for i in xrange(1, options.numnodes + 1): tmp = session.addobj(cls=pycore.nodes.CoreNode, name="n%d" % i, objid=i) if left: tmp.newnetif(left, ["%s/%s" % (prefix.addr(2), prefix.prefixlen)]) prefix = ipaddr.IPv4Prefix("10.83.%d.0/24" % i) # limit: i < 255 right = session.addobj(cls=pycore.nodes.PtpNet) tmp.newnetif(right, ["%s/%s" % (prefix.addr(1), prefix.prefixlen)]) tmp.cmd([SYSCTL_BIN, "net.ipv4.icmp_echo_ignore_broadcasts=0"]) tmp.cmd([SYSCTL_BIN, "net.ipv4.conf.all.forwarding=1"]) tmp.cmd([SYSCTL_BIN, "net.ipv4.conf.default.rp_filter=0"]) tmp.setposition(x=100 * i, y=150) n.append(tmp) left = right prefixes = map(lambda (x): ipaddr.IPv4Prefix("10.83.%d.0/24" % x), xrange(1, options.numnodes + 1)) # set up static routing in the chain for i in xrange(1, options.numnodes + 1): for j in xrange(1, options.numnodes + 1): if j < i - 1: gw = prefixes[i - 2].addr(1) elif j > i: if i > len(prefixes) - 1: continue gw = prefixes[i - 1].addr(2) else: continue net = prefixes[j - 1] n[i].cmd([IP_BIN, "route", "add", str(net), "via", str(gw)]) print "elapsed time: %s" % (datetime.datetime.now() - start)
def main(): usagestr = "usage: %prog [-n] number of nodes [-d] daemon address" parser = optparse.OptionParser(usage=usagestr) parser.set_defaults(numnodes=5, daemon='127.0.0.1:' + str(coreapi.CORE_API_PORT)) parser.add_option("-n", "--numnodes", dest="numnodes", type=int, help="number of nodes") parser.add_option("-d", "--daemon-server", dest="daemon", type=str, help="daemon server IP address") def usage(msg=None, err=0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) if not options.daemon: usage("daemon server IP address (-d) is a required argument") for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) if 'server' in globals(): server.addsession(session) # distributed setup - connect to daemon server daemonport = options.daemon.split(':') daemonip = daemonport[0] # Localhost is already set in the session but we change it to be the remote daemon # This stops the remote daemon trying to build a tunnel back which would fail daemon = 'localhost' if len(daemonport) > 1: port = int(daemonport[1]) else: port = coreapi.CORE_API_PORT print "connecting to daemon at %s:%d" % (daemon, port) session.broker.addserver(daemon, daemonip, port) # Set the local session id to match the port. # Not necessary but seems neater. session.sessionid = session.broker.getserver( 'localhost')[2].getsockname()[1] session.broker.setupserver(daemon) # We do not want the recvloop running as we will deal ourselves session.broker.dorecvloop = False # Change to configuration state on both machines session.setstate(coreapi.CORE_EVENT_CONFIGURATION_STATE) tlvdata = coreapi.CoreEventTlv.pack(coreapi.CORE_TLV_EVENT_TYPE, coreapi.CORE_EVENT_CONFIGURATION_STATE) session.broker.handlerawmsg(coreapi.CoreEventMessage.pack(0, tlvdata)) flags = coreapi.CORE_API_ADD_FLAG switch = pycore.nodes.SwitchNode(session=session, name='switch', start=False) switch.setposition(x=80, y=50) switch.server = daemon session.broker.handlerawmsg(switch.tonodemsg(flags=flags)) numberOfNodes = options.numnodes print "creating %d remote nodes with addresses from %s" % \ (options.numnodes, prefix) # create remote nodes via API for i in xrange(1, numberOfNodes + 1): tmp = pycore.nodes.CoreNode(session=session, objid=i, name="n%d" % i, start=False) tmp.setposition(x=150 * i, y=150) tmp.server = daemon session.broker.handlerawmsg(tmp.tonodemsg(flags=flags)) n.append(tmp) # create remote links via API for i in xrange(1, numberOfNodes + 1): tlvdata = coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_N1NUMBER, switch.objid) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_N2NUMBER, i) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_TYPE, coreapi.CORE_LINK_WIRED) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2NUM, 0) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2IP4, prefix.addr(i)) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2IP4MASK, prefix.prefixlen) msg = coreapi.CoreLinkMessage.pack(flags, tlvdata) session.broker.handlerawmsg(msg) # We change the daemon to Instantiation state # We do not change the local session as it would try and build a tunnel and fail tlvdata = coreapi.CoreEventTlv.pack(coreapi.CORE_TLV_EVENT_TYPE, coreapi.CORE_EVENT_INSTANTIATION_STATE) msg = coreapi.CoreEventMessage.pack(0, tlvdata) session.broker.handlerawmsg(msg) # Get the ip or last node and ping it from the first print 'Pinging from the first to the last node' pingip = cmd(n[-1], 'ip -4 -o addr show dev eth0').split()[3].split('/')[0] print cmd(n[1], 'ping -c 5 ' + pingip) print "elapsed time: %s" % (datetime.datetime.now() - start) print "To stop this session, use the 'core-cleanup' script on the remote daemon server."
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage = usagestr) parser.set_defaults(numnodes = 5) parser.add_option("-n", "--numnodes", dest = "numnodes", type = int, help = "number of nodes") def usage(msg = None, err = 0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) wlan = session.addobj(cls = pycore.nodes.WlanNode, name = "wlan") values = BasicRangeModel.getdefaultvalues() wlan.setmodel(BasicRangeModel, values) wlan.setposition(x=80,y=50) print "creating %d nodes with addresses from %s" % \ (options.numnodes, prefix) model = "PC" for i in xrange(1, options.numnodes + 1): n = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i, objid=i) n.type = model n.newnetif(wlan, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) n.cmd(["sysctl", "net.ipv4.icmp_echo_ignore_broadcasts=0"]) n.setposition(x=150*i,y=150) session.services.addservicestonode(n, model, "DefaultRoute", False) session.services.addservicestonode(n, "", "MyHaggleService", True) session.services.bootnodeservices(n) nodes.append(n) # start a shell on node 1 nodes[1].term("bash") print "elapsed time: %s" % (datetime.datetime.now() - start) t = threading.Thread(target = wandering_node, args=(nodes[1],)) t.start() # now we launch cored.py services so GUI can connect to this script print "launching cored services" # the following lines are from cored.py cored() cfg, args = cored.getMergedConfig("%s/core.conf" % CORE_CONF_DIR) cored.banner() server = cored.CoreServer(("localhost", coreapi.CORE_API_PORT), cored.CoreRequestHandler, cfg) print "adding session %s to cored.server" % session.sessionid server.addsession(session) print "running cored server - you may now connect the GUI" try: server.serve_forever() except KeyboardInterrupt: pass
def main(): tests = ["bex", "mobility", "rekey", "shell"] usagestr = "usage: %prog [-h] [options] [tests]\n" usagestr += "valid tests are: %s" % tests parser = optparse.OptionParser(usage=usagestr) parser.set_defaults(numnodes=2) parser.add_option("-n", "--numnodes", dest="numnodes", type=int, help="number of nodes") def usage(msg=None, err=0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) for a in args: if a not in tests: sys.stderr.write("ignoring command line argument: '%s'\n" % a) if os.geteuid() != 0: sys.stderr.write("\nRe-run this script with root privileges, e.g.:\n") sys.stderr.write(" sudo make check\n\n") sys.exit(1) start = datetime.datetime.now() print "- - - - - hiptest.py: %s - - - - -" % args # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = HipSession(persistent=True) # emulated Ethernet switch switch = session.addobj(cls=pycore.nodes.SwitchNode) print "creating %d nodes with addresses from %s session %d" % \ (options.numnodes, prefix, session.sessionid) for i in xrange(1, options.numnodes + 1): n = session.addobj(cls=HipNode, name="n%d" % i) n.newnetif(switch, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) n.cmd(["sysctl", "net.ipv4.icmp_echo_ignore_broadcasts=0"]) n.sethippath(os.getcwd()) n.hitgen() nodes.append(n) # The known_host_identities.xml file is built after all of the host IDs # have been generated. session.buildknownhosts() # make non-standard configuration file changes for tests here if "rekey" in args: nodes[1].hipconfval("sa_lifetime", "3") # HIP is started after the known_host_identities.xml is built. for n in nodes[1:]: n.starthip() print "pausing 0.5 seconds for hip initialization..." time.sleep(0.5) problem = False for n in nodes[1:]: if not n.checkforhip(): problem = True if "shell" in args: print "spawning terminal shells for nodes 1 and 2" nodes[1].term("bash") nodes[2].term("bash") print "leaving session %d running" % session.sessionid print "run 'sudo core-cleanup.sh' to clean up this test environment" sys.exit(0) if "bex" in args: if not session.bex(nodes[1], nodes[2]): problem = True if "mobility" in args: if not session.bex(nodes[1], nodes[2], verbose=False): print "problem with base exchange for mobility test!" problem = True if not session.mob(nodes[1], nodes[2]): problem = True if "rekey" in args: if not session.bex(nodes[1], nodes[2], verbose=False): print "problem with base exchange for rekey test!" problem = True if not session.rekey(nodes[1], nodes[2]): problem = True nodes[1].hipconfrestore() print "shutting down session %d" % session.sessionid session.shutdown() print "- - - - - hiptest.py elapsed time: %s - - - - -" % \ (datetime.datetime.now() - start) if problem: sys.exit(1) else: sys.exit(0)
def __init__(self, m, n, ipv4prefix = '10.0.0.0/30', ipv6prefix = 'a::/126'): assert m > 1 assert n > 0 Topology.__init__(self, m * n) p4 = ipaddr.IPv4Prefix(ipv4prefix) p6 = ipaddr.IPv6Prefix(ipv6prefix) class NetConfig(object): def __init__(self, net, ipv4prefix, ipv6prefix): self.net = net self.ipv4prefix = ipv4prefix self.ipv6prefix = ipv6prefix for i in xrange(n): for j in xrange(m): node = self.n[i * n + j] ifindex = 0 # network above if j > 0: above = self.n[i * n + j - 1] netcfg = above.netcfg_below addrlist = ['%s/%s' % (netcfg.ipv4prefix.addr(2), netcfg.ipv4prefix.prefixlen), '%s/%s' % (netcfg.ipv6prefix.addr(2), netcfg.ipv6prefix.prefixlen)] node.newnetif(netcfg.net, addrlist = addrlist, ifname = 'eth%s' % ifindex) ifindex += 1 node.netcfg_above = above.netcfg_below # network to the left if i > 0: left = self.n[(i - 1) * n + j] netcfg = left.netcfg_right addrlist = ['%s/%s' % (netcfg.ipv4prefix.addr(2), netcfg.ipv4prefix.prefixlen), '%s/%s' % (netcfg.ipv6prefix.addr(2), netcfg.ipv6prefix.prefixlen)] node.newnetif(netcfg.net, addrlist = addrlist, ifname = 'eth%s' % ifindex) ifindex += 1 node.netcfg_left = left.netcfg_right # network to the right if i < n - 1: net = self.session.addobj(cls = pycore.nodes.SwitchNode) netcfg = NetConfig(net, p4, p6) p4 += 1 p6 += 1 addrlist = ['%s/%s' % (netcfg.ipv4prefix.addr(1), netcfg.ipv4prefix.prefixlen), '%s/%s' % (netcfg.ipv6prefix.addr(1), netcfg.ipv6prefix.prefixlen)] node.newnetif(netcfg.net, addrlist = addrlist, ifname = 'eth%s' % ifindex) ifindex += 1 node.netcfg_right = netcfg # network below if j < m - 1: net = self.session.addobj(cls = pycore.nodes.SwitchNode) netcfg = NetConfig(net, p4, p6) p4 += 1 p6 += 1 addrlist = ['%s/%s' % (netcfg.ipv4prefix.addr(1), netcfg.ipv4prefix.prefixlen), '%s/%s' % (netcfg.ipv6prefix.addr(1), netcfg.ipv6prefix.prefixlen)] node.newnetif(netcfg.net, addrlist = addrlist, ifname = 'eth%s' % ifindex) ifindex += 1 node.netcfg_below = netcfg
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage = usagestr) parser.set_defaults(numnodes = 5, slave = None) parser.add_option("-n", "--numnodes", dest = "numnodes", type = int, help = "number of nodes") parser.add_option("-s", "--slave-server", dest = "slave", type = str, help = "slave server IP address") def usage(msg = None, err = 0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) if not options.slave: usage("slave server IP address (-s) is a required argument") for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) if 'server' in globals(): server.addsession(session) # distributed setup - connect to slave server slaveport = options.slave.split(':') slave = slaveport[0] if len(slaveport) > 1: port = int(slaveport[1]) else: port = coreapi.CORE_API_PORT print "connecting to slave at %s:%d" % (slave, port) session.broker.addserver(slave, slave, port) session.broker.setupserver(slave) session.setstate(coreapi.CORE_EVENT_CONFIGURATION_STATE) tlvdata = coreapi.CoreEventTlv.pack(coreapi.CORE_TLV_EVENT_TYPE, coreapi.CORE_EVENT_CONFIGURATION_STATE) session.broker.handlerawmsg(coreapi.CoreEventMessage.pack(0, tlvdata)) switch = session.addobj(cls = pycore.nodes.SwitchNode, name = "switch") switch.setposition(x=80,y=50) num_local = options.numnodes / 2 num_remote = options.numnodes / 2 + options.numnodes % 2 print "creating %d (%d local / %d remote) nodes with addresses from %s" % \ (options.numnodes, num_local, num_remote, prefix) for i in xrange(1, num_local + 1): tmp = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i, objid=i) tmp.newnetif(switch, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) tmp.cmd([SYSCTL_BIN, "net.ipv4.icmp_echo_ignore_broadcasts=0"]) tmp.setposition(x=150*i,y=150) n.append(tmp) flags = coreapi.CORE_API_ADD_FLAG session.broker.handlerawmsg(switch.tonodemsg(flags=flags)) # create remote nodes via API for i in xrange(num_local + 1, options.numnodes + 1): tmp = pycore.nodes.CoreNode(session = session, objid = i, name = "n%d" % i, start=False) tmp.setposition(x=150*i,y=150) tmp.server = slave n.append(tmp) session.broker.handlerawmsg(tmp.tonodemsg(flags=flags)) # create remote links via API for i in xrange(num_local + 1, options.numnodes + 1): tlvdata = coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_N1NUMBER, switch.objid) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_N2NUMBER, i) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_TYPE, coreapi.CORE_LINK_WIRED) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2NUM, 0) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2IP4, prefix.addr(i)) tlvdata += coreapi.CoreLinkTlv.pack(coreapi.CORE_TLV_LINK_IF2IP4MASK, prefix.prefixlen) msg = coreapi.CoreLinkMessage.pack(flags, tlvdata) session.broker.handlerawmsg(msg) session.instantiate() tlvdata = coreapi.CoreEventTlv.pack(coreapi.CORE_TLV_EVENT_TYPE, coreapi.CORE_EVENT_INSTANTIATION_STATE) msg = coreapi.CoreEventMessage.pack(0, tlvdata) session.broker.handlerawmsg(msg) # start a shell on node 1 n[1].term("bash") # TODO: access to remote nodes is currently limited in this script print "elapsed time: %s" % (datetime.datetime.now() - start) print "To stop this session, use the 'core-cleanup' script on this server" print "and on the remote slave server."
def main(): usagestr = "usage: %prog [-h] [options] [args]" parser = optparse.OptionParser(usage = usagestr) parser.set_defaults(numnodes = 5) parser.add_option("-n", "--numnodes", dest = "numnodes", type = int, help = "number of nodes") def usage(msg = None, err = 0): sys.stdout.write("\n") if msg: sys.stdout.write(msg + "\n\n") parser.print_help() sys.exit(err) # parse command line options (options, args) = parser.parse_args() if options.numnodes < 1: usage("invalid number of nodes: %s" % options.numnodes) for a in args: sys.stderr.write("ignoring command line argument: '%s'\n" % a) start = datetime.datetime.now() # IP subnet prefix = ipaddr.IPv4Prefix("10.83.0.0/16") session = pycore.Session(persistent=True) # emulated Ethernet switch switch = session.addobj(cls = pycore.nodes.SwitchNode, name = "switch") switch.setposition(x=80,y=50) print "creating %d nodes with addresses from %s" % \ (options.numnodes, prefix) for i in xrange(1, options.numnodes + 1): tmp = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i, objid=i) tmp.newnetif(switch, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)]) tmp.cmd(["sysctl", "net.ipv4.icmp_echo_ignore_broadcasts=0"]) tmp.setposition(x=150*i,y=150) tmp.verbose = True print "node %s nodedir=%s" % (tmp.name, tmp.nodedir) session.services.addservicestonode(tmp, "", "MyService", True) session.services.bootnodeservices(tmp) n.append(tmp) # start a shell on node 1 n[1].term("bash") print "elapsed time: %s" % (datetime.datetime.now() - start) # now we launch cored.py services so GUI can connect to this script print "launching cored services" # the following lines are from cored.py cored() cfg, args = cored.getMergedConfig("%s/core.conf" % CORE_CONF_DIR) cored.banner() server = cored.CoreServer(("localhost", coreapi.CORE_API_PORT), cored.CoreRequestHandler, cfg) print "adding session %s to cored.server" % session.sessionid server.addsession(session) print "running cored server - you may now connect the GUI" try: server.serve_forever() except KeyboardInterrupt: pass
def wifisession(opt): ''' Run a test wifi session. ''' #myservice = "Olsrd4Service" myservice = "OpenvswitchService" #myservice = "OpenflowService" numWirelessNode = 6 numWiredNode = 5 ns.core.Config.SetDefault("ns3::WifiMacQueue::MaxPacketNumber", ns.core.UintegerValue(100)) session = Ns3Session(persistent=True, duration=opt.duration) session.cfg['openvswitch_dir'] = coreconf.openvswitch_dir session.cfg['olsr_dir'] = coreconf.olsr_dir session.cfg['olsrd_dir'] = coreconf.olsrd_dir session.name = "ns3SDN" session.filename = session.name + ".py" session.node_count = str(numWirelessNode + numWiredNode + 1) session.services.importcustom(coreconf.custom_services_dir) add_to_server(session) wifi = session.addobj(cls=Ns3WifiNet, name="wlan1", rate="OfdmRate54Mbps") #wifi.wifi.SetStandard(ns.wifi.WIFI_PHY_STANDARD_80211b) #wifi.wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode",ns.core.StringValue("DsssRate11Mbps"), "NonUnicastMode", ns.core.StringValue("DsssRate11Mbps")) wifi.setposition(30, 30, 0) wifi.phy.Set("RxGain", ns.core.DoubleValue(20.0)) prefix = ipaddr.IPv4Prefix("10.0.0.0/16") hub1 = session.addobj(cls=pycore.nodes.HubNode, name="hub1") hub1.setposition(450, 300, 0) ptp1 = session.addobj(cls=pycore.nodes.PtpNet, name="ptp1") ptp2 = session.addobj(cls=pycore.nodes.PtpNet, name="ptp2") #controller network nodes = [] def ourmacaddress(n): return MacAddr.fromstring("02:02:00:00:00:%02x" % n) node = session.addnode(name="n1") node.newnetif(wifi, ["%s/%s" % (prefix.addr(1), prefix.prefixlen)], hwaddr=ourmacaddress(1)) node.newnetif(ptp1, ["192.168.1.2/24"]) session.services.addservicestonode(node, "router", myservice, verbose=True) session.services.bootnodeservices(node) nodes.append(node) for i in xrange(2, numWirelessNode - 2 + 1): node = session.addnode(name="n%d" % i) node.newnetif(wifi, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)], hwaddr=ourmacaddress(i)) if i == 3: #the wireless node which is attached to the controller node.newnetif(ptp2, ["10.100.100.2/24"]) session.services.addservicestonode(node, "router", myservice, verbose=True) session.services.bootnodeservices(node) nodes.append(node) node = session.addnode(name="gw5") node.newnetif(wifi, ["%s/%s" % (prefix.addr(5), prefix.prefixlen)], hwaddr=ourmacaddress(5)) node.newnetif(hub1, ["192.168.200.5/24"]) session.services.addservicestonode(node, "router", myservice, verbose=True) session.services.bootnodeservices(node) nodes.append(node) node = session.addnode(name="gw6") node.newnetif(wifi, ["%s/%s" % (prefix.addr(6), prefix.prefixlen)], hwaddr=ourmacaddress(6)) node.newnetif(hub1, ["192.168.200.6/24"]) session.services.addservicestonode(node, "router", myservice, verbose=True) session.services.bootnodeservices(node) nodes.append(node) node = session.addnode(name="client") node.newnetif(hub1, ["192.168.200.1/24"]) node.addaddr(0, "192.168.200.11/24") node.addaddr(0, "192.168.200.12/24") node.addaddr(0, "192.168.200.13/24") node.addaddr(0, "192.168.200.14/24") node.addaddr(0, "192.168.200.15/24") nodes.append(node) node = session.addnode(name="server") node.newnetif(ptp1, ["192.168.1.1/24"]) nodes.append(node) node = session.addnode(name="controller") node.newnetif(ptp2, ["10.100.100.100/24"]) nodes.append(node) session.setupconstantmobility() #n1 nodes[0].setns3position(100, 300, 0) nodes[0].setposition(100, 300, 0) #n2 nodes[1].setns3position(200, 300, 0) nodes[1].setposition(200, 300, 0) #n3 nodes[2].setns3position(300, 300, 0) nodes[2].setposition(300, 300, 0) #n4 nodes[3].setns3position(400, 300, 0) nodes[3].setposition(400, 300, 0) #gw5 #nodes[4].setns3position(400,400,0) #nodes[4].setposition(400,400,0) nodes[4].setns3position(300, 400, 0) nodes[4].setposition(300, 400, 0) #gw6 nodes[5].setns3position(400, 200, 0) nodes[5].setposition(400, 200, 0) #client nodes[6].setns3position(500, 300, 0) nodes[6].setposition(500, 300, 0) #server nodes[7].setns3position(100, 200, 0) nodes[7].setposition(100, 200, 0) #wifi.usecorepositions() # PHY tracing #wifi.phy.EnableAsciiAll("ns3wifi") session.thread = session.run(vis=False) #nodes[0].icmd(["sh", "./olsrdservice_start.sh", "start"]) return session