【问题标题】:Assertion error on mininet-test experimentmininet-test 实验的断言错误
【发布时间】:2015-05-25 08:12:07
【问题描述】:

我和我的朋友试图重现这个 mininet-test 实验: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改成addHostadd_switch改成addSwitch ,add_link 改为 addLink

我们还导入了一些我们需要的python函数,例如:python-matplotlibpython-termcolorbwm-ng

但是我们在绘制图形的时候还是会遇到以下问题——cwnd.png。

我们是否缺少一些重要的库或任何代码需要更改?

    .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']

【问题讨论】:

    标签: python mininet


    【解决方案1】:

    代码似乎在sendCmd() 调用结束时设置了一个标志waiting,该标志在每次运行该方法时检查为False。当收到命令的结果时,它似乎被重置。

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

    【讨论】:

      【解决方案2】:

      我也遇到了这个问题,发现如果你查看: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
      

      【讨论】:

      • 它拯救了我的一天!谢谢。
      【解决方案3】:

      对我来说,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()
      

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 2018-05-19
        • 2014-09-27
        • 2014-03-26
        相关资源
        最近更新 更多