• 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)低。

    作者:天际使徒
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [tip]build x86+x64 parrelly for your VS solution
    float double的内存表示及比较大小的方法
    [Problem 13]欧拉
    Interface Project
    [复习]内存对齐
    [tip]VS online Gallery in Extention Manager
    [Problem 14]欧拉
    “火柴棍式”程序员面试题打破惯性思维
    [复习]时间复杂度及计算
    ModuleCatalog配置文件
  • 原文地址:https://www.cnblogs.com/Horizon-asd/p/12708630.html
Copyright © 2020-2023  润新知