我是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.
由于
答案 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')