Python 无法在Mininet中设置IP地址
我不熟悉Python和Mininet。我一直在尝试使用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
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')