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 去做設定