如何根据用户输入将我的SDN网络拓扑从拓扑1更改为拓扑2?

时间:2017-03-31 11:09:51

标签: python networking sdn

我有两个SDN网络拓扑,我想将我的网络拓扑从拓扑1更改为拓扑2.这两个拓扑都是在python脚本中创建的,我想允许用户输入拓扑编号(1或2)应该运行相应的拓扑。我使用Mininet来运行python脚本,这是我的Topo.py

#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, TCLink, Intf
from subprocess import call
from mininet.util import irange,dumpNodeConnections
class VLANHost( Host ):
    def config( net, vlan=100, **params ):
        r = super( Host, net ).config( **params )
        intf = net.defaultIntf()
        # remove IP from default, physical interface
        net.cmd( 'ifconfig %s inet 0' % intf )
        # create VLAN interface
        net.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
        # assign the host's IP to the VLAN interface
        net.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
        # update the intf name and host's intf map
        newName = '%s.%d' % ( intf, vlan )
        # update the (Mininet) interface to refer to VLAN interface name
        intf.name = newName
        # add VLAN interface to host's name to intf map
        net.nameToIntf[ newName ] = intf
        return r
def topology1():
    net = Mininet( controller=RemoteController, link=TCLink, switch=OVSKernelSwitch )
    c0 = net.addController( 'c0', ip='127.0.0.1', port=6633 )
    sw1=net.addSwitch('sw1')
    sw2=net.addSwitch('sw2')
    host1=net.addHost('host1', cls=VLANHost, vlan=1)
    host2=net.addHost('host2', cls=VLANHost, vlan=2)
    host3=net.addHost('host3', cls=VLANHost, vlan=3)
    host4=net.addHost('host4', cls=VLANHost, vlan=3)
    host5=net.addHost('host5', cls=VLANHost, vlan=2)
    host6=net.addHost('host6', cls=VLANHost, vlan=1)
    net.addLink(sw1,sw2)
    net.addLink(sw1,host1)
    net.addLink(sw1,host2)
    net.addLink(sw1,host3)
    net.addLink(sw2,host4)
    net.addLink(sw2,host5)
    net.addLink(sw2,host6)
    net.build()
    c0.start()
    sw1.start( [c0] )
    sw2.start( [c0] )
    CLI( net )
    net.stop()
def topology2():
    net = Mininet( controller=RemoteController, link=TCLink, switch=OVSKernelSwitch )
    c0 = net.addController( 'c0', ip='127.0.0.1', port=6633 )
    sw1=net.addSwitch('sw1')
    sw2=net.addSwitch('sw2')
    host1=net.addHost('host1', cls=VLANHost, vlan=3)
    host2=net.addHost('host2', cls=VLANHost, vlan=2)
    host3=net.addHost('host3', cls=VLANHost, vlan=1)
    host4=net.addHost('host4', cls=VLANHost, vlan=1)
    host5=net.addHost('host5', cls=VLANHost, vlan=3)
    host6=net.addHost('host6', cls=VLANHost, vlan=2)
    net.addLink(sw1,sw2)
    net.addLink(sw1,host1)
    net.addLink(sw1,host2)
    net.addLink(sw1,host3)
    net.addLink(sw2,host4)
    net.addLink(sw2,host5)
    net.addLink(sw2,host6)
    net.build()
    c0.start()
    sw1.start( [c0] )
    sw2.start( [c0] )
    CLI( net )
    net.stop()
if __name__ == '__main__':
    setLogLevel('info')
    topology1()
    topology2()

用于允许用户选择要运行的拓扑的python脚本是:

import Topos
if __name__ == '__main__':
    choice = raw_input('choose Topology by typing 1 or 2: ')
    if choice == '1':
        Topos.topology1()
    elif choice == '2':
        Topos.topology2()

当我运行第二个脚本时,我收到此错误:

  

“ImportError:无法导入名称Cmd”

注意:两个文件都在同一目录中

0 个答案:

没有答案