3 OpenFlow Plugin Project User Guide
4 ==================================
6 Overview and Architecture
7 -------------------------
9 Overview and Architecture
10 ~~~~~~~~~~~~~~~~~~~~~~~~~
15 OpenFlow is a vendor-neutral standard communications interface defined
16 to enable interaction between the control and forwarding layers of an
17 SDN architecture. The OpenFlow plugin project intends to develop a
18 plugin to support implementations of the OpenFlow specification as it
19 develops and evolves. Specifically the project has developed a plugin
20 aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
21 support for subsequent OpenFlow specifications. The plugin is based on
22 the Model Driven Service Abstraction Layer (MD-SAL) architecture
23 (https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
24 This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
25 OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
31 - Southbound plugin and integration of OpenFlow 1.0/1.3.x library
34 - Ongoing support and integration of the OpenFlow specification
36 - The plugin should be implemented in an easily extensible manner
38 - Protocol verification activities will be performed on supported
39 OpenFlow specifications
41 Architecture and Design
42 ^^^^^^^^^^^^^^^^^^^^^^^
47 OpenFlow 1.3 Plugin will support the following functionality
57 - Mapping function(Infrastructure to OF structures).
59 - Connection establishment will be handled by OpenFlow library using
60 opensource netty.io library.
62 - Message handling(Ex: Packet in).
64 - Event handling and propagation to upper layers.
66 - Plugin will support both MD-SAL and Hard SAL.
68 - Will be backward compatible with OF 1.0.
70 **Activities in OF plugin module**
72 - New OF plugin bundle will support both OF 1.0 and OF 1.3.
74 - Integration with OpenFlow library.
76 - Integration with corresponding MD-SAL infrastructure.
78 - Hard SAL will be supported as adapter on top of MD-SAL plugin.
80 - OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
85 **Overall Architecture**
87 .. figure:: ./images/openflowplugin/plugin_design.jpg
88 :alt: overal architecture
97 It is strongly recommended that any production deployments utilising
98 the OpenFlow Plugin do so with TLS encryption to protect against
99 various man-in-the-middle attacks. Please refer to the `Certificate
100 Management section of the user guide <https://docs.opendaylight.org/en/latest/user-guide/authentication-and-authorization-services.html#id4>`__
101 for more details. TLS Support in the OpenFlow Plugin is outlined on `this
102 wiki page <https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:_TLS_Support`__.
110 This page is to catalog the things that have been tested and confirmed
116 Coverage has been moved to a `GoogleDoc
117 Spreadsheet <https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0>`__
119 OF 1.3 Considerations
120 ^^^^^^^^^^^^^^^^^^^^^
122 The baseline model is a OF 1.3 model, and the coverage tables primarily
123 deal with OF 1.3. However for OF 1.0, we have a column to indicate
124 either N/A if it doesn’t apply, or whether its been confirmed working.
126 OF 1.0 Considerations
127 ^^^^^^^^^^^^^^^^^^^^^
129 OF 1.0 is being considered as a switch with: \* 1 Table \* 0 Groups \* 0
130 Meters \* 1 Instruction (Apply Actions) \* and a limited vocabulary of
136 .. _ofp-running-new-plugin:
138 Running the controller with the new OpenFlow Plugin
139 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
143 There are all helium features (from features-openflowplugin) duplicated
144 into features-openflowplugin-li. The duplicates got suffix *-li* and
145 provide Lithium codebase functionality.
149 - odl-openflowplugin-app-lldp-speaker-li
151 - odl-openflowplugin-flow-services-rest-li
153 - odl-openflowplugin-drop-test-li
155 In case topology is required then the first one should be installed.
159 feature:install odl-openflowplugin-app-lldp-speaker-li
161 The Li-southbound currently provides:
173 In order to see really low level messages enter these in karaf console:
177 log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
178 log:set TRACE org.opendaylight.openflowplugin.impl
180 **How enable topology**
182 In order for topology to work (fill dataStore/operational with links)
183 there must be LLDP responses delivered back to controller. This requires
184 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
185 priority, empty match and one output action = send to controller. Having
186 this flow installed on every node will enable for gathering and
187 exporting links between nodes into dataStore/operational. This is done
188 if you use for example l2 switch application.
192 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
193 <flow xmlns="urn:opendaylight:flow:inventory">
194 <barrier>false</barrier>
196 <flags>SEND_FLOW_REM</flags>
197 <flow-name>FooXf54</flow-name>
198 <hard-timeout>0</hard-timeout>
200 <idle-timeout>0</idle-timeout>
201 <installHw>false</installHw>
207 <max-length>65535</max-length>
208 <output-node-connector>CONTROLLER</output-node-connector>
217 <priority>0</priority>
218 <strict>false</strict>
219 <table_id>0</table_id>
222 **Enable RESTCONF and Controller GUI**
224 If you want to use RESTCONF with openflowplugin project, you have to
225 install *odl-restconf* feature to enable that. To install *odl-restconf*
226 feature run the following command
230 karaf#>feature:install odl-restconf
232 OpenFlow 1.3 Enabled Software Switches / Environment
233 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
235 Getting Mininet with OF 1.3
236 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
238 `Download Mininet VM Upgraded to OF
239 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
240 (or the `newer mininet-2.1.0 with
241 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
242 that works with VMware Player. For using this on VirtualBox, import this
243 to VMware Player and then export the .vmdk ) or you could build one
244 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
245 setting up Mininet with OF 1.3].
247 Installing under VirtualBox
248 '''''''''''''''''''''''''''
250 .. figure:: ./images/openflowplugin/host-only-vbox.png
251 :alt: configuring a host-only adapter
253 configuring a host-only adapter
255 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
256 don’t actually seem to allow for connections from the host to the VM.
257 Instead, you need to configure a host-only network and set it up. Do
260 - Go to the VM’s settings in VirtualBox then to network and add a
261 second adapter attached to "Host-only Adapter" (see the screenshot to
264 - Edit the /etc/network/interfaces file to configure the adapter
265 properly by adding these two lines
274 At this point you should have two interfaces one which gives you NATed
275 access to the internet and another that gives you access between your
276 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
277 address and the the host-only interface gets a 192.168.56.x address.
279 Your simplest choice: Use Vagrant
280 '''''''''''''''''''''''''''''''''
282 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
283 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
287 cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
291 This will leave you sshed into a fully provisioned Ubuntu Trusty box
292 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
294 Setup CPqD Openflow 1.3 Soft Switch
295 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
297 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
298 1.3 features, e.g group multipart statistics request. Alternate options
299 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
302 - You can setup the switch as per the instructions given on the
305 `https://github.com/CPqD/ofsoftswitch13 <https://github.com/CPqD/ofsoftswitch13>`__
307 - Fire following command to start the switch
313 $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
314 e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
316 ethX should not be associated with ip address and ipv6 should be
317 disabled on it. If you are installing the switch on your local machine,
318 you can use following command (for Ubuntu) to create virtual interface.
322 ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
324 ethX - Any existing interface.
326 Or if you are using mininet VM for installing this switch, you can
327 simply add one more adaptor to your VM.
329 Start Openflow protocol agent:
333 $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
334 e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
336 Commands to add entries to various tables of the switch
337 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
343 $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
349 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
353 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
359 $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
360 e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
362 "dpctl" --help is not very intuitive, so please keep adding any new
363 command you figured out while your experiment with the switch.
365 Using the built-in Wireshark
366 ''''''''''''''''''''''''''''
368 Mininet comes with pre-installed Wireshark, but for some reason it does
369 not include the Openflow protocol dissector. You may want to get and
370 install it in the */.wireshark/plugins/* directory.
372 First login to your mininet VM
376 ssh mininet@<your mininet vm ip> -X
378 The -X option in ssh will enable x-session over ssh so that the
379 wireshark window can be shown on your host machine’s display. when
380 prompted, enter the password (mininet).
382 From the mininet vm shell, set the wireshark capture privileges
383 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
387 sudo chgrp mininet /usr/bin/dumpcap
388 sudo chmod 754 /usr/bin/dumpcap
389 sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
391 Finally, start wireshark:
397 The wireshark window should show up.
399 To see only Openflow packets, you may want to apply the following filter
400 in the Filter window:
404 tcp.port == 6633 and tcp.flags.push == 1
406 Start the capture on *any* port.
408 Running Mininet with OF 1.3
409 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
411 From within the Mininet VM, run:
415 sudo mn --topo single,3 --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
425 The purpose of this page is to walk you through how to see the Inventory
426 Manager working end to end with the openflowplugin using OpenFlow 1.3.
428 Basically, you will learn how to:
430 1. Run the Base/Virtualization/Service provider Edition with the new
432 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
433 the controller with the new OpenFlow Plugin]
435 2. Start mininet to use OF 1.3:
436 OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
437 Enabled Software Switches / Environment]
439 3. Use RESTCONF to see the nodes appear in inventory.
441 Restconf for Inventory
442 ^^^^^^^^^^^^^^^^^^^^^^
444 The REST url for listing all the nodes is:
448 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
450 You will need to set the Accept header:
454 Accept: application/xml
456 You will also need to use HTTP Basic Auth with username: admin password:
459 Alternately, if you have a node’s id you can address it as
463 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
469 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
471 How to hit RestConf with Postman
472 ''''''''''''''''''''''''''''''''
475 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
477 In the chrome browser bar enter
483 And click on Postman.
485 Enter the URL. Click on the Headers button on the far right. Enter the
486 Accept: header. Click on the Basic Auth Tab at the top and setup the
487 username and password. Send.
492 If you have not had any switches come up, and though no children for
493 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
494 and exception will be thrown. I’m pretty sure I know how to fix this
495 bug, just need to get to it :)
503 Learn End to End for Inventory
504 ''''''''''''''''''''''''''''''
506 See :ref:`ofp-e2e-inv`
511 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
513 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
518 Current way to flush a flow to switch looks like this:
520 1. Create MD-SAL modeled flow and commit it into dataStore using two
522 FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
524 2. FRM gets notified and invokes corresponding rpc (addFlow) on
525 particular service provider (if suitable provider for given node
528 3. The provider (plugin in this case) transforms MD-SAL modeled flow
529 into OF-API modeled flow
531 4. OF-API modeled flow is then flushed into OFLibrary
533 5. OFLibrary encodes flow into particular version of wire protocol and
534 sends it to particular switch
536 6. Check on mininet side if flow is set
545 - Content-Type: application/xml
547 - Accept: application/xml
551 - Use URL: "http://<controller
552 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
560 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
561 <flow xmlns="urn:opendaylight:flow:inventory">
562 <priority>2</priority>
563 <flow-name>Foo</flow-name>
570 <ipv4-destination>10.0.10.2/24</ipv4-destination>
573 <table_id>0</table_id>
587 **\*Note**: If you want to try a different flow id or a different table,
588 make sure the URL and the body stay in sync. For example, if you wanted
589 to try: table 2 flow 20 you’d change the URL to:
592 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
594 but you would also need to update the 20 and 2 in the body of the XML.
596 Other caveat, we have a known bug with updates, so please only write to
597 a given flow id and table id on a given node once at this time until we
598 resolve it. Or you can use the DELETE method with the same URL in
599 PostMan to delete the flow information on switch and controller cache.
601 Check for your flow on the switch
602 '''''''''''''''''''''''''''''''''
604 - See your flow on your mininet:
608 mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
609 OFPST_FLOW reply (OF1.3) (xid=0x2):
610 cookie=0x0, duration=7.325s, table=0, n_packets=0, n_bytes=0, idle_timeout=300, hard_timeout=600, send_flow_rem priority=2,ip,nw_dst=10.0.10.0/24 actions=dec_ttl
612 If you want to see the above information from the mininet prompt - use
613 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
616 Check for your flow in the controller config via RESTCONF
617 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
619 - See your configured flow in POSTMAN with
621 - URL http://<controller IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
625 - You no longer need to set Accept header
632 "flow-node-inventory:table": [
634 "flow-node-inventory:id": 0,
635 "flow-node-inventory:flow": [
637 "flow-node-inventory:priority": 1,
638 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
639 "flow-node-inventory:table_id": 0,
640 "flow-node-inventory:hard-timeout": 0,
641 "flow-node-inventory:idle-timeout": 0,
642 "flow-node-inventory:instructions": {
643 "flow-node-inventory:instruction": [
645 "flow-node-inventory:apply-actions": {
646 "flow-node-inventory:action": [
648 "flow-node-inventory:output-action": {
649 "flow-node-inventory:output-node-connector": "openflow:1:1"
651 "flow-node-inventory:order": 0
655 "flow-node-inventory:order": 0
659 "flow-node-inventory:match": {
660 "flow-node-inventory:ethernet-match": {
661 "flow-node-inventory:ethernet-type": {
662 "flow-node-inventory:type": 2048
665 "flow-node-inventory:ipv4-destination": "10.0.0.2"
667 "flow-node-inventory:cookie": 0
670 "flow-node-inventory:priority": 1,
671 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
672 "flow-node-inventory:table_id": 0,
673 "flow-node-inventory:hard-timeout": 0,
674 "flow-node-inventory:idle-timeout": 0,
675 "flow-node-inventory:instructions": {
676 "flow-node-inventory:instruction": [
678 "flow-node-inventory:apply-actions": {
679 "flow-node-inventory:action": [
681 "flow-node-inventory:output-action": {
682 "flow-node-inventory:output-node-connector": "openflow:1:1"
684 "flow-node-inventory:order": 0
688 "flow-node-inventory:order": 0
692 "flow-node-inventory:match": {
693 "flow-node-inventory:ethernet-match": {
694 "flow-node-inventory:ethernet-type": {
695 "flow-node-inventory:type": 2048
698 "flow-node-inventory:ipv4-destination": "10.0.0.1"
700 "flow-node-inventory:cookie": 0
703 "flow-node-inventory:priority": 1,
704 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
705 "flow-node-inventory:table_id": 0,
706 "flow-node-inventory:hard-timeout": 0,
707 "flow-node-inventory:idle-timeout": 0,
708 "flow-node-inventory:instructions": {
709 "flow-node-inventory:instruction": [
711 "flow-node-inventory:apply-actions": {
712 "flow-node-inventory:action": [
714 "flow-node-inventory:output-action": {
715 "flow-node-inventory:output-node-connector": "openflow:1:1"
717 "flow-node-inventory:order": 0
721 "flow-node-inventory:order": 0
725 "flow-node-inventory:match": {
726 "flow-node-inventory:ethernet-match": {
727 "flow-node-inventory:ethernet-type": {
728 "flow-node-inventory:type": 2048
731 "flow-node-inventory:ipv4-destination": "10.0.0.3"
733 "flow-node-inventory:cookie": 0
736 "flow-node-inventory:priority": 1,
737 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
738 "flow-node-inventory:table_id": 0,
739 "flow-node-inventory:hard-timeout": 0,
740 "flow-node-inventory:idle-timeout": 0,
741 "flow-node-inventory:instructions": {
742 "flow-node-inventory:instruction": [
744 "flow-node-inventory:apply-actions": {
745 "flow-node-inventory:action": [
747 "flow-node-inventory:output-action": {
748 "flow-node-inventory:output-node-connector": "openflow:1:1"
750 "flow-node-inventory:order": 0
754 "flow-node-inventory:order": 0
758 "flow-node-inventory:match": {
759 "flow-node-inventory:ethernet-match": {
760 "flow-node-inventory:ethernet-type": {
761 "flow-node-inventory:type": 2048
764 "flow-node-inventory:ipv4-destination": "10.0.0.4"
766 "flow-node-inventory:cookie": 0
769 "flow-node-inventory:priority": 1,
770 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
771 "flow-node-inventory:table_id": 0,
772 "flow-node-inventory:hard-timeout": 0,
773 "flow-node-inventory:idle-timeout": 0,
774 "flow-node-inventory:instructions": {
775 "flow-node-inventory:instruction": [
777 "flow-node-inventory:apply-actions": {
778 "flow-node-inventory:action": [
780 "flow-node-inventory:output-action": {
781 "flow-node-inventory:output-node-connector": "openflow:1:2"
783 "flow-node-inventory:order": 0
787 "flow-node-inventory:order": 0
791 "flow-node-inventory:match": {
792 "flow-node-inventory:ethernet-match": {
793 "flow-node-inventory:ethernet-type": {
794 "flow-node-inventory:type": 2048
797 "flow-node-inventory:ipv4-destination": "10.0.0.5"
799 "flow-node-inventory:cookie": 0
802 "flow-node-inventory:priority": 1,
803 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
804 "flow-node-inventory:table_id": 0,
805 "flow-node-inventory:hard-timeout": 0,
806 "flow-node-inventory:idle-timeout": 0,
807 "flow-node-inventory:instructions": {
808 "flow-node-inventory:instruction": [
810 "flow-node-inventory:apply-actions": {
811 "flow-node-inventory:action": [
813 "flow-node-inventory:output-action": {
814 "flow-node-inventory:output-node-connector": "openflow:1:2"
816 "flow-node-inventory:order": 0
820 "flow-node-inventory:order": 0
824 "flow-node-inventory:match": {
825 "flow-node-inventory:ethernet-match": {
826 "flow-node-inventory:ethernet-type": {
827 "flow-node-inventory:type": 2048
830 "flow-node-inventory:ipv4-destination": "10.0.0.8"
832 "flow-node-inventory:cookie": 0
835 "flow-node-inventory:priority": 1,
836 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
837 "flow-node-inventory:table_id": 0,
838 "flow-node-inventory:hard-timeout": 0,
839 "flow-node-inventory:idle-timeout": 0,
840 "flow-node-inventory:instructions": {
841 "flow-node-inventory:instruction": [
843 "flow-node-inventory:apply-actions": {
844 "flow-node-inventory:action": [
846 "flow-node-inventory:output-action": {
847 "flow-node-inventory:output-node-connector": "openflow:1:2"
849 "flow-node-inventory:order": 0
853 "flow-node-inventory:order": 0
857 "flow-node-inventory:match": {
858 "flow-node-inventory:ethernet-match": {
859 "flow-node-inventory:ethernet-type": {
860 "flow-node-inventory:type": 2048
863 "flow-node-inventory:ipv4-destination": "10.0.0.6"
865 "flow-node-inventory:cookie": 0
868 "flow-node-inventory:priority": 1,
869 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
870 "flow-node-inventory:table_id": 0,
871 "flow-node-inventory:hard-timeout": 0,
872 "flow-node-inventory:idle-timeout": 0,
873 "flow-node-inventory:instructions": {
874 "flow-node-inventory:instruction": [
876 "flow-node-inventory:apply-actions": {
877 "flow-node-inventory:action": [
879 "flow-node-inventory:output-action": {
880 "flow-node-inventory:output-node-connector": "openflow:1:2"
882 "flow-node-inventory:order": 0
886 "flow-node-inventory:order": 0
890 "flow-node-inventory:match": {
891 "flow-node-inventory:ethernet-match": {
892 "flow-node-inventory:ethernet-type": {
893 "flow-node-inventory:type": 2048
896 "flow-node-inventory:ipv4-destination": "10.0.0.7"
898 "flow-node-inventory:cookie": 0
905 Look for your flow stats in the controller operational data via
906 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
910 - See your operational flow stats in POSTMAN with
912 - URL "http://<controller
913 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
922 "flow-node-inventory:table": [
924 "flow-node-inventory:id": 0,
925 "flow-node-inventory:flow": [
927 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
928 "opendaylight-flow-statistics:flow-statistics": {
929 "opendaylight-flow-statistics:cookie": 0,
930 "opendaylight-flow-statistics:duration": {
931 "opendaylight-flow-statistics:nanosecond": 886000000,
932 "opendaylight-flow-statistics:second": 2707
934 "opendaylight-flow-statistics:hard-timeout": 0,
935 "opendaylight-flow-statistics:byte-count": 784,
936 "opendaylight-flow-statistics:match": {
937 "opendaylight-flow-statistics:ethernet-match": {
938 "opendaylight-flow-statistics:ethernet-type": {
939 "opendaylight-flow-statistics:type": 2048
942 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
944 "opendaylight-flow-statistics:priority": 1,
945 "opendaylight-flow-statistics:packet-count": 8,
946 "opendaylight-flow-statistics:table_id": 0,
947 "opendaylight-flow-statistics:idle-timeout": 0,
948 "opendaylight-flow-statistics:instructions": {
949 "opendaylight-flow-statistics:instruction": [
951 "opendaylight-flow-statistics:order": 0,
952 "opendaylight-flow-statistics:apply-actions": {
953 "opendaylight-flow-statistics:action": [
955 "opendaylight-flow-statistics:order": 0,
956 "opendaylight-flow-statistics:output-action": {
957 "opendaylight-flow-statistics:output-node-connector": "1",
958 "opendaylight-flow-statistics:max-length": 0
969 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
970 "opendaylight-flow-statistics:flow-statistics": {
971 "opendaylight-flow-statistics:cookie": 0,
972 "opendaylight-flow-statistics:duration": {
973 "opendaylight-flow-statistics:nanosecond": 826000000,
974 "opendaylight-flow-statistics:second": 2711
976 "opendaylight-flow-statistics:hard-timeout": 0,
977 "opendaylight-flow-statistics:byte-count": 1568,
978 "opendaylight-flow-statistics:match": {
979 "opendaylight-flow-statistics:ethernet-match": {
980 "opendaylight-flow-statistics:ethernet-type": {
981 "opendaylight-flow-statistics:type": 2048
984 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
986 "opendaylight-flow-statistics:priority": 1,
987 "opendaylight-flow-statistics:packet-count": 16,
988 "opendaylight-flow-statistics:table_id": 0,
989 "opendaylight-flow-statistics:idle-timeout": 0,
990 "opendaylight-flow-statistics:instructions": {
991 "opendaylight-flow-statistics:instruction": [
993 "opendaylight-flow-statistics:order": 0,
994 "opendaylight-flow-statistics:apply-actions": {
995 "opendaylight-flow-statistics:action": [
997 "opendaylight-flow-statistics:order": 0,
998 "opendaylight-flow-statistics:output-action": {
999 "opendaylight-flow-statistics:output-node-connector": "1",
1000 "opendaylight-flow-statistics:max-length": 0
1011 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1012 "opendaylight-flow-statistics:flow-statistics": {
1013 "opendaylight-flow-statistics:cookie": 0,
1014 "opendaylight-flow-statistics:duration": {
1015 "opendaylight-flow-statistics:nanosecond": 548000000,
1016 "opendaylight-flow-statistics:second": 2708
1018 "opendaylight-flow-statistics:hard-timeout": 0,
1019 "opendaylight-flow-statistics:byte-count": 784,
1020 "opendaylight-flow-statistics:match": {
1021 "opendaylight-flow-statistics:ethernet-match": {
1022 "opendaylight-flow-statistics:ethernet-type": {
1023 "opendaylight-flow-statistics:type": 2048
1026 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1028 "opendaylight-flow-statistics:priority": 1,
1029 "opendaylight-flow-statistics:packet-count": 8,
1030 "opendaylight-flow-statistics:table_id": 0,
1031 "opendaylight-flow-statistics:idle-timeout": 0,
1032 "opendaylight-flow-statistics:instructions": {
1033 "opendaylight-flow-statistics:instruction": [
1035 "opendaylight-flow-statistics:order": 0,
1036 "opendaylight-flow-statistics:apply-actions": {
1037 "opendaylight-flow-statistics:action": [
1039 "opendaylight-flow-statistics:order": 0,
1040 "opendaylight-flow-statistics:output-action": {
1041 "opendaylight-flow-statistics:output-node-connector": "1",
1042 "opendaylight-flow-statistics:max-length": 0
1053 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1054 "opendaylight-flow-statistics:flow-statistics": {
1055 "opendaylight-flow-statistics:cookie": 0,
1056 "opendaylight-flow-statistics:duration": {
1057 "opendaylight-flow-statistics:nanosecond": 296000000,
1058 "opendaylight-flow-statistics:second": 2710
1060 "opendaylight-flow-statistics:hard-timeout": 0,
1061 "opendaylight-flow-statistics:byte-count": 1274,
1062 "opendaylight-flow-statistics:match": {
1063 "opendaylight-flow-statistics:ethernet-match": {
1064 "opendaylight-flow-statistics:ethernet-type": {
1065 "opendaylight-flow-statistics:type": 2048
1068 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1070 "opendaylight-flow-statistics:priority": 1,
1071 "opendaylight-flow-statistics:packet-count": 13,
1072 "opendaylight-flow-statistics:table_id": 0,
1073 "opendaylight-flow-statistics:idle-timeout": 0,
1074 "opendaylight-flow-statistics:instructions": {
1075 "opendaylight-flow-statistics:instruction": [
1077 "opendaylight-flow-statistics:order": 0,
1078 "opendaylight-flow-statistics:apply-actions": {
1079 "opendaylight-flow-statistics:action": [
1081 "opendaylight-flow-statistics:order": 0,
1082 "opendaylight-flow-statistics:output-action": {
1083 "opendaylight-flow-statistics:output-node-connector": "1",
1084 "opendaylight-flow-statistics:max-length": 0
1095 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1096 "opendaylight-flow-statistics:flow-statistics": {
1097 "opendaylight-flow-statistics:cookie": 0,
1098 "opendaylight-flow-statistics:duration": {
1099 "opendaylight-flow-statistics:nanosecond": 392000000,
1100 "opendaylight-flow-statistics:second": 2711
1102 "opendaylight-flow-statistics:hard-timeout": 0,
1103 "opendaylight-flow-statistics:byte-count": 1470,
1104 "opendaylight-flow-statistics:match": {
1105 "opendaylight-flow-statistics:ethernet-match": {
1106 "opendaylight-flow-statistics:ethernet-type": {
1107 "opendaylight-flow-statistics:type": 2048
1110 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1112 "opendaylight-flow-statistics:priority": 1,
1113 "opendaylight-flow-statistics:packet-count": 15,
1114 "opendaylight-flow-statistics:table_id": 0,
1115 "opendaylight-flow-statistics:idle-timeout": 0,
1116 "opendaylight-flow-statistics:instructions": {
1117 "opendaylight-flow-statistics:instruction": [
1119 "opendaylight-flow-statistics:order": 0,
1120 "opendaylight-flow-statistics:apply-actions": {
1121 "opendaylight-flow-statistics:action": [
1123 "opendaylight-flow-statistics:order": 0,
1124 "opendaylight-flow-statistics:output-action": {
1125 "opendaylight-flow-statistics:output-node-connector": "2",
1126 "opendaylight-flow-statistics:max-length": 0
1137 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1138 "opendaylight-flow-statistics:flow-statistics": {
1139 "opendaylight-flow-statistics:cookie": 0,
1140 "opendaylight-flow-statistics:duration": {
1141 "opendaylight-flow-statistics:nanosecond": 344000000,
1142 "opendaylight-flow-statistics:second": 2707
1144 "opendaylight-flow-statistics:hard-timeout": 0,
1145 "opendaylight-flow-statistics:byte-count": 784,
1146 "opendaylight-flow-statistics:match": {
1147 "opendaylight-flow-statistics:ethernet-match": {
1148 "opendaylight-flow-statistics:ethernet-type": {
1149 "opendaylight-flow-statistics:type": 2048
1152 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1154 "opendaylight-flow-statistics:priority": 1,
1155 "opendaylight-flow-statistics:packet-count": 8,
1156 "opendaylight-flow-statistics:table_id": 0,
1157 "opendaylight-flow-statistics:idle-timeout": 0,
1158 "opendaylight-flow-statistics:instructions": {
1159 "opendaylight-flow-statistics:instruction": [
1161 "opendaylight-flow-statistics:order": 0,
1162 "opendaylight-flow-statistics:apply-actions": {
1163 "opendaylight-flow-statistics:action": [
1165 "opendaylight-flow-statistics:order": 0,
1166 "opendaylight-flow-statistics:output-action": {
1167 "opendaylight-flow-statistics:output-node-connector": "2",
1168 "opendaylight-flow-statistics:max-length": 0
1179 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1180 "opendaylight-flow-statistics:flow-statistics": {
1181 "opendaylight-flow-statistics:cookie": 0,
1182 "opendaylight-flow-statistics:duration": {
1183 "opendaylight-flow-statistics:nanosecond": 577000000,
1184 "opendaylight-flow-statistics:second": 2706
1186 "opendaylight-flow-statistics:hard-timeout": 0,
1187 "opendaylight-flow-statistics:byte-count": 784,
1188 "opendaylight-flow-statistics:match": {
1189 "opendaylight-flow-statistics:ethernet-match": {
1190 "opendaylight-flow-statistics:ethernet-type": {
1191 "opendaylight-flow-statistics:type": 2048
1194 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1196 "opendaylight-flow-statistics:priority": 1,
1197 "opendaylight-flow-statistics:packet-count": 8,
1198 "opendaylight-flow-statistics:table_id": 0,
1199 "opendaylight-flow-statistics:idle-timeout": 0,
1200 "opendaylight-flow-statistics:instructions": {
1201 "opendaylight-flow-statistics:instruction": [
1203 "opendaylight-flow-statistics:order": 0,
1204 "opendaylight-flow-statistics:apply-actions": {
1205 "opendaylight-flow-statistics:action": [
1207 "opendaylight-flow-statistics:order": 0,
1208 "opendaylight-flow-statistics:output-action": {
1209 "opendaylight-flow-statistics:output-node-connector": "2",
1210 "opendaylight-flow-statistics:max-length": 0
1221 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1222 "opendaylight-flow-statistics:flow-statistics": {
1223 "opendaylight-flow-statistics:cookie": 0,
1224 "opendaylight-flow-statistics:duration": {
1225 "opendaylight-flow-statistics:nanosecond": 659000000,
1226 "opendaylight-flow-statistics:second": 2705
1228 "opendaylight-flow-statistics:hard-timeout": 0,
1229 "opendaylight-flow-statistics:byte-count": 784,
1230 "opendaylight-flow-statistics:match": {
1231 "opendaylight-flow-statistics:ethernet-match": {
1232 "opendaylight-flow-statistics:ethernet-type": {
1233 "opendaylight-flow-statistics:type": 2048
1236 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1238 "opendaylight-flow-statistics:priority": 1,
1239 "opendaylight-flow-statistics:packet-count": 8,
1240 "opendaylight-flow-statistics:table_id": 0,
1241 "opendaylight-flow-statistics:idle-timeout": 0,
1242 "opendaylight-flow-statistics:instructions": {
1243 "opendaylight-flow-statistics:instruction": [
1245 "opendaylight-flow-statistics:order": 0,
1246 "opendaylight-flow-statistics:apply-actions": {
1247 "opendaylight-flow-statistics:action": [
1249 "opendaylight-flow-statistics:order": 0,
1250 "opendaylight-flow-statistics:output-action": {
1251 "opendaylight-flow-statistics:output-node-connector": "2",
1252 "opendaylight-flow-statistics:max-length": 0
1263 "opendaylight-flow-table-statistics:flow-table-statistics": {
1264 "opendaylight-flow-table-statistics:active-flows": 8,
1265 "opendaylight-flow-table-statistics:packets-matched": 97683,
1266 "opendaylight-flow-table-statistics:packets-looked-up": 101772
1272 Discovering and testing new Flow Types
1273 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1275 Currently, the openflowplugin has a test-provider that allows you to
1276 push various flows through the system from the OSGI command line. Once
1277 those flows have been pushed through, you can see them as examples and
1278 then use them to see in the config what a particular flow example looks
1288 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1291 Point your mininet at the controller as described above.
1293 once you can see your node (probably openflow:1 if you’ve been following
1294 along) in the inventory, at the OSGI command line try running:
1298 addMDFlow openflow:1 f#
1300 Where # is a number between 1 and 80. This will create one of 80
1301 possible flows. You can go confirm they were created on the switch.
1303 Once you’ve done that, use
1307 - Accept: application/xml
1310 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1312 To see a full listing of the flows in table 2 (where they will be put).
1313 If you want to see a particular flow, look at
1316 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1318 Where # is 123 + the f# you used. So for example, for f22, your url
1322 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1324 Note: You may have to trim out some of the sections like that contain
1325 bitfields and binary types that are not correctly modeled.
1327 Note: Before attempting to PUT a flow you have created via addMDFlow,
1328 please change its URL and body to, for example, use table 1 instead of
1329 table 2 or another Flow Id, so you don’t collide.
1331 Note: There are several test command providers and the one handling
1332 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1333 use as **commands in OSGI-console** have prefix *\_*.
1338 Examples for XML for various flow matches, instructions & actions can be
1339 found in following section :ref:`here <ofp-example-flows>`.
1347 The purpose of this page is to walk you through how to see the Topology
1348 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1350 Basically, you will learn how to:
1352 1. Run the Base/Virtualization/Service provider Edition with the new
1353 openflowplugin: :ref:`Running the controller with the new OpenFlow
1354 Plugin <ofp-running-new-plugin>`
1356 2. Start mininet to use OF 1.3: :ref:`OpenFlow 1.3 Enabled Software Switches
1357 / Environment <ofp-test-environment>`
1359 3. Use RESTCONF to see the topology information.
1361 Restconf for Topology
1362 ^^^^^^^^^^^^^^^^^^^^^
1364 The REST url for listing all the nodes is:
1368 http://localhost:8080/restconf/operational/network-topology:network-topology/
1370 You will need to set the Accept header:
1374 Accept: application/xml
1376 You will also need to use HTTP Basic Auth with username: admin password:
1379 Alternately, if you have a node’s id you can address it as
1383 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1389 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1391 How to hit RestConf with Postman
1392 ''''''''''''''''''''''''''''''''
1395 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1398 In the chrome browser bar enter
1404 And click on Postman.
1406 Enter the URL. Click on the Headers button on the far right. Enter the
1407 Accept: header. Click on the Basic Auth Tab at the top and setup the
1408 username and password. Send.
1416 Groups are NOT SUPPORTED in current (2.0.0) version of
1417 `openvswitch <http://www.openvswitch.org/download>`__. See
1419 - http://openvswitch.org/releases/NEWS-2.0.0
1421 - http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1423 For testing group feature please use for example
1424 CPQD virtual switch in the :ref:`ofp-e2e-inv` section.
1429 Learn End to End for Inventory
1430 ''''''''''''''''''''''''''''''
1437 Run CPqD with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1439 Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1444 Current way to flush a group to switch looks like this:
1446 1. create MD-SAL modeled group and commit it into dataStore using two
1449 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1450 particular service provider (if suitable provider for given node
1453 3. the provider (plugin in this case) transforms MD-SAL modeled group
1454 into OF-API modeled group
1456 4. OF-API modeled group is then flushed into OFLibrary
1458 5. OFLibrary encodes group into particular version of wire protocol and
1459 sends it to particular switch
1461 6. check on CPqD if group is installed
1470 - Content-Type: application/xml
1472 - Accept: application/xml
1475 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1483 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1484 <group xmlns="urn:opendaylight:flow:inventory">
1485 <group-type>group-all</group-type>
1492 <bucket-id>12</bucket-id>
1493 <watch_group>14</watch_group>
1494 <watch_port>1234</watch_port>
1499 <ipv4-source>100.1.1.1</ipv4-source>
1505 <ipv4-destination>200.71.9.5210</ipv4-destination>
1509 <bucket-id>13</bucket-id>
1510 <watch_group>14</watch_group>
1511 <watch_port>1234</watch_port>
1514 <barrier>false</barrier>
1515 <group-name>Foo</group-name>
1516 <group-id>1</group-id>
1521 If you want to try a different group id, make sure the URL and the
1522 body stay in sync. For example, if you wanted to try: group-id 20
1523 you’d change the URL to
1524 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1525 but you would also need to update the <group-id>20</group-id> in the
1530 <ip-address> :Provide the IP Address of the machine on which the
1531 controller is running.
1533 Check for your group on the switch
1534 ''''''''''''''''''''''''''''''''''
1536 - See your group on your cpqd switch:
1540 COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1543 stat_req{type="grp", flags="0x0", group="all"}
1547 stat_repl{type="grp", flags="0x0", stats=[
1548 {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1550 Check for your group in the controller config via RESTCONF
1551 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1553 - See your configured group in POSTMAN with
1556 http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
1560 - You should no longer need to set Accept
1562 - Note: <ip-address> :Provide the IP Address of the machine on which
1563 the controller is running.
1565 Look for your group stats in the controller operational data via RESTCONF
1566 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1568 - See your operational group stats in POSTMAN with
1571 http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
1575 - Note: <ip-address> :Provide the IP Address of the machine on which
1576 the controller is running.
1578 Discovering and testing Group Types
1579 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1581 Currently, the openflowplugin has a test-provider that allows you to
1582 push various groups through the system from the OSGI command line. Once
1583 those groups have been pushed through, you can see them as examples and
1584 then use them to see in the config what a particular group example looks
1594 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1597 Point your CPqD at the controller as described above.
1599 once you can see your node (probably openflow:1 if you’ve been following
1600 along) in the inventory, at the OSGI command line try running:
1606 This will install a group in the switch. You can check whether the group
1607 is installed or not.
1609 Once you’ve done that, use
1613 - Accept: application/xml
1616 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1618 - Note: <ip-address> :Provide the IP Address of the machine on which
1619 the controller is running.
1623 Before attempting to PUT a group you have created via addGroup,
1624 please change its URL and body to, for example, use group 1 instead
1625 of group 2 or another Group Id, so that they don’t collide.
1629 There are several test command providers and the one handling groups
1630 is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1631 as commands in OSGI-console have prefix *\_*.
1636 Examples for XML for various Group Types can be found in the
1637 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1646 Learn End to End for Inventory
1647 ''''''''''''''''''''''''''''''
1649 - :ref:`ofp-e2e-inv`
1654 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1656 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1661 Current way to flush a meter to switch looks like this:
1663 1. create MD-SAL modeled flow and commit it into dataStore using two
1666 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1667 particular service provider (if suitable provider for given node
1670 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1671 into OF-API modeled meter
1673 4. OF-API modeled meter is then flushed into OFLibrary
1675 5. OFLibrary encodes meter into particular version of wire protocol and
1676 sends it to particular switch
1678 6. check on mininet side if meter is installed
1685 - Set Request Headers
1687 - Content-Type: application/xml
1689 - Accept: application/xml
1692 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1700 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1701 <meter xmlns="urn:opendaylight:flow:inventory">
1702 <container-name>abcd</container-name>
1703 <flags>meter-burst</flags>
1704 <meter-band-headers>
1706 <band-burst-size>444</band-burst-size>
1707 <band-id>0</band-id>
1708 <band-rate>234</band-rate>
1709 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1710 <dscp-remark-rate>12</dscp-remark-rate>
1711 <prec_level>1</prec_level>
1713 <flags>ofpmbt-dscp-remark</flags>
1715 </meter-band-header>
1716 </meter-band-headers>
1717 <meter-id>1</meter-id>
1718 <meter-name>Foo</meter-name>
1723 If you want to try a different meter id, make sure the URL and the
1724 body stay in sync. For example, if you wanted to try: meter-id 20
1725 you’d change the URL to
1726 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1727 but you would also need to update the 20 in the body to match.
1731 :Provide the IP Address of the machine on which the controller is
1734 Check for your meter on the switch
1735 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1737 - See your meter on your CPqD switch:
1741 COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1744 stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1748 stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1750 Check for your meter in the controller config via RESTCONF
1751 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1753 - See your configured flow in POSTMAN with
1756 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1760 - You should no longer need to set Request Headers for Accept
1762 - Note: :Provide the IP Address of the machine on which the
1763 controller is running.
1765 Look for your meter stats in the controller operational data via RESTCONF
1766 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1768 - See your operational meter stats in POSTMAN with
1771 "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1775 - Note: :Provide the IP Address of the machine on which the
1776 controller is running.
1778 Discovering and testing Meter Types
1779 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1781 Currently, the openflowplugin has a test-provider that allows you to
1782 push various meters through the system from the OSGI command line. Once
1783 those meters have been pushed through, you can see them as examples and
1784 then use them to see in the config what a particular meter example looks
1794 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1797 Point your CPqD at the controller as described above.
1799 Once you can see your CPqD connected to the controller, at the OSGI
1800 command line try running:
1806 Once you’ve done that, use
1810 - Accept: application/xml
1813 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1815 - Note: :Provide the IP Address of the machine on which the
1816 controller is running.
1820 Before attempting to PUT a meter you have created via addMeter,
1821 please change its URL and body to, for example, use meter 1 instead
1822 of meter 2 or another Meter Id, so you don’t collide.
1826 There are several test command providers and the one handling Meter
1827 is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1828 used as **commands in OSGI-console** have prefix *\_*. Examples:
1829 addMeter, modifyMeter and removeMeter.
1834 Examples for XML for various Meter Types can be found in the
1835 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1844 This page contains high level detail about the statistics collection
1845 mechanism in new OpenFlow plugin.
1847 Statistics collection in new OpenFlow plugin
1848 ''''''''''''''''''''''''''''''''''''''''''''
1850 New OpenFlow plugin collects following statistics from OpenFlow enabled
1853 1. Individual Flow Statistics
1855 2. Aggregate Flow Statistics
1857 3. Flow Table Statistics
1861 5. Group Description
1865 7. Meter Configuration
1871 10. Node Description
1873 11. Flow Table Features
1875 12. Port Description
1881 At a high level statistics collection mechanism is divided into
1882 following three parts
1884 1. Statistics related `YANG models, service APIs and notification
1885 interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
1886 are defined in the MD-SAL.
1888 2. Service APIs (RPCs) defined in yang models are implemented by
1889 OpenFlow plugin. Notification interfaces are wired up by OpenFlow
1892 3. Statistics Manager Module: This module use service APIs implemented
1893 by OpenFlow plugin to send statistics requests to all the connected
1894 OpenFlow enabled nodes. Module also implements notification
1895 interfaces to receive statistics response from nodes. Once it
1896 receives statistics response, it augment all the statistics data to
1897 the relevant element of the node (like node-connector, flow,
1898 table,group, meter) and store it in MD-SAL operational data store.
1900 Details of statistics collection
1901 ''''''''''''''''''''''''''''''''
1903 - Current implementation collects above mentioned statistics (except
1904 10-14) at a periodic interval of 15 seconds.
1906 - Statistics mentioned in 10 to 14 are only fetched when any node
1907 connects to the controller because these statistics are just static
1908 details about the respective elements.
1910 - Whenever any new element is added to node (like flow, group, meter,
1911 queue) it sends statistics request immediately to fetch the latest
1912 statistics and store it in the operational data store.
1914 - Whenever any element is deleted from the node, it immediately remove
1915 the relevant statistics from operational data store.
1917 - Statistics data are augmented to their respective element stored in
1918 the configuration data store. E.g Controller installed flows are
1919 stored in configuration data store. Whenever Statistics Manager
1920 receive statistics data related to these flow, it search the
1921 corresponding flow in the configuration data store and augment
1922 statistics in the corresponding location in operational data store.
1923 Similar approach is used for other elements of the node.
1925 - Statistics Manager stores flow statistics as an unaccounted flow
1926 statistics in operational data store if there is no corresponding
1927 flow exist in configuration data store. ID format of unaccounted flow
1928 statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
1931 - All the unaccounted flows will be cleaned up periodically after every
1932 two cycle of flow statistics collection, given that there is no
1933 update for these flows in the last two cycles.
1935 - Statistics Manager only entertains statistics response for the
1936 request sent by itself. User can write its own statistics collector
1937 using the statistics service APIs and notification defined in yang
1938 models, it won’t effect the functioning of Statistics Manager.
1940 - OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
1941 Manager don’t send any group & meter related statistics request to
1942 OpenFlow 1.0 enabled switch.
1944 RESTCONF Uris to access statistics of various node elements
1945 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1947 - Aggregate Flow Statistics & Flow Table Statistics
1951 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
1953 - Individual Flow Statistics from specific table
1957 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
1959 - Group Features & Meter Features Statistics
1963 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
1965 - Group Description & Group Statistics
1969 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
1971 - Meter Configuration & Meter Statistics
1975 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
1977 - Node Connector Statistics
1981 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
1987 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
1992 For more details and queuries, please send mail to
1993 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
1994 want to report any bug in statistics collection, please use
1995 `bugzilla <https://bugs.opendaylight.org>`__.
1997 Web / Graphical Interface
1998 -------------------------
2000 In the Hydrogen & Helium release, the current Web UI does not support
2001 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2002 the flows, multiple flow tables, etc.
2004 Command Line Interface
2005 ----------------------
2007 The following is not exactly CLI - just a set of test commands which can
2008 be executed on the OSGI console testing various features in OpenFlow 1.3
2011 - :ref:`OSGI Console Test Provider Commands:
2012 Flows <ofp-test-provider-flows>`
2014 - :ref:`OSGI Console Test Provider Commands:
2015 Groups <ofp-test-provider-groups>`
2017 - :ref:`OSGI Console Test Provider Commands:
2018 Meters <ofp-test-provider-meters>`
2020 - :ref:`OSGI Console Test Provider Commands: Topology
2021 Events <ofp-test-provider-topology>`
2023 .. _ofp-test-provider-flows:
2025 Flows : Test Provider
2026 ~~~~~~~~~~~~~~~~~~~~~
2028 Currently, the openflowplugin has a test-provider that allows you to
2029 push various flows through the system from the OSGI command line. Once
2030 those flows have been pushed through, you can see them as examples and
2031 then use them to see in the config what a particular flow example looks
2037 Run the controller by executing:
2041 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2044 Point your mininet to the controller by giving the parameters
2045 --controller=remote,ip=.
2047 Once you see your node (probably openflow:1 if you’ve been following
2048 along) in the inventory, at the OSGI command line try running:
2052 addMDFlow openflow:1 f#
2054 Where # is a number between 1 and 80 and openflow:1 is the of the
2055 switch. This will create one of 80 possible flows. You can confirm that
2056 they were created on the switch.
2058 RemoveFlow : removeMDFlow
2059 ^^^^^^^^^^^^^^^^^^^^^^^^^
2061 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2062 is connected to the controller, try running:
2066 removeMDFlow openflow:1 f#
2068 where # is a number between 1 and 80 and openflow:1 is the of the
2069 switch. The flow to be deleted should have same flowid and Nodeid as
2072 ModifyFlow : modifyMDFlow
2073 ^^^^^^^^^^^^^^^^^^^^^^^^^
2075 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2076 is connected to the controller, try running:
2080 modifyMDFlow openflow:1 f#
2082 where # is a number between 1 and 80 and openflow:1 is the of the
2083 switch. The flow to be deleted should have same flowid and Nodeid as
2086 .. _ofp-test-provider-groups:
2088 Group : Test Provider
2089 ~~~~~~~~~~~~~~~~~~~~~
2091 Currently, the openflowplugin has a test-provider that allows you to
2092 push various flows through the system from the OSGI command line. Once
2093 those flows have been pushed through, you can see them as examples and
2094 then use them to see in the config what a particular flow example looks
2100 Run the controller by executing:
2104 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2107 Point your mininet to the controller by giving the parameters
2108 --controller=remote,ip=.
2110 Once you see your node (probably openflow:1 if you’ve been following
2111 along) in the inventory, at the OSGI command line try running:
2115 addGroup openflow:1 a# g#
2117 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2118 actiontype(a#). You can confirm that they were created on the switch.
2120 RemoveGroup : removeGroup
2121 ^^^^^^^^^^^^^^^^^^^^^^^^^
2123 Run the controller by executing:
2127 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2130 Point your mininet at the controller as described above.
2132 Once you see your node (probably openflow:1 if you’ve been following
2133 along) in the inventory, at the OSGI command line try running:
2137 removeGroup openflow:1 a# g#
2139 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2140 actiontype(a#). GroupId should be same as that used for adding the flow.
2141 You can confirm that it was removed from the switch.
2143 ModifyGroup : modifyGroup
2144 ^^^^^^^^^^^^^^^^^^^^^^^^^
2146 Run the controller by executing:
2150 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2153 Point your mininet at the controller as described above.
2155 Once you see your node (probably openflow:1 if you’ve been following
2156 along) in the inventory, at the OSGI command line try running:
2160 modifyGroup openflow:1 a# g#
2162 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2163 actiontype(a#). GroupId should be same as that used for adding the flow.
2164 You can confirm that it was modified on the switch.
2166 .. _ofp-test-provider-meters:
2168 Meters : Test Provider
2169 ~~~~~~~~~~~~~~~~~~~~~~
2171 Currently, the openflowplugin has a test-provider that allows you to
2172 push various flows through the system from the OSGI command line. Once
2173 those flows have been pushed through, you can see them as examples and
2174 then use them to see in the config what a particular flow example looks
2180 Run the controller by executing:
2184 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2187 Point your mininet to the controller by giving the parameters
2188 --controller=remote,ip=.
2190 Once you see your node (probably openflow:1 if you’ve been following
2191 along) in the inventory, at the OSGI command line try running:
2197 You can now confirm that meter has been created on the switch.
2199 RemoveMeter : removeMeter
2200 ^^^^^^^^^^^^^^^^^^^^^^^^^
2202 Run the controller by executing:
2206 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2209 Point your mininet to the controller by giving the parameters
2210 --controller=remote,ip=.
2212 Once you see your node (probably openflow:1 if you’ve been following
2213 along) in the inventory, at the OSGI command line try running:
2217 removeMeter openflow:1
2219 The CLI takes care of using the same meterId and nodeId as used for
2220 meter add. You can confirm that it was removed from the switch.
2222 ModifyMeter : modifyMeter
2223 ^^^^^^^^^^^^^^^^^^^^^^^^^
2225 Run the controller by executing:
2229 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2232 Point your mininet to the controller by giving the parameters
2233 --controller=remote,ip=.
2235 Once you see your node (probably openflow:1 if you’ve been following
2236 along) in the inventory, at the OSGI command line try running:
2240 modifyMeter openflow:1
2242 The CLI takes care of using the same meterId and nodeId as used for
2243 meter add. You can confirm that it was modified on the switch.
2245 .. _ofp-test-provider-topology:
2247 Topology : Notification
2248 ~~~~~~~~~~~~~~~~~~~~~~~
2250 Currently, the openflowplugin has a test-provider that allows you to get
2251 notifications for the topology related events like Link-Discovered ,
2252 Link-Removed events.
2254 Link Discovered Event : Testing
2255 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2257 Run the controller by executing:
2261 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2264 Point your mininet to the controller by giving the parameters
2265 --controller=remote,ip=. Once the controller is connected to the switch,
2266 Link-Discovered event can be tested by initially configuring the
2267 specific flows on the switch. For Link Discovered event either
2268 table-miss flow or LLDP ether-type flow can be configured.
2270 Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
2274 addMDFlow Openflow:1 fTM
2277 OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
2278 *fTM* is the table-miss scenario here.
2280 Once the table-miss flow is configured through above command, we can see
2281 the Link-Discovered event in the debug logs on the controller console.
2283 Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
2287 addMDFlow Openflow:1 0(table-id) f81
2289 You can confirm that they were created on the switch.
2291 Once the LLDP ether-type flow is configured through above command, we
2292 can see the Link-Discovered event in the debug logs on the controller
2295 Link Removed Event : Testing
2296 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2298 Having configured either table-miss or lldp ether-type flow on switch,
2299 once the switch is disconnected we see the Link-Removed event
2301 Programmatic Interface
2302 ----------------------
2304 The API is documented in the model documentation under the section
2305 OpenFlow Services at:
2307 - `Models Documentation (OpenFlow Services
2308 Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
2310 .. _ofp-example-flows:
2318 The flow examples on this page are tested to work with OVS.
2320 Use, for example, POSTMAN with the following parameters:
2324 PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2326 - Accept: application/xml
2327 - Content-Type: application/xml
2333 PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2335 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2337 The format of the flow-programming XML is determined by by the grouping
2338 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2343 The format of the XML that describes OpenFlow matches is determined by
2344 the opendaylight-match-types yang model: .
2349 - Flow=124, Table=2, Priority=2,
2350 Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2351 match=\\{ipv4\_destination\_address=10.0.1.1/24}
2353 - Note that ethernet-type MUST be 2048 (0x800)
2357 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2358 <flow xmlns="urn:opendaylight:flow:inventory">
2359 <strict>false</strict>
2371 <table_id>2</table_id>
2373 <cookie_mask>255</cookie_mask>
2374 <installHw>false</installHw>
2381 <ipv4-destination>10.0.1.1/24</ipv4-destination>
2383 <hard-timeout>12</hard-timeout>
2385 <idle-timeout>34</idle-timeout>
2386 <flow-name>FooXf1</flow-name>
2387 <priority>2</priority>
2388 <barrier>false</barrier>
2391 Ethernet Src Address
2392 ^^^^^^^^^^^^^^^^^^^^
2394 - Flow=126, Table=2, Priority=2,
2395 Instructions=\\{Apply\_Actions={drop}},
2396 match=\\{ethernet-source=00:00:00:00:00:01}
2400 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2401 <flow xmlns="urn:opendaylight:flow:inventory">
2402 <strict>false</strict>
2414 <table_id>2</table_id>
2416 <cookie_mask>255</cookie_mask>
2417 <installHw>false</installHw>
2421 <address>00:00:00:00:00:01</address>
2425 <hard-timeout>12</hard-timeout>
2427 <idle-timeout>34</idle-timeout>
2428 <flow-name>FooXf3</flow-name>
2429 <priority>2</priority>
2430 <barrier>false</barrier>
2433 Ethernet Src & Dest Addresses, Ethernet Type
2434 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2436 - Flow=127, Table=2, Priority=2,
2437 Instructions=\\{Apply\_Actions={drop}},
2438 match=\\{ethernet-source=00:00:00:00:23:ae,
2439 ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2443 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2444 <flow xmlns="urn:opendaylight:flow:inventory">
2445 <strict>false</strict>
2457 <table_id>2</table_id>
2459 <cookie_mask>255</cookie_mask>
2460 <installHw>false</installHw>
2466 <ethernet-destination>
2467 <address>ff:ff:ff:ff:ff:ff</address>
2468 </ethernet-destination>
2470 <address>00:00:00:00:23:ae</address>
2474 <hard-timeout>12</hard-timeout>
2476 <idle-timeout>34</idle-timeout>
2477 <flow-name>FooXf4</flow-name>
2478 <priority>2</priority>
2479 <barrier>false</barrier>
2482 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2483 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2485 - Note that ethernet-type MUST be 34887 (0x8847)
2489 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2490 <flow xmlns="urn:opendaylight:flow:inventory">
2491 <strict>false</strict>
2503 <table_id>2</table_id>
2505 <cookie_mask>255</cookie_mask>
2511 <ethernet-destination>
2512 <address>ff:ff:ff:ff:ff:ff</address>
2513 </ethernet-destination>
2515 <address>00:00:00:00:23:ae</address>
2518 <ipv4-source>10.1.2.3/24</ipv4-source>
2519 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2520 <in-port>0</in-port>
2522 <hard-timeout>12</hard-timeout>
2524 <idle-timeout>34</idle-timeout>
2525 <flow-name>FooXf5</flow-name>
2526 <priority>2</priority>
2527 <barrier>false</barrier>
2530 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2533 Protocol #, IP DSCP, IP ECN, Input Port
2535 - Note that ethernet-type MUST be 2048 (0x800)
2539 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2540 <flow xmlns="urn:opendaylight:flow:inventory">
2541 <strict>false</strict>
2553 <table_id>2</table_id>
2555 <cookie_mask>255</cookie_mask>
2561 <ethernet-destination>
2562 <address>ff:ff:ff:ff:ff:aa</address>
2563 </ethernet-destination>
2565 <address>00:00:00:11:23:ae</address>
2568 <ipv4-source>10.1.2.3/24</ipv4-source>
2569 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2571 <ip-protocol>56</ip-protocol>
2572 <ip-dscp>15</ip-dscp>
2575 <in-port>0</in-port>
2577 <hard-timeout>12000</hard-timeout>
2579 <idle-timeout>12000</idle-timeout>
2580 <flow-name>FooXf7</flow-name>
2581 <priority>2</priority>
2582 <barrier>false</barrier>
2585 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2586 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2588 Dest Ports, IP DSCP, IP ECN, Input Port
2590 - Note that ethernet-type MUST be 2048 (0x800)
2592 - Note that IP Protocol Type MUST be 6
2596 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2597 <flow xmlns="urn:opendaylight:flow:inventory">
2598 <strict>false</strict>
2610 <table_id>2</table_id>
2612 <cookie_mask>255</cookie_mask>
2618 <ethernet-destination>
2619 <address>ff:ff:29:01:19:61</address>
2620 </ethernet-destination>
2622 <address>00:00:00:11:23:ae</address>
2625 <ipv4-source>17.1.2.3/8</ipv4-source>
2626 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2628 <ip-protocol>6</ip-protocol>
2629 <ip-dscp>2</ip-dscp>
2632 <tcp-source-port>25364</tcp-source-port>
2633 <tcp-destination-port>8080</tcp-destination-port>
2634 <in-port>0</in-port>
2636 <hard-timeout>1200</hard-timeout>
2638 <idle-timeout>3400</idle-timeout>
2639 <flow-name>FooXf8</flow-name>
2640 <priority>2</priority>
2641 <barrier>false</barrier>
2644 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2647 Dest Ports, IP DSCP, IP ECN, Input Port
2649 - Note that ethernet-type MUST be 2048 (0x800)
2651 - Note that IP Protocol Type MUST be 17
2655 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2656 <flow xmlns="urn:opendaylight:flow:inventory">
2657 <strict>false</strict>
2669 <table_id>2</table_id>
2671 <cookie_mask>255</cookie_mask>
2677 <ethernet-destination>
2678 <address>20:14:29:01:19:61</address>
2679 </ethernet-destination>
2681 <address>00:00:00:11:23:ae</address>
2684 <ipv4-source>19.1.2.3/10</ipv4-source>
2685 <ipv4-destination>172.168.5.6/18</ipv4-destination>
2687 <ip-protocol>17</ip-protocol>
2688 <ip-dscp>8</ip-dscp>
2691 <udp-source-port>25364</udp-source-port>
2692 <udp-destination-port>8080</udp-destination-port>
2693 <in-port>0</in-port>
2695 <hard-timeout>1200</hard-timeout>
2697 <idle-timeout>3400</idle-timeout>
2698 <flow-name>FooXf9</flow-name>
2699 <priority>2</priority>
2700 <barrier>false</barrier>
2702 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2703 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2705 Type & Code, IP DSCP, IP ECN, Input Port
2707 - Note that ethernet-type MUST be 2048 (0x800)
2709 - Note that IP Protocol Type MUST be 1
2713 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2714 <flow xmlns="urn:opendaylight:flow:inventory">
2715 <strict>false</strict>
2727 <table_id>2</table_id>
2729 <cookie_mask>255</cookie_mask>
2735 <ethernet-destination>
2736 <address>ff:ff:29:01:19:61</address>
2737 </ethernet-destination>
2739 <address>00:00:00:11:23:ae</address>
2742 <ipv4-source>17.1.2.3/8</ipv4-source>
2743 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2745 <ip-protocol>1</ip-protocol>
2746 <ip-dscp>27</ip-dscp>
2750 <icmpv4-type>6</icmpv4-type>
2751 <icmpv4-code>3</icmpv4-code>
2753 <in-port>0</in-port>
2755 <hard-timeout>1200</hard-timeout>
2757 <idle-timeout>3400</idle-timeout>
2758 <flow-name>FooXf11</flow-name>
2759 <priority>2</priority>
2762 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2765 Transport Addresses, ARP Src & Target Hw Addresses
2767 - Note that ethernet-type MUST be 2054 (0x806)
2771 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2772 <flow xmlns="urn:opendaylight:flow:inventory">
2773 <strict>false</strict>
2789 <table_id>2</table_id>
2791 <cookie_mask>255</cookie_mask>
2797 <ethernet-destination>
2798 <address>ff:ff:ff:ff:FF:ff</address>
2799 </ethernet-destination>
2801 <address>00:00:FC:01:23:ae</address>
2805 <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2806 <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2807 <arp-source-hardware-address>
2808 <address>12:34:56:78:98:AB</address>
2809 </arp-source-hardware-address>
2810 <arp-target-hardware-address>
2811 <address>FE:DC:BA:98:76:54</address>
2812 </arp-target-hardware-address>
2814 <hard-timeout>12</hard-timeout>
2816 <idle-timeout>34</idle-timeout>
2817 <flow-name>FooXf14</flow-name>
2818 <priority>2</priority>
2819 <barrier>false</barrier>
2821 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2822 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2826 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2827 <flow xmlns="urn:opendaylight:flow:inventory">
2828 <strict>false</strict>
2840 <table_id>2</table_id>
2842 <cookie_mask>255</cookie_mask>
2848 <ethernet-destination>
2849 <address>ff:ff:29:01:19:61</address>
2850 </ethernet-destination>
2852 <address>00:00:00:11:23:ae</address>
2857 <vlan-id>78</vlan-id>
2858 <vlan-id-present>true</vlan-id-present>
2860 <vlan-pcp>3</vlan-pcp>
2863 <hard-timeout>1200</hard-timeout>
2865 <idle-timeout>3400</idle-timeout>
2866 <flow-name>FooXf15</flow-name>
2867 <priority>2</priority>
2868 <barrier>false</barrier>
2871 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2872 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2876 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2877 <flow xmlns="urn:opendaylight:flow:inventory">
2878 <flow-name>FooXf17</flow-name>
2880 <cookie_mask>255</cookie_mask>
2882 <hard-timeout>1200</hard-timeout>
2883 <idle-timeout>3400</idle-timeout>
2884 <priority>2</priority>
2885 <table_id>2</table_id>
2886 <strict>false</strict>
2903 <ethernet-destination>
2904 <address>ff:ff:29:01:19:61</address>
2905 </ethernet-destination>
2907 <address>00:00:00:11:23:ae</address>
2910 <protocol-match-fields>
2911 <mpls-label>567</mpls-label>
2912 <mpls-tc>3</mpls-tc>
2913 <mpls-bos>1</mpls-bos>
2914 </protocol-match-fields>
2918 IPv6 Src & Dest Addresses
2919 ^^^^^^^^^^^^^^^^^^^^^^^^^
2921 - Note that ethernet-type MUST be 34525
2925 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2926 <flow xmlns="urn:opendaylight:flow:inventory">
2927 <strict>false</strict>
2928 <flow-name>FooXf18</flow-name>
2930 <cookie_mask>255</cookie_mask>
2932 <table_id>2</table_id>
2933 <priority>2</priority>
2934 <hard-timeout>1200</hard-timeout>
2935 <idle-timeout>3400</idle-timeout>
2936 <installHw>false</installHw>
2954 <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
2955 <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
2964 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2965 <flow xmlns="urn:opendaylight:flow:inventory">
2966 <strict>false</strict>
2967 <flow-name>FooXf19</flow-name>
2969 <cookie_mask>255</cookie_mask>
2971 <table_id>2</table_id>
2972 <priority>1</priority>
2973 <hard-timeout>1200</hard-timeout>
2974 <idle-timeout>3400</idle-timeout>
2975 <installHw>false</installHw>
2989 <metadata>12345</metadata>
2994 Metadata, Metadata Mask
2995 ^^^^^^^^^^^^^^^^^^^^^^^
2999 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3000 <flow xmlns="urn:opendaylight:flow:inventory">
3001 <strict>false</strict>
3002 <flow-name>FooXf20</flow-name>
3004 <cookie_mask>255</cookie_mask>
3006 <table_id>2</table_id>
3007 <priority>2</priority>
3008 <hard-timeout>1200</hard-timeout>
3009 <idle-timeout>3400</idle-timeout>
3010 <installHw>false</installHw>
3024 <metadata>12345</metadata>
3025 <metadata-mask>//FF</metadata-mask>
3030 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3031 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3033 - Note that ethernet-type MUST be 34525
3037 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3038 <flow xmlns="urn:opendaylight:flow:inventory">
3039 <strict>false</strict>
3040 <flow-name>FooXf21</flow-name>
3042 <cookie_mask>255</cookie_mask>
3044 <table_id>2</table_id>
3045 <priority>2</priority>
3046 <hard-timeout>1200</hard-timeout>
3047 <idle-timeout>3400</idle-timeout>
3048 <installHw>false</installHw>
3066 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3067 <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3069 <metadata>12345</metadata>
3072 <ip-protocol>17</ip-protocol>
3073 <ip-dscp>8</ip-dscp>
3076 <udp-source-port>25364</udp-source-port>
3077 <udp-destination-port>8080</udp-destination-port>
3081 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3082 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3084 - Note that ethernet-type MUST be 34525
3086 - Note that IP Protocol MUST be 6
3090 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3091 <flow xmlns="urn:opendaylight:flow:inventory">
3092 <strict>false</strict>
3093 <flow-name>FooXf22</flow-name>
3095 <cookie_mask>255</cookie_mask>
3097 <table_id>2</table_id>
3098 <priority>2</priority>
3099 <hard-timeout>1200</hard-timeout>
3100 <idle-timeout>3400</idle-timeout>
3101 <installHw>false</installHw>
3119 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3120 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3122 <metadata>12345</metadata>
3125 <ip-protocol>6</ip-protocol>
3126 <ip-dscp>60</ip-dscp>
3129 <tcp-source-port>183</tcp-source-port>
3130 <tcp-destination-port>8080</tcp-destination-port>
3134 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3135 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3137 - Note that ethernet-type MUST be 34525
3139 - Note that IP Protocol MUST be 6
3143 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3144 <flow xmlns="urn:opendaylight:flow:inventory">
3145 <strict>false</strict>
3146 <flow-name>FooXf23</flow-name>
3148 <cookie_mask>255</cookie_mask>
3150 <table_id>2</table_id>
3151 <priority>2</priority>
3152 <hard-timeout>1200</hard-timeout>
3153 <idle-timeout>3400</idle-timeout>
3154 <installHw>false</installHw>
3172 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3173 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3175 <metadata>12345</metadata>
3178 <ipv6-flabel>33</ipv6-flabel>
3181 <ip-protocol>6</ip-protocol>
3182 <ip-dscp>60</ip-dscp>
3185 <tcp-source-port>183</tcp-source-port>
3186 <tcp-destination-port>8080</tcp-destination-port>
3195 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3196 <flow xmlns="urn:opendaylight:flow:inventory">
3197 <strict>false</strict>
3198 <flow-name>FooXf24</flow-name>
3200 <cookie_mask>255</cookie_mask>
3202 <table_id>2</table_id>
3203 <priority>2</priority>
3204 <hard-timeout>1200</hard-timeout>
3205 <idle-timeout>3400</idle-timeout>
3206 <installHw>false</installHw>
3220 <tunnel-id>2591</tunnel-id>
3225 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3226 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3228 - Note that ethernet-type MUST be 34525
3230 - Note that IP Protocol MUST be 58
3234 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3235 <flow xmlns="urn:opendaylight:flow:inventory">
3236 <strict>false</strict>
3237 <flow-name>FooXf25</flow-name>
3239 <cookie_mask>255</cookie_mask>
3241 <table_id>2</table_id>
3242 <priority>2</priority>
3243 <hard-timeout>1200</hard-timeout>
3244 <idle-timeout>3400</idle-timeout>
3245 <installHw>false</installHw>
3263 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3264 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3266 <metadata>12345</metadata>
3269 <ipv6-flabel>33</ipv6-flabel>
3272 <ip-protocol>58</ip-protocol>
3273 <ip-dscp>60</ip-dscp>
3277 <icmpv6-type>6</icmpv6-type>
3278 <icmpv6-code>3</icmpv6-code>
3283 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3284 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3286 - Note that ethernet-type MUST be 34525
3288 - Note that IP Protocol MUST be 58
3292 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3293 <flow xmlns="urn:opendaylight:flow:inventory">
3294 <strict>false</strict>
3295 <flow-name>FooXf27</flow-name>
3297 <cookie_mask>255</cookie_mask>
3299 <table_id>2</table_id>
3300 <priority>2</priority>
3301 <hard-timeout>1200</hard-timeout>
3302 <idle-timeout>3400</idle-timeout>
3303 <installHw>false</installHw>
3321 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3322 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3324 <metadata>12345</metadata>
3327 <ipv6-flabel>33</ipv6-flabel>
3330 <ipv6-exthdr>0</ipv6-exthdr>
3333 <ip-protocol>6</ip-protocol>
3334 <ip-dscp>60</ip-dscp>
3337 <tcp-source-port>183</tcp-source-port>
3338 <tcp-destination-port>8080</tcp-destination-port>
3345 The format of the XML that describes OpenFlow actions is determined by
3346 the opendaylight-action-types yang model: .
3356 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3357 <flow xmlns="urn:opendaylight:flow:inventory">
3358 <strict>false</strict>
3359 <flow-name>FooXf101</flow-name>
3361 <cookie_mask>255</cookie_mask>
3362 <cookie>101</cookie>
3363 <table_id>2</table_id>
3364 <priority>2</priority>
3365 <hard-timeout>1200</hard-timeout>
3366 <idle-timeout>3400</idle-timeout>
3367 <installHw>false</installHw>
3375 <output-node-connector>TABLE</output-node-connector>
3376 <max-length>60</max-length>
3388 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3389 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3391 <metadata>12345</metadata>
3394 <ip-protocol>6</ip-protocol>
3395 <ip-dscp>60</ip-dscp>
3398 <tcp-source-port>183</tcp-source-port>
3399 <tcp-destination-port>8080</tcp-destination-port>
3408 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3409 <flow xmlns="urn:opendaylight:flow:inventory">
3410 <strict>false</strict>
3411 <flow-name>FooXf102</flow-name>
3413 <cookie_mask>255</cookie_mask>
3414 <cookie>102</cookie>
3415 <table_id>2</table_id>
3416 <priority>2</priority>
3417 <hard-timeout>1200</hard-timeout>
3418 <idle-timeout>3400</idle-timeout>
3419 <installHw>false</installHw>
3427 <output-node-connector>INPORT</output-node-connector>
3428 <max-length>60</max-length>
3439 <ethernet-destination>
3440 <address>ff:ff:29:01:19:61</address>
3441 </ethernet-destination>
3443 <address>00:00:00:11:23:ae</address>
3446 <ipv4-source>17.1.2.3/8</ipv4-source>
3447 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3449 <ip-protocol>6</ip-protocol>
3450 <ip-dscp>2</ip-dscp>
3453 <tcp-source-port>25364</tcp-source-port>
3454 <tcp-destination-port>8080</tcp-destination-port>
3458 Output to Physical Port
3459 '''''''''''''''''''''''
3463 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3464 <flow xmlns="urn:opendaylight:flow:inventory">
3465 <strict>false</strict>
3466 <flow-name>FooXf103</flow-name>
3468 <cookie_mask>255</cookie_mask>
3469 <cookie>103</cookie>
3470 <table_id>2</table_id>
3471 <priority>2</priority>
3472 <hard-timeout>1200</hard-timeout>
3473 <idle-timeout>3400</idle-timeout>
3474 <installHw>false</installHw>
3482 <output-node-connector>1</output-node-connector>
3483 <max-length>60</max-length>
3494 <ethernet-destination>
3495 <address>ff:ff:29:01:19:61</address>
3496 </ethernet-destination>
3498 <address>00:00:00:11:23:ae</address>
3501 <ipv4-source>17.1.2.3/8</ipv4-source>
3502 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3504 <ip-protocol>6</ip-protocol>
3505 <ip-dscp>2</ip-dscp>
3508 <tcp-source-port>25364</tcp-source-port>
3509 <tcp-destination-port>8080</tcp-destination-port>
3518 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3519 <flow xmlns="urn:opendaylight:flow:inventory">
3520 <strict>false</strict>
3521 <flow-name>FooXf104</flow-name>
3523 <cookie_mask>255</cookie_mask>
3524 <cookie>104</cookie>
3525 <table_id>2</table_id>
3526 <priority>2</priority>
3527 <hard-timeout>1200</hard-timeout>
3528 <idle-timeout>3400</idle-timeout>
3529 <installHw>false</installHw>
3537 <output-node-connector>LOCAL</output-node-connector>
3538 <max-length>60</max-length>
3550 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3551 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3553 <metadata>12345</metadata>
3556 <ip-protocol>6</ip-protocol>
3557 <ip-dscp>60</ip-dscp>
3560 <tcp-source-port>183</tcp-source-port>
3561 <tcp-destination-port>8080</tcp-destination-port>
3570 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3571 <flow xmlns="urn:opendaylight:flow:inventory">
3572 <strict>false</strict>
3573 <flow-name>FooXf105</flow-name>
3575 <cookie_mask>255</cookie_mask>
3576 <cookie>105</cookie>
3577 <table_id>2</table_id>
3578 <priority>2</priority>
3579 <hard-timeout>1200</hard-timeout>
3580 <idle-timeout>3400</idle-timeout>
3581 <installHw>false</installHw>
3589 <output-node-connector>NORMAL</output-node-connector>
3590 <max-length>60</max-length>
3602 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3603 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3605 <metadata>12345</metadata>
3608 <ip-protocol>6</ip-protocol>
3609 <ip-dscp>45</ip-dscp>
3612 <tcp-source-port>20345</tcp-source-port>
3613 <tcp-destination-port>80</tcp-destination-port>
3622 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3623 <flow xmlns="urn:opendaylight:flow:inventory">
3624 <strict>false</strict>
3625 <flow-name>FooXf106</flow-name>
3627 <cookie_mask>255</cookie_mask>
3628 <cookie>106</cookie>
3629 <table_id>2</table_id>
3630 <priority>2</priority>
3631 <hard-timeout>1200</hard-timeout>
3632 <idle-timeout>3400</idle-timeout>
3633 <installHw>false</installHw>
3641 <output-node-connector>FLOOD</output-node-connector>
3642 <max-length>60</max-length>
3654 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3655 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3657 <metadata>12345</metadata>
3660 <ip-protocol>6</ip-protocol>
3661 <ip-dscp>45</ip-dscp>
3664 <tcp-source-port>20345</tcp-source-port>
3665 <tcp-destination-port>80</tcp-destination-port>
3674 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3675 <flow xmlns="urn:opendaylight:flow:inventory">
3676 <strict>false</strict>
3677 <flow-name>FooXf107</flow-name>
3679 <cookie_mask>255</cookie_mask>
3680 <cookie>107</cookie>
3681 <table_id>2</table_id>
3682 <priority>2</priority>
3683 <hard-timeout>1200</hard-timeout>
3684 <idle-timeout>3400</idle-timeout>
3685 <installHw>false</installHw>
3693 <output-node-connector>ALL</output-node-connector>
3694 <max-length>60</max-length>
3705 <ethernet-destination>
3706 <address>20:14:29:01:19:61</address>
3707 </ethernet-destination>
3709 <address>00:00:00:11:23:ae</address>
3712 <ipv4-source>19.1.2.3/10</ipv4-source>
3713 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3715 <ip-protocol>17</ip-protocol>
3716 <ip-dscp>8</ip-dscp>
3719 <udp-source-port>25364</udp-source-port>
3720 <udp-destination-port>8080</udp-destination-port>
3721 <in-port>0</in-port>
3725 Output to CONTROLLER
3726 ''''''''''''''''''''
3730 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3731 <flow xmlns="urn:opendaylight:flow:inventory">
3732 <strict>false</strict>
3733 <flow-name>FooXf108</flow-name>
3735 <cookie_mask>255</cookie_mask>
3736 <cookie>108</cookie>
3737 <table_id>2</table_id>
3738 <priority>2</priority>
3739 <hard-timeout>1200</hard-timeout>
3740 <idle-timeout>3400</idle-timeout>
3741 <installHw>false</installHw>
3749 <output-node-connector>CONTROLLER</output-node-connector>
3750 <max-length>60</max-length>
3761 <ethernet-destination>
3762 <address>20:14:29:01:19:61</address>
3763 </ethernet-destination>
3765 <address>00:00:00:11:23:ae</address>
3768 <ipv4-source>19.1.2.3/10</ipv4-source>
3769 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3771 <ip-protocol>17</ip-protocol>
3772 <ip-dscp>8</ip-dscp>
3775 <udp-source-port>25364</udp-source-port>
3776 <udp-destination-port>8080</udp-destination-port>
3777 <in-port>0</in-port>
3786 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3787 <flow xmlns="urn:opendaylight:flow:inventory">
3788 <strict>false</strict>
3789 <flow-name>FooXf109</flow-name>
3791 <cookie_mask>255</cookie_mask>
3792 <cookie>109</cookie>
3793 <table_id>2</table_id>
3794 <priority>2</priority>
3795 <hard-timeout>1200</hard-timeout>
3796 <idle-timeout>3400</idle-timeout>
3797 <installHw>false</installHw>
3805 <output-node-connector>ANY</output-node-connector>
3806 <max-length>60</max-length>
3817 <ethernet-destination>
3818 <address>20:14:29:01:19:61</address>
3819 </ethernet-destination>
3821 <address>00:00:00:11:23:ae</address>
3824 <ipv4-source>19.1.2.3/10</ipv4-source>
3825 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3827 <ip-protocol>17</ip-protocol>
3828 <ip-dscp>8</ip-dscp>
3831 <udp-source-port>25364</udp-source-port>
3832 <udp-destination-port>8080</udp-destination-port>
3833 <in-port>0</in-port>
3842 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3843 <flow xmlns="urn:opendaylight:flow:inventory">
3844 <strict>false</strict>
3851 <ethernet-type>33024</ethernet-type>
3859 <vlan-id>79</vlan-id>
3860 <vlan-id-present>true</vlan-id-present>
3868 <output-node-connector>5</output-node-connector>
3875 <table_id>0</table_id>
3882 <ethernet-destination>
3883 <address>FF:FF:29:01:19:61</address>
3884 </ethernet-destination>
3886 <address>00:00:00:11:23:AE</address>
3889 <in-port>1</in-port>
3891 <flow-name>vlan_flow</flow-name>
3892 <priority>2</priority>
3900 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3902 xmlns="urn:opendaylight:flow:inventory">
3903 <flow-name>push-mpls-action</flow-name>
3910 <ethernet-type>34887</ethernet-type>
3916 <protocol-match-fields>
3917 <mpls-label>27</mpls-label>
3918 </protocol-match-fields>
3924 <output-node-connector>2</output-node-connector>
3931 <strict>false</strict>
3939 <in-port>1</in-port>
3940 <ipv4-destination>10.0.0.4/32</ipv4-destination>
3942 <idle-timeout>0</idle-timeout>
3943 <cookie_mask>255</cookie_mask>
3944 <cookie>401</cookie>
3945 <priority>8</priority>
3946 <hard-timeout>0</hard-timeout>
3947 <installHw>false</installHw>
3948 <table_id>0</table_id>
3954 - Note that ethernet-type MUST be 34887
3958 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3960 xmlns="urn:opendaylight:flow:inventory">
3961 <flow-name>push-mpls-action</flow-name>
3968 <protocol-match-fields>
3969 <mpls-label>37</mpls-label>
3970 </protocol-match-fields>
3976 <output-node-connector>2</output-node-connector>
3983 <strict>false</strict>
3991 <in-port>1</in-port>
3992 <protocol-match-fields>
3993 <mpls-label>27</mpls-label>
3994 </protocol-match-fields>
3996 <idle-timeout>0</idle-timeout>
3997 <cookie_mask>255</cookie_mask>
3998 <cookie>401</cookie>
3999 <priority>8</priority>
4000 <hard-timeout>0</hard-timeout>
4001 <installHw>false</installHw>
4002 <table_id>0</table_id>
4008 - Note that ethernet-type MUST be 34887
4010 - Issue with OVS 2.1 `OVS
4011 fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4015 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4017 xmlns="urn:opendaylight:flow:inventory">
4018 <flow-name>FooXf10</flow-name>
4025 <ethernet-type>2048</ethernet-type>
4031 <output-node-connector>2</output-node-connector>
4032 <max-length>60</max-length>
4040 <strict>false</strict>
4047 <in-port>1</in-port>
4048 <protocol-match-fields>
4049 <mpls-label>37</mpls-label>
4050 </protocol-match-fields>
4052 <idle-timeout>0</idle-timeout>
4053 <cookie>889</cookie>
4054 <cookie_mask>255</cookie_mask>
4055 <installHw>false</installHw>
4056 <hard-timeout>0</hard-timeout>
4057 <priority>10</priority>
4058 <table_id>0</table_id>
4064 - Nicira extension defined in
4065 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4067 - Example section is -
4068 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4073 <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4074 <hard-timeout>0</hard-timeout>
4075 <idle-timeout>0</idle-timeout>
4083 <metadata>2199023255552</metadata>
4084 <metadata-mask>2305841909702066176</metadata-mask>
4087 <ip-protocol>1</ip-protocol>
4090 <cookie>110100480</cookie>
4098 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4105 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4106 <idle-timeout>60</idle-timeout>
4107 <fin-idle-timeout>0</fin-idle-timeout>
4108 <hard-timeout>60</hard-timeout>
4110 <table-id>41</table-id>
4111 <priority>61010</priority>
4112 <fin-hard-timeout>0</fin-hard-timeout>
4114 <flow-mod-add-match-from-value>
4115 <src-ofs>0</src-ofs>
4117 <src-field>1538</src-field>
4118 <flow-mod-num-bits>16</flow-mod-num-bits>
4119 </flow-mod-add-match-from-value>
4122 <flow-mod-add-match-from-field>
4123 <src-ofs>0</src-ofs>
4124 <dst-ofs>0</dst-ofs>
4125 <dst-field>4100</dst-field>
4126 <src-field>3588</src-field>
4127 <flow-mod-num-bits>32</flow-mod-num-bits>
4128 </flow-mod-add-match-from-field>
4131 <flow-mod-add-match-from-field>
4132 <src-ofs>0</src-ofs>
4133 <dst-ofs>0</dst-ofs>
4134 <dst-field>518</dst-field>
4135 <src-field>1030</src-field>
4136 <flow-mod-num-bits>48</flow-mod-num-bits>
4137 </flow-mod-add-match-from-field>
4140 <flow-mod-add-match-from-field>
4141 <src-ofs>0</src-ofs>
4142 <dst-ofs>0</dst-ofs>
4143 <dst-field>3073</dst-field>
4144 <src-field>3073</src-field>
4145 <flow-mod-num-bits>8</flow-mod-num-bits>
4146 </flow-mod-add-match-from-field>
4149 <flow-mod-copy-value-into-field>
4150 <dst-ofs>0</dst-ofs>
4152 <dst-field>65540</dst-field>
4153 <flow-mod-num-bits>8</flow-mod-num-bits>
4154 </flow-mod-copy-value-into-field>
4156 <cookie>110100480</cookie>
4162 <installHw>true</installHw>
4163 <barrier>false</barrier>
4164 <strict>false</strict>
4165 <priority>61010</priority>
4166 <table_id>253</table_id>
4167 <flow-name>ACL</flow-name>
4170 Opendaylight OpenFlow Plugin: Troubleshooting
4171 ---------------------------------------------