準備工作:
postman
mininet (2.3.0d1), ovs(v2.5.0),
建立網絡拓撲:
sudo mn –topo single,2 –controller=remote,ip=192.168.1.157
h1—s1—h2
Opendaylight (Boron-SR3),安裝後啟動,并安裝ovsdb元件;
feature:install odl-ovsdb-southbound-impl-ui
ODL所在主機的IP是192.168.1.157,Miminet的IP是192.168.1.181。
實驗步驟
Mininet OVSDB連接配接到ODL
可以用OVSDB主動模式或是被動模式,本文使用主動模式,Mininet上打開6640端口監聽
# ovs-vsctl set-manager ptcp:6640
ODL上添加node資訊
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/
Action=POST
Content =
{
“network-topology:node”:[
{
“node-id”: “ovsdb://192.168.1.181:6640”,
“connection-info”: {
“ovsdb:remote-port”: ,
“ovsdb:remote-ip”: “”
}
}
]
}
檢視連接配接狀态
ODL主機上:

Mininet上
檢視擷取的bridge的資訊
URL=http://127.0.0.1:8181/restconf/operational/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640%2Fbridge%2Fs1
Action=GET
注意URL中node後面的”/“用”%2F”代替
擷取的内容很多,包括bridge:s1還有s1-eth1/s1-eth2的資訊,就不貼了
向queue-entries中添加QUEUE-1
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640/ovsdb:queues/QUEUE-1/
Action=PUT
{
"ovsdb:queues": [
{
"queue-id": "QUEUE-1",
"queues-other-config": [
{
"queue-other-config-key": "max-rate",
"queue-other-config-value": "1000000"
}
]
}
]
}
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640/ovsdb:queues/QUEUE-2/
Action=PUT
Content=
{
"ovsdb:queues": [
{
"queue-id": "QUEUE-2",
"queues-other-config": [
{
"queue-other-config-key": "max-rate",
"queue-other-config-value": "10000000"
}
]
}
]
}
接着添加QUEUE-3
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640/ovsdb:queues/QUEUE-3/
Action=PUT
Content=
{
"ovsdb:queues": [
{
"queue-id": "QUEUE-3",
"queues-other-config": [
{
"queue-other-config-key": "max-rate",
"queue-other-config-value": "100000000"
}
]
}
]
}
擷取配置設定給兩個queue的uuid
URL=http://127.0.0.1:8181/restconf/operational/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640/ovsdb:queues/QUEUE-1/
Action=GET
return
是以QUEUE-1的uuid=”fdcf79a6-fd1d-4602-a119-1308aba594cb”
類似地,擷取QUEUE-2的uuid=”bb895c20-f38d-4d49-babf-75faf1eba490”
擷取QUEUE-3的uuid=”de9c017e-c092-4606-9fbf-4e2fbb8bc82f”
将三條queue的配置加到QoS entry
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640/ovsdb:qos-entries/QOS-1/
Action=PUT
Content
{
"ovsdb:qos-entries": [
{
"qos-id": "QOS-1",
"qos-type":"ovsdb:qos-type-linux-htb",
"qos-other-config":[
{
"other-config-key":"max-rate",
"other-config-value":"100000000"
}
],
"queue-list": [
{
"queue-number": "1",
"queue-uuid": "fdcf79a6-fd1d-4602-a119-1308aba594cb"
},
{
"queue-number": "2",
"queue-uuid": "bb895c20-f38d-4d49-babf-75faf1eba490"
},
{
"queue-number": "3",
"queue-uuid": "de9c017e-c092-4606-9fbf-4e2fbb8bc82f"
}
]
}
]
}
即queue_1使用QUEUE-1政策,queue_2使用QUEUE-2政策
擷取QOS的uuid
URL=http://127.0.0.1:8181/restconf/operational/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.157:6640/ovsdb:qos-entries/QOS-1/
Action=GET
return
是以QOS-1的uuid=”2d44e4f2-ce14-4d99-8608-53388481a6d4”
将QOS-1應用到termination-point s1-eth1上
URL=http://127.0.0.1:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640%2Fbridge%2Fs1/termination-point/s1-eth1
Action=PUT
Content
{
"network-topology:termination-point": [
{
"ovsdb:name": "s1-eth1",
"tp-id": "s1-eth1",
"qos": "2d44e4f2-ce14-4d99-8608-53388481a6d4"
}
]
}
擷取s1-eth1的資訊
URL=http://127.0.0.1:8181/restconf/operational/network-topology:network-topology/topology/ovsdb:1/node/ovsdb:%2F%2F192.168.1.181:6640%2Fbridge%2Fs1/termination-point/s1-eth1
Action=GET
Return
可以看到QOS-1已經應用成功。
測試:
設定流表,在網橋openflow:1添加流表指令,并設定流表的優先級和隊列号,使流量在指定的隊列上轉發出去,并測試流量的帶寬。
URL:http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1
Action=PUT
Content
第一次:
<queue-id></queue-id>
<queue></queue>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flow xmlns="urn:opendaylight:flow:inventory">
<priority>20</priority>
<flow-name>flow2</flow-name>
<flags> SEND_FLOW_REM </flags>
<match>
<in-port>openflow:1:2</in-port>
</match>
<hard-timeout>0</hard-timeout>
<idle-timeout>0</idle-timeout>
<cookie>30</cookie>
<id>1</id>
<table_id>0</table_id>
<instructions>
<instruction>
<order>0</order>
<apply-actions>
<action>
<order>1</order>
<set-queue-action>
<queue-id>
1
</queue-id>
<queue>
1
</queue>
</set-queue-action>
</action>
<action>
<order>2</order>
<output-action>
<output-node-connector>
openflow:1:1
</output-node-connector>
</output-action>
</action>
</apply-actions>
</instruction>
</instructions>
</flow>
第二次:
<queue-id></queue-id>
<queue></queue>
下發流表項:
第三次:
<queue-id>3</queue-id>
<queue>3</queue>
由此,可以看到OoS确實被成功配置!
參考資料:
http://www.sdnlab.com/17601.html
http://docs.opendaylight.org/en/stable-boron/user-guide/ovsdb-user-guide.html
http://dannykim.me//danny/openflow/57771?ckattempt=1