• 2019 SDN上机第6次作业


    1.实验拓扑

    拓扑图如下:

    搭建代码如下:

    from mininet.topo import Topo
    class Mytopo(Topo):
        def __init__(self):
            Topo.__init__(self)
            s=[]
            for i in range(2):
             sw = self.addSwitch('s{}'.format(i+1))
             s.append(sw)
        	self.addLink(s[0],s[1])
            count=1
            for two in s:
             for i in range(3):
              host = self.addHost('h{}'.format(count))
              self.addLink(two,host)
              count += 1
    topos = {'mytopo': (lambda:Mytopo())}
    

    搭建成功

    输入以下命令连接ryu控制器

    ryu-manager ofctl_rest.py
    

    输入net,查看各主机与交换机之间的端口情况,方便确定之后脚本中匹配项的值

    2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN

    参考了RYU手册中使用curl命令的部分 https://ryu.readthedocs.io/en/latest/app/ofctl_rest.html#description-of-match-on-request-messages ,编写以下sh格式脚本下发流表,拿其中两个举例:

    首先是从主机1转发到交换机1的端口1:

    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "in_port":2
        },
        "actions":[
            {
                "type": "PUSH_VLAN",     # 给进入交换机的包打上vlan_tag
                "ethertype": 33024       # 帧类型0x8100(=33024): 表示IEEE 802.1Q的VLAN数据帧
            },
            {
                "type": "SET_FIELD",
                "field": "vlan_vid",     # 设置VLAN ID
                "value": 4096            # 设置vlan_id的值
            },
            {
                "type": "OUTPUT",
                "port": 1
            }
        ]
     }' http://127.0.0.1:8080/stats/flowentry/add
    

    然后是交换机1转发到端口2的:

    curl -X POST -d '{
        "dpid": 1,
        "priority":1,
        "match":{
            "dl_vlan": "0"
        },
        "actions":[
            {
                "type": "POP_VLAN",     # 给进入交换机的包去除 vlan_tag
            },
            {
                "type": "OUTPUT",
                "port": 2
            }
        ]
     }' http://localhost:8080/stats/flowentry/add
    

    其它脚本以前两者为基础,根据实验二的流表更改匹配项与动作
    之后可以用两种方法执行脚本

    1.挨个执行

    2.全部curl命令放到一个sh文件中,然后执行这个文件

    接着查看流表,可以看到已下发

    可以看到控制器端显示下发的流表已被接收

    ping通,查看连通性

    3.对比两种方法,写出你的实验体会

    相比第二次实验中在终端手动挨个下发流表,基于restapi编写shell脚本进行一次性下发的方法确实要方便很多,而且纵式排版也能更好的观察各个匹配与动作参数,方便自己整理与理解

  • 相关阅读:
    李洪强IOS经典面试题 33-计算有多少个岛屿
    李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理
    李洪强iOS经典面试题31-解释垃圾回收的原理
    iOS音频合并
    Macbook小问题
    weex-iOS集成
    WEEX快速入门
    Mac上Nginx-增加对HLS的支持
    iOS直播-基于RTMP的视频推送
    iOS直播-播放基于RTMP协议的视频
  • 原文地址:https://www.cnblogs.com/wersat/p/11980429.html
Copyright © 2020-2023  润新知