Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError:__init__() got an unexpected keyword argument 'delay'

Tags:

python

I am getting a TypeError in the following python program where the constructor is being called. If I remove the delay argument, I get the same error with "bw". I cannot figure out the mistake. Please help.

I am trying to create a network topology using python.

#!/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() ) }

The error trace I am getting is:

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'
like image 687
user3033194 Avatar asked Jun 09 '14 23:06

user3033194


1 Answers

Remember to set the link type as tc.

Specify it in your script as shown below:

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

Remember to import TCLink in your python script:

from mininet.link import TCLink

If, instead, you want to call mininet from the command prompt, then set the --link parameter as follows:

sudo mn --custom custom.py --topo customtopo --link tc
like image 52
Jefferson Avatar answered Sep 16 '22 16:09

Jefferson