def buildTopoFromFile(param): global oshis global aoshis global switches global hosts global ctrls if verbose: print "*** Build Topology From Parsed File" parser = TopoParser(param, verbose=False) (ppsubnets, l2subnets) = parser.getsubnets() set_oshis = parser.oshis set_aoshis = parser.aoshis set_l2sws = parser.l2sws set_euhs = parser.euhs hosts_in_rn = [] net = Mininet( controller=RemoteController, switch=OVSKernelSwitch, host=OSHI, build=False ) if verbose: print "*** Build OSHI" for oshi in set_oshis: osh = net.addHost(oshi, loopback = give_me_next_loopback()) oshis.append(osh) if verbose: print "*** Build AOSHI" for aoshi in set_aoshis: aos = net.addHost(aoshi, loopback = give_me_next_loopback()) aoshis.append(aos) if verbose: print "*** Build L2SWS" for l2sw in set_l2sws: sw = net.addSwitch(l2sw) switches.append(sw) hosts_in_rn.append(sw) if verbose: print "*** Build EUHS" for euh in set_euhs: net.addHost(euh, loopback = "0.0.0.0") hosts.append(euh) if verbose: print "*** Create Core Networks Point To Point" i = 0 for ppsubnet in ppsubnets: if ppsubnet.type == "CORE": if verbose: print "*** Subnet: Node %s - Links %s" %(ppsubnet.nodes, ppsubnet.links) node1 = net.getNodeByName(ppsubnet.links[0][0]) node2 = net.getNodeByName(ppsubnet.links[0][1]) l = net.addLink(node1, node2) nets.append(OSPFNetwork(intfs=[l.intf1.name,l.intf2.name], ctrl=False)) if verbose: print "*** Connect", node1.name, "To", node2.name i = i + 1 if verbose: print "*** Create Core Networks Switched" for l2subnet in l2subnets: if l2subnet.type == "CORE": if verbose: print "*** Subnet: Node %s - Links %s" % (ppsubnet.nodes, ppsubnet.links) intfs = [] for link in l2subnet.links: node1 = net.getNodeByName(link[0]) node2 = net.getNodeByName(link[1]) l = net.addLink(node1, node2) if verbose: print "*** Connect", node1.name, "To", node2.name if 'sw' not in link[0] and 'sw' in link[1]: intfs.append(l.intf1.name) elif 'sw' in link[0] and 'sw' not in link[1]: intfs.append(l.intf2.name) elif 'sw' in link[0] and 'sw' in link[1]: continue else: print "Error Switched Networks - Both EndPoint != SW" sys.exit(-2) nets.append(OSPFNetwork(intfs, ctrl=False)) i = i + 1 if verbose: print "*** Create Access Networks Point To Point" i = 0 for ppsubnet in ppsubnets: if ppsubnet.type == "ACCESS": # XXX The Order now is important """if verbose: print "*** Subnet: Node %s - Links %s" %(ppsubnet.nodes, ppsubnet.links) node1 = net.getNodeByName(ppsubnet.links[0][0]) node2 = net.getNodeByName(ppsubnet.links[0][1]) l = net.addLink(node1, node2) nets.append(OSPFNetwork(intfs=[l.intf1.name,l.intf2.name], ctrl=False)) if verbose: print "*** Connect", node1.name, "To", node2.name""" print "Error Not Managed For Now" sys.exit(-2) i = i + 1 if verbose: print "*** Create Acces Networks Switched" for l2subnet in l2subnets: if l2subnet.type == "ACCESS": name = "L2AccessNetwork" + str(len(L2nets) + 1); l2net = L2AccessNetwork(name, classification = 'B') if verbose: print "*** Subnet: Node %s - Links %s" % (l2subnet.nodes, l2subnet.links) print "*** Create L2 Access Network - Classification", l2net.classification intfs = [] # XXX The Order now is important ord_links = l2subnet.getOrderedLinks() for link in ord_links: node1 = net.getNodeByName(link[0]) node2 = net.getNodeByName(link[1]) l = net.addLink(node1, node2) l2net.addLink(l) if verbose: print "*** Connect", node1.name, "To", node2.name if 'sw' not in link[0] and 'sw' in link[1]: intfs.append(l.intf1.name) elif 'sw' in link[0] and 'sw' not in link[1]: intfs.append(l.intf2.name) elif 'sw' in link[0] and 'sw' in link[1]: continue else: print "Error Switched Networks - Both EndPoint != SW" sys.exit(-2) nets.append(OSPFNetwork(intfs, ctrl=False)) L2nets.append(l2net) i = i + 1 print "*** Creating controller" c1 = RemoteController( 'c1', ip=ctrls_ip[0], port=ctrls_port[0]) ctrls.append(c1) hosts_in_rn.append(c1) # Connect the controller to the network print "*** Connect", osh.name, "To Controller" l = net.addLink(osh, c1) nets.append(OSPFNetwork(intfs=[l.intf1.name, l.intf2.name], ctrl=True)) # Only needed for hosts in root namespace fixIntf(hosts_in_rn) # Utility function check_tunnel_configuration() for i in range(0, len(LHS_tunnel)): tunnels.append(Tunnel()) print "*** Tunnels LHS:", LHS_tunnel print "*** Tunnels RHS:", RHS_tunnel # Tunnels Setup IP_tunnel_setup() SDN_tunnel_setup(net) i = 0 for tunnel in tunnels : print "*** Tunnel %d, Subnet %s.%s.%s.%s, Intfs %s" % (i+1, tunnel.subnet[0], tunnel.subnet[1], tunnel.subnet[2], 0, tunnel.intfs) i = i + 1 i = 0 for l2net in L2nets: print "***", l2net.name print "*** Nodes:", l2net.Nodes print "*** Links:", l2net.Links print "*** Intfs:", l2net.intfs i = i + 1 print "*** AOSHI Tag:", AOSHI_TO_TAG print "*** Trunk Port Configuration:", TRUNK_TO_TAG print "*** Access Port Configuration:", ACCESS_TO_TAG print "*** LHS AOSHI:", LHS_tunnel_aoshi print "*** RHS AOSHI:", RHS_tunnel_aoshi print "*** LHS Port:", LHS_tunnel_port print "*** RHS Port:", RHS_tunnel_port for network in nets: print "*** OSPF Network: %s.%s.%s.%s" % (network.subnet[0], network.subnet[1], network.subnet[2], 0), str(network.intfs) + ",", "cost %s," % network.cost, "hello interval %s," % network.hello_int return net
def topo(topology): """Builds Topology from a json file generated by Topology3D It also creates Configuration File for VLL pusher it saves a json files with all the node details (default in /tmp/overall_info.json) so that node.js can parse it and update the web gui """ verbose = True if verbose: print "*** Build Topology From Parsed File" print "*** Topology file : ", topology print "*** NodeInfo file: ", overall_info_file print "*** Topology format version: ", tf_version parser = TopoParser(topology, verbose = True, version=tf_version) ppsubnets = parser.getsubnets() #NB a submet could include multiple links if a legacy switch is used # currently only the first link is considered, therefore # legacy switches are not supported vlls = parser.getVLLs() pws = parser.getPWs() vss = parser.getVSs() # XXX if parser.generated == False: if verbose: print "*** No Autogenerated" generator = PropertiesGenerator(False) if verbose: print "*** Build Vertices Properties" cr_oshis_properties = generator.getVerticesProperties(parser.cr_oshis) for parser_cr_property, cr_property in zip(parser.cr_oshis_properties, cr_oshis_properties): parser_cr_property['loopback'] = cr_property.loopback pe_oshis_properties = generator.getVerticesProperties(parser.pe_oshis) for parser_pe_property, pe_property in zip(parser.pe_oshis_properties, pe_oshis_properties): parser_pe_property['loopback'] = pe_property.loopback #cers_properties = generator.getVerticesProperties(parser.cers) if verbose: print "*** Build Point-To-Point Links Properties" pp_properties = [] for ppsubnet in ppsubnets: pp_properties.append(generator.getLinksProperties(ppsubnet.links)) if verbose: print "*** Build VLLs Properties" vlls_properties = [] for vll in vlls: vlls_properties.append(generator.getVLLProperties(vll)) if verbose: print "*** Build PWs Properties" pws_properties = [] for pw in pws: pws_properties.append(generator.getVLLProperties(pw)) if verbose: print "*** Build VSs Properties" vss_properties = [] for vs in vss: vs_properties = generator.getVSProperties(vs) vss_properties.append(vs_properties) set_cr_oshis = parser.cr_oshis set_pe_oshis = parser.pe_oshis set_cers = parser.cers set_ctrls = parser.ctrls set_all_nodes = [] set_all_nodes.extend(set_cr_oshis) set_all_nodes.extend(set_pe_oshis) set_all_nodes.extend(set_cers) set_all_nodes.extend(set_ctrls) net = MininetOSHI(verbose) if verbose: print "*** Build OSHI CRs" i = 0 for croshi in set_cr_oshis: net.addCrOSHI(parser.cr_oshis_properties[i], croshi) if verbose: print "*** %s - %s" %(croshi, parser.cr_oshis_properties[i]) i = i + 1 if verbose: print "*** Build OSHI PEs" i = 0 for peoshi in set_pe_oshis: net.addPeOSHI(parser.pe_oshis_properties[i], peoshi) if verbose: print "*** %s - %s" %(peoshi, parser.pe_oshis_properties[i]) i = i + 1 net.addCoexistenceMechanism("COEXH", 0) if verbose: print "*** Build CONTROLLERS" i = 0 for ctrl in set_ctrls: net.addController(parser.ctrls_properties[i], ctrl) if verbose: print "*** %s - %s" %(ctrl, parser.ctrls_properties[i]) i = i + 1 if verbose: print "*** Build CERS" i = 0 for cer in set_cers: net.addCeRouter(0, parser.cers_properties[i], name = cer) if verbose: print "*** %s - %s" %(cer, parser.cers_properties[i]) i = i + 1 if verbose: print "*** Build node for management network" mgmt = net.addManagement(name="mgm1") if SINGLE_CONNECTION: croshi = net.getNodeByName(croshi) linkproperties = generator.getLinksProperties([(croshi.name, mgmt.name)]) net.addLink(croshi, mgmt, linkproperties[0]) if verbose: print "*** MANAGEMENT CONNECTION: ", mgmt.name, "To", croshi.name, "-", linkproperties[0] else: i = 0 for a_node in set_all_nodes: a_node = net.getNodeByName(a_node) linkproperties = generator.getLinksProperties([(a_node.name, mgmt.name)]) net.addLink(a_node, mgmt, linkproperties[0]) if verbose: print "*** MANAGEMENT CONNECTION: ", a_node.name, "To", mgmt.name, "-", linkproperties[0] i = i + 1 if verbose: print "*** Create Point To Point Networks" i = 0 for ppsubnet in ppsubnets: links = ppsubnet.links #if a ppsubnet has more than one link, only the first one is considered if verbose: print "*** Subnet: Node %s - Links %s" %(ppsubnet.nodes, links) node1 = net.getNodeByName(links[0][0]) node2 = net.getNodeByName(links[0][1]) net.addLink(node1, node2, pp_properties[i][0]) if verbose: #print "*** Connect", node1, "To", node2 print "*** Link Properties", pp_properties[i][0] i = i + 1 i = 0 for vll in vlls: node1 = net.getNodeByName(vll[0]) node2 = net.getNodeByName(vll[1]) net.addVLL(node1, node2, vlls_properties[i]) if verbose: print "*** VLLs Properties", vlls_properties[i] i = i + 1 i = 0 for pw in pws: node1 = net.getNodeByName(pw[0]) node2 = net.getNodeByName(pw[1]) net.addPW(node1, node2, pws_properties[i]) if verbose: print "*** PWs Properties", pws_properties[i] i = i + 1 i = 0 for vs in vss: endnodes = [] for node in vs: endnodes.append(net.getNodeByName(node)) net.addVS(endnodes, vss_properties[i]) if verbose: print "*** VSs Properties", vss_properties[i] i = i + 1 my_info = net.start() store_overall_info(my_info) if not no_cli: CLI(net) net.stop()
def topo(topology): """Builds Topology from a json file generated by Topology3D It also creates Configuration File for VLL pusher it saves a json files with all the node details (default in /tmp/overall_info.json) so that node.js can parse it and update the web gui """ verbose = True if verbose: print "*** Build Topology From Parsed File" print "*** Topology file : ", topology print "*** NodeInfo file: ", overall_info_file print "*** Topology format version: ", tf_version parser = TopoParser(topology, verbose=True, version=tf_version) ppsubnets = parser.getsubnets() #NB a submet could include multiple links if a legacy switch is used # currently only the first link is considered, therefore # legacy switches are not supported vlls = parser.getVLLs() pws = parser.getPWs() vss = parser.getVSs() # XXX if parser.generated == False: if verbose: print "*** No Autogenerated" generator = PropertiesGenerator(False) if verbose: print "*** Build Vertices Properties" cr_oshis_properties = generator.getVerticesProperties( parser.cr_oshis) for parser_cr_property, cr_property in zip( parser.cr_oshis_properties, cr_oshis_properties): parser_cr_property['loopback'] = cr_property.loopback pe_oshis_properties = generator.getVerticesProperties( parser.pe_oshis) for parser_pe_property, pe_property in zip( parser.pe_oshis_properties, pe_oshis_properties): parser_pe_property['loopback'] = pe_property.loopback #cers_properties = generator.getVerticesProperties(parser.cers) if verbose: print "*** Build Point-To-Point Links Properties" pp_properties = [] for ppsubnet in ppsubnets: pp_properties.append(generator.getLinksProperties(ppsubnet.links)) if verbose: print "*** Build VLLs Properties" vlls_properties = [] for vll in vlls: vlls_properties.append(generator.getVLLProperties(vll)) if verbose: print "*** Build PWs Properties" pws_properties = [] for pw in pws: pws_properties.append(generator.getVLLProperties(pw)) if verbose: print "*** Build VSs Properties" vss_properties = [] for vs in vss: vs_properties = generator.getVSProperties(vs) vss_properties.append(vs_properties) set_cr_oshis = parser.cr_oshis set_pe_oshis = parser.pe_oshis set_cers = parser.cers set_ctrls = parser.ctrls set_all_nodes = [] set_all_nodes.extend(set_cr_oshis) set_all_nodes.extend(set_pe_oshis) set_all_nodes.extend(set_cers) set_all_nodes.extend(set_ctrls) net = MininetOSHI(verbose) if verbose: print "*** Build OSHI CRs" i = 0 for croshi in set_cr_oshis: net.addCrOSHI(parser.cr_oshis_properties[i], croshi) if verbose: print "*** %s - %s" % (croshi, parser.cr_oshis_properties[i]) i = i + 1 if verbose: print "*** Build OSHI PEs" i = 0 for peoshi in set_pe_oshis: net.addPeOSHI(parser.pe_oshis_properties[i], peoshi) if verbose: print "*** %s - %s" % (peoshi, parser.pe_oshis_properties[i]) i = i + 1 net.addCoexistenceMechanism("COEXH", 0) if verbose: print "*** Build CONTROLLERS" i = 0 for ctrl in set_ctrls: net.addController(parser.ctrls_properties[i], ctrl) if verbose: print "*** %s - %s" % (ctrl, parser.ctrls_properties[i]) i = i + 1 if verbose: print "*** Build CERS" i = 0 for cer in set_cers: net.addCeRouter(0, parser.cers_properties[i], name=cer) if verbose: print "*** %s - %s" % (cer, parser.cers_properties[i]) i = i + 1 if verbose: print "*** Build node for management network" mgmt = net.addManagement(name="mgm1") if SINGLE_CONNECTION: croshi = net.getNodeByName(croshi) linkproperties = generator.getLinksProperties([(croshi.name, mgmt.name) ]) net.addLink(croshi, mgmt, linkproperties[0]) if verbose: print "*** MANAGEMENT CONNECTION: ", mgmt.name, "To", croshi.name, "-", linkproperties[ 0] else: i = 0 for a_node in set_all_nodes: a_node = net.getNodeByName(a_node) linkproperties = generator.getLinksProperties([(a_node.name, mgmt.name)]) net.addLink(a_node, mgmt, linkproperties[0]) if verbose: print "*** MANAGEMENT CONNECTION: ", a_node.name, "To", mgmt.name, "-", linkproperties[ 0] i = i + 1 if verbose: print "*** Create Point To Point Networks" i = 0 for ppsubnet in ppsubnets: links = ppsubnet.links #if a ppsubnet has more than one link, only the first one is considered if verbose: print "*** Subnet: Node %s - Links %s" % (ppsubnet.nodes, links) node1 = net.getNodeByName(links[0][0]) node2 = net.getNodeByName(links[0][1]) net.addLink(node1, node2, pp_properties[i][0]) if verbose: #print "*** Connect", node1, "To", node2 print "*** Link Properties", pp_properties[i][0] i = i + 1 i = 0 for vll in vlls: node1 = net.getNodeByName(vll[0]) node2 = net.getNodeByName(vll[1]) net.addVLL(node1, node2, vlls_properties[i]) if verbose: print "*** VLLs Properties", vlls_properties[i] i = i + 1 i = 0 for pw in pws: node1 = net.getNodeByName(pw[0]) node2 = net.getNodeByName(pw[1]) net.addPW(node1, node2, pws_properties[i]) if verbose: print "*** PWs Properties", pws_properties[i] i = i + 1 i = 0 for vs in vss: endnodes = [] for node in vs: endnodes.append(net.getNodeByName(node)) net.addVS(endnodes, vss_properties[i]) if verbose: print "*** VSs Properties", vss_properties[i] i = i + 1 # Cycle over all nodes and start grpc servers if parser.path_grpc != "": net.grpc_path = parser.path_grpc my_info = net.start() store_overall_info(my_info) if tf_version == 1: CLI(net) net.stop()
def topo(topology): verbose = True if verbose: print "*** Build Topology From Parsed File" parser = TopoParser(topology, verbose = False) ppsubnets = parser.getsubnets() vlls = parser.getVLLs() pws = parser.getPWs() testbed = parser.testbed # XXX if parser.generated == False: if verbose: print "*** No Generated" generator = PropertiesGenerator(testbed) if verbose: print "*** Build Vertices Properties" cr_oshis_properties = generator.getVerticesProperties(parser.cr_oshis) for parser_cr_property, cr_property in zip(parser.cr_oshis_properties, cr_oshis_properties): parser_cr_property['loopback'] = cr_property.loopback pe_oshis_properties = generator.getVerticesProperties(parser.pe_oshis) for parser_pe_property, pe_property in zip(parser.pe_oshis_properties, pe_oshis_properties): parser_pe_property['loopback'] = pe_property.loopback #l2sws_properties = generator.getVerticesProperties(parser.l2sws) #cers_properties = generator.getVerticesProperties(parser.cers) if verbose: print "*** Build Point-To-Point Links Properties" pp_properties = [] for ppsubnet in ppsubnets: pp_properties.append(generator.getLinksProperties(ppsubnet.links)) if verbose: print "*** Build VLLs Properties" vlls_properties = [] for vll in vlls: vlls_properties.append(generator.getVLLsProperties(vll)) if verbose: print "*** Build PWs Properties" pws_properties = [] for pw in pws: pws_properties.append(generator.getVLLsProperties(pw)) set_cr_oshis = parser.cr_oshis set_pe_oshis = parser.pe_oshis set_cers = parser.cers set_ctrls = parser.ctrls factory = TestbedFactory(False) testbed = factory.getTestbedOSHI(testbed, parser.tunneling, parser.mapped, parser.vlan) if verbose: print "*** Build CR OSHI" i = 0 for croshi in set_cr_oshis: testbed.addCrOshi(parser.cr_oshis_properties[i], croshi) if verbose: print "*** %s - %s" %(croshi, parser.cr_oshis_properties[i]) i = i + 1 if verbose: print "*** Build PE OSHI" i = 0 for peoshi in set_pe_oshis: testbed.addPeOshi(parser.pe_oshis_properties[i], peoshi) if verbose: print "*** %s - %s" %(peoshi, parser.pe_oshis_properties[i]) i = i + 1 testbed.addCoexistenceMechanism("COEXH", 0) if verbose: print "*** Build CONTROLLER" i = 0 for ctrl in set_ctrls: testbed.addController(parser.ctrls_properties[i], ctrl) if verbose: print "*** %s - %s" %(ctrl, parser.ctrls_properties[i]) i = i + 1 if verbose: print "*** Build CERS" i = 0 for cer in set_cers: testbed.addCer(0, parser.cers_properties[i], name = cer) if verbose: print "*** %s - %s" %(cer, parser.cers_properties[i]) i = i + 1 if verbose: print "*** Create Networks Point To Point" i = 0 for ppsubnet in ppsubnets: links = ppsubnet.links if verbose: print "*** Subnet: Node %s - Links %s" %(ppsubnet.nodes, links) node1 = links[0][0] node2 = links[0][1] [(lhs_vi, lhs_tap, lhs_ospf_net), (rhs_vi, rhs_tap, rhs_ospf_net)] = testbed.addLink(node1, node2, pp_properties[i][0]) if verbose: print "*** Connect", node1, "To", node2 print "*** Link Properties", pp_properties[i][0] i = i + 1 i = 0 for vll in vlls: testbed.addVLL(vll[0], vll[1], vlls_properties[i]) if verbose: print "*** VLLs Properties", vlls_properties[i] i = i + 1 i = 0 for pw in pws: testbed.addPW(pw[0], pw[1], pws_properties[i]) if verbose: print "*** PWs Properties", pws_properties[i] i = i + 1 print "*** Generate testbed.sh" testbed.configure() print "*** Generate LME rules" testbed.generateLMErules() print "*** Generate VLL pusher cfg" testbed.generateVLLCfg() print "*** Generate management.sh" testbed.configureMGMT() print "*** Generate vsf.cfg" testbed.generateVSFCfg()