我正在尝试建立一个包含一台连接到三台主机的交换机的小型网络拓扑。下面的代码做同样的事情,并且很好地显示了拓扑。但是我知道,host.cmd都没有生效。如果我将命令复制粘贴到设备控制台上,则它们可以正常工作。
下面的命令不起作用:
h1.cmd('ifconfig lo 122.1.1.1 netmask 255.255.255.255')
类似地,以下命令在接口上配置mac,但未配置IP。
link_h1s1.intf1.config(ip='100.168.0.1/24', mac = '00:00:00:00:00:01')
如果是主机,则看起来像问题。在程序的最后,我粘贴了输出拓扑。
与mininet pls帮助一起工作的人专家
from mininet.net import Mininet
from mininet.node import Controller, OVSKernelSwitch, UserSwitch, DefaultController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, TCLink
#reference : http://intronetworks.cs.luc.edu/current/html/mininet.html
def topology():
net = Mininet()
#Add Controller to the Topology
c0 = net.addController( 'c0',
controller=DefaultController)
# Add hosts and switches
h1 = net.addHost( 'h1')
h2 = net.addHost( 'h2')
h3 = net.addHost( 'h3')
#Add L2 Switch
s1 = net.addSwitch( 's1')
#Add links
link_h1s1 = net.addLink( h1, s1 , intfName1 = 'h1-s1', intfName2 = 's1-h1')
link_h2s1 = net.addLink( h2, s1 , intfName1 = 'h2-s1', intfName2 = 's1-h2')
link_h3s1 = net.addLink( h3, s1 , intfName1 = 'h3-s1', intfName2 = 's1-h3')
link_h1s1.intf1.config(ip='100.168.0.1/24', mac = '00:00:00:00:00:01')
link_h2s1.intf1.config(ip='100.168.0.2/24', mac = '00:00:00:00:00:02')
link_h3s1.intf1.config(ip='100.168.0.3/24', mac = '00:00:00:00:00:03')
link_h1s1.intf2.config(ip=None, mac = '00:00:00:00:00:04')
link_h2s1.intf2.config(ip=None, mac = '00:00:00:00:00:05')
link_h3s1.intf2.config(ip=None, mac = '00:00:00:00:00:06')
#h1.setIP('122.1.1.1/32')
h1.cmd('ifconfig h1-s1 100.168.0.1 netmask 255.255.255.0')
h2.cmd('ifconfig h2-s1 100.168.0.2 netmask 255.255.255.0')
h3.cmd('ifconfig h3-s1 100.168.0.3 netmask 255.255.255.0')
#Setting lo IP addresses
h1.cmd('ifconfig lo 122.1.1.1 netmask 255.255.255.255')
h2.cmd('ifconfig lo 122.1.1.2 netmask 255.255.255.255')
h3.cmd('ifconfig lo 122.1.1.3 netmask 255.255.255.255')
#finished building the Topology
net.build()
#Star the Controller
#c0.start()
#start the Switches
#s1.start( [c0] )
net.start()
print "*** Running CLI"
CLI( net )
print "*** Stopping network"
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
topology()
主机h1的输出
mininet> h1 ifconfig
h1-s1 Link encap:Ethernet HWaddr 00:00:00:00:00:01
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0 << default IP 10.1.1.1/8 is taken
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.255.255.255 << Default loopback addr is taken
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
您应该在运行命令之前构建网络
from mininet.net import Mininet
from mininet.node import Controller, OVSKernelSwitch, UserSwitch, DefaultController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, TCLink
#reference : http://intronetworks.cs.luc.edu/current/html/mininet.html
def topology():
net = Mininet()
#Add Controller to the Topology
c0 = net.addController( 'c0',
controller=DefaultController)
# Add hosts and switches
h1 = net.addHost( 'h1')
h2 = net.addHost( 'h2')
h3 = net.addHost( 'h3')
#Add L2 Switch
s1 = net.addSwitch( 's1')
#Add links
link_h1s1 = net.addLink( h1, s1 , intfName1 = 'h1-s1', intfName2 = 's1-h1')
link_h2s1 = net.addLink( h2, s1 , intfName1 = 'h2-s1', intfName2 = 's1-h2')
link_h3s1 = net.addLink( h3, s1 , intfName1 = 'h3-s1', intfName2 = 's1-h3')
link_h1s1.intf1.config(ip='100.168.0.1/24', mac = '00:00:00:00:00:01')
link_h2s1.intf1.config(ip='100.168.0.2/24', mac = '00:00:00:00:00:02')
link_h3s1.intf1.config(ip='100.168.0.3/24', mac = '00:00:00:00:00:03')
link_h1s1.intf2.config(ip=None, mac = '00:00:00:00:00:04')
link_h2s1.intf2.config(ip=None, mac = '00:00:00:00:00:05')
link_h3s1.intf2.config(ip=None, mac = '00:00:00:00:00:06')
net.build()
net.start()
#h1.setIP('122.1.1.1/32')
h1.cmd('ifconfig h1-s1 100.168.0.1 netmask 255.255.255.0')
h2.cmd('ifconfig h2-s1 100.168.0.2 netmask 255.255.255.0')
h3.cmd('ifconfig h3-s1 100.168.0.3 netmask 255.255.255.0')
#Setting lo IP addresses
h1.cmd('ifconfig lo 122.1.1.1 netmask 255.255.255.255')
h2.cmd('ifconfig lo 122.1.1.2 netmask 255.255.255.255')
h3.cmd('ifconfig lo 122.1.1.3 netmask 255.255.255.255')
#Star the Controller
#c0.start()
#start the Switches
#s1.start( [c0] )
print "*** Running CLI"
CLI( net )
print "*** Stopping network"
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
topology()
输出:
root@grisou-50:~/mininet# python test.py
*** Configuring hosts
h1 h2 h3
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Running CLI
*** Starting CLI:
mininet> ifconfig
*** Unknown command: ifconfig
mininet> h1 ifconfig
h1-s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 100.168.0.1 netmask 255.255.255.0 broadcast 100.168.0.255
inet6 fe80::200:ff:fe00:1 prefixlen 64 scopeid 0x20<link>
ether 00:00:00:00:00:01 txqueuelen 1000 (Ethernet)
RX packets 19 bytes 1626 (1.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 806 (806.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 122.1.1.1 netmask 255.255.255.255
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
mininet>
最干净的解决方案是直接在addHost函数中设置主机的Ip。在这种情况下,如果您从CLI调用转储,则应该看到正确设置了Ips。
from mininet.net import Mininet
from mininet.node import Controller, OVSKernelSwitch, UserSwitch, DefaultController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, TCLink
#reference : http://intronetworks.cs.luc.edu/current/html/mininet.html
def topology():
net = Mininet()
#Add Controller to the Topology
c0 = net.addController( 'c0',
controller=DefaultController)
# Add hosts and switches
h1 = net.addHost( 'h1', ip='100.168.0.1/24', mac = '00:00:00:00:00:01')
h2 = net.addHost( 'h2', ip='100.168.0.2/24', mac = '00:00:00:00:00:02')
h3 = net.addHost( 'h3', ip='100.168.0.3/24', mac = '00:00:00:00:00:03')
#Add L2 Switch
s1 = net.addSwitch( 's1')
#Add links
link_h1s1 = net.addLink( h1, s1 , intfName1 = 'h1-s1', intfName2 = 's1-h1')
link_h2s1 = net.addLink( h2, s1 , intfName1 = 'h2-s1', intfName2 = 's1-h2')
link_h3s1 = net.addLink( h3, s1 , intfName1 = 'h3-s1', intfName2 = 's1-h3')
link_h1s1.intf2.config(ip=None, mac = '00:00:00:00:00:04')
link_h2s1.intf2.config(ip=None, mac = '00:00:00:00:00:05')
link_h3s1.intf2.config(ip=None, mac = '00:00:00:00:00:06')
net.build()
net.start()
#Setting lo IP addresses
h1.cmd('ifconfig lo 122.1.1.1 netmask 255.255.255.255')
h2.cmd('ifconfig lo 122.1.1.2 netmask 255.255.255.255')
h3.cmd('ifconfig lo 122.1.1.3 netmask 255.255.255.255')
#Star the Controller
#c0.start()
#start the Switches
#s1.start( [c0] )
print "*** Running CLI"
CLI( net )
print "*** Stopping network"
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
topology()