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通,查看连通性

猜你喜欢

转载自www.cnblogs.com/wersat/p/11980429.html