2019 SDN上机第6次作业

1.实验拓扑

  • 用python脚本建立拓扑并查看net

  • python代码
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 gui_topology.py
ryu-manager --observe-links gui_topology.py//可以查看交换机连接情况

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

  • 编写下发流表的sh脚本(展示两个例子)
    • h1-s1.sh
curl -X POST -d '{
    "dpid":1,
    "priority":1,
    "match":{
        "in_port":2
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # Push a new VLAN tag if a input frame is non-VLAN-tagged
            "ethertype": 33024       # Ethertype 0x8100(=33024): IEEE 802.1Q VLAN-tagged frame
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # Set VLAN ID
            "value": 4096            # Describe sum of vlan_id(e.g. 6) | OFPVID_PRESENT(0x1000=4096)
        },
        {
            "type": "OUTPUT",
            "port": 1
        }
    ]
 }' http://0.0.0.0:8080/stats/flowentry/add
  • s1-h4.sh
curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "dl_vlan": "0"
    },
    "actions":[
        {
            "type": "POP_VLAN",    
        },
        {
            "type": "OUTPUT",
            "port": 2
        }
    ]
 }' http://0.0.0.0:8080/stats/flowentry/add
  • 执行所有sh脚本进行测试

  • s1,s2查看下发流表

  • pingall查看结果

  • 整合所有sh脚本
    • 直接执行Allflow.sh,一次性下发流表
sudo sh Allflow.sh
  • Allflow.sh

  • 结果不再展示

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

  • 总结
    本次实验用ryu控制器编写并执行用于下发流表的sh脚本,我觉得比起使用命令下发流表,使用ryu编写sh脚本并执行更加方便。比起繁琐的命令,只要提前准备好脚本,任何人都可以通过直接执行脚本来下发流表,而不需要了解使用原理。
原文地址:https://www.cnblogs.com/ruifeng1/p/11984744.html