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腳本進行一次性下發的方法確實要方便很多,而且縱式排版也能更好的觀察各個匹配與動作參數,方便自己整理與理解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM