Ошибка трассировки (последний вызов был последним) в программно-определяемой сети RYU
Я получаю следующую ошибку:
Traceback (последний вызов был последним):
Файл "./ryuLinearTopo.py", строка 6, в
Класс LinearTopo (Topo):
Файл "./ryuLinearTopo.py", строка 32, в LinearTopo
SimpleTest ()
Файл "./ryuLinearTopo.py", строка 21, в simpleTest
topo = LinearTopo (k = 4)
NameError: глобальное имя 'LinearTopo' не определено
Когда я запускаю следующий код:
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel
class LinearTopo(Topo):
def __init__(self, k=2, **opts):
super(LinearTopo, self).__init__(**opts)
self.k = k
lastSwitch = None
for i in irange(1, k):
host = self.addHost('h%s' % i)
switch = self.addSwitch('s%s' % i)
self.addLink( host, switch)
if lastSwitch:
self.addLink( switch, lastSwitch)
lastSwitch = switch
def simpleTest():
topo = LinearTopo(k=4)
net = Mininet(topo)
net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
net.stop()
if __name__ == '__main__':
# Tell mininet to print useful information
setLogLevel('info')
simpleTest()
1 ответ
У вас проблемы с идентификацией. В вашем коде все методы определены внутри вашего класса LinearTopo. Вы хотите определить их вне области класса следующим образом:
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel
class LinearTopo(Topo):
def __init__(self, k=2, **opts):
super(LinearTopo, self).__init__(**opts)
self.k = k
lastSwitch = None
for i in irange(1, k):
host = self.addHost('h%s' % i)
switch = self.addSwitch('s%s' % i)
self.addLink( host, switch)
if lastSwitch:
self.addLink( switch, lastSwitch)
lastSwitch = switch
def simpleTest():
topo = LinearTopo(k=4)
net = Mininet(topo)
net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
net.stop()
if __name__ == '__main__':
# Tell mininet to print useful information
simpleTest()
setLogLevel('info')
Этот вопрос должен был быть помечен как мининет, а не как Рю, так как это строго вопрос, связанный с мининетом.