Linux shell cmd不适用于mininet主机

问题描述 投票:0回答:1

我正在尝试建立一个包含一台连接到三台主机的交换机的小型网络拓扑。下面的代码做同样的事情,并且很好地显示了拓扑。但是我知道,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)
networking tcp routes mininet
1个回答
1
投票

您应该在运行命令之前构建网络

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()
© www.soinside.com 2019 - 2024. All rights reserved.