主机无法在具有自定义拓扑和 OpenDayLight 的 mininet VM 上相互 ping

Hosts can't ping each other on mininet VM with custom topology and OpenDayLight

前言

主机OS:Win10

尝试过的 Mininet VM:Ubuntu 服务器 18.04、18.04.6、20.04、22.04,mininet 提供的预配置 VM 我也尝试过使用预配置的 ODL VM 并自己从源构建。

虚拟机软件:VMware Workstation

嘿,我对 SDN、mininet 和 ODL 还很陌生。我设置了一个桥接 VM 运行将 ODL 实例用作远程控制器,然后我还设置了一个包含 mininet 的单独桥接 VM。

我想指出的事实是,如果我 运行 一个命令,例如 sudo mn -x --mac --topo single,3 --controller=remote,ip=192.168.0.37,port=6633 --switch ovsk,protocols=OpenFlow13(这基本上是我试图通过 python 脚本重新创建的),所有工作得很好;我的主机可以相互通信,并且拓扑按预期出现在我的 ODL webview 中。

我试过查看多个 SO 线程,但没有成功,我也无法在网上找到任何解决我的问题的资源。

问题

我的问题是,每当我尝试使用 sudo python/2/3 script.py 来 运行 我的自定义 mininet 拓扑时,我的主机无法相互 ping 通并且该拓扑没有出现在我的 ODL webview 中。我尝试了 运行 越来越简单的 python 脚本,试图让它工作。这是迄今为止我尝试过的最简单的。 Script.py:

#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import setLogLevel, info
from mininet.node import OVSKernelSwitch, RemoteController

def myNetwork():

    net = Mininet( topo=None, build=False)

    info( '*** Adding controller\n' )
    net.addController(name='c0',controller=RemoteController,ip='192.168.0.37',port=6633)

    info('*** Add single switch\n')
    s1 = net.addSwitch('s1')

    info('*** Add hosts\n')
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    h3 = net.addHost('h3')
    h4 = net.addHost('h4')
    h5 = net.addHost('h5')
    h6 = net.addHost('h6')

    info('*** Add links with QoS parameters\n')
    net.addLink(h1, s1, cls=TCLink, bw=1000, delay='1ms', loss=1)
    net.addLink(h2, s1, cls=TCLink, bw=100, delay='1ms', loss=1)
    net.addLink(h3, s1, cls=TCLink, bw=50, delay='1ms', loss=1)
    net.addLink(h4, s1, cls=TCLink, bw=10, delay='1ms', loss=1)
    net.addLink(h5, s1, cls=TCLink, bw=5, delay='1ms', loss=1)
    net.addLink(h6, s1, cls=TCLink, bw=1, delay='1ms', loss=1)

    info('*** Starting network\n')
    net.start()
    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    myNetwork()

可能还需要注意的是,如果我在 miniedit 中创建网络(将控制器设置为 RemoteController 并输入其 IP),当打开 h1 的终端时,我可以完全 ping h2。第二次我保存 l2 脚本,关闭 miniedit 并尝试 运行 带有 sudo python/2/3 l2script.py 的脚本,none 主机可以再次相互 ping。

任何帮助将不胜感激,因为我终其一生都无法弄清楚问题出在哪里。这几天一直在摸不着头脑。

干杯,玩得开心!

编辑

我在 s0 上 运行 wireshark,每当我尝试 ping 时,都会收到大量 ARP 请求,但从未发出响应。

我已经解决了我的问题。

事实证明,我发布的代码永远无法工作 (afaik)。 在我之前尝试过的版本中,我使用 s1 = net.addSwitch('s1', cls=OVSKernelSwitch, protocol='OpenFlow13') 声明了 s0,我应该在 s1 = net.addSwitch('s1', cls=OVSKernelSwitch, protocols='OpenFlow13') 中声明(在 protocols='OpenFlow13'.

末尾漏掉了一个 s