Mininet 主机无法连接主机之间的多个链接

Mininet hosts can't connect with multiple links between hosts

我正在尝试在 mininet 中创建拓扑,但是如果主机有两条路径通过不同的交换机,则主机无法相互连接。

我是否缺少某种路由配置?我必须手动创建路径和路由吗?我假设控制器是自己做的。

我使用的代码是从示例文件夹中改用的,注释代码是防止主机相互访问的代码:

#!/usr/bin/python

"""
This example creates a multi-controller network from semi-scratch by
using the net.add*() API and manually starting the switches and controllers.

This is the "mid-level" API, which is an alternative to the "high-level"
Topo() API which supports parametrized topology classes.

Note that one could also create a custom switch class and pass it into
the Mininet() constructor.
"""


from mininet.net import Mininet
from mininet.node import Controller, OVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info

def multiControllerNet():
    "Create a network from semi-scratch with multiple controllers."

    net = Mininet( controller=Controller, switch=OVSSwitch )

    info( "*** Creating (reference) controllers\n" )
    c1 = net.addController( 'c1', port=6633 )

    info( "*** Creating switches\n" )
    sw1 = net.addSwitch('s1')
    sw2 = net.addSwitch('s2')
    sw3 = net.addSwitch('s3')
    sw4 = net.addSwitch('s4')
    sw5 = net.addSwitch('s5')

    info( "*** Creating hosts\n" )
    cl1 = net.addHost('c1')
    cl2 = net.addHost('c2')

    arca = net.addHost('arca')

    ag1 = net.addHost('ag1')
    ag2 = net.addHost('ag2')
    ag3 = net.addHost('ag3')

    tr1 = net.addHost('tr1')
    tr2 = net.addHost('tr2')

    info( "*** Creating links\n" )
    net.addLink(cl1, sw1)
    net.addLink(cl2, sw3)
    net.addLink(arca, sw5)
    # traffic generators                
    net.addLink(tr1, sw1)
    net.addLink(tr2, sw5)
    # aggregators
    net.addLink(ag1, sw2)
    net.addLink(ag2, sw2)
    net.addLink(ag2, sw4)
    net.addLink(ag3, sw4)

    net.addLink(sw1, tr1)
    net.addLink(sw5, tr2)

    net.addLink(sw1, sw2)
    #net.addLink(sw1, sw3)
    net.addLink(sw2, sw3)
    net.addLink(sw3, sw4)
    #net.addLink(sw3, sw5)
    net.addLink(sw4, sw5)

    info( "*** Starting network\n" )
    net.build()
    c1.start()
    sw1.start( [ c1 ] )
    sw2.start( [ c1 ] )
    sw3.start( [ c1 ] )
    sw4.start( [ c1 ] )
    sw5.start( [ c1 ] )

    info( "*** Testing network\n" )
    net.pingAll()

    info( "*** Starting apps\n" )

    info( "*** Running CLI\n" )
    CLI( net )

    info( "*** Stopping network\n" )
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )  # for CLI output
    multiControllerNet()

我在这里错过了什么?

发生这种情况是因为 Mininet 不能理想地支持网络仿真中的循环。阅读 this link about Spanning Tree Algorithm in order to overcome this problem. Also see here.

stp 可以通过 python 从 OVSSwitch 对象启用:

http://mininet.org/api/classmininet_1_1node_1_1OVSSwitch.html

例如:

s1 = net.addSwitch( 's1', failmode='standalone', stp=True)