mininet测试实验中的断言错误

时间:2015-03-22 06:15:54

标签: python mininet

我的朋友和我试图重现这个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']

3 个答案:

答案 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。当接收到命令的结果时,它似乎被重置。

结果,您无法发送第二个命令,直到收到第一个命令的响应。这可能仅仅是竞争条件,但恕我直言,图书馆应该以更聪明和透明的方式处理这种情况。