Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';迷你网路由器';对象没有属性';名称';_Python_Networking_Mininet - Fatal编程技术网

Python 属性错误:';迷你网路由器';对象没有属性';名称';

Python 属性错误:';迷你网路由器';对象没有属性';名称';,python,networking,mininet,Python,Networking,Mininet,看起来问题更多的是Python而不是Mininet 我正在尝试使用mininet构建客户网络拓扑,但仍停留在这里 当我运行下面的代码时,我得到下面的错误 Traceback (most recent call last): File "CustomTopo_Router2.py", line 37, in <module> customTopo = NetworkTopo() File "CustomTopo_Router2.py", line 28, in __in

看起来问题更多的是Python而不是Mininet

我正在尝试使用mininet构建客户网络拓扑,但仍停留在这里

当我运行下面的代码时,我得到下面的错误

Traceback (most recent call last):
  File "CustomTopo_Router2.py", line 37, in <module>
    customTopo = NetworkTopo()
  File "CustomTopo_Router2.py", line 28, in __init__
    r1_obj = MininetRouter('122.1.1.1')
  File "CustomTopo_Router2.py", line 12, in __init__
    self.cmd('sysctl net.ipv4.ip_forward=1')
  File "build/bdist.linux-x86_64/egg/mininet/node.py", line 353, in cmd
AttributeError: 'MininetRouter' object has no attribute 'name'
我怎么会在这里?我已经把缩进画错了。
PS:几年后,我正在编写python代码。

我对代码做了一些修改,以使其工作起来更符合Mininet API。这应该是有效的,因为你正在尝试去做。 请注意,我没有安装控制器,因为我没有安装它,但您可以使用Openflow控制器、RemoteController等。 我希望这对你有用

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel, info
from mininet.cli import CLI

class MininetRouterModified( Node ):
    "A Node with IP forwarding enabled."

    def config( self, loo_addr, **params ):
        super( MininetRouterModified, self).config( **params )
        # Enable forwarding on the router
        # Create Loopback Interface and Assign Loopback Address to the Router
        # All loopback addresses have mask 32
        loo_config = 'ifconfig lo:1 ' + loo_addr + ' netmask 255.255.255.255 up'
        self.cmd(loo_config)
        self.cmd( 'sysctl net.ipv4.ip_forward=1' )

    def terminate( self ):
        self.cmd( 'sysctl net.ipv4.ip_forward=0' )
        super( MininetRouterModified, self ).terminate()

class NetworkTopo( Topo ):

    def build(self, **_opts):

        # Create a Router Object
        #r1_obj = MininetRouter('122.1.1.1', name="r1")
        # Add Router object to the topology
        r1 = self.addNode(name='r1',loo_addr='122.1.1.1', cls=MininetRouterModified)


if __name__ == '__main__':
    customTopo = NetworkTopo()

    #Get handle to net to manage your topology
    net = Mininet(topo=customTopo, controller=None)

    #start/deploy the Topology
    net.start()

    #Get Halt at Mininet CLI prompt
    CLI(net)

    #Destroy and stop the topology
    net.stop()

我对代码做了一些修改,以使其工作起来更符合mininetapi。这应该是有效的,因为你正在尝试去做。 请注意,我没有安装控制器,因为我没有安装它,但您可以使用Openflow控制器、RemoteController等。 我希望这对你有用

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel, info
from mininet.cli import CLI

class MininetRouterModified( Node ):
    "A Node with IP forwarding enabled."

    def config( self, loo_addr, **params ):
        super( MininetRouterModified, self).config( **params )
        # Enable forwarding on the router
        # Create Loopback Interface and Assign Loopback Address to the Router
        # All loopback addresses have mask 32
        loo_config = 'ifconfig lo:1 ' + loo_addr + ' netmask 255.255.255.255 up'
        self.cmd(loo_config)
        self.cmd( 'sysctl net.ipv4.ip_forward=1' )

    def terminate( self ):
        self.cmd( 'sysctl net.ipv4.ip_forward=0' )
        super( MininetRouterModified, self ).terminate()

class NetworkTopo( Topo ):

    def build(self, **_opts):

        # Create a Router Object
        #r1_obj = MininetRouter('122.1.1.1', name="r1")
        # Add Router object to the topology
        r1 = self.addNode(name='r1',loo_addr='122.1.1.1', cls=MininetRouterModified)


if __name__ == '__main__':
    customTopo = NetworkTopo()

    #Get handle to net to manage your topology
    net = Mininet(topo=customTopo, controller=None)

    #start/deploy the Topology
    net.start()

    #Get Halt at Mininet CLI prompt
    CLI(net)

    #Destroy and stop the topology
    net.stop()

迷你网路由器
继承自
节点
,并在
初始化中调用
self.cmd
。我假设该方法是从
节点
继承的。问题是,您从未调用过
节点的
\uuuu init\uuuu
。我猜类实例没有正确设置。在调用任何继承的方法之前,应该先执行
super()。\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
行作为两个类的构造函数中的第一行。但同样的错误。我正在运行Python2.7.6。这个线程提到了在Python2.7.x
mininetwrouter
中使用super的语法,它继承自
节点
,并在
中调用
self.cmd
。我假设该方法是从
节点
继承的。问题是,您从未调用过
节点的
\uuuu init\uuuu
。我猜类实例没有正确设置。在调用任何继承的方法之前,应该先执行
super()。\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
行作为两个类的构造函数中的第一行。但同样的错误。我正在运行Python2.7.6。这个线程提到了在Python2.7.x中使用super的语法