Lab 4-REST QoS Application

此實驗使用Ryu REST_Qos.py 來進行基本的Qos 限速,來認知控制器和交換器在網路行為中的溝通。

實驗拓樸:

目的:

H2向H1 Port 5001 以1Mb/s 速度 發送UDP封包,透過Qos限制速度為 500 kbit/s。

其餘封包速度正常。

環境設定

首先使用micro USB 連接 Switch Commend Line Port

進入 minicom 來設定 Switch

# ovs-vsctl set-manager ptcp:6632

接著回到Controller視窗,在跟目錄執行以下指令 ( 在simple_switch_13.py OFPFlowMod部分新增 table_id=1,新增並更名為qos_simple_switch_13.py )

# sed '/OFPFlowMod(/,/)/s/)/, table_id=1)/' ryu/ryu/app/simple_switch_13.py > ryu/ryu/app/qos_simple_switch_13.py

# cd ryu/; python ./setup.py install

啟動rest_qos, qos_simple_switch_13, rest_conf_switch

Controller:

# ryu-manager ryu.app.rest_qos ryu.app.qos_simple_switch_13 ryu.app.rest_conf_switch

如果成功的話,應該可以看到

[QoS][INFO] dpid=XXXXXXXXXXXX: Join qos switch.

表示Switch有正確的連接到Controller

Queue Setting

首先要設定 ovsdb_addr 進而來使用 OVSDB (在Openflow Switch上)

Controller:

# curl -X PUT -d '"tcp:10.0.0.1:6632"' http://localhost:8080/v1.0/conf/switches/{dpid}/ovsdb_addr

同時可以設定Queue

# curl -X POST -d '{"port_name": "ge/1/{port number}", "type": "linux-htb", "max_rate": "1000000", "queues": [{"max_rate": "500000"}, {"min_rate": "800000"}]}' http://localhost:8080/qos/queue/{dpid}

QoS Setting

新增 Qos 的規則給 Switch

Controller:

# curl -X POST -d '{"match": {"nw_dst": "10.0.0.1", "nw_proto": "UDP", "tp_dst": "5002"}, "actions":{"queue": "1"}}' http://localhost:8080/qos/rules/{dpid}

查詢 Qos 規則有確實下到Switch

# curl -X GET http://localhost:8080/qos/rules/{dpid}

使用minicom去查詢 Switch OVSDB的資訊

Switch 上面的Flow Table

頻寬測量

這邊使用 iperf 發送UDP封包,來進行頻寬的測量

H1 作為接收端,H2作為發送端 (速度 1Mb/s)

h1(1):

# iperf -s -u -i 1 -p 5001

h1(2):

# iperf -s -u -i 1 -p 5002

h2(1):

# iperf -c 10.0.0.1 -p 5001 -i 1 -u -b 1M

h2(2):

# iperf -c 10.0.0.1 -p 5002 -i 1 -u -b 1M

可以看到以下圖

Host 1 :

Host 2:

可以看到 H2向H1 Port 5001 的封包,有確實受到Qos的限制進而限速。

※注意 Open Switch的 Port queue 要開啟,可以連至Switch webGUI 去做設定