天天看點

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

準備工作:

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主機上:

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

Mininet上

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

檢視擷取的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

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

是以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

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

是以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

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

可以看到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>
           
如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

第二次:

<queue-id></queue-id>
<queue></queue>
           

下發流表項:

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

第三次:

<queue-id>3</queue-id> <queue>3</queue>

如何用postman控制ODL設定端口的QoS, 并下發流表到交換機做限速配置

由此,可以看到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