Contact Us

Contact Us



Pleas confirm by checkbox


Technical

QoS using OpenDaylight

Author_img
By Narender Kumar November 15, 2016

Introduction
OpenFlow provides limited support for QoS using queues and meters. Most of the software switches support queues. Queues are created and configured outside the OpenFlow protocol. OpenFlow provides the implementation to the controller to use these queues in the flows. In this blog post, we explain how to use queues in OpenFlow 1.3 and implement QoS in a network topology created using mininet and OpenDaylight(ODL) controller.

Configuring queues in Open vSwitch (OVS)
To implement quality of service (QoS) in an OVS switch, we need to create a QoS policy and queues with different bandwidths. Next, we need to add these queues in the QoS policy and connect the policy to a port on the switch where we want to implement the QoS. Finally we have to map the required queue Id with the flow. Below are OVS commands to list all qos and queues

sudo ovs-vsctl list qos
sudo ovs-vsctl list queue

Below are OVS commands to bulk destroy all qos and queues

sudo ovs-vsctl --all destroy qos
sudo ovs-vsctl --all destroy queue

Implementing Queues in OpenDaylight using REST API
1. Create a single switch, 2 hosts mininet topology using command below:

sudo mn --topo single,2 --controller=remote,ip=127.0.0.1

This will create a topology with a single switch connected with two hosts h1(10.0.0.1) and h2(10.0.0.2). Next, Start the ODL controller and test a ping from h1 to h2.  If ping is successful you are good to go to next steps. We are using beryllium version of ODL.

2. Create a QoS policy and attach it with the desired switch port using commands below:

sudo ovs-vsctl set port s1-eth1 qos=@newqos -- --id=@newqos create qos
 type=linux-htb other-config:max-rate=5000000 queues=1=@q1,2=@q2
 -- --id=@q1 create queue other-config:min-rate=5000000
 other-config:max-rate=5000000 -- --id=@q2 create queue
 other-config:min-rate=3000000 other-config:max-rate=3000000

In the command above, we are creating a QoS policy of type linux-htb having maximum data transfer rate of 5 Mbps and attaching it to port s1-eth1. We are also creating 2 queues q1 with queue id = 1 and q2 with queue id = 2 and adding these queues in the QoS policy. q1 has a maximum transfer rate of 5 Mbps and a minimum transfer rate of 5 Mbps. q2 has a maximum transfer rate of 3 Mbps and a minimum transfer rate of 3 Mbps.  One thing to note down is that the QoS method is egress only which means these rates will be applicable when the packets are being forwarded out from the port.

3. Map the queue with the flow from h1 to h2 using REST API as below:
Submit a HTTP PUT request using Postman to the ODL controller using headers:

  • Use URL: http://localhost:8181/restconf/config/opendaylight-inventory:
    nodes/node/openflow:1/table/0/flow/iperf
  • Method: PUT
  • Content Type: application/xml
  • Authorization: Basic Auth (username/password : admin/admin)

Set body of the request as shown in code block below. The <set-queue-action> in the flow mentioned below is mapping the queue with queue id = 1 with the flow.

<flow xmlns="urn:opendaylight:flow:inventory">
<id>iperf</id>
<instructions>
<instruction>
<order>0</order>
<apply-actions>
<action>
<order>1</order>
<output-action>
    <output-node-connector>NORMAL</output-node-connector>
    <max-length>65535</max-length>
</output-action>
</action>
<action>
<order>0</order>
<set-queue-action>
    <queue-id>1</queue-id>
</set-queue-action>
</action>
</apply-actions>
</instruction>
</instructions>
<barrier>true</barrier>
<flow-name>iperf</flow-name>
<match>
<ethernet-match>
            <ethernet-type>
                <type>2048</type>
            </ethernet-type>
        </ethernet-match>
        <ipv4-source>10.0.0.2/32</ipv4-source>
        <ipv4-destination>10.0.0.1/32</ipv4-destination>
        <ip-match>
            <ip-protocol>6</ip-protocol>         
        </ip-match>
        <tcp-destination-port>12345</tcp-destination-port>
</match>
<hard-timeout>0</hard-timeout>
<priority>32768</priority>
<table_id>0</table_id>
<idle-timeout>0</idle-timeout>
</flow>

Iperf Testing
Test it using iperf data transfer. Start iperf server on h1 on port 12345 and send data from h2 on that port. Below we are attaching some screen shots for reference:
Before implementing QoS:

After implementing the QoS:

selection_003

Conclusion
OpenFlow provides limited support for QoS on cost of its complexity. In this post we explained how to use queues and implement QoS using ODL controller. Meters are supported in OpenFlow 1.3 which unlike queues are created and configured using OpenFlow protocol itself. We will be discussing meters in our next blog post.


 

Related posts
Apache Spark Standalone Setup On Linux/macOS
Technical

Apache Spark Standalone Setup On Linux/macOS

By rednerank October 20, 2021
Apache Flink Standalone Setup on Linux/macOS
Technical

Apache Flink Standalone Setup on Linux/macOS

By rednerank October 13, 2021
Identity, Authentication, And Access Management Using Azure Active Directory  
Technical

Identity, Authentication, And Access Management Using Azure Active Directory  

By rednerank September 22, 2021
Things to Know Before You Select A Crypto Wallet
Blockchain

Things to Know Before You Select A Crypto Wallet

By rednerank September 20, 2021
Solve 3 Most Irritating Outlook Email Rendering Issues.
Technical

Solve 3 Most Irritating Outlook Email Rendering Issues.

By rednerank September 15, 2021
Intuit Wasabi – A Scalable A/B Testing Solution
Technical

Intuit Wasabi – A Scalable A/B Testing Solution

By rednerank September 01, 2021
How To Pick The Right Data Analytics Strategy For Serverless Systems?
Big Data

How To Pick The Right Data Analytics Strategy For Serverless Systems?

By rednerank August 25, 2021
Change Notifications and Named Options using Options pattern in .NET Core
Technical

Change Notifications and Named Options using Options pattern in .NET Core

By rednerank August 18, 2021
Create Strongly Typed Configurations in .NET Core
Technical

Create Strongly Typed Configurations in .NET Core

By rednerank August 13, 2021
Partitioning Database - A Divide and Rule Strategy
Technical

Partitioning Database - A Divide and Rule Strategy

By rednerank June 02, 2021

Stay updated

Get the latest creative news from Fubiz about art, design and pop-culture.