我有两个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”
注意:两个文件都在同一目录中