我正在学习SDN控制器,并希望实现一个自定义拓扑,其主控制器(Floodlight)连接到子控制器(POX和RYU),这些子控制器连接到网络中的交换机 . 我已经绘制了一张我想要实现的内容的简要图表here(原谅我糟糕的绘图技巧)
我开始编程控制器以连接其他控制器,但我不确定我是否做得对 .
from mininet.net import Mininet
from mininet.node import OVSSwitch, Controller, RemoteController
from mininet.topolib import TreeTopo
from mininet.log import setLogLevel
from mininet.cli import CLI
setLogLevel( 'info' )
c0 = RemoteController( 'pox', ip='192.168.56.102', port=6633 )
c1 = RemoteController( 'floodlight', ip='192.168.56.101', port=6653 )
c2 = RemoteController( 'ryu', ip='192.168.56.103', port=6653 )
y
cmap = { 's1': c0, 's2': c0, 's3': c1, 's4': c1, 's5': c2, 's6': c2}
class MultiSwitch( OVSSwitch ):
"Custom Switch() subclass that connects to different controllers"
def start( self, controllers ):
return OVSSwitch.start( self, [ cmap[ self.name ] ] )
topo = TreeTopo( depth=2, fanout=5 )
net = Mininet( topo=topo, switch=MultiSwitch, build=False )
for c in [ c0,c1,c2 ]:
net.addController(c)
net.build()
net.start()
CLI( net )
net.stop()
从代码中可以看出,我有一个自定义拓扑,它使用树形拓扑将交换机连接到多个控制器 . 但是我不确定控制器是否相互连接 .
如何将Floodlight作为主控制器和POX和RYU子控制器?
此外,开关是否连接到右侧控制器?
任何意见将是有益的!
1 回答
您可以自己编程控制器的逻辑 . 如果您希望控制器互连,则必须将其自身实现为网络顶部的任何其他进程间通信 . 换句话说,您的控制器应使用网络通信相互连接 . 因此,他们将互相交换信息和指示 .