コード例 #1
0
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
コード例 #2
0
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()
コード例 #3
0
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()
コード例 #4
0
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()