【问题标题】:How to use a pox controller with a default controller in Mininet如何在 Mininet 中使用带有默认控制器的 pox 控制器
【发布时间】:2022-11-12 14:08:30
【问题描述】:

我有一个 python 脚本,旨在制作长度为 2 的线性拓扑,带有 2 个控制器:自定义和标准 pox。主机之间的 ping 不起作用,我唯一的提示是:“您可以依赖 L3_learning 组件文档:...”

from mininet.log import setLogLevel, info
from mininet.net import Mininet
from mininet.topolib import TreeTopo
from mininet.cli import CLI
from mininet.node import Controller, OVSSwitch
from os import environ

# DO NOT MODIFY THIS PART 

POXDIR = environ[ 'HOME' ] + '/pox'

class CustomPOX( Controller ):
    "Custom POX() subclass that connects defines the POX component to load"
    def __init__( self, name, cdir=POXDIR,
                  command='python pox.py',
                  cargs=( 'openflow.of_01 --port=%s '
                          'forwarding.l2_learning' ),
                  **kwargs ):
        Controller.__init__( self, name, cdir=cdir,
                             command=command,
                             cargs=cargs, **kwargs )

# controllers={ 'pox': POX }

class CustomSwitch( OVSSwitch ):
    "Custom Switch() subclass that connects to different controllers"
    def start( self, controllers ):
        return OVSSwitch.start( self, [ cmap[ self.name ] ] )


# THIS PART CAN BE CHANGED AND ADAPTED IF REQUIRED 

setLogLevel( 'info' )

def multiControllerNet():
   "Create a network from semi-scratch with multiple controllers."
c1 = CustomPOX ('pox', ip='127.0.0.1', port=6633)
c2 = Controller ('c2', port=6633)

cmap = {'s1': c1, 's2': c2}


net = Mininet( switch=CustomSwitch, build=False, waitConnected=True )

info( "*** Creating (reference) controllers\n" )
for c in [ c1, c2 ]:
    net.addController(c)

info( "*** Creating switches\n" )
s1 = net.addSwitch( 's1' )
s2 = net.addSwitch( 's2' )


info( "*** Creating hosts\n" )
h1 = net.addHost('host1', mac='00:00:00:00:10:01', ip='10.0.10.1/24')
h2 = net.addHost('host2', mac='00:00:00:00:20:01', ip='10.0.30.1/24')

info( "*** Creating links\n" )
net.addLink( s1, h1 )
net.addLink( s2, h2 )
net.addLink( s1, s2 )

info( "*** Starting network\n" )
net.build()
c1.start()
c2.start()
s1.start( [ c1 ] )
s2.start( [ c2 ] )

info( "*** Testing network\n" )
net.pingAll()

info( "*** Running CLI\n" )
CLI( net )

info( "*** Stopping network\n" )
net.stop()


if __name__ == '__main__':
    setLogLevel( 'info' )  # for CLI output
    multiControllerNet()

注释不是我的

首先,我不确定为什么主机无法通信。因为两个不同控制器下的2个交换机默认不链接?

我尝试将 l2 与 l3 交换,但它没有改变任何东西,这是正常的,因为阅读了文档,我看不出在这种情况下会有什么优势。 我试图分配/更改控制器的 IP 地址,但没有效果。

我应该添加控制器必须连接交换机的规则吗?如果是这样,这个主题 (How to add flow rules in POX controller) 是正确的解决方案吗?因为它似乎不符合我脚本的逻辑。

还是更多地是在我定义控制器时更改/添加参数?

【问题讨论】:

    标签: network-programming mininet sdn pox


    【解决方案1】:

    您能否提供有关附加代码如何工作的更多详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多