def setup(argv): domains = [] ctlsets = sys.argv[1:] # the controllers for the optical domain d0 = OpticalDomain() domains.append(d0) ctls = ctlsets[0].split(',') for i in range(len(ctls)): d0.addController('c0%s' % i, controller=RemoteController, ip=ctls[i]) # the fabric domains - position 1 for domain 1, 2 for 2 ... for i in range(1, len(ctlsets)): f = FabricDomain(i) domains.append(f) ctls = ctlsets[i].split(',') for j in range(len(ctls)): f.addController('c%s%s' % (i, j), controller=RemoteController, ip=ctls[j]) # make/setup Mininet object net = Mininet() for d in domains: d.build() d.injectInto(net) # connect COs to core - sort of hard-wired at this moment for i in range(1, len(domains)): an = { "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" } net.addLink(domains[i].getTether(), d0.getSwitches('OE%s' % i), port1=OVS_AP, port2=OE_AP, speed=10000, annotations=an, cls=LINCLink) # fire everything up net.build() map(lambda x: x.start(), domains) # create a minimal copy of the network for configuring LINC. cfgnet = Mininet() cfgnet.switches = net.switches cfgnet.links = net.links cfgnet.controllers = d0.getControllers() LINCSwitch.bootOE(cfgnet, d0.getSwitches()) CLI(net) net.stop() LINCSwitch.shutdownOE()
def setup(ctls): net = Mininet(topo=OpticalTopo(), controller=None) i = 1 for ctl in ctls: net.addController(RemoteController('c%d' % i, ip=ctl)) i += 1 net.start() LINCSwitch.bootOE(net) CLI(net) net.stop() LINCSwitch.shutdownOE()
def setup(argv): domains = [] ctlsets = sys.argv[1:] # the controllers for the optical domain d0 = OpticalDomain() f0 = FabricDomain(1) f1 = FabricDomain(2) domains.extend([d0, f0, f1]) for i in range(len(domains)): ctls = ctlsets[i].split(',') for c in range(len(ctls)): domains[i].addController('c%s%s' % (i, c), controller=RemoteController, ip=ctls[c]) # netcfg for each domains # Note: Separate netcfg for domain0 is created in opticalUtils domainCfgs = [] for i in range(0, len(ctlsets)): cfg = {} cfg['devices'] = {} cfg['ports'] = {} cfg['links'] = {} domainCfgs.append(cfg) # make/setup Mininet object net = Mininet() for d in domains: d.build() d.injectInto(net) # connect COs to core - sort of hard-wired at this moment # adding cross-connect links for i in range(1, len(domains)): # add 10 cross-connect links between domains xcPortNo = 2 ochPortNo = 10 an = {"bandwidth": 10, "durable": "true"} net.addLink(domains[i].getTether(), d0.getSwitches('OE%s' % i), port1=xcPortNo, port2=ochPortNo, speed=10000, annotations=an, cls=LINCLink) xcId = 'of:' + domains[i].getSwitches( name=domains[i].getTether()).dpid + '/' + str(xcPortNo) ochId = 'of:' + d0.getSwitches('OE%s' % i).dpid + '/' + str(ochPortNo) domainCfgs[i]['ports'][xcId] = {'cross-connect': {'remote': ochId}} # fire everything up net.build() map(lambda x: x.start(), domains) # create a minimal copy of the network for configuring LINC. cfgnet = Mininet() cfgnet.switches = net.switches cfgnet.links = net.links cfgnet.controllers = d0.getControllers() LINCSwitch.bootOE(cfgnet, d0.getSwitches()) # send netcfg json to each CO-ONOS for i in range(1, len(domains)): info('*** Pushing Topology.json to CO-ONOS %d\n' % i) filename = 'Topology%d.json' % i with open(filename, 'w') as outfile: json.dump(domainCfgs[i], outfile, indent=4, separators=(',', ': ')) output = quietRun('%s/tools/test/bin/onos-netcfg %s %s &'\ % (LINCSwitch.onosDir, domains[i].getControllers()[0].ip, filename), shell=True) # successful output contains the two characters '{}' # if there is more output than this, there is an issue if output.strip('{}'): warn('***WARNING: Could not push topology file to ONOS: %s\n' % output) CLI(net) net.stop() LINCSwitch.shutdownOE()