![](/img/trans.png)
[英]Hosts can't ping each other on mininet VM with custom topology and OpenDayLight
[英]Mininet Python - Issues With Pinging Other Hosts Within Custom Topology
信息
主机操作系统:Windows 10
第一次尝试来宾操作系统:Min.net-VM
第二次尝试来宾操作系统:Ubuntu(VM)
虚拟机软件:Virtual Box
图书馆:Min.net Python API
问题
再会,
使用 Min.net 时,我的自定义拓扑出现了一些问题。
最初,我使用了 Min.net 推荐的 Min.net-VM,它适用于默认命令生成的拓扑(即:线性、树、反向等)。
但是,当我希望运行自己的拓扑时,我无法 ping 任何其他主机(请参见下面的代码)。
命令:
我认为这可能是 Min.net-VM 本身的图像问题,所以我尝试在 Ubuntu 中运行相同的脚本(当然安装了 Min.net)并遇到了同样的问题。
无论如何,我查看了 stackoverflow(下面的参考资料),没有一个解决方案适合我。 虽然有些人建议使用 POX controller 而不是默认的,但我对它的工作原理和实现方式一无所知。
任何帮助,将不胜感激。
干杯!
结果
拓扑图
中级API代码
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.node import Controller
net = Mininet(controller=Controller, link=TCLink)
h1 = net.addHost('h1')
h2 = net.addHost('h2')
h3 = net.addHost('h3')
h4 = net.addHost('h4')
h5 = net.addHost('h5')
h6 = net.addHost('h6')
h7 = net.addHost('h7')
h8 = net.addHost('h8')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3')
s4 = net.addSwitch('s4')
s5 = net.addSwitch('s5')
s6 = net.addSwitch('s6')
c0 = net.addController('c0')
net.addLink(h1, s1)
net.addLink(h2, s2)
net.addLink(h3, s3)
net.addLink(h4, s4)
net.addLink(h5, s4)
net.addLink(h6, s5)
net.addLink(h7, s5)
net.addLink(h8, s6)
net.addLink(s1, s2, bw=10, delay='0ms')
net.addLink(s2, s3, bw=10, delay='0ms')
net.addLink(s3, s4, bw=100, delay='5ms')
net.addLink(s4, s5, bw=100, delay='5ms')
net.addLink(s5, s6, bw=100, delay='0ms')
net.addLink(s6, s1, bw=10, delay='0ms')
net.start()
print( "Dumping host connections" )
dumpNodeConnections( net.hosts )
dumpNodeConnections( net.switches )
CLI(net)
net.stop()
参考
问题:Min.net 中的默认值 controller 无法处理拓扑中的循环。 要解决此问题,我们需要使用 POX controller 和一些额外的开关配置。
您将需要运行两个终端:
请查看参考文献#5 和#6,它们显示了一些不错的示例
代码解决方案
from mininet.net import Mininet
from mininet.node import Controller, RemoteController,
OVSKernelSwitch, UserSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.link import Link, TCLink
def topology():
"Create a network."
net = Mininet( controller=RemoteController, link=TCLink,
switch=OVSKernelSwitch )
print("*** Creating nodes")
h1 = net.addHost( 'h1', mac='00:00:00:00:00:01', ip='10.0.0.1/24' )
h2 = net.addHost( 'h2', mac='00:00:00:00:00:02', ip='10.0.0.2/24' )
h3 = net.addHost( 'h3', mac='00:00:00:00:00:03', ip='10.0.0.3/24' )
h4 = net.addHost( 'h4', mac='00:00:00:00:00:04', ip='10.0.0.4/24' )
h5 = net.addHost( 'h5', mac='00:00:00:00:00:05', ip='10.0.0.5/24' )
h6 = net.addHost( 'h6', mac='00:00:00:00:00:06', ip='10.0.0.6/24' )
h7 = net.addHost( 'h7', mac='00:00:00:00:00:07', ip='10.0.0.7/24' )
h8 = net.addHost( 'h8', mac='00:00:00:00:00:08', ip='10.0.0.8/24' )
s1 = net.addSwitch( 's1' )
s2 = net.addSwitch( 's2' )
s3 = net.addSwitch( 's3' )
s4 = net.addSwitch( 's4' )
s5 = net.addSwitch( 's5' )
s6 = net.addSwitch( 's6' )
c7 = net.addController( 'c7', controller=RemoteController,
ip='127.0.0.1', port=6633 )
print("*** Creating links")
net.addLink( h1, s1 )
net.addLink( h2, s2 )
net.addLink( h3, s3 )
net.addLink( h4, s4 )
net.addLink( h5, s4 )
net.addLink( h6, s5 )
net.addLink( h7, s5 )
net.addLink( h8, s6 )
net.addLink( s1, s2, cls=TCLink, bw=10 )
net.addLink( s2, s3, cls=TCLink, bw=10 )
net.addLink( s3, s4, cls=TCLink, bw=100, delay='5ms' )
net.addLink( s4, s5, cls=TCLink, bw=100, delay='5ms' )
net.addLink( s5, s6, cls=TCLink, bw=100 )
net.addLink( s6, s1, cls=TCLink, bw=10 )
print("*** Starting network")
net.build()
c7.start()
s1.start( [c7] )
s2.start( [c7] )
s3.start( [c7] )
s4.start( [c7] )
s5.start( [c7] )
s6.start( [c7] )
# Configuring switches
s1.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.1.0/24,actions=output:1")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.2.0/24,actions=output:2")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.3.0/24,actions=output:3")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.4.0/24,actions=output:3")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.5.0/24,actions=output:3")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.6.0/24,actions=output:2")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.7.0/24,actions=output:2")
s1.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.8.0/24,actions=output:2")
s2.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s2.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.1.0/24,actions=output:3")
s2.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.2.0/24,actions=output:1")
s2.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.3.0/24,actions=output:2")
s2.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.4.0/24,actions=output:2")
s2.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.5.0/24,actions=output:2")
s2.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.6.0/24,actions=output:3")
s2.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.7.0/24,actions=output:3")
s2.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.8.0/24,actions=output:3")
s3.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.1.0/24,actions=output:3")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.2.0/24,actions=output:3")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.3.0/24,actions=output:1")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.4.0/24,actions=output:2")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.5.0/24,actions=output:2")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.6.0/24,actions=output:2")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.7.0/24,actions=output:2")
s3.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.8.0/24,actions=output:3")
s4.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.1.0/24,actions=output:2")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.2.0/24,actions=output:2")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.3.0/24,actions=output:2")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.4.0/24,actions=output:1")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.5.0/24,actions=output:4")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.6.0/24,actions=output:3")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.7.0/24,actions=output:3")
s4.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.8.0/24,actions=output:3")
s5.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.1.0/24,actions=output:3")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.2.0/24,actions=output:3")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.3.0/24,actions=output:3")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.4.0/24,actions=output:2")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.5.0/24,actions=output:2")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.6.0/24,actions=output:1")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.7.0/24,actions=output:4")
s5.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.8.0/24,actions=output:3")
s6.cmd("sh ovs-ofctl add-flow s1 priority=1,arp,actions=flood")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.1.0/24,actions=output:3")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.2.0/24,actions=output:3")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.3.0/24,actions=output:3")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.4.0/24,actions=output:2")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.5.0/24,actions=output:2")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.6.0/24,actions=output:2")
s6.cmd("ovs-ofctl add-flow s1 priority=10,ip,nw_dst=10.0.7.0/24,actions=output:2")
s6.cmd("ovs-ofctl add-flow s1
priority=10,ip,nw_dst=10.0.8.0/24,actions=output:1")
print("*** Running CLI")
CLI( net )
print("*** Stopping network")
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
topology()
参考
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.