This has not been ported to Floodlight v1.0 at this time.
This open-source project is in affiliation with Marist College in New York. Ryan Wallner ryan.wallner1@marist.edu A video tutorial on some the features: http://www.youtube.com/watch?v=M03p8_hJxdc The code is available here: (rough around the edges but good enough to play with) https://github.com/wallnerryan/floodlight-qos-beta.git $git clone https://github.com/wallnerryan/floodlight-qos-beta.git $cd floodlight-qos-beta $ant; ./floodlight.sh (open your bowser and visit localhost:8080/ui/index.html and click Tools [Update Jan 2013] Both python apps will be re-factored to use a more flexible arg parsing lib The module itself is also being prepared to be only the QoS module, no UI or other code. This is so it can eventually integrate into the master. Modifying existing QoS policies will also be added. [update 4-22-13] I will be updating this tutorial in the coming days. |
type of service on a flow, as well as enqueue the packets matching the flow to a specific queue on a specific port. What this module tries to do
is give a user a way to simply push QoS state to switches that support these features. This modules will aim to tackle the "enqueue" and "set-nw-tos"
actions. The static flow pusher API calls this "set-tos-bits". As future specs such as 1.3 become adopted I plan to implement features that take advantage
of 1.3's "set-queue" and and meter tables. Setting of the DSCP or ToS bits will continue to be supported, but there are plans to create a more in-depth
QoS framework in the future specs. OFConfig can play a major role in Quality of Service as well, the implementation of such a protocol could prove
very useful in the set-up and tear-down of qos-based queues.
Some additional references:
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" |
/wm/qos/service/json | Yes | Yes | Accepts a service that can be added to the controller. This service can |
/wm/qos/policy/json | Yes | Yes | Accepts a policy to enforce. Policies can be applied to a single switch, a list of |
Field | Description |
---|---|
id | unique identifier (not needed in POST) |
name | unique, gives a human readable description for the policy. I.e. "Best Effort" |
tos | Represents the type of service or DSCP (Differentiated Services Code Point) bits |
Field | Description |
---|---|
id | unique identifier (not needed in POST) |
name | Unique. human readable name for the policy i.e "Enqueue 1:1 on switch 1" |
sw | this can have several values.
|
service | reference a ToS classification service from a list of known services by the controller. Will set the policy to action _set-nw-tos. _Default is "Best Effort" with a tos=0x00. |
queue | queue used in the enqueue method. queue cannot be set without enqueue |
enqueue-port | This will set the action to enqueue and set the action to enqueue to this port. This will need queue to be set as well. |
priority | The priority of the policy (flow)
|
Policy Match Fields | same from the staticflowpusher |
protocol | Can be hexadecimal (with leading 0x) or decimal |
eth-type | Can be hexadecimal (with leading 0x) or decimal |
ingress-port | switch port on which the packet is received |
ip-src | xx.xx.xx.xx |
ip-dst | xx.xx.xx.xx |
tos | Can be hexadecimal (with leading 0x) or decimal |
vlan-id | Can be hexadecimal (with leading 0x) or decimal |
eth-src | Can be hexadecimal (with leading 0x) or decimal |
eth-dst | Can be hexadecimal (with leading 0x) or decimal |
src-port | Can be hexadecimal (with leading 0x) or decimal |
dst-port | Can be hexadecimal (with leading 0x) or decimal |
*"wildcards" and "active" keys are unsupported right now. |
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.
*sorry for the typos in the screen shots
Network
Mininet Topo Used #sudo mn --topo linear,4 --switch ovsk --controller=remote,ip= --ipbase=10.0.0.0/8 |
1. Visit the tools seciton and click on "Quality of Service"
2. Verify that the module is enabled.
#./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": "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 |
#./qospusher.py add policy ' {"name": "Enqueue 1:2 s2?, "protocol":"6?,"eth-type": "0×0800?, "ingress-port": "1?,"ip-src":"10.0.0.1?, "sw": "00:00:00:00:00:00:00:02?,"queue":"2?,"enqueue-port":"1?}' 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 1:2 s2?, "protocol":"6?,"eth-type": "0×0800?, "ingress-port": "1?,"ip-src":"10.0.0.1?, "sw": "00:00:00:00:00:00:00:02?,"queue":"2?,"enqueue-port":"1?} [CONTROLLER]: {"status" : "Trying to Policy: Enqueue 1:2 s2?} 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\"}", " {\"name\": \"Enqueue 1:2 s2\", \"protocol\":\"6\",\"eth-type\": \"0x0800\", \"ingress-port\": \"1\",\"ip-src\":\"10.0.0.1\", \"sw\": \"00:00:00:00:00:00:00:02\",\"queue\":\"2\",\"enqueue-port\":\"1\"}" ]} Closed connection successfully |
Iperf shows that the bandwith is limited to ~2Mbps. See below for counter iperf test to verify h2 -->
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.