- from mininet.topo import Topo
- class MyTopo( Topo ):
- def __init__( self ):
- # initilaize topology
- Topo.__init__( self )
- # add hosts and switches
- host1 = self.addHost( 'h1' )
- host2 = self.addHost( 'h2' )
- switch1 = self.addSwitch( 's1' )
- switch2 = self.addSwitch( 's2' )
- switch3 = self.addSwitch( 's3' )
- switch4 = self.addSwitch( 's4' )
- # add links
- self.addLink(host1,switch1)
- self.addLink(switch1,switch2)
- self.addLink(switch1,switch3)
- self.addLink(switch2,switch4)
- self.addLink(switch3,switch4)
- self.addLink(switch4,host2)
- topos = { 'mytopo': ( lambda: MyTopo() ) }
连接控制器
···
mn --custom topo1.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633
···
在 mininet 进行 pingall 操作验证连通性,同时新建终端通过 sudo ovs-ofctl dump-flows s2 –O OpenFlow13 查看 s2 流表以及 s3 流表。
可以发现 s2 的所在链路是通的。而 s3 的数据包被 drop
ODL 组表入口: opendaylight-inventory->config->nodes->node->group
ff 是组表类型
按照下发组表到 s1 的方法下发组表至 s4,这是为了让数据回来的时候能够自动切换到 s3 所在链路,而不是继续往 s2 所在链路上发送,同样需要再发一条流表使它生效
在 s3 上下发两条流表覆盖 drop 动作,port1 进入转发至 port2,port2 进入转发至 port1
在 s4 上下发流表使 s3 所在链路进入的数据包转发至 h2 所在端口
在 mininet 上进行 h1 ping h2 操作,通过 sudo ovs-ofctl dump-group-stats s1 -O OPenFlow13 查看流表匹配状态,可以看到只有 bucket0 生效,即所有数据包都通过 s2 所在路径传输
通过命令将 s1 的 2 端口关闭,s4 的 1 端口关闭。目的是为了 s1 和 s4 上的组表生效
- sudo ovs-ofctl -O OpenFlow13 mod-port s1 2 down
- sudo ovs-ofctl -O OpenFlow13 mod-port s4 1 down
进行 h1 ping h2 操作, 通过 sudo ovs-ofctl dump-group-stats s4 -O OPenFlow13 查看组表状态,可以看到另一个 bucket 的匹配数据有增长,证明另一条链路启用
来源: http://www.bubuko.com/infodetail-2449521.html