zoukankan      html  css  js  c++  java
  • 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脚本进行一次性下发的方法确实要方便很多,而且纵式排版也能更好的观察各个匹配与动作参数,方便自己整理与理解

  • 相关阅读:
    Linux开发工具之Makefile(上)
    Linux shell入门基础(八)
    Linux开发工具之gcc
    Linux shell入门基础(七)
    Linux shell入门基础(六)
    Linux shell入门基础(五)
    Linux shell入门基础(四)
    随机洗牌算法
    Windows中查找文件被何进程使用
    哲学家进餐问题解析
  • 原文地址:https://www.cnblogs.com/wersat/p/11980429.html
Copyright © 2011-2022 走看看