linux shell cmd 不适用于 mininet 主机
linux shell cmd is not working for mininet host
我正在尝试设置一个 mininet 拓扑结构,其中包含一个连接到三个主机的交换机。下面的代码做了完全相同的事情,并很好地显示了拓扑。但是我看到,host.cmd的none正在生效。如果我在设备控制台上复制粘贴命令,那么它们工作正常。
下面的命令不起作用:
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 的专家帮助
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()
我正在尝试设置一个 mininet 拓扑结构,其中包含一个连接到三个主机的交换机。下面的代码做了完全相同的事情,并很好地显示了拓扑。但是我看到,host.cmd的none正在生效。如果我在设备控制台上复制粘贴命令,那么它们工作正常。
下面的命令不起作用:
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 的专家帮助
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()