断开OF开关和非OF开关

时间:2015-06-18 11:58:29

标签: ping mininet openvswitch stp

在给定的拓扑中,只有s3和s4是OFSwitch,其他是非OF开关。对于Non-OF交换机,我在超类Switch下创建了一个L2_switch子类,类似于启用了stp的LinuxBridge(nodelib.py)。

                           h2
                           |
                           s7
                           |
                           s3
                         /    \
                        /      \
h1--------s1-----------s2      s5----------h3
                        \      /
                         \    /
                           s4
                           |
                           s6
                           |
                           h4

这里只有h2和h4能够相互ping通。其他主机无法ping通。 为什么呢?

但是将s2和s5更改为OF-Switch所有主机都可以相互ping通。为什么呢?

这是我的代码:

def myNetwork():

net = Mininet( topo=None,
               listenPort=6633,
               build=False,
               ipBase='10.0.0.0/8')

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

info( '*** Add switches\n')
s3 = net.addSwitch('s3', cls=OVSKernelSwitch)
s5 = net.addSwitch('s5', cls=L2_switch) #OVSKernelSwitch)
s7 = net.addSwitch('s7', cls=L2_switch) #OVSKernelSwitch)
s2 = net.addSwitch('s2', cls=L2_switch) #OVSKernelSwitch)
s4 = net.addSwitch('s4', cls=OVSKernelSwitch)
s1 = net.addSwitch('s1', cls=L2_switch) #OVSKernelSwitch)
s6 = net.addSwitch('s6', cls=L2_switch) #OVSKernelSwitch)

info( '*** Add hosts\n')
h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)

info( '*** Add links\n')
net.addLink(h1, s1)
net.addLink(s1, s2)
net.addLink(s2, s3)
net.addLink(s7, s3)
net.addLink(h2, s7)
net.addLink(s3, s5)
net.addLink(s4, s5)
net.addLink(s4, s6)
net.addLink(s6, h4)
net.addLink(s5, h3)
net.addLink(s2, s4)

info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
    controller.start()

info( '*** Starting switches\n')
net.get('s3').start([c0])
net.get('s5').start([])
net.get('s7').start([])
net.get('s2').start([])
net.get('s4').start([c0])
net.get('s1').start([])
net.get('s6').start([])

info( '*** Post configure switches and hosts\n')

CLI(net)
net.stop()

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

1 个答案:

答案 0 :(得分:0)

我也有这个问题!解决方案是在控制器中使用生成树模块。 如果使用Ryu控制器,则此模块位于路径ryu/ryu/app/simple_switch_stp_13.py中。

但是要注意!此模块是通过 3开关实现的,但是您具有 6开关。因此,您应该在该模块中添加 3开关并更改配置!