mininet测试实验中的断言错误



我和朋友试图重现这个迷你网测试实验: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更改为addHostadd_switch改为addSwitchadd_link变为<strong]addLink>。

我们还导入了一些我们需要的python函数,例如:python matplotlibpython termcolorbwm-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库应该以更聪明和透明的方式处理这种情况。

最新更新