我和朋友试图重现这个迷你网测试实验:https://github.com/mininet/mininet-tests/tree/master/dctcp
我们自己创建了一个虚拟机,并在ubuntu上安装了Mininet 2.2,内核版本为3.18.9,其中包括dctcp和tcp_probe功能。
由于作者建议内核3.0.1版本不支持我们在Mininetnet中需要的那些功能。我们只是简单地更改了dctcp.py中的一些函数名称,例如:add_host更改为addHost,add_switch改为addSwitch、add_link变为<strong]addLink>。
我们还导入了一些我们需要的python函数,例如:python matplotlib、python termcolor和bwm-ng。
但是,当我们绘制图形时,我们仍然会遇到以下问题-cwnd.png.
我们是缺少了一些重要的lib还是需要更改任何代码?
.Traceback (most recent call last):
File "dctcp.py", line 250, in <module>
main()
File "dctcp.py", line 244, in main
net.stop()
File "build/bdist.linux-x86_64/egg/mininet/net.py", line 514, in stop
File "build/bdist.linux-x86_64/egg/mininet/link.py", line 479, in stop
File "build/bdist.linux-x86_64/egg/mininet/link.py", line 472, in delete
File "build/bdist.linux-x86_64/egg/mininet/link.py", line 199, in delete
File "build/bdist.linux-x86_64/egg/mininet/link.py", line 64, in cmd
File "build/bdist.linux-x86_64/egg/mininet/node.py", line 350, in cmd
File "build/bdist.linux-x86_64/egg/mininet/node.py", line 269, in sendCmd
AssertionError
s1
s1-eth1
s1-eth2
s1-eth3
total
['tcp-n3-bw100/qlen_s1-eth1.txt']
我也遇到了这个问题,发现如果您查看:https://github.com/bigswitch/mininet/blob/master/mininet/node.py在monitor()函数部分,您将看到该函数将等待标志设置为False。
所以代码可以是
h1.sendCmd(startbackground_service)
h2.cmd(something_else)
h3.cmd(use_h1_service)
.....
#at some point end h1's background service, naturally or unnaturally
h1.monitor() # will check the service, and set waiting=False
对我来说,h1.monitor()
在mininet 2.3.0
上的类似情况下不起作用,所以我用popen()
替换了sendCmd()
,然后使用了terminate()
函数。
使用上面的示例,我将其更改为:
p1 = h1.popen(startbackground_service)
h2.cmd(something_else)
h3.cmd(use_h1_service)
.....
p1.terminate()
代码似乎在sendCmd()
调用结束时设置了一个标志waiting
,该标志在每次方法运行时都被检查为False
。当收到命令的结果时,它似乎被重置了。
因此,在收到第一个命令的响应之前,您无法发送第二个命令。这可能只是一个竞争条件,但IMHO库应该以更聪明和透明的方式处理这种情况。