Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

This has not been ported to Floodlight v1.0 at this time.

...

Some additional references:

  • OpenFlow (1.0) supports setting the network type of service bits and enqueuing packets. This does not however mean that every switch will support these actions.
  • Queuing Methods:
    Some Openflow implementation do NOT support queuing structures to attach to a specific ports, in turn then "enqueue:port:queue" action in Openflow 1.0 is optional. Therefore resulting in failure on some switches

QoS Application.

Module: Allows the QoS service and policies to be managed on the controller and applied to the network

   

REST API

GET

POST

Description of use

/wm/qos/tool/<op>/json

Yes

N/A

Use "status", "enable" or "disable"
status - Gives the status of the module, true if enabled, false if not.
enable - Enables the Quality of Service Module
disable - Disables the Quality of Service Module

/wm/qos/service/json

Yes

Yes

Accepts a service that can be added to the controller. This service can
be used in policies to enforce certain classification of service within a network.
(The switch must support this action)

Returns a list of services that are known to the controller.

/wm/qos/policy/json

Yes

Yes

Accepts a policy to enforce. Policies can be applied to a single switch, a list of
switches or all switches. You can specify "none" to have the controller retain it
but not push it to any switch. This technique may be used in using the QoSPath
application.

Returns a list of policies that are known to the controller

...

Rest Applications

QoSPusher.py Python application used to manage QoS from the command line

(Example coming soon)

QoSPath.py QoSPath is a python application that utilizes cirtcuitpusher.py to push QoS state along a specific circuit in a network.

Example

*sorry for the typos in the screen shots

Network

Code Block
Mininet Topo Used
#sudo mn --topo linear,4 --switch ovsk --controller=remote,ip= --ipbase=10.0.0.0/8

Enable QoS on the controller:

1. Visit the tools seciton and click on "Quality of Service"

2. Verify that the module is enabled.


  • From the topology above, say we want to Rate-Limit traffic from Host 10.0.0.1  to Host 10.0.0.2 to only 2Mbps.
  • The links suggest we need to place 2 flows, one in switch 00:00:00:00:00:00:01
  • and another in 00:00:00:00:00:00:02 that enqueue the packets that match Host 1 to the rate-limited queue.
  • Knowing queue 2 on these switches rate limit the flows, we can use the QoSPusher application to push 2 policies that do just that.
Code Block
#./qospusher.py add policy ' {"name": "Enqueue 2:2 s1?, "protocol":"6?,"eth-type": "0×0800?, "ingress-port": "1?,"ip-src":"10.0.0.1?, "sw":&nbsp;"00:00:00:00:00:00:00:01?,"queue":"2?,"enqueue-port":"2?}' 127.0.0.1
QoSHTTPHelper
Trying to connect to 127.0.0.1...
Trying server...
Connected to: 127.0.0.1:8080
Connection Succesful
Trying to add policy {"name": "Enqueue 2:2 s1?, "protocol":"6?,"eth-type": "0×0800?, "ingress-port": "1?,"ip-src":"10.0.0.1?, "sw": "00:00:00:00:00:00:00:01?,"queue":"2?,"enqueue-port":"2?}
[CONTROLLER]: {"status" : "Trying to Policy: Enqueue 2:2 s1?}
Writing policy to qos.state.json
{
"services": [],
"policies": [
" {\"name\": \"Enqueue 2:2 s1\", \"protocol\":\"6\",\"eth-type\": \"0x0800\", \"ingress-port\": \"1\",\"ip-src\":\"10.0.0.1\", \"sw\": \"00:00:00:00:00:00:00:01\",\"queue\":\"2\",\"enqueue-port\":\"2\"}"
]}
Closed connection successfully

...

Verify the flows work, using iperf, from h1 --> h2

Iperf shows that the bandwith is limited to ~2Mbps. See below for counter iperf test to verify h2 --> 

Verify the opposite direction is unchanged. (getting ~30mbps benchmark )

...

The set-up of the queues on OVS was left out of this example. but the basic setup is as follows:

  • Give 10GB bandwidth to the port (thats what it supports)
  • Add a qos record with 3 queues on it
  • 1st queue, q0 is default, give it a max of 10GB
  • 2nd queue is q1, rate limited it to 20Mbps
  • 3rd queue is q2, rate limited to 2Mbps.

Ultimately QoS and OpenFlow are at their beginning still, it will mature as the latter specs become adopted by hardware and virtual switches. The improvement and adoption of OFConfig will also play a major role in this realm. But this is used as a simple implementation of how it may work. Integrating OFConfig would be an exciting feature.