前提条件:ryu与mininet连接。通过以下拓扑
__author__ = 'jmh081701' from mininet.topo import Topo class MyTopo(Topo): def __init__(self): Topo.__init__(self) left=[] left.append(self.addHost("h1")) left.append(self.addHost("h2")) right=[] right.append(self.addHost("h3")) right.append(self.addHost("h4")) switchs=[] switchs.append(self.addSwitch("s1")) switchs.append(self.addSwitch("s2")) self.addLink(left[0],switchs[0]) self.addLink(left[1],switchs[0]) self.addLink(right[0],switchs[1]) self.addLink(right[1],switchs[1]) self.addLink(switchs[0],switchs[1]) topos={'mytopo':(lambda : MyTopo())}
1.dpctl dump-flows
查看所有交换机的静态流表
pingall后,再次查看。发现s1和s2的流表。
下面是很简单的数据包转发过程示意图:
h1 ping h2操作的图示如下,控制器下发流表策略,s1生成一条流表,告诉s1怎么转发数据包,s1把数据包转发给h2。
h1 ping h3的情况,数据包走向:h1->s1(通过c0生成 ‘数据包转发给s2’ 的流表)->s2(通过c0生成 ‘数据包转发给h3’ 的流表)->h3
2.dpctl del-flows删除所有流表
所有流表为空
此时,h1 ping h2 是ping不通的
3.手动添加流表
添加两条流表:数据包从1号port进 2号port出;数据包从2号port进 ,1号port出。h1 ping h2。
但是h1 ping h3 是不通的,因为s1的3号port没有流表涉及。
4.删除包含指定字段的所有流表
删除s1的in_port=2字段的流表。 sh表示针对某个交换机操作。
也可以这样,删除所有包含in_port=2字段的流表。
5.添加丢弃数据包的流表
例如让交换机丢弃从2号port发来的所有数据包
6.当然也可以设置流表优先级。
dpctl add-flow priority=0,in_port=2,actions=drop
此时pingall是可以ping通的。
因为添加的丢弃数据包的流表优先级(priority=0)比控制器下发的流表优先级(priority=1)低。