【问题标题】:Exception Error in mininetmininet中的异常错误
【发布时间】:2018-06-12 22:21:03
【问题描述】:

我使用 Mininet 创建了一个简单的自定义拓扑。当我第一次运行它时它工作正常,但之后我收到以下错误消息:

异常:创建接口对时出错 (s1-eth1,h1-eth0):RTNETLINK 回答:文件存在

这是什么问题,我该如何解决?

这是我的拓扑:

from mininet.topo import Topo
from mininet.net import Mininet


class CustomTopo (Topo):

    def build(self):

        S1 = self.addSwitch('s1')

        H1 = self.addHost('h1')
        H2 = self.addHost('h2')

        self.addLink(S1, H1)
        self.addLink(S1, H2)


topo = CustomTopo()
net = Mininet(topo)
net.start()

topos = {'mytopo': CustomTopo}

更多信息我使用 Mininet 2.3.0d1

我在没有遥控器的情况下通过以下命令运行它并收到另一个错误: sudo mn --custom /home/bob/Desktop/Mtopo.py --topo=mytopo --mac

错误是: 例外:请关闭在端口 6653 上运行的控制器

我检查了 netstat -nl | grep 6653 但端口 6653 上没有活动会话,也没有其他控制器可以关闭。

【问题讨论】:

  • 尝试通过发出以下命令进行清理:sudo mn -c
  • 我做了丹尼尔,但错误仍然存​​在
  • 代码很好(我运行它没有问题)。您是否使用 sudo(以 root 身份)运行代码?
  • @Daniel 是的,我以 root 身份运行它:sudo mn --custom /home/bob/Desktop/Mtopo.py --topo=mytopo --mac --controller=remote 我完全糊涂了,不知道该怎么办。
  • @Daniel 我发现我的拓扑为每个主机创建了两次,所以它不能第二次在 s1 和 h1 之间添加链接。我该怎么做才能解决它?

标签: python mininet pox


【解决方案1】:

实际上你启动了 Mininet 两次。一次在您的脚本中,另一个在命令行中。 将您的脚本更改为:

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.node import RemoteController

class CustomTopo (Topo):

    def build(self):

        S1 = self.addSwitch('s1')

        H1 = self.addHost('h1')
        H2 = self.addHost('h2')

        self.addLink(S1, H1)
        self.addLink(S1, H2)


topo = CustomTopo()
net = Mininet(topo, controller=lambda name: RemoteController(name, ip='127.0.0.1', protocol='tcp', port = 6633), autoSetMacs=True)
net.start()
CLI(net)
net.stop()

保存到 start_topology.py 并运行为

sudo python start_topology.run

或将您的脚本更改为

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.cli import CLI


class CustomTopo (Topo):

    def build(self):

        S1 = self.addSwitch('s1')

        H1 = self.addHost('h1')
        H2 = self.addHost('h2')

        self.addLink(S1, H1)
        self.addLink(S1, H2)


topo = CustomTopo()
topos = {'mytopo': CustomTopo}

保存到 mytopo.py 并运行为

sudo mn --custom mytopo.py --topo=mytopo --mac --controller=remote,ip=127.0.0.1,port=6633

(相应地更改控制器的 IP 和端口)

【讨论】:

  • 您的回答已完成,谢谢。我选择了您的第一个解决方案,只有一个问题,在这种情况下,如何将 MAC 地址分配给主机?我的意思就像我使用 sudo mn --mac 时一样,我不想要随机 MAC 地址。
  • 您应该将参数 autoSetMacs=True 添加到 Mininet 构造函数中。我已编辑我的答案以包含此内容。
  • 所以我可以在构造函数中使用所有参数 [mininet.org/api/…。非常感谢@Daniel
【解决方案2】:

使用这个库:

from mininet.link import TCLink, Intf

当您添加链接时:

self.addLink(s1, h1, cls=TCLink)

【讨论】:

  • 不幸的是错误仍然存​​在,我也使用'sudo mn -c'但没有任何反应。
  • 你能提供更多关于使用脚本和拓扑的细节吗?
  • 当然,您可以在主要问题中看到脚本,我将其保存为桌面中的 Mtopo.py。要运行它,我使用以下命令:sudo mn --custom /home/bob/Desktop/Mtopo.py --topo=mytopo --mac 如果您想了解更多详细信息,请告诉我这些是什么. @dside
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 2011-02-15
  • 2015-05-25
  • 1970-01-01
  • 2013-06-14
  • 2014-06-15
  • 2020-06-27
  • 1970-01-01
相关资源
最近更新 更多