2019 SDN上機第4次做業

------------恢復內容開始------------
------------恢復內容開始------------node

1. 解壓安裝OpenDayLight控制器(本次實驗統一使用Beryllium版本)

  • 用U盤從機房電腦拷貝文件並解壓
tar xvf distribution-karaf-0.4.4-Beryllium-SR4.tar.gz
  • 安裝JAVA環境
    • 在JAVA開源網站上下載安裝包
    • 解壓安裝包
    • 添加環境變量

2. 啓動並安裝插件

cd distribution-karaf-0.4.4-Beryllium-SR4/bin/
./karaf
feature:install odl-restconf
feature:install odl-l2switch-switch-ui
feature:install odl-openflowplugin-all
feature:install odl-mdsal-apidocs
feature:install odl-dlux-core
feature:install odl-dlux-node
feature:install odl-dlux-yangui


打開瀏覽器可見以下界面:
python

3. 用Python腳本搭建以下拓撲,鏈接OpenDayLight控制器

  • python腳本內容以下:
from mininet.topo import Topo
class MyTopo(Topo):

    def __init__(self):

        #初始化拓撲
        Topo.__init__(self)

        #添加主機和交換機
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        s1 = self.addSwitch('s1')
        #添加連線
        self.addLink(h1, s1, 1, 1)
        self.addLink(h2, s1, 1, 2)
        self.addLink(h3, s1, 1, 3)
topos = {'mytopo': (lambda: MyTopo())}
  • 執行命令
sudo mn --custom ./test.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13

  • 執行PING ALL指令後,控制器拓撲圖以下:

4. 在控制器提供的WEB UI中下發流表使h2 20s內ping不通h3,20s後恢復

  • 下發流表,node填入openflow:1,table爲0,flow爲1,層級結構以下所示:

  • 將GET 改成 PUT
  • 查詢鏈路鏈接狀況
  • id:流表項id in-port:進接口 type:上層協議類型(0x0800爲IP協議)
  • layer-3-match: 三層匹配協議選擇 source:源IP匹配 destination:目的IP匹配
  • instruction list:匹配到流表項之後執行系列動做 (本例中爲丟棄報文動做)
  • flow_name:流表項名 priority:流表項優先級 hard-timeout:硬超時
  • 下發流表(點擊SEND)

5. 藉助Postman經過OpenDayLight的北向接口下發流表,再利用OpenDayLight北向接口查看已下發的流表。

  • PRIVIEW流表項的URL和JSON文本
  • 打開POSTMAN,更改GET爲PUT,並將URL複製進文本框以下所示

    URL地址以下:
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1
  • 選擇認證方式並填入OPENDAYLIGHT帳戶
  • Body更改上傳方式爲raw,更改文本類型爲json

    json 文本內容以下:
{
    "flow": [
        {
            "id": "1",
            "match": {
                "in-port": "1",
                "ethernet-match": {
                    "ethernet-type": {
                        "type": "0x0800"
                    }
                },
                "ipv4-destination": "10.0.0.3/32"
            },
            "instructions": {
                "instruction": [
                    {
                        "order": "0",
                        "apply-actions": {
                            "action": [
                                {
                                    "order": "0",
                                    "drop-action": {}
                                }
                            ]
                        }
                    }
                ]
            },
            "flow-name": "flow0",
            "priority": "65535",
            "hard-timeout": "20",
            "cookie": "2",
            "table_id": "0"
        }
    ]
}
  • 點擊PUT,下發流表
相關文章
相關標籤/搜索