我的朋友和我试图重现这个mininet测试实验:https://github.com/mininet/mininet-tests/tree/master/dctcp
我们自己创建了一个虚拟机,并在内核版本为3.18.9的ubuntu上安装了Mininet 2.2,其中包括dctcp和tcp_probe函数。
由于作者建议内核版本3.0.1不支持我们在Mininetnet中需要的功能。我们只是更改了dctcp.py中的某个函数名称,例如: add_host 更改为 addHost , add_switch 更改为 addSwitch , add_link 已更改为 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']
答案 0 :(得分:1)
我也碰到了这个,发现如果你看一下: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
答案 1 :(得分:1)
对我来说,h1.monitor()
在 mininet 2.3.0
的类似情况下没有工作,所以我用 sendCmd()
替换了 popen()
,然后使用了 terminate()
函数。
使用上面的示例,我将其更改为:
p1 = h1.popen(startbackground_service)
h2.cmd(something_else)
h3.cmd(use_h1_service)
.....
p1.terminate()
答案 2 :(得分:0)
代码似乎在waiting
调用结束时设置了一个标志sendCmd()
,该标志在每次运行该方法时都会被检查为False
。当接收到命令的结果时,它似乎被重置。
结果,您无法发送第二个命令,直到收到第一个命令的响应。这可能仅仅是竞争条件,但恕我直言,图书馆应该以更聪明和透明的方式处理这种情况。