2016-04-29 24 views
1

私はMininetで--customオプションで.pyスクリプトを実行しようとしています。次のように私のコードは次のとおりです。Mininetでsudo mn --customオプションを実行するには?

from mininet.topo import Topo 
from mininet.net import Mininet 
from mininet.util import dumpNodeConnections 
from mininet.log import setLogLevel 
from mininet.util import irange 

class LinearTopo(Topo): 
    "Linear topology of k switches, with n hosts per switch." 

    def build(self, k=2, n=1, **_opts): 
     """k: number of switches 
      n: number of hosts per switch""" 
     self.k = k 
     self.n = n 

     if n == 1: 
      genHostName = lambda i, j: 'h%s' % i 
     else: 
      genHostName = lambda i, j: 'h%ss%d' % (j, i) 

     lastSwitch = None 
     for i in irange(1, k): 
      # Add switch 
      switch = self.addSwitch('s%s' % i) 
      # Add hosts to switch 
      for j in irange(1, n): 
       host = self.addHost(genHostName(i, j)) 
       self.addLink(host, switch) 
      # Connect switch to previous 
      if lastSwitch: 
       self.addLink(switch, lastSwitch) 
      lastSwitch = switch 


def simpleTest(): 
     "Create and test a simple network" 
     topo = LinearTopo(k=4,n=8) 
     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() 

私がしようとすると:

sudo mn --custom topo.py --topo LinearTopo 

私は次のエラーを取得する:無効なトポ名:

*** Cleanup complete. 
[email protected]:~$ sudo mn --custom topo.py --topo LinearTopo 
-------------------------------------------------------------------------------- 
Caught exception. Cleaning up... 

Exception: Invalid topo name LinearTopo 
-------------------------------------------------------------------------------- 
*** 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 datapaths 
ovs-vsctl --timeout=1 list-br 
ovs-vsctl --timeout=1 list-br 
*** Removing all links of the pattern foo-ethX 
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)' 
ip link show 
*** Killing stale mininet node processes 
pkill -9 -f mininet: 
*** Shutting down stale tunnels 
pkill -9 -f Tunnel=Ethernet 
pkill -9 -f .ssh/mn 
rm -f ~/.ssh/mn/* 
*** Cleanup complete. 

あなたはなぜ、GETエラーを教えてもらえます?

答えて

1

今、あなたはあなたが書かれていた上記のプログラムは、直接場合

sudo python <file_name>.py 

を使用して実行することができます

sudo mn --custom topo.py --topo LinearTopo 

を実行することができ

TOPOS = {'LinearTopo' : (lambda : LinearTopo())} 

インデントがあってはならないdef前の行を追加します。値を持つsudo mnを使用して実行し、コードを更新する必要があります下に示すように

TOPOS = {'LinearTopo' : (lambda : LinearTopo(4,5))} 
+0

非常にありがとうKarthik! – KristinaP

+0

もう1つ質問があります。 def simpleTest()で指定されているように、k = 4スイッチとn = 8ホストではなく、なぜトポロジ広告だけがk = 2スイッチとn = 1ホストであるのか知っていますか? def simpleTest()の前と後にTOPOSを追加しようとしましたが、結果は同じです。 – KristinaP

+0

@KristinaP更新された回答を参照してください –

関連する問題