mininet中流表操作(2021.6.25)

前提条件: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)低。

作者:天际使徒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/Horizon-asd/p/12708630.html