无法在Mininet

时间:2015-10-12 19:13:29

标签: python mininet

我是Python和Mininet的新手。我一直在尝试使用mininet来模拟网络拓扑。我正在尝试为网络中的每台主机分配IP地址,但我收到属性错误。 以下是我的代码

import sys
from mininet.topo import Topo
from mininet.node import Node

class MyTopo(Topo):
    "customized topology example"
    def __init__(self):
        "custom topo creation"
        #initialize topology
        Topo.__init__(self)
        H1=self.addHost('H1')
        H3=self.addHost('H3')
        H2=self.addHost('H2')
        H4=self.addHost('H4')
        S1=self.addSwitch('S1')
        S2=self.addSwitch('S2')

        self.addLink(H1,S1, bw=10, delay='2ms')
        self.addLink(H2,S1, bw=20, delay='10ms')
        self.addLink(H3,S2, bw=10, delay='2ms')
        self.addLink(H4,S2, bw=20, delay='10ms')
        self.addLink(S1,S2, bw=20, delay='2ms', losspct=10)

        H1.setIP(self,None,'10.0.0.1',8)



topos={'mytopo':(lambda:MyTopo())}

我收到以下错误

Caught exception. Cleaning up...
AttributeError: 'str' object has no attribute 'setIp'
-----------------------------------------------------------------------   ---------
*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_core lt-nox_core ovs- openflowd ovs-controller udpbwtest mnexec ivs 2> /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_core lt-nox_core ovs openflowd ovs-controller udpbwtest mnexec ivs 2> /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths                                                                                                                                                
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'                                                                                                                                       
***  Removing OVS datapathsovs-vsctl --timeout=1 list-br                                                                                                                            
*** Removing all links of the pattern foo-ethX                                                                                                                                      
ip link show | egrep -o '(\w+-eth\w+)'                                                                                                                                              
*** Cleanup complete.   

由于

3 个答案:

答案 0 :(得分:2)

问题是,

mininet.topo.Topo.addHost

确实返回主机名(您传递给方法)。 所以你必须使用......像这样:

self.addHost('H1')
selg.g.node['H1'].addLink(...) # maybe the part with the node['H1'] does not fit perfectly...

请查看this了解更多信息。

提示使用大量print()来获取调试信息。 例如:

debug=True
if(debug):print(someinfo)

编辑:

也许您可能想要使用

mininet.topo.Multigraph.add_edge

为此。

答案 1 :(得分:0)

H1确实是一个字符串。您可以做的是获取H1的网络对象,然后尝试设置IP。

net.get('H1').setIP(yourIP)

答案 2 :(得分:0)

MyTopo是用于定义拓扑对象的类。主机是对象属性,在此实例中不是对象。在这种情况下,不能使用(主机类的)setIP方法。

您应该在定义主机时设置IP:

 H1=self.addHost('H1', ip='10.0.0.1/8')