2019 SDN上机第6次作业 1.实验拓扑 2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN 3.对比两种方法,写出你的实验体会

拓扑图如下:

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

搭建代码如下:

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())}

搭建成功
2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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

ryu-manager ofctl_rest.py

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

输入net,查看各主机与交换机之间的端口情况,方便确定之后脚本中匹配项的值
2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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.挨个执行

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

ping通,查看连通性

2019 SDN上机第6次作业
1.实验拓扑
2.使用Ryu的REST API下发流表实现和第2次实验同样的VLAN
3.对比两种方法,写出你的实验体会

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

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