Python 无法在Mininet中设置IP地址

Python 无法在Mininet中设置IP地址,python,mininet,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

我不熟悉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.   
谢谢

问题是

mininet.topo.Topo.addHost
返回主机名(您传递给方法)。 所以你必须用这样的东西:

self.addHost('H1')
selg.g.node['H1'].addLink(...) # maybe the part with the node['H1'] does not fit perfectly...
请查看以获取更多信息

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

编辑:

也许你想用

mininet.topo.Multigraph.add_edge

对于这一点。

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


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

MyTopo是一个定义拓扑对象的类。Host是对象属性,而不是此实例中的对象。在此上下文中不能使用(主机类的)setIP方法

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

 H1=self.addHost('H1', ip='10.0.0.1/8')
尝试在
H1=self.addHost('H1')
之后添加一个
print(H1)
,看看它是什么类型的东西。它似乎是一个
str
。我不熟悉mininet,但似乎
setIP
方法是在
Node
对象上定义的。
 H1=self.addHost('H1', ip='10.0.0.1/8')