我在跑步迷你网(网络模拟器)在 Ubuntu 16.04.2 上。我创建了一个 Python 文件来创建一个模拟网络(如图中第 6 行和第 7 行所示),名为 ,topo001.py
其中包含以下代码:
"""
Topology001 created by zim7563
Three directly connected switches plus a host for only two switches:
host1 --- switch1 --- switch2 --- host2
\--switch3--/
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
In command line, enter: sudo mn --custom /home/network-research/Desktop/topo001.py --topo mytopo --controller=remote,ip=127.0.0.1 --link=tc
"""
import pdb
from mininet.topo import Topo
# Next two provide performance limiting and isolation features
from mininet.node import CPULimitedHost
from mininet.link import TCLink
# Additional (testing to see what may be needed to make it work)
#from mininet.net import Mininet
#from mininet.util import dumpNodeConnections
#from mininet.log import setLogLevel
class MyTopo( Topo ):
def __init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
# Add hosts and switches
S1 = self.addSwitch( 's1' )
S2 = self.addSwitch( 's2' )
S3 = self.addSwitch( 's3' )
H1 = self.addHost( 'h1' )
H2 = self.addHost( 'h2' )
SwitchList = (S1,S2,S3)
# Add links
self.addLink( H1, S1 )
self.addLink( S1, S2, bw=10)#, delay='5ms', loss=2, max_queue_size=1000, use_htb=True )
self.addLink( S1, S3 )#, bw=20 )
self.addLink( S2, S3 )
self.addLink( H2, S2 )
topos = { 'mytopo': ( lambda: MyTopo() ) }
要在 Mininet 中运行此文件,我直接在终端中输入命令sudo mn --custom /home/network-research/Desktop/topo001.py --topo mytopo --controller=remote,ip=127.0.0.1 --link=tc
(文件保存在我的桌面上)。执行此操作后,Mininet 启动并提供以下内容:
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1 s2 s3
*** Adding links:
(h1, s1) (h2, s2) (10.00Mbit) *** Error: RTNETLINK answers: No such file or directory
(10.00Mbit) *** Error: RTNETLINK answers: No such file or directory
(s1, s2) (s1, s3) (s2, s3)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 3 switches
s1 s2 s3 ...(10.00Mbit) (10.00Mbit)
*** Starting CLI:
设置其他链接参数时也会出现错误消息*** Error: RTNETLINK answers: No such file or directory
。(我尝试过的其他链接参数在文件中的井号 (#) 符号后被注释掉了。)防止出现此错误消息的唯一方法是删除所有链接参数。然而,这不是一个选项,因为我需要为网络中的每个链接设置某些参数。
我到处寻找答案,但这个问题至今没有得到解决。我卸载了 Mininet,然后使用源代码重新安装,并多次重启电脑(安装源代码版本之前和之后)。
当我执行 时pingall
,所有 ping 都已成功发送和接收:
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
我的问题是:我该用什么方法解决这个错误信息?答案如下,并在本文底部的更新部分提供了附加说明。
次要问题:在给定参数限制的情况下,这个错误是否会阻止链接按预期运行?答案是未知的。
逐步解决方案更新:
下面列出的解决方案对我有用。谢谢 juejiang!我卸载了当前版本的 Mininet,然后转到 GitHub 上的 master 分支,发现这里并按照第 3.1 部分关于“在 Ubuntu 12.04+ 上从源代码进行本地安装”的说明进行操作。
安装完成后,我重新启动了计算机,启动了 OpenDaylight 控制器,然后使用自定义拓扑运行了 Mininet。以下是无错误结果:
*** Creating network
*** Adding controller
Connecting to remote controller at 127.0.0.1:6653
*** Adding hosts:
h1 h2
*** Adding switches:
s1 s2 s3
*** Adding links:
(h1, s1) (h2, s2) (10.00Mbit) (10.00Mbit) (s1, s2) (s1, s3) (s2, s3)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 3 switches
s1 s2 s3 ...(10.00Mbit) (10.00Mbit)
*** Starting CLI:
然后我运行了一个pingall
命令并收到以下内容:
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
再次感谢juejiang!
答案1
我在 ubuntu 14.04 中也遇到过这个问题。
从源代码(主分支)重新安装 mininet 后,错误消息不再出现。
检查 link.py 中的以下行以确保代码已更新。-
if "priomap" not in tcoutput:
+ if "priomap" not in tcoutput and "noqueue" not in tcoutput:
https://github.com/mininet/mininet/pull/603
https://github.com/mininet/mininet/pull/629