我在下面的python程序中得到一个TypeError,其中正在调用构造函数。如果我删除延迟参数,我会得到与" bw"相同的错误。我无法弄清楚这个错误。请帮忙。
我正在尝试使用python创建网络拓扑。
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel
class CustomTopo(Topo):
def __init__(self, linkopts1, linkopts2, linkopts3, fanout=2, **opts):
# Initialize topology and default options
Topo.__init__(self, **opts)
# Add your logic here ...
switch=self.addSwitch('c1')
self.linkopts1=linkopts1
self.linkopts2=linkopts2
self.linkopts3=linkopts3
self.fanout=fanout
n=0
for i in irange(1,fanout):
s=self.addSwitch('a%s' % i)
self.addLink(switch,s,**linkopts1)
if i==1:
n=0
else:
n=1
for j in irange(1,fanout):
if n==0:
sw=self.addSwitch('e%s' % j) #To generate labels e1, e2, e3 and e4:
else: #if n=0, edge switches e1 and e2 are added to a1
sw=self.addSwitch('e%s' % (j+2)) #if n=1, edge switched e3 and e4 are added to a2
self.addLink(s,sw,**linkopts2)
for k in irange(1,fanout):
if ((j==1)&(n==0)):
host=self.addHost('h%s' % k) #For edge switch e1, j=1,n=0. End-hosts are h1 and h2.
elif ((j==2)&(n==0)):
host=self.addHost('h%s' % (k+2)) #For edge switch e2, j=2,n=0. End-hosts are h3 and h4.
elif ((j==1)&(n==1)):
host=self.addHost('h%s' % (k+4)) #For edge switch e3, j=1,n=1. End-hosts are h5 and h6.
elif ((j==2)&(n==1)):
host=self.addHost('h%s' % (k+6)) #For edge switch e4, j=2,n=1. End-hosts are h7 and h8.
self.addLink(sw,host,**linkopts3)
def treeTest():
linkopts1=dict(bw=10, delay='5ms')
linkopts2=dict(bw=10, delay='5ms')
linkopts3=dict(bw=10, delay='5ms')
topo=CustomTopo(linkopts1,linkopts2,linkopts3,fanout=2)
net=Mininet(topo)
net.start()
print "Dumping node connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
net.stop()
if __name__=='__main__':
setLogLevel('info')
treeTest()
topos = { 'custom': ( lambda: CustomTopo() ) }
我得到的错误跟踪是:
Traceback (most recent call last):
File "CustomTopo.py", line 70, in <module>
treeTest()
File "CustomTopo.py", line 60, in treeTest
net=Mininet(topo)
File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 164, in __init__
self.build()
File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 357, in build
self.buildFromTopo( self.topo )
File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 344, in buildFromTopo
self.addLink( src, dst, srcPort, dstPort, **params )
File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 287, in addLink
return cls( node1, node2, **defaults )
TypeError: __init__() got an unexpected keyword argument 'delay'
答案 0 :(得分:21)
请记住将链接类型设置为tc。
在脚本中指定它,如下所示:
net = Mininet(topo=topo, link=TCLink)
请记住在python脚本中导入TCLink:
from mininet.link import TCLink
相反,如果要从命令提示符调用mininet,请按以下方式设置--link参数:
sudo mn --custom custom.py --topo customtopo --link tc
答案 1 :(得分:0)
无论是在mininet还是我怀疑OpenVswitch,一个对象被传递给你的一个linkopts,其中bw和delay作为关键字参数。但是,该对象不期望您使用的关键字参数。也许你在mininet和openvswitch之间有版本不匹配?我看到当前示例中列出的bw和延迟,但我没有域经验知道它们是旧引用还是您有较旧的库。
不幸的是,试用你的代码片段需要比我有时间更多的配置。我试过简单的“apt-get openvswitch-controller python-openvswitch”,但我无法让它运行。