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

2024-10-02 18:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我缺少某种路由配置吗?我必须手动创建路径和路由吗?我以为是管制员自己干的。在

我使用的代码是从examples文件夹中重新设计的,注释的代码是阻止主机相互联系的原因:

#!/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()

我错过了什么?在


Tags: thefrominfonetnetworkstartc1mininet
2条回答

这是因为Mininet在网络仿真中不支持循环。阅读关于生成树算法的this link来克服这个问题。另请参见here。在

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

{a1}

例如:

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

相关问题 更多 >