2014-06-09 6 views
6

Ich erhalte einen TypeError im folgenden Python-Programm, in dem der Konstruktor aufgerufen wird. Wenn ich das Verzögerungsargument entferne, bekomme ich den gleichen Fehler mit "bw". Ich kann den Fehler nicht verstehen. Bitte helfen Sie.TypeError: __ init __() hat ein unerwartetes Schlüsselwortargument 'delay' erhalten

Ich versuche, eine Netzwerk-Topologie mit Python zu erstellen.

#!/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 CustomTopo(Topo): 

    def __init__(self, linkopts1, linkopts2, linkopts3, fanout=2, **opts): 
     # Initialize topology and default options 
     Topo.__init__(self, **opts) 

     # Add your logic here ... 
     switch=self.addSwitch('c1') 

     self.linkopts1=linkopts1 
     self.linkopts2=linkopts2 
     self.linkopts3=linkopts3 

     self.fanout=fanout 
     n=0 

     for i in irange(1,fanout): 
       s=self.addSwitch('a%s' % i) 
       self.addLink(switch,s,**linkopts1) 

       if i==1: 
         n=0 
       else: 
         n=1 
       for j in irange(1,fanout): 
         if n==0: 
           sw=self.addSwitch('e%s' % j)    #To generate labels e1, e2, e3 and e4: 
         else:            #if n=0, edge switches e1 and e2 are added to a1 
           sw=self.addSwitch('e%s' % (j+2))   #if n=1, edge switched e3 and e4 are added to a2 
         self.addLink(s,sw,**linkopts2) 

         for k in irange(1,fanout): 
           if ((j==1)&(n==0)): 
             host=self.addHost('h%s' % k)  #For edge switch e1, j=1,n=0. End-hosts are h1 and h2. 
           elif ((j==2)&(n==0)): 
             host=self.addHost('h%s' % (k+2)) #For edge switch e2, j=2,n=0. End-hosts are h3 and h4. 
           elif ((j==1)&(n==1)): 
             host=self.addHost('h%s' % (k+4)) #For edge switch e3, j=1,n=1. End-hosts are h5 and h6. 
           elif ((j==2)&(n==1)): 
             host=self.addHost('h%s' % (k+6)) #For edge switch e4, j=2,n=1. End-hosts are h7 and h8. 
           self.addLink(sw,host,**linkopts3) 


def treeTest(): 
     linkopts1=dict(bw=10, delay='5ms') 
     linkopts2=dict(bw=10, delay='5ms') 
     linkopts3=dict(bw=10, delay='5ms') 
     topo=CustomTopo(linkopts1,linkopts2,linkopts3,fanout=2) 
     net=Mininet(topo) 
     net.start() 
     print "Dumping node connections" 
     dumpNodeConnections(net.hosts) 
     print "Testing network connectivity" 
     net.pingAll() 
     net.stop() 

if __name__=='__main__': 
     setLogLevel('info') 
     treeTest() 



topos = { 'custom': (lambda: CustomTopo()) } 

Die Fehler Spur Ich erhalte ist:

Traceback (most recent call last): 
    File "CustomTopo.py", line 70, in <module> 
    treeTest() 
    File "CustomTopo.py", line 60, in treeTest 
    net=Mininet(topo) 
    File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 164, in __init__ 
    self.build() 
    File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 357, in build 
    self.buildFromTopo(self.topo) 
    File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 344, in buildFromTopo 
    self.addLink(src, dst, srcPort, dstPort, **params) 
    File "/usr/local/lib/python2.7/dist-packages/mininet-2.1.0-py2.7.egg/mininet/net.py", line 287, in addLink 
    return cls(node1, node2, **defaults) 
TypeError: __init__() got an unexpected keyword argument 'delay' 
+0

Bitte posten Sie die tatsächliche Python-Ablaufverfolgung. –

+0

Der Fehler Trace wurde hinzugefügt. – user3033194

+1

Der Fehler ist irgendwo in der Methode 'addLink', aber es ist nicht in den Code eingefügt – yedpodtrzitko

Antwort

0

Entweder in MININET oder ich vermute OpenVswitch ein Objekt eines Ihrer linkopts mit bw übergeben werden und als Keyword-Argumente verzögern. Dieses Objekt erwartet jedoch nicht die von Ihnen verwendeten Schlüsselwortparameter. Vielleicht haben Sie eine Versionsabweichung zwischen mininet und openvswitch? Ich sehe die BW und Verzögerung in dem aktuellen Beispiel aufgelistet, aber ich habe nicht die Domain-Erfahrung zu wissen, ob sie alte Referenzen sind oder Sie ältere Bibliotheken haben.

Leider erfordert das Ausprobieren Ihres Snippets viel mehr Konfigurationsmöglichkeiten als für die Zeit. Ich versuchte einfach "apt-get openvswitch-controller python-openvswitch", aber ich konnte es nicht laufen lassen.

15

Denken Sie daran, den Linktyp als tc festzulegen.

es in Ihrem Skript angeben, wie unten dargestellt:

net = Mininet(topo=topo, link=TCLink) 

Denken Sie daran, tclink in Ihrem Python-Skript zu importieren:

from mininet.link import TCLink 

Wenn stattdessen Sie MININET von der Eingabeaufforderung aufrufen möchten, Setzen Sie dann den Parameter --link wie folgt:

sudo mn --custom custom.py --topo customtopo --link tc 
+0

Sie da Mann! ;) @Jefferson – RageAgainstTheMachine

Verwandte Themen