问题
之前的自定义拓扑一直pingall失败,检查了controller的连接和host、switch的设置都没有问题,甚至流表也是正常的。
然后发现是因为自定义拓扑里有环路。
我用的controller是RYU中的simple_switch.py,自定义拓扑中有环路时无法收敛。
解决方案
要解决这个问题可以手动去除环路,也可以使用switch中的stp协议,这个协议可以破除拓扑中的环路。
使用stp协议需要在启动mininet时向命令中添加参数 --switch lxbr,stp=1
or --switch ovsbr,stp=1
,具体命令举例如下:
sudo mn --topo torus,3,3 --switch ovsbr,stp=1
mininet开始运行后等stp起效即可。
参考链接
https://www.zhihu.com/question/521566304
stp相关:https://github.com/mininet/mininet/wiki/FAQ