首页 > 解决方案 > Ryu 控制器 - simple_switch_13_stp 在失败后不重新计算树?

问题描述

我正在mininet使用Ryu controller.

对于Ryu controller我正在使用的命令:

ryu-manager simple_switch_stp_13.py

关于mininet我使用文件中定义的拓扑Topo1.py

from mininet.topo import Topo

class Project( Topo ):

   def __init__( self ):
       # Initialize topology
       Topo.__init__( self )

       # Add hosts
       h1 = self.addHost('h1')
       h2 = self.addHost('h2')

       # Add switches
       s1 = self.addSwitch('s1')
       s2 = self.addSwitch('s2')
       s3 = self.addSwitch('s3')
       s4 = self.addSwitch('s4')

       # Add links
       self.addLink(h1,s1)
       self.addLink(s1,s2)
       self.addLink(s2,s4)
       self.addLink(s3,s1)
       self.addLink(s3,s4)
       self.addLink(h2,s4)

topos = { 'myTopo': ( lambda: Project() )}

然后我mininet使用命令运行:

sudo mn --custom Topo1.py --topo=myTopo --switch ovsk --controller=remote --mac

他们之间的联系是完美的;我成功地从主机 1 到主机 2 运行 ping。我想要做的是切断与 s1 和 s2 的链接(不停止 h1 和 h2 之间的 ping)。

其次,我遇到的问题:根据https://osrg.github.io/ryu-book/en/Ryubook.pdf第 65 页,我使用了以下命令:

link s1 s2 down.

但是,我可以观察到使用控制器发送的wireshark,作为对请求交换机重新启动接口的Port_Mod反应。Port_Status交换机执行此操作,因此 ping 通过 s1 和 s2 之间的接口重新传递。我不明白为什么控制器会发送这个Port_Mod

https://osrg.github.io/ryu-book/en/Ryubook.pdf第 65 页中,他们没有这个问题。

然后,我尝试了命令:

py net.delLinkBetween(s1, s2)

链接被完全删除,控制器通过端口状态通知,但根,根的成本......根本没有进化。然后,ping 不会重新启动,也不会经过 s3。我也不明白为什么?

你知道我做的两次观察是否正常吗?如果是的话,你知道如何纠正我的实验以获得预期的行为吗?

标签: openflowryustp

解决方案


推荐阅读