1 OpenFlow Plugin Project User Guide
2 ==================================
4 Overview and Architecture
5 -------------------------
7 Overview and Architecture
8 ~~~~~~~~~~~~~~~~~~~~~~~~~
13 OpenFlow is a vendor-neutral standard communications interface defined
14 to enable interaction between the control and forwarding layers of an
15 SDN architecture. The OpenFlow plugin project intends to develop a
16 plugin to support implementations of the OpenFlow specification as it
17 develops and evolves. Specifically the project has developed a plugin
18 aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
19 support for subsequent OpenFlow specifications. The plugin is based on
20 the Model Driven Service Abstraction Layer (MD-SAL) architecture
21 (https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
22 This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
23 OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
29 - Southbound plugin and integration of OpenFlow 1.0/1.3.x library
32 - Ongoing support and integration of the OpenFlow specification
34 - The plugin should be implemented in an easily extensible manner
36 - Protocol verification activities will be performed on supported
37 OpenFlow specifications
39 Architecture and Design
40 ^^^^^^^^^^^^^^^^^^^^^^^
45 OpenFlow 1.3 Plugin will support the following functionality
55 - Mapping function(Infrastructure to OF structures).
57 - Connection establishment will be handled by OpenFlow library using
58 opensource netty.io library.
60 - Message handling(Ex: Packet in).
62 - Event handling and propagation to upper layers.
64 - Plugin will support both MD-SAL and Hard SAL.
66 - Will be backward compatible with OF 1.0.
68 **Activities in OF plugin module**
70 - New OF plugin bundle will support both OF 1.0 and OF 1.3.
72 - Integration with OpenFlow library.
74 - Integration with corresponding MD-SAL infrastructure.
76 - Hard SAL will be supported as adapter on top of MD-SAL plugin.
78 - OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
83 **Overall Architecture**
85 .. figure:: ./images/openflowplugin/plugin_design.jpg
86 :alt: overal architecture
96 This page is to catalog the things that have been tested and confirmed
102 Coverage has been moved to a `GoogleDoc
103 Spreadsheet <https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0>`__
105 OF 1.3 Considerations
106 ^^^^^^^^^^^^^^^^^^^^^
108 The baseline model is a OF 1.3 model, and the coverage tables primarily
109 deal with OF 1.3. However for OF 1.0, we have a column to indicate
110 either N/A if it doesn’t apply, or whether its been confirmed working.
112 OF 1.0 Considerations
113 ^^^^^^^^^^^^^^^^^^^^^
115 OF 1.0 is being considered as a switch with: \* 1 Table \* 0 Groups \* 0
116 Meters \* 1 Instruction (Apply Actions) \* and a limited vocabulary of
122 .. _ofp-running-new-plugin:
124 Running the controller with the new OpenFlow Plugin
125 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
129 There are all helium features (from features-openflowplugin) duplicated
130 into features-openflowplugin-li. The duplicates got suffix *-li* and
131 provide Lithium codebase functionality.
135 - odl-openflowplugin-app-lldp-speaker-li
137 - odl-openflowplugin-flow-services-rest-li
139 - odl-openflowplugin-drop-test-li
141 In case topology is required then the first one should be installed.
145 feature:install odl-openflowplugin-app-lldp-speaker-li
147 The Li-southbound currently provides:
159 In order to see really low level messages enter these in karaf console:
163 log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
164 log:set TRACE org.opendaylight.openflowplugin.impl
166 **How enable topology**
168 In order for topology to work (fill dataStore/operational with links)
169 there must be LLDP responses delivered back to controller. This requires
170 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
171 priority, empty match and one output action = send to controller. Having
172 this flow installed on every node will enable for gathering and
173 exporting links between nodes into dataStore/operational. This is done
174 if you use for example l2 switch application.
178 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
179 <flow xmlns="urn:opendaylight:flow:inventory">
180 <barrier>false</barrier>
182 <flags>SEND_FLOW_REM</flags>
183 <flow-name>FooXf54</flow-name>
184 <hard-timeout>0</hard-timeout>
186 <idle-timeout>0</idle-timeout>
187 <installHw>false</installHw>
193 <max-length>65535</max-length>
194 <output-node-connector>CONTROLLER</output-node-connector>
203 <priority>0</priority>
204 <strict>false</strict>
205 <table_id>0</table_id>
208 **Enable RESTCONF and Controller GUI**
210 If you want to use RESTCONF with openflowplugin project, you have to
211 install *odl-restconf* feature to enable that. To install *odl-restconf*
212 feature run the following command
216 karaf#>feature:install odl-restconf
218 If you want to access the Controller GUI, you have to install
219 *odl-dlux-core* feature to enable that. Run following command to install
224 karaf#>feature:install odl-dlux-core
226 Once you enable the feature, access the Controller GUI using following
231 http://<controller-ip>:8181/dlux/index.html
233 OpenFlow 1.3 Enabled Software Switches / Environment
234 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
236 Getting Mininet with OF 1.3
237 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
239 `Download Mininet VM Upgraded to OF
240 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
241 (or the `newer mininet-2.1.0 with
242 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
243 that works with VMware Player. For using this on VirtualBox, import this
244 to VMware Player and then export the .vmdk ) or you could build one
245 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
246 setting up Mininet with OF 1.3].
248 Installing under VirtualBox
249 '''''''''''''''''''''''''''
251 .. figure:: ./images/openflowplugin/host-only-vbox.png
252 :alt: configuring a host-only adapter
254 configuring a host-only adapter
256 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
257 don’t actually seem to allow for connections from the host to the VM.
258 Instead, you need to configure a host-only network and set it up. Do
261 - Go to the VM’s settings in VirtualBox then to network and add a
262 second adapter attached to "Host-only Adapter" (see the screenshot to
265 - Edit the /etc/network/interfaces file to configure the adapter
266 properly by adding these two lines
275 At this point you should have two interfaces one which gives you NATed
276 access to the internet and another that gives you access between your
277 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
278 address and the the host-only interface gets a 192.168.56.x address.
280 Your simplest choice: Use Vagrant
281 '''''''''''''''''''''''''''''''''
283 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
284 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
288 cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
292 This will leave you sshed into a fully provisioned Ubuntu Trusty box
293 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
295 Setup CPqD Openflow 1.3 Soft Switch
296 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
298 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
299 1.3 features, e.g group multipart statistics request. Alternate options
300 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
303 - You can setup the switch as per the instructions given on the
306 `https://github.com/CPqD/ofsoftswitch13 <https://github.com/CPqD/ofsoftswitch13>`__
308 - Fire following command to start the switch
314 $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
315 e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
317 ethX should not be associated with ip address and ipv6 should be
318 disabled on it. If you are installing the switch on your local machine,
319 you can use following command (for Ubuntu) to create virtual interface.
323 ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
325 ethX - Any existing interface.
327 Or if you are using mininet VM for installing this switch, you can
328 simply add one more adaptor to your VM.
330 Start Openflow protocol agent:
334 $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
335 e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
337 Commands to add entries to various tables of the switch
338 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
344 $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
350 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
354 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
360 $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
361 e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
363 "dpctl" --help is not very intuitive, so please keep adding any new
364 command you figured out while your experiment with the switch.
366 Using the built-in Wireshark
367 ''''''''''''''''''''''''''''
369 Mininet comes with pre-installed Wireshark, but for some reason it does
370 not include the Openflow protocol dissector. You may want to get and
371 install it in the */.wireshark/plugins/* directory.
373 First login to your mininet VM
377 ssh mininet@<your mininet vm ip> -X
379 The -X option in ssh will enable x-session over ssh so that the
380 wireshark window can be shown on your host machine’s display. when
381 prompted, enter the password (mininet).
383 From the mininet vm shell, set the wireshark capture privileges
384 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
388 sudo chgrp mininet /usr/bin/dumpcap
389 sudo chmod 754 /usr/bin/dumpcap
390 sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
392 Finally, start wireshark:
398 The wireshark window should show up.
400 To see only Openflow packets, you may want to apply the following filter
401 in the Filter window:
405 tcp.port == 6633 and tcp.flags.push == 1
407 Start the capture on *any* port.
409 Running Mininet with OF 1.3
410 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
412 From within the Mininet VM, run:
416 sudo mn --topo single,3 --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
426 The purpose of this page is to walk you through how to see the Inventory
427 Manager working end to end with the openflowplugin using OpenFlow 1.3.
429 Basically, you will learn how to:
431 1. Run the Base/Virtualization/Service provider Edition with the new
433 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
434 the controller with the new OpenFlow Plugin]
436 2. Start mininet to use OF 1.3:
437 OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
438 Enabled Software Switches / Environment]
440 3. Use RESTCONF to see the nodes appear in inventory.
442 Restconf for Inventory
443 ^^^^^^^^^^^^^^^^^^^^^^
445 The REST url for listing all the nodes is:
449 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
451 You will need to set the Accept header:
455 Accept: application/xml
457 You will also need to use HTTP Basic Auth with username: admin password:
460 Alternately, if you have a node’s id you can address it as
464 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
470 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
472 How to hit RestConf with Postman
473 ''''''''''''''''''''''''''''''''
476 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
478 In the chrome browser bar enter
484 And click on Postman.
486 Enter the URL. Click on the Headers button on the far right. Enter the
487 Accept: header. Click on the Basic Auth Tab at the top and setup the
488 username and password. Send.
493 If you have not had any switches come up, and though no children for
494 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
495 and exception will be thrown. I’m pretty sure I know how to fix this
496 bug, just need to get to it :)
504 Learn End to End for Inventory
505 ''''''''''''''''''''''''''''''
507 See :ref:`ofp-e2e-inv`
512 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
514 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
519 Current way to flush a flow to switch looks like this:
521 1. Create MD-SAL modeled flow and commit it into dataStore using two
523 FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
525 2. FRM gets notified and invokes corresponding rpc (addFlow) on
526 particular service provider (if suitable provider for given node
529 3. The provider (plugin in this case) transforms MD-SAL modeled flow
530 into OF-API modeled flow
532 4. OF-API modeled flow is then flushed into OFLibrary
534 5. OFLibrary encodes flow into particular version of wire protocol and
535 sends it to particular switch
537 6. Check on mininet side if flow is set
546 - Content-Type: application/xml
548 - Accept: application/xml
552 - Use URL: "http://<controller
553 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
561 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
562 <flow xmlns="urn:opendaylight:flow:inventory">
563 <priority>2</priority>
564 <flow-name>Foo</flow-name>
571 <ipv4-destination>10.0.10.2/24</ipv4-destination>
574 <table_id>0</table_id>
588 **\*Note**: If you want to try a different flow id or a different table,
589 make sure the URL and the body stay in sync. For example, if you wanted
590 to try: table 2 flow 20 you’d change the URL to:
593 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
595 but you would also need to update the 20 and 2 in the body of the XML.
597 Other caveat, we have a known bug with updates, so please only write to
598 a given flow id and table id on a given node once at this time until we
599 resolve it. Or you can use the DELETE method with the same URL in
600 PostMan to delete the flow information on switch and controller cache.
602 Check for your flow on the switch
603 '''''''''''''''''''''''''''''''''
605 - See your flow on your mininet:
609 mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
610 OFPST_FLOW reply (OF1.3) (xid=0x2):
611 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
613 If you want to see the above information from the mininet prompt - use
614 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
617 Check for your flow in the controller config via RESTCONF
618 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
620 - See your configured flow in POSTMAN with
622 - URL http://<controller IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
626 - You no longer need to set Accept header
633 "flow-node-inventory:table": [
635 "flow-node-inventory:id": 0,
636 "flow-node-inventory:flow": [
638 "flow-node-inventory:priority": 1,
639 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
640 "flow-node-inventory:table_id": 0,
641 "flow-node-inventory:hard-timeout": 0,
642 "flow-node-inventory:idle-timeout": 0,
643 "flow-node-inventory:instructions": {
644 "flow-node-inventory:instruction": [
646 "flow-node-inventory:apply-actions": {
647 "flow-node-inventory:action": [
649 "flow-node-inventory:output-action": {
650 "flow-node-inventory:output-node-connector": "openflow:1:1"
652 "flow-node-inventory:order": 0
656 "flow-node-inventory:order": 0
660 "flow-node-inventory:match": {
661 "flow-node-inventory:ethernet-match": {
662 "flow-node-inventory:ethernet-type": {
663 "flow-node-inventory:type": 2048
666 "flow-node-inventory:ipv4-destination": "10.0.0.2"
668 "flow-node-inventory:cookie": 0
671 "flow-node-inventory:priority": 1,
672 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
673 "flow-node-inventory:table_id": 0,
674 "flow-node-inventory:hard-timeout": 0,
675 "flow-node-inventory:idle-timeout": 0,
676 "flow-node-inventory:instructions": {
677 "flow-node-inventory:instruction": [
679 "flow-node-inventory:apply-actions": {
680 "flow-node-inventory:action": [
682 "flow-node-inventory:output-action": {
683 "flow-node-inventory:output-node-connector": "openflow:1:1"
685 "flow-node-inventory:order": 0
689 "flow-node-inventory:order": 0
693 "flow-node-inventory:match": {
694 "flow-node-inventory:ethernet-match": {
695 "flow-node-inventory:ethernet-type": {
696 "flow-node-inventory:type": 2048
699 "flow-node-inventory:ipv4-destination": "10.0.0.1"
701 "flow-node-inventory:cookie": 0
704 "flow-node-inventory:priority": 1,
705 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
706 "flow-node-inventory:table_id": 0,
707 "flow-node-inventory:hard-timeout": 0,
708 "flow-node-inventory:idle-timeout": 0,
709 "flow-node-inventory:instructions": {
710 "flow-node-inventory:instruction": [
712 "flow-node-inventory:apply-actions": {
713 "flow-node-inventory:action": [
715 "flow-node-inventory:output-action": {
716 "flow-node-inventory:output-node-connector": "openflow:1:1"
718 "flow-node-inventory:order": 0
722 "flow-node-inventory:order": 0
726 "flow-node-inventory:match": {
727 "flow-node-inventory:ethernet-match": {
728 "flow-node-inventory:ethernet-type": {
729 "flow-node-inventory:type": 2048
732 "flow-node-inventory:ipv4-destination": "10.0.0.3"
734 "flow-node-inventory:cookie": 0
737 "flow-node-inventory:priority": 1,
738 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
739 "flow-node-inventory:table_id": 0,
740 "flow-node-inventory:hard-timeout": 0,
741 "flow-node-inventory:idle-timeout": 0,
742 "flow-node-inventory:instructions": {
743 "flow-node-inventory:instruction": [
745 "flow-node-inventory:apply-actions": {
746 "flow-node-inventory:action": [
748 "flow-node-inventory:output-action": {
749 "flow-node-inventory:output-node-connector": "openflow:1:1"
751 "flow-node-inventory:order": 0
755 "flow-node-inventory:order": 0
759 "flow-node-inventory:match": {
760 "flow-node-inventory:ethernet-match": {
761 "flow-node-inventory:ethernet-type": {
762 "flow-node-inventory:type": 2048
765 "flow-node-inventory:ipv4-destination": "10.0.0.4"
767 "flow-node-inventory:cookie": 0
770 "flow-node-inventory:priority": 1,
771 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
772 "flow-node-inventory:table_id": 0,
773 "flow-node-inventory:hard-timeout": 0,
774 "flow-node-inventory:idle-timeout": 0,
775 "flow-node-inventory:instructions": {
776 "flow-node-inventory:instruction": [
778 "flow-node-inventory:apply-actions": {
779 "flow-node-inventory:action": [
781 "flow-node-inventory:output-action": {
782 "flow-node-inventory:output-node-connector": "openflow:1:2"
784 "flow-node-inventory:order": 0
788 "flow-node-inventory:order": 0
792 "flow-node-inventory:match": {
793 "flow-node-inventory:ethernet-match": {
794 "flow-node-inventory:ethernet-type": {
795 "flow-node-inventory:type": 2048
798 "flow-node-inventory:ipv4-destination": "10.0.0.5"
800 "flow-node-inventory:cookie": 0
803 "flow-node-inventory:priority": 1,
804 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
805 "flow-node-inventory:table_id": 0,
806 "flow-node-inventory:hard-timeout": 0,
807 "flow-node-inventory:idle-timeout": 0,
808 "flow-node-inventory:instructions": {
809 "flow-node-inventory:instruction": [
811 "flow-node-inventory:apply-actions": {
812 "flow-node-inventory:action": [
814 "flow-node-inventory:output-action": {
815 "flow-node-inventory:output-node-connector": "openflow:1:2"
817 "flow-node-inventory:order": 0
821 "flow-node-inventory:order": 0
825 "flow-node-inventory:match": {
826 "flow-node-inventory:ethernet-match": {
827 "flow-node-inventory:ethernet-type": {
828 "flow-node-inventory:type": 2048
831 "flow-node-inventory:ipv4-destination": "10.0.0.8"
833 "flow-node-inventory:cookie": 0
836 "flow-node-inventory:priority": 1,
837 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
838 "flow-node-inventory:table_id": 0,
839 "flow-node-inventory:hard-timeout": 0,
840 "flow-node-inventory:idle-timeout": 0,
841 "flow-node-inventory:instructions": {
842 "flow-node-inventory:instruction": [
844 "flow-node-inventory:apply-actions": {
845 "flow-node-inventory:action": [
847 "flow-node-inventory:output-action": {
848 "flow-node-inventory:output-node-connector": "openflow:1:2"
850 "flow-node-inventory:order": 0
854 "flow-node-inventory:order": 0
858 "flow-node-inventory:match": {
859 "flow-node-inventory:ethernet-match": {
860 "flow-node-inventory:ethernet-type": {
861 "flow-node-inventory:type": 2048
864 "flow-node-inventory:ipv4-destination": "10.0.0.6"
866 "flow-node-inventory:cookie": 0
869 "flow-node-inventory:priority": 1,
870 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
871 "flow-node-inventory:table_id": 0,
872 "flow-node-inventory:hard-timeout": 0,
873 "flow-node-inventory:idle-timeout": 0,
874 "flow-node-inventory:instructions": {
875 "flow-node-inventory:instruction": [
877 "flow-node-inventory:apply-actions": {
878 "flow-node-inventory:action": [
880 "flow-node-inventory:output-action": {
881 "flow-node-inventory:output-node-connector": "openflow:1:2"
883 "flow-node-inventory:order": 0
887 "flow-node-inventory:order": 0
891 "flow-node-inventory:match": {
892 "flow-node-inventory:ethernet-match": {
893 "flow-node-inventory:ethernet-type": {
894 "flow-node-inventory:type": 2048
897 "flow-node-inventory:ipv4-destination": "10.0.0.7"
899 "flow-node-inventory:cookie": 0
906 Look for your flow stats in the controller operational data via
907 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
911 - See your operational flow stats in POSTMAN with
913 - URL "http://<controller
914 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
923 "flow-node-inventory:table": [
925 "flow-node-inventory:id": 0,
926 "flow-node-inventory:flow": [
928 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
929 "opendaylight-flow-statistics:flow-statistics": {
930 "opendaylight-flow-statistics:cookie": 0,
931 "opendaylight-flow-statistics:duration": {
932 "opendaylight-flow-statistics:nanosecond": 886000000,
933 "opendaylight-flow-statistics:second": 2707
935 "opendaylight-flow-statistics:hard-timeout": 0,
936 "opendaylight-flow-statistics:byte-count": 784,
937 "opendaylight-flow-statistics:match": {
938 "opendaylight-flow-statistics:ethernet-match": {
939 "opendaylight-flow-statistics:ethernet-type": {
940 "opendaylight-flow-statistics:type": 2048
943 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
945 "opendaylight-flow-statistics:priority": 1,
946 "opendaylight-flow-statistics:packet-count": 8,
947 "opendaylight-flow-statistics:table_id": 0,
948 "opendaylight-flow-statistics:idle-timeout": 0,
949 "opendaylight-flow-statistics:instructions": {
950 "opendaylight-flow-statistics:instruction": [
952 "opendaylight-flow-statistics:order": 0,
953 "opendaylight-flow-statistics:apply-actions": {
954 "opendaylight-flow-statistics:action": [
956 "opendaylight-flow-statistics:order": 0,
957 "opendaylight-flow-statistics:output-action": {
958 "opendaylight-flow-statistics:output-node-connector": "1",
959 "opendaylight-flow-statistics:max-length": 0
970 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
971 "opendaylight-flow-statistics:flow-statistics": {
972 "opendaylight-flow-statistics:cookie": 0,
973 "opendaylight-flow-statistics:duration": {
974 "opendaylight-flow-statistics:nanosecond": 826000000,
975 "opendaylight-flow-statistics:second": 2711
977 "opendaylight-flow-statistics:hard-timeout": 0,
978 "opendaylight-flow-statistics:byte-count": 1568,
979 "opendaylight-flow-statistics:match": {
980 "opendaylight-flow-statistics:ethernet-match": {
981 "opendaylight-flow-statistics:ethernet-type": {
982 "opendaylight-flow-statistics:type": 2048
985 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
987 "opendaylight-flow-statistics:priority": 1,
988 "opendaylight-flow-statistics:packet-count": 16,
989 "opendaylight-flow-statistics:table_id": 0,
990 "opendaylight-flow-statistics:idle-timeout": 0,
991 "opendaylight-flow-statistics:instructions": {
992 "opendaylight-flow-statistics:instruction": [
994 "opendaylight-flow-statistics:order": 0,
995 "opendaylight-flow-statistics:apply-actions": {
996 "opendaylight-flow-statistics:action": [
998 "opendaylight-flow-statistics:order": 0,
999 "opendaylight-flow-statistics:output-action": {
1000 "opendaylight-flow-statistics:output-node-connector": "1",
1001 "opendaylight-flow-statistics:max-length": 0
1012 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1013 "opendaylight-flow-statistics:flow-statistics": {
1014 "opendaylight-flow-statistics:cookie": 0,
1015 "opendaylight-flow-statistics:duration": {
1016 "opendaylight-flow-statistics:nanosecond": 548000000,
1017 "opendaylight-flow-statistics:second": 2708
1019 "opendaylight-flow-statistics:hard-timeout": 0,
1020 "opendaylight-flow-statistics:byte-count": 784,
1021 "opendaylight-flow-statistics:match": {
1022 "opendaylight-flow-statistics:ethernet-match": {
1023 "opendaylight-flow-statistics:ethernet-type": {
1024 "opendaylight-flow-statistics:type": 2048
1027 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1029 "opendaylight-flow-statistics:priority": 1,
1030 "opendaylight-flow-statistics:packet-count": 8,
1031 "opendaylight-flow-statistics:table_id": 0,
1032 "opendaylight-flow-statistics:idle-timeout": 0,
1033 "opendaylight-flow-statistics:instructions": {
1034 "opendaylight-flow-statistics:instruction": [
1036 "opendaylight-flow-statistics:order": 0,
1037 "opendaylight-flow-statistics:apply-actions": {
1038 "opendaylight-flow-statistics:action": [
1040 "opendaylight-flow-statistics:order": 0,
1041 "opendaylight-flow-statistics:output-action": {
1042 "opendaylight-flow-statistics:output-node-connector": "1",
1043 "opendaylight-flow-statistics:max-length": 0
1054 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1055 "opendaylight-flow-statistics:flow-statistics": {
1056 "opendaylight-flow-statistics:cookie": 0,
1057 "opendaylight-flow-statistics:duration": {
1058 "opendaylight-flow-statistics:nanosecond": 296000000,
1059 "opendaylight-flow-statistics:second": 2710
1061 "opendaylight-flow-statistics:hard-timeout": 0,
1062 "opendaylight-flow-statistics:byte-count": 1274,
1063 "opendaylight-flow-statistics:match": {
1064 "opendaylight-flow-statistics:ethernet-match": {
1065 "opendaylight-flow-statistics:ethernet-type": {
1066 "opendaylight-flow-statistics:type": 2048
1069 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1071 "opendaylight-flow-statistics:priority": 1,
1072 "opendaylight-flow-statistics:packet-count": 13,
1073 "opendaylight-flow-statistics:table_id": 0,
1074 "opendaylight-flow-statistics:idle-timeout": 0,
1075 "opendaylight-flow-statistics:instructions": {
1076 "opendaylight-flow-statistics:instruction": [
1078 "opendaylight-flow-statistics:order": 0,
1079 "opendaylight-flow-statistics:apply-actions": {
1080 "opendaylight-flow-statistics:action": [
1082 "opendaylight-flow-statistics:order": 0,
1083 "opendaylight-flow-statistics:output-action": {
1084 "opendaylight-flow-statistics:output-node-connector": "1",
1085 "opendaylight-flow-statistics:max-length": 0
1096 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1097 "opendaylight-flow-statistics:flow-statistics": {
1098 "opendaylight-flow-statistics:cookie": 0,
1099 "opendaylight-flow-statistics:duration": {
1100 "opendaylight-flow-statistics:nanosecond": 392000000,
1101 "opendaylight-flow-statistics:second": 2711
1103 "opendaylight-flow-statistics:hard-timeout": 0,
1104 "opendaylight-flow-statistics:byte-count": 1470,
1105 "opendaylight-flow-statistics:match": {
1106 "opendaylight-flow-statistics:ethernet-match": {
1107 "opendaylight-flow-statistics:ethernet-type": {
1108 "opendaylight-flow-statistics:type": 2048
1111 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1113 "opendaylight-flow-statistics:priority": 1,
1114 "opendaylight-flow-statistics:packet-count": 15,
1115 "opendaylight-flow-statistics:table_id": 0,
1116 "opendaylight-flow-statistics:idle-timeout": 0,
1117 "opendaylight-flow-statistics:instructions": {
1118 "opendaylight-flow-statistics:instruction": [
1120 "opendaylight-flow-statistics:order": 0,
1121 "opendaylight-flow-statistics:apply-actions": {
1122 "opendaylight-flow-statistics:action": [
1124 "opendaylight-flow-statistics:order": 0,
1125 "opendaylight-flow-statistics:output-action": {
1126 "opendaylight-flow-statistics:output-node-connector": "2",
1127 "opendaylight-flow-statistics:max-length": 0
1138 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1139 "opendaylight-flow-statistics:flow-statistics": {
1140 "opendaylight-flow-statistics:cookie": 0,
1141 "opendaylight-flow-statistics:duration": {
1142 "opendaylight-flow-statistics:nanosecond": 344000000,
1143 "opendaylight-flow-statistics:second": 2707
1145 "opendaylight-flow-statistics:hard-timeout": 0,
1146 "opendaylight-flow-statistics:byte-count": 784,
1147 "opendaylight-flow-statistics:match": {
1148 "opendaylight-flow-statistics:ethernet-match": {
1149 "opendaylight-flow-statistics:ethernet-type": {
1150 "opendaylight-flow-statistics:type": 2048
1153 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1155 "opendaylight-flow-statistics:priority": 1,
1156 "opendaylight-flow-statistics:packet-count": 8,
1157 "opendaylight-flow-statistics:table_id": 0,
1158 "opendaylight-flow-statistics:idle-timeout": 0,
1159 "opendaylight-flow-statistics:instructions": {
1160 "opendaylight-flow-statistics:instruction": [
1162 "opendaylight-flow-statistics:order": 0,
1163 "opendaylight-flow-statistics:apply-actions": {
1164 "opendaylight-flow-statistics:action": [
1166 "opendaylight-flow-statistics:order": 0,
1167 "opendaylight-flow-statistics:output-action": {
1168 "opendaylight-flow-statistics:output-node-connector": "2",
1169 "opendaylight-flow-statistics:max-length": 0
1180 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1181 "opendaylight-flow-statistics:flow-statistics": {
1182 "opendaylight-flow-statistics:cookie": 0,
1183 "opendaylight-flow-statistics:duration": {
1184 "opendaylight-flow-statistics:nanosecond": 577000000,
1185 "opendaylight-flow-statistics:second": 2706
1187 "opendaylight-flow-statistics:hard-timeout": 0,
1188 "opendaylight-flow-statistics:byte-count": 784,
1189 "opendaylight-flow-statistics:match": {
1190 "opendaylight-flow-statistics:ethernet-match": {
1191 "opendaylight-flow-statistics:ethernet-type": {
1192 "opendaylight-flow-statistics:type": 2048
1195 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1197 "opendaylight-flow-statistics:priority": 1,
1198 "opendaylight-flow-statistics:packet-count": 8,
1199 "opendaylight-flow-statistics:table_id": 0,
1200 "opendaylight-flow-statistics:idle-timeout": 0,
1201 "opendaylight-flow-statistics:instructions": {
1202 "opendaylight-flow-statistics:instruction": [
1204 "opendaylight-flow-statistics:order": 0,
1205 "opendaylight-flow-statistics:apply-actions": {
1206 "opendaylight-flow-statistics:action": [
1208 "opendaylight-flow-statistics:order": 0,
1209 "opendaylight-flow-statistics:output-action": {
1210 "opendaylight-flow-statistics:output-node-connector": "2",
1211 "opendaylight-flow-statistics:max-length": 0
1222 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1223 "opendaylight-flow-statistics:flow-statistics": {
1224 "opendaylight-flow-statistics:cookie": 0,
1225 "opendaylight-flow-statistics:duration": {
1226 "opendaylight-flow-statistics:nanosecond": 659000000,
1227 "opendaylight-flow-statistics:second": 2705
1229 "opendaylight-flow-statistics:hard-timeout": 0,
1230 "opendaylight-flow-statistics:byte-count": 784,
1231 "opendaylight-flow-statistics:match": {
1232 "opendaylight-flow-statistics:ethernet-match": {
1233 "opendaylight-flow-statistics:ethernet-type": {
1234 "opendaylight-flow-statistics:type": 2048
1237 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1239 "opendaylight-flow-statistics:priority": 1,
1240 "opendaylight-flow-statistics:packet-count": 8,
1241 "opendaylight-flow-statistics:table_id": 0,
1242 "opendaylight-flow-statistics:idle-timeout": 0,
1243 "opendaylight-flow-statistics:instructions": {
1244 "opendaylight-flow-statistics:instruction": [
1246 "opendaylight-flow-statistics:order": 0,
1247 "opendaylight-flow-statistics:apply-actions": {
1248 "opendaylight-flow-statistics:action": [
1250 "opendaylight-flow-statistics:order": 0,
1251 "opendaylight-flow-statistics:output-action": {
1252 "opendaylight-flow-statistics:output-node-connector": "2",
1253 "opendaylight-flow-statistics:max-length": 0
1264 "opendaylight-flow-table-statistics:flow-table-statistics": {
1265 "opendaylight-flow-table-statistics:active-flows": 8,
1266 "opendaylight-flow-table-statistics:packets-matched": 97683,
1267 "opendaylight-flow-table-statistics:packets-looked-up": 101772
1273 Discovering and testing new Flow Types
1274 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1276 Currently, the openflowplugin has a test-provider that allows you to
1277 push various flows through the system from the OSGI command line. Once
1278 those flows have been pushed through, you can see them as examples and
1279 then use them to see in the config what a particular flow example looks
1289 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1292 Point your mininet at the controller as described above.
1294 once you can see your node (probably openflow:1 if you’ve been following
1295 along) in the inventory, at the OSGI command line try running:
1299 addMDFlow openflow:1 f#
1301 Where # is a number between 1 and 80. This will create one of 80
1302 possible flows. You can go confirm they were created on the switch.
1304 Once you’ve done that, use
1308 - Accept: application/xml
1311 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1313 To see a full listing of the flows in table 2 (where they will be put).
1314 If you want to see a particular flow, look at
1317 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1319 Where # is 123 + the f# you used. So for example, for f22, your url
1323 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1325 Note: You may have to trim out some of the sections like that contain
1326 bitfields and binary types that are not correctly modeled.
1328 Note: Before attempting to PUT a flow you have created via addMDFlow,
1329 please change its URL and body to, for example, use table 1 instead of
1330 table 2 or another Flow Id, so you don’t collide.
1332 Note: There are several test command providers and the one handling
1333 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1334 use as **commands in OSGI-console** have prefix *\_*.
1339 Examples for XML for various flow matches, instructions & actions can be
1340 found in following section :ref:`here <ofp-example-flows>`.
1348 The purpose of this page is to walk you through how to see the Topology
1349 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1351 Basically, you will learn how to:
1353 1. Run the Base/Virtualization/Service provider Edition with the new
1354 openflowplugin: :ref:`Running the controller with the new OpenFlow
1355 Plugin <ofp-running-new-plugin>`
1357 2. Start mininet to use OF 1.3: :ref:`OpenFlow 1.3 Enabled Software Switches
1358 / Environment <ofp-test-environment>`
1360 3. Use RESTCONF to see the topology information.
1362 Restconf for Topology
1363 ^^^^^^^^^^^^^^^^^^^^^
1365 The REST url for listing all the nodes is:
1369 http://localhost:8080/restconf/operational/network-topology:network-topology/
1371 You will need to set the Accept header:
1375 Accept: application/xml
1377 You will also need to use HTTP Basic Auth with username: admin password:
1380 Alternately, if you have a node’s id you can address it as
1384 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1390 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1392 How to hit RestConf with Postman
1393 ''''''''''''''''''''''''''''''''
1396 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1399 In the chrome browser bar enter
1405 And click on Postman.
1407 Enter the URL. Click on the Headers button on the far right. Enter the
1408 Accept: header. Click on the Basic Auth Tab at the top and setup the
1409 username and password. Send.
1417 Groups are NOT SUPPORTED in current (2.0.0) version of
1418 `openvswitch <http://www.openvswitch.org/download>`__. See
1420 - http://openvswitch.org/releases/NEWS-2.0.0
1422 - http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1424 For testing group feature please use for example
1425 CPQD virtual switch in the :ref:`ofp-e2e-inv` section.
1430 Learn End to End for Inventory
1431 ''''''''''''''''''''''''''''''
1438 Run CPqD with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1440 Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1445 Current way to flush a group to switch looks like this:
1447 1. create MD-SAL modeled group and commit it into dataStore using two
1450 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1451 particular service provider (if suitable provider for given node
1454 3. the provider (plugin in this case) transforms MD-SAL modeled group
1455 into OF-API modeled group
1457 4. OF-API modeled group is then flushed into OFLibrary
1459 5. OFLibrary encodes group into particular version of wire protocol and
1460 sends it to particular switch
1462 6. check on CPqD if group is installed
1471 - Content-Type: application/xml
1473 - Accept: application/xml
1476 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1484 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1485 <group xmlns="urn:opendaylight:flow:inventory">
1486 <group-type>group-all</group-type>
1493 <bucket-id>12</bucket-id>
1494 <watch_group>14</watch_group>
1495 <watch_port>1234</watch_port>
1500 <ipv4-source>100.1.1.1</ipv4-source>
1506 <ipv4-destination>200.71.9.5210</ipv4-destination>
1510 <bucket-id>13</bucket-id>
1511 <watch_group>14</watch_group>
1512 <watch_port>1234</watch_port>
1515 <barrier>false</barrier>
1516 <group-name>Foo</group-name>
1517 <group-id>1</group-id>
1522 If you want to try a different group id, make sure the URL and the
1523 body stay in sync. For example, if you wanted to try: group-id 20
1524 you’d change the URL to
1525 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1526 but you would also need to update the <group-id>20</group-id> in the
1531 <ip-address> :Provide the IP Address of the machine on which the
1532 controller is running.
1534 Check for your group on the switch
1535 ''''''''''''''''''''''''''''''''''
1537 - See your group on your cpqd switch:
1541 COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1544 stat_req{type="grp", flags="0x0", group="all"}
1548 stat_repl{type="grp", flags="0x0", stats=[
1549 {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1551 Check for your group in the controller config via RESTCONF
1552 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1554 - See your configured group in POSTMAN with
1557 http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
1561 - You should no longer need to set Accept
1563 - Note: <ip-address> :Provide the IP Address of the machine on which
1564 the controller is running.
1566 Look for your group stats in the controller operational data via RESTCONF
1567 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1569 - See your operational group stats in POSTMAN with
1572 http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
1576 - Note: <ip-address> :Provide the IP Address of the machine on which
1577 the controller is running.
1579 Discovering and testing Group Types
1580 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1582 Currently, the openflowplugin has a test-provider that allows you to
1583 push various groups through the system from the OSGI command line. Once
1584 those groups have been pushed through, you can see them as examples and
1585 then use them to see in the config what a particular group example looks
1595 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1598 Point your CPqD at the controller as described above.
1600 once you can see your node (probably openflow:1 if you’ve been following
1601 along) in the inventory, at the OSGI command line try running:
1607 This will install a group in the switch. You can check whether the group
1608 is installed or not.
1610 Once you’ve done that, use
1614 - Accept: application/xml
1617 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1619 - Note: <ip-address> :Provide the IP Address of the machine on which
1620 the controller is running.
1624 Before attempting to PUT a group you have created via addGroup,
1625 please change its URL and body to, for example, use group 1 instead
1626 of group 2 or another Group Id, so that they don’t collide.
1630 There are several test command providers and the one handling groups
1631 is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1632 as commands in OSGI-console have prefix *\_*.
1637 Examples for XML for various Group Types can be found in the
1638 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1647 Learn End to End for Inventory
1648 ''''''''''''''''''''''''''''''
1650 - :ref:`ofp-e2e-inv`
1655 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1657 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1662 Current way to flush a meter to switch looks like this:
1664 1. create MD-SAL modeled flow and commit it into dataStore using two
1667 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1668 particular service provider (if suitable provider for given node
1671 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1672 into OF-API modeled meter
1674 4. OF-API modeled meter is then flushed into OFLibrary
1676 5. OFLibrary encodes meter into particular version of wire protocol and
1677 sends it to particular switch
1679 6. check on mininet side if meter is installed
1686 - Set Request Headers
1688 - Content-Type: application/xml
1690 - Accept: application/xml
1693 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1701 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1702 <meter xmlns="urn:opendaylight:flow:inventory">
1703 <container-name>abcd</container-name>
1704 <flags>meter-burst</flags>
1705 <meter-band-headers>
1707 <band-burst-size>444</band-burst-size>
1708 <band-id>0</band-id>
1709 <band-rate>234</band-rate>
1710 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1711 <dscp-remark-rate>12</dscp-remark-rate>
1712 <prec_level>1</prec_level>
1714 <flags>ofpmbt-dscp-remark</flags>
1716 </meter-band-header>
1717 </meter-band-headers>
1718 <meter-id>1</meter-id>
1719 <meter-name>Foo</meter-name>
1724 If you want to try a different meter id, make sure the URL and the
1725 body stay in sync. For example, if you wanted to try: meter-id 20
1726 you’d change the URL to
1727 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1728 but you would also need to update the 20 in the body to match.
1732 :Provide the IP Address of the machine on which the controller is
1735 Check for your meter on the switch
1736 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1738 - See your meter on your CPqD switch:
1742 COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1745 stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1749 stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1751 Check for your meter in the controller config via RESTCONF
1752 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1754 - See your configured flow in POSTMAN with
1757 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1761 - You should no longer need to set Request Headers for Accept
1763 - Note: :Provide the IP Address of the machine on which the
1764 controller is running.
1766 Look for your meter stats in the controller operational data via RESTCONF
1767 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1769 - See your operational meter stats in POSTMAN with
1772 "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1776 - Note: :Provide the IP Address of the machine on which the
1777 controller is running.
1779 Discovering and testing Meter Types
1780 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1782 Currently, the openflowplugin has a test-provider that allows you to
1783 push various meters through the system from the OSGI command line. Once
1784 those meters have been pushed through, you can see them as examples and
1785 then use them to see in the config what a particular meter example looks
1795 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1798 Point your CPqD at the controller as described above.
1800 Once you can see your CPqD connected to the controller, at the OSGI
1801 command line try running:
1807 Once you’ve done that, use
1811 - Accept: application/xml
1814 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1816 - Note: :Provide the IP Address of the machine on which the
1817 controller is running.
1821 Before attempting to PUT a meter you have created via addMeter,
1822 please change its URL and body to, for example, use meter 1 instead
1823 of meter 2 or another Meter Id, so you don’t collide.
1827 There are several test command providers and the one handling Meter
1828 is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1829 used as **commands in OSGI-console** have prefix *\_*. Examples:
1830 addMeter, modifyMeter and removeMeter.
1835 Examples for XML for various Meter Types can be found in the
1836 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1845 This page contains high level detail about the statistics collection
1846 mechanism in new OpenFlow plugin.
1848 Statistics collection in new OpenFlow plugin
1849 ''''''''''''''''''''''''''''''''''''''''''''
1851 New OpenFlow plugin collects following statistics from OpenFlow enabled
1854 1. Individual Flow Statistics
1856 2. Aggregate Flow Statistics
1858 3. Flow Table Statistics
1862 5. Group Description
1866 7. Meter Configuration
1872 10. Node Description
1874 11. Flow Table Features
1876 12. Port Description
1882 At a high level statistics collection mechanism is divided into
1883 following three parts
1885 1. Statistics related `YANG models, service APIs and notification
1886 interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
1887 are defined in the MD-SAL.
1889 2. Service APIs (RPCs) defined in yang models are implemented by
1890 OpenFlow plugin. Notification interfaces are wired up by OpenFlow
1893 3. Statistics Manager Module: This module use service APIs implemented
1894 by OpenFlow plugin to send statistics requests to all the connected
1895 OpenFlow enabled nodes. Module also implements notification
1896 interfaces to receive statistics response from nodes. Once it
1897 receives statistics response, it augment all the statistics data to
1898 the relevant element of the node (like node-connector, flow,
1899 table,group, meter) and store it in MD-SAL operational data store.
1901 Details of statistics collection
1902 ''''''''''''''''''''''''''''''''
1904 - Current implementation collects above mentioned statistics (except
1905 10-14) at a periodic interval of 15 seconds.
1907 - Statistics mentioned in 10 to 14 are only fetched when any node
1908 connects to the controller because these statistics are just static
1909 details about the respective elements.
1911 - Whenever any new element is added to node (like flow, group, meter,
1912 queue) it sends statistics request immediately to fetch the latest
1913 statistics and store it in the operational data store.
1915 - Whenever any element is deleted from the node, it immediately remove
1916 the relevant statistics from operational data store.
1918 - Statistics data are augmented to their respective element stored in
1919 the configuration data store. E.g Controller installed flows are
1920 stored in configuration data store. Whenever Statistics Manager
1921 receive statistics data related to these flow, it search the
1922 corresponding flow in the configuration data store and augment
1923 statistics in the corresponding location in operational data store.
1924 Similar approach is used for other elements of the node.
1926 - Statistics Manager stores flow statistics as an unaccounted flow
1927 statistics in operational data store if there is no corresponding
1928 flow exist in configuration data store. ID format of unaccounted flow
1929 statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
1932 - All the unaccounted flows will be cleaned up periodically after every
1933 two cycle of flow statistics collection, given that there is no
1934 update for these flows in the last two cycles.
1936 - Statistics Manager only entertains statistics response for the
1937 request sent by itself. User can write its own statistics collector
1938 using the statistics service APIs and notification defined in yang
1939 models, it won’t effect the functioning of Statistics Manager.
1941 - OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
1942 Manager don’t send any group & meter related statistics request to
1943 OpenFlow 1.0 enabled switch.
1945 RESTCONF Uris to access statistics of various node elements
1946 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1948 - Aggregate Flow Statistics & Flow Table Statistics
1952 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
1954 - Individual Flow Statistics from specific table
1958 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
1960 - Group Features & Meter Features Statistics
1964 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
1966 - Group Description & Group Statistics
1970 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
1972 - Meter Configuration & Meter Statistics
1976 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
1978 - Node Connector Statistics
1982 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
1988 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
1993 For more details and queuries, please send mail to
1994 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
1995 want to report any bug in statistics collection, please use
1996 `bugzilla <https://bugs.opendaylight.org>`__.
1998 Web / Graphical Interface
1999 -------------------------
2001 In the Hydrogen & Helium release, the current Web UI does not support
2002 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2003 the flows, multiple flow tables, etc.
2005 Command Line Interface
2006 ----------------------
2008 The following is not exactly CLI - just a set of test commands which can
2009 be executed on the OSGI console testing various features in OpenFlow 1.3
2012 - :ref:`OSGI Console Test Provider Commands:
2013 Flows <ofp-test-provider-flows>`
2015 - :ref:`OSGI Console Test Provider Commands:
2016 Groups <ofp-test-provider-groups>`
2018 - :ref:`OSGI Console Test Provider Commands:
2019 Meters <ofp-test-provider-meters>`
2021 - :ref:`OSGI Console Test Provider Commands: Topology
2022 Events <ofp-test-provider-topology>`
2024 .. _ofp-test-provider-flows:
2026 Flows : Test Provider
2027 ~~~~~~~~~~~~~~~~~~~~~
2029 Currently, the openflowplugin has a test-provider that allows you to
2030 push various flows through the system from the OSGI command line. Once
2031 those flows have been pushed through, you can see them as examples and
2032 then use them to see in the config what a particular flow example looks
2038 Run the controller by executing:
2042 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2045 Point your mininet to the controller by giving the parameters
2046 --controller=remote,ip=.
2048 Once you see your node (probably openflow:1 if you’ve been following
2049 along) in the inventory, at the OSGI command line try running:
2053 addMDFlow openflow:1 f#
2055 Where # is a number between 1 and 80 and openflow:1 is the of the
2056 switch. This will create one of 80 possible flows. You can confirm that
2057 they were created on the switch.
2059 RemoveFlow : removeMDFlow
2060 ^^^^^^^^^^^^^^^^^^^^^^^^^
2062 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2063 is connected to the controller, try running:
2067 removeMDFlow openflow:1 f#
2069 where # is a number between 1 and 80 and openflow:1 is the of the
2070 switch. The flow to be deleted should have same flowid and Nodeid as
2073 ModifyFlow : modifyMDFlow
2074 ^^^^^^^^^^^^^^^^^^^^^^^^^
2076 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2077 is connected to the controller, try running:
2081 modifyMDFlow openflow:1 f#
2083 where # is a number between 1 and 80 and openflow:1 is the of the
2084 switch. The flow to be deleted should have same flowid and Nodeid as
2087 .. _ofp-test-provider-groups:
2089 Group : Test Provider
2090 ~~~~~~~~~~~~~~~~~~~~~
2092 Currently, the openflowplugin has a test-provider that allows you to
2093 push various flows through the system from the OSGI command line. Once
2094 those flows have been pushed through, you can see them as examples and
2095 then use them to see in the config what a particular flow example looks
2101 Run the controller by executing:
2105 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2108 Point your mininet to the controller by giving the parameters
2109 --controller=remote,ip=.
2111 Once you see your node (probably openflow:1 if you’ve been following
2112 along) in the inventory, at the OSGI command line try running:
2116 addGroup openflow:1 a# g#
2118 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2119 actiontype(a#). You can confirm that they were created on the switch.
2121 RemoveGroup : removeGroup
2122 ^^^^^^^^^^^^^^^^^^^^^^^^^
2124 Run the controller by executing:
2128 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2131 Point your mininet at the controller as described above.
2133 Once you see your node (probably openflow:1 if you’ve been following
2134 along) in the inventory, at the OSGI command line try running:
2138 removeGroup openflow:1 a# g#
2140 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2141 actiontype(a#). GroupId should be same as that used for adding the flow.
2142 You can confirm that it was removed from the switch.
2144 ModifyGroup : modifyGroup
2145 ^^^^^^^^^^^^^^^^^^^^^^^^^
2147 Run the controller by executing:
2151 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2154 Point your mininet at the controller as described above.
2156 Once you see your node (probably openflow:1 if you’ve been following
2157 along) in the inventory, at the OSGI command line try running:
2161 modifyGroup openflow:1 a# g#
2163 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2164 actiontype(a#). GroupId should be same as that used for adding the flow.
2165 You can confirm that it was modified on the switch.
2167 .. _ofp-test-provider-meters:
2169 Meters : Test Provider
2170 ~~~~~~~~~~~~~~~~~~~~~~
2172 Currently, the openflowplugin has a test-provider that allows you to
2173 push various flows through the system from the OSGI command line. Once
2174 those flows have been pushed through, you can see them as examples and
2175 then use them to see in the config what a particular flow example looks
2181 Run the controller by executing:
2185 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2188 Point your mininet to the controller by giving the parameters
2189 --controller=remote,ip=.
2191 Once you see your node (probably openflow:1 if you’ve been following
2192 along) in the inventory, at the OSGI command line try running:
2198 You can now confirm that meter has been created on the switch.
2200 RemoveMeter : removeMeter
2201 ^^^^^^^^^^^^^^^^^^^^^^^^^
2203 Run the controller by executing:
2207 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2210 Point your mininet to the controller by giving the parameters
2211 --controller=remote,ip=.
2213 Once you see your node (probably openflow:1 if you’ve been following
2214 along) in the inventory, at the OSGI command line try running:
2218 removeMeter openflow:1
2220 The CLI takes care of using the same meterId and nodeId as used for
2221 meter add. You can confirm that it was removed from the switch.
2223 ModifyMeter : modifyMeter
2224 ^^^^^^^^^^^^^^^^^^^^^^^^^
2226 Run the controller by executing:
2230 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2233 Point your mininet to the controller by giving the parameters
2234 --controller=remote,ip=.
2236 Once you see your node (probably openflow:1 if you’ve been following
2237 along) in the inventory, at the OSGI command line try running:
2241 modifyMeter openflow:1
2243 The CLI takes care of using the same meterId and nodeId as used for
2244 meter add. You can confirm that it was modified on the switch.
2246 .. _ofp-test-provider-topology:
2248 Topology : Notification
2249 ~~~~~~~~~~~~~~~~~~~~~~~
2251 Currently, the openflowplugin has a test-provider that allows you to get
2252 notifications for the topology related events like Link-Discovered ,
2253 Link-Removed events.
2255 Link Discovered Event : Testing
2256 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2258 Run the controller by executing:
2262 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2265 Point your mininet to the controller by giving the parameters
2266 --controller=remote,ip=. Once the controller is connected to the switch,
2267 Link-Discovered event can be tested by initially configuring the
2268 specific flows on the switch. For Link Discovered event either
2269 table-miss flow or LLDP ether-type flow can be configured.
2271 Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
2275 addMDFlow Openflow:1 fTM
2278 OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
2279 *fTM* is the table-miss scenario here.
2281 Once the table-miss flow is configured through above command, we can see
2282 the Link-Discovered event in the debug logs on the controller console.
2284 Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
2288 addMDFlow Openflow:1 0(table-id) f81
2290 You can confirm that they were created on the switch.
2292 Once the LLDP ether-type flow is configured through above command, we
2293 can see the Link-Discovered event in the debug logs on the controller
2296 Link Removed Event : Testing
2297 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2299 Having configured either table-miss or lldp ether-type flow on switch,
2300 once the switch is disconnected we see the Link-Removed event
2302 Programmatic Interface
2303 ----------------------
2305 The API is documented in the model documentation under the section
2306 OpenFlow Services at:
2308 - `Models Documentation (OpenFlow Services
2309 Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
2311 .. _ofp-example-flows:
2319 The flow examples on this page are tested to work with OVS.
2321 Use, for example, POSTMAN with the following parameters:
2325 PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2327 - Accept: application/xml
2328 - Content-Type: application/xml
2334 PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2336 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2338 The format of the flow-programming XML is determined by by the grouping
2339 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2344 The format of the XML that describes OpenFlow matches is determined by
2345 the opendaylight-match-types yang model: .
2350 - Flow=124, Table=2, Priority=2,
2351 Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2352 match=\\{ipv4\_destination\_address=10.0.1.1/24}
2354 - Note that ethernet-type MUST be 2048 (0x800)
2358 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2359 <flow xmlns="urn:opendaylight:flow:inventory">
2360 <strict>false</strict>
2372 <table_id>2</table_id>
2374 <cookie_mask>255</cookie_mask>
2375 <installHw>false</installHw>
2382 <ipv4-destination>10.0.1.1/24</ipv4-destination>
2384 <hard-timeout>12</hard-timeout>
2386 <idle-timeout>34</idle-timeout>
2387 <flow-name>FooXf1</flow-name>
2388 <priority>2</priority>
2389 <barrier>false</barrier>
2392 Ethernet Src Address
2393 ^^^^^^^^^^^^^^^^^^^^
2395 - Flow=126, Table=2, Priority=2,
2396 Instructions=\\{Apply\_Actions={drop}},
2397 match=\\{ethernet-source=00:00:00:00:00:01}
2401 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2402 <flow xmlns="urn:opendaylight:flow:inventory">
2403 <strict>false</strict>
2415 <table_id>2</table_id>
2417 <cookie_mask>255</cookie_mask>
2418 <installHw>false</installHw>
2422 <address>00:00:00:00:00:01</address>
2426 <hard-timeout>12</hard-timeout>
2428 <idle-timeout>34</idle-timeout>
2429 <flow-name>FooXf3</flow-name>
2430 <priority>2</priority>
2431 <barrier>false</barrier>
2434 Ethernet Src & Dest Addresses, Ethernet Type
2435 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2437 - Flow=127, Table=2, Priority=2,
2438 Instructions=\\{Apply\_Actions={drop}},
2439 match=\\{ethernet-source=00:00:00:00:23:ae,
2440 ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2444 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2445 <flow xmlns="urn:opendaylight:flow:inventory">
2446 <strict>false</strict>
2458 <table_id>2</table_id>
2460 <cookie_mask>255</cookie_mask>
2461 <installHw>false</installHw>
2467 <ethernet-destination>
2468 <address>ff:ff:ff:ff:ff:ff</address>
2469 </ethernet-destination>
2471 <address>00:00:00:00:23:ae</address>
2475 <hard-timeout>12</hard-timeout>
2477 <idle-timeout>34</idle-timeout>
2478 <flow-name>FooXf4</flow-name>
2479 <priority>2</priority>
2480 <barrier>false</barrier>
2483 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2484 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2486 - Note that ethernet-type MUST be 34887 (0x8847)
2490 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2491 <flow xmlns="urn:opendaylight:flow:inventory">
2492 <strict>false</strict>
2504 <table_id>2</table_id>
2506 <cookie_mask>255</cookie_mask>
2512 <ethernet-destination>
2513 <address>ff:ff:ff:ff:ff:ff</address>
2514 </ethernet-destination>
2516 <address>00:00:00:00:23:ae</address>
2519 <ipv4-source>10.1.2.3/24</ipv4-source>
2520 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2521 <in-port>0</in-port>
2523 <hard-timeout>12</hard-timeout>
2525 <idle-timeout>34</idle-timeout>
2526 <flow-name>FooXf5</flow-name>
2527 <priority>2</priority>
2528 <barrier>false</barrier>
2531 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2532 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2534 Protocol #, IP DSCP, IP ECN, Input Port
2536 - Note that ethernet-type MUST be 2048 (0x800)
2540 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2541 <flow xmlns="urn:opendaylight:flow:inventory">
2542 <strict>false</strict>
2554 <table_id>2</table_id>
2556 <cookie_mask>255</cookie_mask>
2562 <ethernet-destination>
2563 <address>ff:ff:ff:ff:ff:aa</address>
2564 </ethernet-destination>
2566 <address>00:00:00:11:23:ae</address>
2569 <ipv4-source>10.1.2.3/24</ipv4-source>
2570 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2572 <ip-protocol>56</ip-protocol>
2573 <ip-dscp>15</ip-dscp>
2576 <in-port>0</in-port>
2578 <hard-timeout>12000</hard-timeout>
2580 <idle-timeout>12000</idle-timeout>
2581 <flow-name>FooXf7</flow-name>
2582 <priority>2</priority>
2583 <barrier>false</barrier>
2586 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2587 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2589 Dest Ports, IP DSCP, IP ECN, Input Port
2591 - Note that ethernet-type MUST be 2048 (0x800)
2593 - Note that IP Protocol Type MUST be 6
2597 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2598 <flow xmlns="urn:opendaylight:flow:inventory">
2599 <strict>false</strict>
2611 <table_id>2</table_id>
2613 <cookie_mask>255</cookie_mask>
2619 <ethernet-destination>
2620 <address>ff:ff:29:01:19:61</address>
2621 </ethernet-destination>
2623 <address>00:00:00:11:23:ae</address>
2626 <ipv4-source>17.1.2.3/8</ipv4-source>
2627 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2629 <ip-protocol>6</ip-protocol>
2630 <ip-dscp>2</ip-dscp>
2633 <tcp-source-port>25364</tcp-source-port>
2634 <tcp-destination-port>8080</tcp-destination-port>
2635 <in-port>0</in-port>
2637 <hard-timeout>1200</hard-timeout>
2639 <idle-timeout>3400</idle-timeout>
2640 <flow-name>FooXf8</flow-name>
2641 <priority>2</priority>
2642 <barrier>false</barrier>
2645 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2646 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2648 Dest Ports, IP DSCP, IP ECN, Input Port
2650 - Note that ethernet-type MUST be 2048 (0x800)
2652 - Note that IP Protocol Type MUST be 17
2656 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2657 <flow xmlns="urn:opendaylight:flow:inventory">
2658 <strict>false</strict>
2670 <table_id>2</table_id>
2672 <cookie_mask>255</cookie_mask>
2678 <ethernet-destination>
2679 <address>20:14:29:01:19:61</address>
2680 </ethernet-destination>
2682 <address>00:00:00:11:23:ae</address>
2685 <ipv4-source>19.1.2.3/10</ipv4-source>
2686 <ipv4-destination>172.168.5.6/18</ipv4-destination>
2688 <ip-protocol>17</ip-protocol>
2689 <ip-dscp>8</ip-dscp>
2692 <udp-source-port>25364</udp-source-port>
2693 <udp-destination-port>8080</udp-destination-port>
2694 <in-port>0</in-port>
2696 <hard-timeout>1200</hard-timeout>
2698 <idle-timeout>3400</idle-timeout>
2699 <flow-name>FooXf9</flow-name>
2700 <priority>2</priority>
2701 <barrier>false</barrier>
2703 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2704 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2706 Type & Code, IP DSCP, IP ECN, Input Port
2708 - Note that ethernet-type MUST be 2048 (0x800)
2710 - Note that IP Protocol Type MUST be 1
2714 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2715 <flow xmlns="urn:opendaylight:flow:inventory">
2716 <strict>false</strict>
2728 <table_id>2</table_id>
2730 <cookie_mask>255</cookie_mask>
2736 <ethernet-destination>
2737 <address>ff:ff:29:01:19:61</address>
2738 </ethernet-destination>
2740 <address>00:00:00:11:23:ae</address>
2743 <ipv4-source>17.1.2.3/8</ipv4-source>
2744 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2746 <ip-protocol>1</ip-protocol>
2747 <ip-dscp>27</ip-dscp>
2751 <icmpv4-type>6</icmpv4-type>
2752 <icmpv4-code>3</icmpv4-code>
2754 <in-port>0</in-port>
2756 <hard-timeout>1200</hard-timeout>
2758 <idle-timeout>3400</idle-timeout>
2759 <flow-name>FooXf11</flow-name>
2760 <priority>2</priority>
2763 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2766 Transport Addresses, ARP Src & Target Hw Addresses
2768 - Note that ethernet-type MUST be 2054 (0x806)
2772 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2773 <flow xmlns="urn:opendaylight:flow:inventory">
2774 <strict>false</strict>
2790 <table_id>2</table_id>
2792 <cookie_mask>255</cookie_mask>
2798 <ethernet-destination>
2799 <address>ff:ff:ff:ff:FF:ff</address>
2800 </ethernet-destination>
2802 <address>00:00:FC:01:23:ae</address>
2806 <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2807 <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2808 <arp-source-hardware-address>
2809 <address>12:34:56:78:98:AB</address>
2810 </arp-source-hardware-address>
2811 <arp-target-hardware-address>
2812 <address>FE:DC:BA:98:76:54</address>
2813 </arp-target-hardware-address>
2815 <hard-timeout>12</hard-timeout>
2817 <idle-timeout>34</idle-timeout>
2818 <flow-name>FooXf14</flow-name>
2819 <priority>2</priority>
2820 <barrier>false</barrier>
2822 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2823 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2827 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2828 <flow xmlns="urn:opendaylight:flow:inventory">
2829 <strict>false</strict>
2841 <table_id>2</table_id>
2843 <cookie_mask>255</cookie_mask>
2849 <ethernet-destination>
2850 <address>ff:ff:29:01:19:61</address>
2851 </ethernet-destination>
2853 <address>00:00:00:11:23:ae</address>
2858 <vlan-id>78</vlan-id>
2859 <vlan-id-present>true</vlan-id-present>
2861 <vlan-pcp>3</vlan-pcp>
2864 <hard-timeout>1200</hard-timeout>
2866 <idle-timeout>3400</idle-timeout>
2867 <flow-name>FooXf15</flow-name>
2868 <priority>2</priority>
2869 <barrier>false</barrier>
2872 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2873 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2877 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2878 <flow xmlns="urn:opendaylight:flow:inventory">
2879 <flow-name>FooXf17</flow-name>
2881 <cookie_mask>255</cookie_mask>
2883 <hard-timeout>1200</hard-timeout>
2884 <idle-timeout>3400</idle-timeout>
2885 <priority>2</priority>
2886 <table_id>2</table_id>
2887 <strict>false</strict>
2904 <ethernet-destination>
2905 <address>ff:ff:29:01:19:61</address>
2906 </ethernet-destination>
2908 <address>00:00:00:11:23:ae</address>
2911 <protocol-match-fields>
2912 <mpls-label>567</mpls-label>
2913 <mpls-tc>3</mpls-tc>
2914 <mpls-bos>1</mpls-bos>
2915 </protocol-match-fields>
2919 IPv6 Src & Dest Addresses
2920 ^^^^^^^^^^^^^^^^^^^^^^^^^
2922 - Note that ethernet-type MUST be 34525
2926 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2927 <flow xmlns="urn:opendaylight:flow:inventory">
2928 <strict>false</strict>
2929 <flow-name>FooXf18</flow-name>
2931 <cookie_mask>255</cookie_mask>
2933 <table_id>2</table_id>
2934 <priority>2</priority>
2935 <hard-timeout>1200</hard-timeout>
2936 <idle-timeout>3400</idle-timeout>
2937 <installHw>false</installHw>
2955 <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
2956 <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
2965 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2966 <flow xmlns="urn:opendaylight:flow:inventory">
2967 <strict>false</strict>
2968 <flow-name>FooXf19</flow-name>
2970 <cookie_mask>255</cookie_mask>
2972 <table_id>2</table_id>
2973 <priority>1</priority>
2974 <hard-timeout>1200</hard-timeout>
2975 <idle-timeout>3400</idle-timeout>
2976 <installHw>false</installHw>
2990 <metadata>12345</metadata>
2995 Metadata, Metadata Mask
2996 ^^^^^^^^^^^^^^^^^^^^^^^
3000 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3001 <flow xmlns="urn:opendaylight:flow:inventory">
3002 <strict>false</strict>
3003 <flow-name>FooXf20</flow-name>
3005 <cookie_mask>255</cookie_mask>
3007 <table_id>2</table_id>
3008 <priority>2</priority>
3009 <hard-timeout>1200</hard-timeout>
3010 <idle-timeout>3400</idle-timeout>
3011 <installHw>false</installHw>
3025 <metadata>12345</metadata>
3026 <metadata-mask>//FF</metadata-mask>
3031 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3034 - Note that ethernet-type MUST be 34525
3038 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3039 <flow xmlns="urn:opendaylight:flow:inventory">
3040 <strict>false</strict>
3041 <flow-name>FooXf21</flow-name>
3043 <cookie_mask>255</cookie_mask>
3045 <table_id>2</table_id>
3046 <priority>2</priority>
3047 <hard-timeout>1200</hard-timeout>
3048 <idle-timeout>3400</idle-timeout>
3049 <installHw>false</installHw>
3067 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3068 <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3070 <metadata>12345</metadata>
3073 <ip-protocol>17</ip-protocol>
3074 <ip-dscp>8</ip-dscp>
3077 <udp-source-port>25364</udp-source-port>
3078 <udp-destination-port>8080</udp-destination-port>
3082 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3083 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3085 - Note that ethernet-type MUST be 34525
3087 - Note that IP Protocol MUST be 6
3091 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3092 <flow xmlns="urn:opendaylight:flow:inventory">
3093 <strict>false</strict>
3094 <flow-name>FooXf22</flow-name>
3096 <cookie_mask>255</cookie_mask>
3098 <table_id>2</table_id>
3099 <priority>2</priority>
3100 <hard-timeout>1200</hard-timeout>
3101 <idle-timeout>3400</idle-timeout>
3102 <installHw>false</installHw>
3120 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3121 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3123 <metadata>12345</metadata>
3126 <ip-protocol>6</ip-protocol>
3127 <ip-dscp>60</ip-dscp>
3130 <tcp-source-port>183</tcp-source-port>
3131 <tcp-destination-port>8080</tcp-destination-port>
3135 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3136 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3138 - Note that ethernet-type MUST be 34525
3140 - Note that IP Protocol MUST be 6
3144 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3145 <flow xmlns="urn:opendaylight:flow:inventory">
3146 <strict>false</strict>
3147 <flow-name>FooXf23</flow-name>
3149 <cookie_mask>255</cookie_mask>
3151 <table_id>2</table_id>
3152 <priority>2</priority>
3153 <hard-timeout>1200</hard-timeout>
3154 <idle-timeout>3400</idle-timeout>
3155 <installHw>false</installHw>
3173 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3174 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3176 <metadata>12345</metadata>
3179 <ipv6-flabel>33</ipv6-flabel>
3182 <ip-protocol>6</ip-protocol>
3183 <ip-dscp>60</ip-dscp>
3186 <tcp-source-port>183</tcp-source-port>
3187 <tcp-destination-port>8080</tcp-destination-port>
3196 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3197 <flow xmlns="urn:opendaylight:flow:inventory">
3198 <strict>false</strict>
3199 <flow-name>FooXf24</flow-name>
3201 <cookie_mask>255</cookie_mask>
3203 <table_id>2</table_id>
3204 <priority>2</priority>
3205 <hard-timeout>1200</hard-timeout>
3206 <idle-timeout>3400</idle-timeout>
3207 <installHw>false</installHw>
3221 <tunnel-id>2591</tunnel-id>
3226 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3227 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3229 - Note that ethernet-type MUST be 34525
3231 - Note that IP Protocol MUST be 58
3235 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3236 <flow xmlns="urn:opendaylight:flow:inventory">
3237 <strict>false</strict>
3238 <flow-name>FooXf25</flow-name>
3240 <cookie_mask>255</cookie_mask>
3242 <table_id>2</table_id>
3243 <priority>2</priority>
3244 <hard-timeout>1200</hard-timeout>
3245 <idle-timeout>3400</idle-timeout>
3246 <installHw>false</installHw>
3264 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3265 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3267 <metadata>12345</metadata>
3270 <ipv6-flabel>33</ipv6-flabel>
3273 <ip-protocol>58</ip-protocol>
3274 <ip-dscp>60</ip-dscp>
3278 <icmpv6-type>6</icmpv6-type>
3279 <icmpv6-code>3</icmpv6-code>
3284 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3285 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3287 - Note that ethernet-type MUST be 34525
3289 - Note that IP Protocol MUST be 58
3293 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3294 <flow xmlns="urn:opendaylight:flow:inventory">
3295 <strict>false</strict>
3296 <flow-name>FooXf27</flow-name>
3298 <cookie_mask>255</cookie_mask>
3300 <table_id>2</table_id>
3301 <priority>2</priority>
3302 <hard-timeout>1200</hard-timeout>
3303 <idle-timeout>3400</idle-timeout>
3304 <installHw>false</installHw>
3322 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3323 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3325 <metadata>12345</metadata>
3328 <ipv6-flabel>33</ipv6-flabel>
3331 <ipv6-exthdr>0</ipv6-exthdr>
3334 <ip-protocol>6</ip-protocol>
3335 <ip-dscp>60</ip-dscp>
3338 <tcp-source-port>183</tcp-source-port>
3339 <tcp-destination-port>8080</tcp-destination-port>
3346 The format of the XML that describes OpenFlow actions is determined by
3347 the opendaylight-action-types yang model: .
3357 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3358 <flow xmlns="urn:opendaylight:flow:inventory">
3359 <strict>false</strict>
3360 <flow-name>FooXf101</flow-name>
3362 <cookie_mask>255</cookie_mask>
3363 <cookie>101</cookie>
3364 <table_id>2</table_id>
3365 <priority>2</priority>
3366 <hard-timeout>1200</hard-timeout>
3367 <idle-timeout>3400</idle-timeout>
3368 <installHw>false</installHw>
3376 <output-node-connector>TABLE</output-node-connector>
3377 <max-length>60</max-length>
3389 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3390 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3392 <metadata>12345</metadata>
3395 <ip-protocol>6</ip-protocol>
3396 <ip-dscp>60</ip-dscp>
3399 <tcp-source-port>183</tcp-source-port>
3400 <tcp-destination-port>8080</tcp-destination-port>
3409 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3410 <flow xmlns="urn:opendaylight:flow:inventory">
3411 <strict>false</strict>
3412 <flow-name>FooXf102</flow-name>
3414 <cookie_mask>255</cookie_mask>
3415 <cookie>102</cookie>
3416 <table_id>2</table_id>
3417 <priority>2</priority>
3418 <hard-timeout>1200</hard-timeout>
3419 <idle-timeout>3400</idle-timeout>
3420 <installHw>false</installHw>
3428 <output-node-connector>INPORT</output-node-connector>
3429 <max-length>60</max-length>
3440 <ethernet-destination>
3441 <address>ff:ff:29:01:19:61</address>
3442 </ethernet-destination>
3444 <address>00:00:00:11:23:ae</address>
3447 <ipv4-source>17.1.2.3/8</ipv4-source>
3448 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3450 <ip-protocol>6</ip-protocol>
3451 <ip-dscp>2</ip-dscp>
3454 <tcp-source-port>25364</tcp-source-port>
3455 <tcp-destination-port>8080</tcp-destination-port>
3459 Output to Physical Port
3460 '''''''''''''''''''''''
3464 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3465 <flow xmlns="urn:opendaylight:flow:inventory">
3466 <strict>false</strict>
3467 <flow-name>FooXf103</flow-name>
3469 <cookie_mask>255</cookie_mask>
3470 <cookie>103</cookie>
3471 <table_id>2</table_id>
3472 <priority>2</priority>
3473 <hard-timeout>1200</hard-timeout>
3474 <idle-timeout>3400</idle-timeout>
3475 <installHw>false</installHw>
3483 <output-node-connector>1</output-node-connector>
3484 <max-length>60</max-length>
3495 <ethernet-destination>
3496 <address>ff:ff:29:01:19:61</address>
3497 </ethernet-destination>
3499 <address>00:00:00:11:23:ae</address>
3502 <ipv4-source>17.1.2.3/8</ipv4-source>
3503 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3505 <ip-protocol>6</ip-protocol>
3506 <ip-dscp>2</ip-dscp>
3509 <tcp-source-port>25364</tcp-source-port>
3510 <tcp-destination-port>8080</tcp-destination-port>
3519 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3520 <flow xmlns="urn:opendaylight:flow:inventory">
3521 <strict>false</strict>
3522 <flow-name>FooXf104</flow-name>
3524 <cookie_mask>255</cookie_mask>
3525 <cookie>104</cookie>
3526 <table_id>2</table_id>
3527 <priority>2</priority>
3528 <hard-timeout>1200</hard-timeout>
3529 <idle-timeout>3400</idle-timeout>
3530 <installHw>false</installHw>
3538 <output-node-connector>LOCAL</output-node-connector>
3539 <max-length>60</max-length>
3551 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3552 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3554 <metadata>12345</metadata>
3557 <ip-protocol>6</ip-protocol>
3558 <ip-dscp>60</ip-dscp>
3561 <tcp-source-port>183</tcp-source-port>
3562 <tcp-destination-port>8080</tcp-destination-port>
3571 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3572 <flow xmlns="urn:opendaylight:flow:inventory">
3573 <strict>false</strict>
3574 <flow-name>FooXf105</flow-name>
3576 <cookie_mask>255</cookie_mask>
3577 <cookie>105</cookie>
3578 <table_id>2</table_id>
3579 <priority>2</priority>
3580 <hard-timeout>1200</hard-timeout>
3581 <idle-timeout>3400</idle-timeout>
3582 <installHw>false</installHw>
3590 <output-node-connector>NORMAL</output-node-connector>
3591 <max-length>60</max-length>
3603 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3604 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3606 <metadata>12345</metadata>
3609 <ip-protocol>6</ip-protocol>
3610 <ip-dscp>45</ip-dscp>
3613 <tcp-source-port>20345</tcp-source-port>
3614 <tcp-destination-port>80</tcp-destination-port>
3623 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3624 <flow xmlns="urn:opendaylight:flow:inventory">
3625 <strict>false</strict>
3626 <flow-name>FooXf106</flow-name>
3628 <cookie_mask>255</cookie_mask>
3629 <cookie>106</cookie>
3630 <table_id>2</table_id>
3631 <priority>2</priority>
3632 <hard-timeout>1200</hard-timeout>
3633 <idle-timeout>3400</idle-timeout>
3634 <installHw>false</installHw>
3642 <output-node-connector>FLOOD</output-node-connector>
3643 <max-length>60</max-length>
3655 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3656 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3658 <metadata>12345</metadata>
3661 <ip-protocol>6</ip-protocol>
3662 <ip-dscp>45</ip-dscp>
3665 <tcp-source-port>20345</tcp-source-port>
3666 <tcp-destination-port>80</tcp-destination-port>
3675 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3676 <flow xmlns="urn:opendaylight:flow:inventory">
3677 <strict>false</strict>
3678 <flow-name>FooXf107</flow-name>
3680 <cookie_mask>255</cookie_mask>
3681 <cookie>107</cookie>
3682 <table_id>2</table_id>
3683 <priority>2</priority>
3684 <hard-timeout>1200</hard-timeout>
3685 <idle-timeout>3400</idle-timeout>
3686 <installHw>false</installHw>
3694 <output-node-connector>ALL</output-node-connector>
3695 <max-length>60</max-length>
3706 <ethernet-destination>
3707 <address>20:14:29:01:19:61</address>
3708 </ethernet-destination>
3710 <address>00:00:00:11:23:ae</address>
3713 <ipv4-source>19.1.2.3/10</ipv4-source>
3714 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3716 <ip-protocol>17</ip-protocol>
3717 <ip-dscp>8</ip-dscp>
3720 <udp-source-port>25364</udp-source-port>
3721 <udp-destination-port>8080</udp-destination-port>
3722 <in-port>0</in-port>
3726 Output to CONTROLLER
3727 ''''''''''''''''''''
3731 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3732 <flow xmlns="urn:opendaylight:flow:inventory">
3733 <strict>false</strict>
3734 <flow-name>FooXf108</flow-name>
3736 <cookie_mask>255</cookie_mask>
3737 <cookie>108</cookie>
3738 <table_id>2</table_id>
3739 <priority>2</priority>
3740 <hard-timeout>1200</hard-timeout>
3741 <idle-timeout>3400</idle-timeout>
3742 <installHw>false</installHw>
3750 <output-node-connector>CONTROLLER</output-node-connector>
3751 <max-length>60</max-length>
3762 <ethernet-destination>
3763 <address>20:14:29:01:19:61</address>
3764 </ethernet-destination>
3766 <address>00:00:00:11:23:ae</address>
3769 <ipv4-source>19.1.2.3/10</ipv4-source>
3770 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3772 <ip-protocol>17</ip-protocol>
3773 <ip-dscp>8</ip-dscp>
3776 <udp-source-port>25364</udp-source-port>
3777 <udp-destination-port>8080</udp-destination-port>
3778 <in-port>0</in-port>
3787 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3788 <flow xmlns="urn:opendaylight:flow:inventory">
3789 <strict>false</strict>
3790 <flow-name>FooXf109</flow-name>
3792 <cookie_mask>255</cookie_mask>
3793 <cookie>109</cookie>
3794 <table_id>2</table_id>
3795 <priority>2</priority>
3796 <hard-timeout>1200</hard-timeout>
3797 <idle-timeout>3400</idle-timeout>
3798 <installHw>false</installHw>
3806 <output-node-connector>ANY</output-node-connector>
3807 <max-length>60</max-length>
3818 <ethernet-destination>
3819 <address>20:14:29:01:19:61</address>
3820 </ethernet-destination>
3822 <address>00:00:00:11:23:ae</address>
3825 <ipv4-source>19.1.2.3/10</ipv4-source>
3826 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3828 <ip-protocol>17</ip-protocol>
3829 <ip-dscp>8</ip-dscp>
3832 <udp-source-port>25364</udp-source-port>
3833 <udp-destination-port>8080</udp-destination-port>
3834 <in-port>0</in-port>
3843 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3844 <flow xmlns="urn:opendaylight:flow:inventory">
3845 <strict>false</strict>
3852 <ethernet-type>33024</ethernet-type>
3860 <vlan-id>79</vlan-id>
3861 <vlan-id-present>true</vlan-id-present>
3869 <output-node-connector>5</output-node-connector>
3876 <table_id>0</table_id>
3883 <ethernet-destination>
3884 <address>FF:FF:29:01:19:61</address>
3885 </ethernet-destination>
3887 <address>00:00:00:11:23:AE</address>
3890 <in-port>1</in-port>
3892 <flow-name>vlan_flow</flow-name>
3893 <priority>2</priority>
3901 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3903 xmlns="urn:opendaylight:flow:inventory">
3904 <flow-name>push-mpls-action</flow-name>
3911 <ethernet-type>34887</ethernet-type>
3917 <protocol-match-fields>
3918 <mpls-label>27</mpls-label>
3919 </protocol-match-fields>
3925 <output-node-connector>2</output-node-connector>
3932 <strict>false</strict>
3940 <in-port>1</in-port>
3941 <ipv4-destination>10.0.0.4/32</ipv4-destination>
3943 <idle-timeout>0</idle-timeout>
3944 <cookie_mask>255</cookie_mask>
3945 <cookie>401</cookie>
3946 <priority>8</priority>
3947 <hard-timeout>0</hard-timeout>
3948 <installHw>false</installHw>
3949 <table_id>0</table_id>
3955 - Note that ethernet-type MUST be 34887
3959 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3961 xmlns="urn:opendaylight:flow:inventory">
3962 <flow-name>push-mpls-action</flow-name>
3969 <protocol-match-fields>
3970 <mpls-label>37</mpls-label>
3971 </protocol-match-fields>
3977 <output-node-connector>2</output-node-connector>
3984 <strict>false</strict>
3992 <in-port>1</in-port>
3993 <protocol-match-fields>
3994 <mpls-label>27</mpls-label>
3995 </protocol-match-fields>
3997 <idle-timeout>0</idle-timeout>
3998 <cookie_mask>255</cookie_mask>
3999 <cookie>401</cookie>
4000 <priority>8</priority>
4001 <hard-timeout>0</hard-timeout>
4002 <installHw>false</installHw>
4003 <table_id>0</table_id>
4009 - Note that ethernet-type MUST be 34887
4011 - Issue with OVS 2.1 `OVS
4012 fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4016 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4018 xmlns="urn:opendaylight:flow:inventory">
4019 <flow-name>FooXf10</flow-name>
4026 <ethernet-type>2048</ethernet-type>
4032 <output-node-connector>2</output-node-connector>
4033 <max-length>60</max-length>
4041 <strict>false</strict>
4048 <in-port>1</in-port>
4049 <protocol-match-fields>
4050 <mpls-label>37</mpls-label>
4051 </protocol-match-fields>
4053 <idle-timeout>0</idle-timeout>
4054 <cookie>889</cookie>
4055 <cookie_mask>255</cookie_mask>
4056 <installHw>false</installHw>
4057 <hard-timeout>0</hard-timeout>
4058 <priority>10</priority>
4059 <table_id>0</table_id>
4065 - Nicira extension defined in
4066 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4068 - Example section is -
4069 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4074 <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4075 <hard-timeout>0</hard-timeout>
4076 <idle-timeout>0</idle-timeout>
4084 <metadata>2199023255552</metadata>
4085 <metadata-mask>2305841909702066176</metadata-mask>
4088 <ip-protocol>1</ip-protocol>
4091 <cookie>110100480</cookie>
4099 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4106 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4107 <idle-timeout>60</idle-timeout>
4108 <fin-idle-timeout>0</fin-idle-timeout>
4109 <hard-timeout>60</hard-timeout>
4111 <table-id>41</table-id>
4112 <priority>61010</priority>
4113 <fin-hard-timeout>0</fin-hard-timeout>
4115 <flow-mod-add-match-from-value>
4116 <src-ofs>0</src-ofs>
4118 <src-field>1538</src-field>
4119 <flow-mod-num-bits>16</flow-mod-num-bits>
4120 </flow-mod-add-match-from-value>
4123 <flow-mod-add-match-from-field>
4124 <src-ofs>0</src-ofs>
4125 <dst-ofs>0</dst-ofs>
4126 <dst-field>4100</dst-field>
4127 <src-field>3588</src-field>
4128 <flow-mod-num-bits>32</flow-mod-num-bits>
4129 </flow-mod-add-match-from-field>
4132 <flow-mod-add-match-from-field>
4133 <src-ofs>0</src-ofs>
4134 <dst-ofs>0</dst-ofs>
4135 <dst-field>518</dst-field>
4136 <src-field>1030</src-field>
4137 <flow-mod-num-bits>48</flow-mod-num-bits>
4138 </flow-mod-add-match-from-field>
4141 <flow-mod-add-match-from-field>
4142 <src-ofs>0</src-ofs>
4143 <dst-ofs>0</dst-ofs>
4144 <dst-field>3073</dst-field>
4145 <src-field>3073</src-field>
4146 <flow-mod-num-bits>8</flow-mod-num-bits>
4147 </flow-mod-add-match-from-field>
4150 <flow-mod-copy-value-into-field>
4151 <dst-ofs>0</dst-ofs>
4153 <dst-field>65540</dst-field>
4154 <flow-mod-num-bits>8</flow-mod-num-bits>
4155 </flow-mod-copy-value-into-field>
4157 <cookie>110100480</cookie>
4163 <installHw>true</installHw>
4164 <barrier>false</barrier>
4165 <strict>false</strict>
4166 <priority>61010</priority>
4167 <table_id>253</table_id>
4168 <flow-name>ACL</flow-name>
4171 Opendaylight OpenFlow Plugin: Troubleshooting
4172 ---------------------------------------------