繁体   English   中英

Min.net Python - ping 自定义拓扑中的其他主机的问题

[英]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 任何其他主机(请参见下面的代码)。

命令:

  1. “sudo python3 custom_topology.py
  2. Min.net>pingall

我认为这可能是 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()

参考

  1. StackOverflow 帖子 1
  2. StackOverflow 帖子 2
  3. StackOverflow 帖子 3
  4. Min.net官方网站

问题:Min.net 中的默认值 controller 无法处理拓扑中的循环。 要解决此问题,我们需要使用 POX controller 和一些额外的开关配置。

您将需要运行两个终端:

  • 一个终端将运行 POX controller as./pox.py forwarding.hub
  • 另一个终端将运行您的自定义拓扑 python 脚本

请查看参考文献#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()

参考

  1. Chih-Heng Ke 博士的帖子 #1
  2. Chih-Heng Ke 博士的帖子 #2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM