• Mininet玩转流表


    Mininet玩转流表

    一、构建拓扑

    首先构建一个拓扑,可以使用mininet的可视化界面构建,也可以直接使用代码构建,拓扑及代码如下所示:
    在这里插入图片描述

    #!/usr/bin/env python
    
    from mininet.net import Mininet
    from mininet.node import Controller, RemoteController, OVSController
    from mininet.node import CPULimitedHost, Host, Node
    from mininet.node import OVSKernelSwitch, UserSwitch
    from mininet.node import IVSSwitch
    from mininet.cli import CLI
    from mininet.log import setLogLevel, info
    from mininet.link import TCLink, Intf
    from subprocess import call
    
    def myNetwork():
    
        net = Mininet( topo=None,
                       build=False,
                       ipBase='10.0.0.0/8')
    
        info( '*** Adding controller\n' )
        c0=net.addController(name='c0',
                          controller=RemoteController,
                          ip='127.0.0.1',
                          protocol='tcp',
                          port=6633)
    
        info( '*** Add switches\n')
        s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')
        s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002')
    
        info( '*** Add hosts\n')
        h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
        h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
        h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
        h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)
    
        info( '*** Add links\n')
        net.addLink(s1, h1)
        net.addLink(s1, h2)
        net.addLink(s2, h3)
        net.addLink(s2, h4)
        net.addLink(s1, s2)
    
        info( '*** Starting network\n')
        net.build()
        info( '*** Starting controllers\n')
        for controller in net.controllers:
            controller.start()
    
        info( '*** Starting switches\n')
        net.get('s1').start([c0])
        net.get('s2').start([c0])
    
        info( '*** Post configure switches and hosts\n')
    
        CLI(net)
        net.stop()
    
    if __name__ == '__main__':
        setLogLevel( 'info' )
        myNetwork()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    关于拓扑和代码配置及描述,这里就不一一阐述了。

    二、启动Ryu

    配置好代码后,首先需要启动一个ryu控制器,这里以simple_switch.py为例:

    cd ryu/ryu/app
    ryu-manager simple_switch.py
    
    • 1
    • 2

    在这里插入图片描述

    三、运行代码

    启动完Ryu控制器后,运行上述代码:

    sudo python3 flowtable01.py
    
    • 1

    在这里插入图片描述

    四、流表操作

    • 查看所有流表
    dpctl dump-flows
    
    • 1

    在这里插入图片描述

    • 删除现有所有流表
    dpctl del-flows
    
    • 1

    在这里插入图片描述

    • 添加流表
    1. 添加普通流表
    dpctl add-flow in_port=1,actions=output:2
    dpctl add-flow in_port=2,actions=output:1
    
    • 1
    • 2

    为什么要添加两条流表呢?(此处可以回忆一下TCP/IP的三次握手)
    在这里插入图片描述
    2. 添加丢弃数据包流表

    dpctl add-flow in_port=2,actions=drop
    
    • 1

    增加这条流表后,mininet中主机之间将无法通信。
    在这里插入图片描述

    • 删除流表
      删除条件字段中包含in_port=1及in_port=2的所有流表
    sh ovs-ofctl del-flows s1 in_port=2
    
    • 1

    或者是:

    dpctl del-flows in_port=1
    dpctl del-flows in_port=2
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    嵌入式分享合集90
    蓝桥杯每日一题——棋盘
    join、inner join、left join、right join的区别
    Leetcode DAY 15: 层序遍 and 翻转二叉树 and 对称二叉树
    ArmSoM Rockchip系列产品 通用教程 之 Display 使用
    php获取文件后缀名的几种方法
    使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)
    定时器方案,红黑树,时间轮
    Springboot集成Shiro完成认证授权
    GB28181学习(十一)——控制(PTZ、镜头、光圈等控制)
  • 原文地址:https://blog.csdn.net/qq_41422448/article/details/126587476