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 extensibile 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127 Opendaylight Controller Plugin Options
128 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
130 - Run OpenDaylight controller with the new OpenFlow 1.0/1.3 plugin
132 There are 2 ways. In integration project the plugin version is
133 controlled by startup parameter. Or there is distribution build
134 available directly in openflowplugin project.
136 1. use **integration** project
138 - download and unzip latest build from
139 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.2.2-SNAPSHOT/
143 cd <extracted directory>/bin
146 - or clone and build **integration** project:
150 git clone https://git.opendaylight.org/gerrit/p/integration.git
151 cd integration/distributions/extra/karaf
153 cd ./target/assembly/bin
161 2. use **openflowplugin** project
163 - download and unzip latest build from
164 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/openflowplugin/openflowplugin-karaf/0.1.0-SNAPSHOT/
168 cd <extracted directory>/bin
171 - or clone and build **openflowplugin** project:
175 git clone https://git.opendaylight.org/gerrit/p/openflowplugin.git
178 cd ./distribution/karaf/target/assembly/bin/
180 - or build whole distribution localy from folder distribution/karaf
184 mvn clean install -DskipTests
194 There are all helium features (from features-openflowplugin) duplicated
195 into features-openflowplugin-li. The duplicates got suffix *-li* and
196 provide Lithium codebase functionality.
200 - odl-openflowplugin-app-lldp-speaker-li
202 - odl-openflowplugin-flow-services-rest-li
204 - odl-openflowplugin-drop-test-li
206 In case topology is required then the first one should be installed.
210 feature:install odl-openflowplugin-app-lldp-speaker-li
212 The Li-southbound currently provides:
224 In order to see really low level messages enter these in karaf console:
228 log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
229 log:set TRACE org.opendaylight.openflowplugin.impl
231 **How enable topology**
233 In order for topology to work (fill dataStore/operational with links)
234 there must be LLDP responses delivered back to controller. This requires
235 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
236 priority, empty match and one output action = send to controller. Having
237 this flow installed on every node will enable for gathering and
238 exporting links between nodes into dataStore/operational. This is done
239 if you use for example l2 switch application.
243 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
244 <flow xmlns="urn:opendaylight:flow:inventory">
245 <barrier>false</barrier>
247 <flags>SEND_FLOW_REM</flags>
248 <flow-name>FooXf54</flow-name>
249 <hard-timeout>0</hard-timeout>
251 <idle-timeout>0</idle-timeout>
252 <installHw>false</installHw>
258 <max-length>65535</max-length>
259 <output-node-connector>CONTROLLER</output-node-connector>
268 <priority>0</priority>
269 <strict>false</strict>
270 <table_id>0</table_id>
273 **Enable RESTCONF and Controller GUI**
275 If you want to use RESTCONF with openflowplugin project, you have to
276 install *odl-restconf* feature to enable that. To install *odl-restconf*
277 feature run the following command
281 karaf#>feature:install odl-restconf
283 If you want to access the Controller GUI, you have to install
284 *odl-dlux-core* feature to enable that. Run following command to install
289 karaf#>feature:install odl-dlux-core
291 Once you enable the feature, access the Controller GUI using following
296 http://<controller-ip>:8181/dlux/index.html
298 **Run OpenDaylight controller with the old OpenFlow 1.0-only (old)
301 There are 2 ways. In integration project the plugin version is
302 controlled by startup parameter. Or there is distribution build
303 available directly in controller project.
305 1. use **integration/distributions/base** project
307 - use the instructions from
308 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin#To\_run\_the\_OpenDaylight\_controller\_with\_the\_new\_OpenFlow\_1.0/1.3\_(new)\_plugin[
309 1.0/1.3 plugin], but skip the plugin version parameter:
315 2. use **controller/distribution/opendaylight** project
317 - download and unzip latest build from
318 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight/
324 - or clone and build **controller** project:
328 git clone https://git.opendaylight.org/gerrit/p/controller.git
329 cd controller/opendaylight/distribution/opendaylight
331 cd target/distribution.opendaylight-osgipackage/opendaylight
333 - and finally run (there is no version specific option, because the
335 1.0/1.3 (new) plugin is not available here at all)
337 **Give it a minute to come up :)**
339 .. _ofp-test-environment:
341 OpenFlow 1.3 Enabled Software Switches / Environment
342 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
344 Getting Mininet with OF 1.3
345 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
347 `Download Mininet VM Upgraded to OF
348 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
349 (or the `newer mininet-2.1.0 with
350 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
351 that works with VMware Player. For using this on VirtualBox, import this
352 to VMware Player and then export the .vmdk ) or you could build one
353 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
354 setting up Mininet with OF 1.3].
356 Installing under VirtualBox
357 '''''''''''''''''''''''''''
359 .. figure:: ./images/openflowplugin/host-only-vbox.png
360 :alt: configuring a host-only adapter
362 configuring a host-only adapter
364 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
365 don’t actually seem to allow for connections from the host to the VM.
366 Instead, you need to configure a host-only network and set it up. Do
369 - Go to the VM’s settings in VirtualBox then to network and add a
370 second adapter attached to "Host-only Adapter" (see the screenshot to
373 - Edit the /etc/network/interfaces file to configure the adapter
374 properly by adding these two lines
383 At this point you should have two interfaces one which gives you NATed
384 access to the internet and another that gives you access between your
385 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
386 address and the the host-only interface gets a 192.168.56.x address.
388 Your simplest choice: Use Vagrant
389 '''''''''''''''''''''''''''''''''
391 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
392 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
396 cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
400 This will leave you sshed into a fully provisioned Ubuntu Trusty box
401 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
403 Setup CPqD Openflow 1.3 Soft Switch
404 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
406 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
407 1.3 features, e.g group multipart statistics request. Alternate options
408 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
411 - You can setup the switch as per the instructions given on the
414 `https://github.com/CPqD/ofsoftswitch13 <https://github.com/CPqD/ofsoftswitch13>`__
416 - Fire following command to start the switch
422 $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
423 e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
425 ethX should not be associated with ip address and ipv6 should be
426 disabled on it. If you are installing the switch on your local machine,
427 you can use following command (for Ubuntu) to create virtual interface.
431 ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
433 ethX - Any existing interface.
435 Or if you are using mininet VM for installing this switch, you can
436 simply add one more adaptor to your VM.
438 Start Openflow protocol agent:
442 $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
443 e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
445 Commands to add entries to various tables of the switch
446 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
452 $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
458 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
462 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
468 $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
469 e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
471 "dpctl" --help is not very intuitive, so please keep adding any new
472 command you figured out while your experiment with the switch.
474 Using the built-in Wireshark
475 ''''''''''''''''''''''''''''
477 Mininet comes with pre-installed Wireshark, but for some reason it does
478 not include the Openflow protocol dissector. You may want to get and
479 install it in the */.wireshark/plugins/* directory.
481 First login to your mininet VM
485 ssh mininet@<your mininet vm ip> -X
487 The -X option in ssh will enable x-session over ssh so that the
488 wireshark window can be shown on your host machine’s display. when
489 prompted, enter the password (mininet).
491 From the mininet vm shell, set the wireshark capture privileges
492 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
496 sudo chgrp mininet /usr/bin/dumpcap
497 sudo chmod 754 /usr/bin/dumpcap
498 sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
500 Finally, start wireshark:
506 The wireshark window should show up.
508 To see only Openflow packets, you may want to apply the following filter
509 in the Filter window:
513 tcp.port == 6633 and tcp.flags.push == 1
515 Start the capture on *any* port.
517 Running Mininet with OF 1.3
518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
520 From within the Mininet VM, run:
524 sudo mn --topo single,3 --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
534 The purpose of this page is to walk you through how to see the Inventory
535 Manager working end to end with the openflowplugin using OpenFlow 1.3.
537 Basically, you will learn how to:
539 1. Run the Base/Virtualization/Service provider Edition with the new
541 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
542 the controller with the new OpenFlow Plugin]
544 2. Start mininet to use OF 1.3:
545 OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
546 Enabled Software Switches / Environment]
548 3. Use RESTCONF to see the nodes appear in inventory.
550 Restconf for Inventory
551 ^^^^^^^^^^^^^^^^^^^^^^
553 The REST url for listing all the nodes is:
557 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
559 You will need to set the Accept header:
563 Accept: application/xml
565 You will also need to use HTTP Basic Auth with username: admin password:
568 Alternately, if you have a node’s id you can address it as
572 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
578 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
580 How to hit RestConf with Postman
581 ''''''''''''''''''''''''''''''''
584 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
586 In the chrome browser bar enter
592 And click on Postman.
594 Enter the URL. Click on the Headers button on the far right. Enter the
595 Accept: header. Click on the Basic Auth Tab at the top and setup the
596 username and password. Send.
601 If you have not had any switches come up, and though no children for
602 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
603 and exception will be thrown. I’m pretty sure I know how to fix this
604 bug, just need to get to it :)
612 Learn End to End for Inventory
613 ''''''''''''''''''''''''''''''
615 See :ref:`ofp-e2e-inv`
620 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
622 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
627 Current way to flush a flow to switch looks like this:
629 1. Create MD-SAL modeled flow and commit it into dataStore using two
631 FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
633 2. FRM gets notified and invokes corresponding rpc (addFlow) on
634 particular service provider (if suitable provider for given node
637 3. The provider (plugin in this case) transforms MD-SAL modeled flow
638 into OF-API modeled flow
640 4. OF-API modeled flow is then flushed into OFLibrary
642 5. OFLibrary encodes flow into particular version of wire protocol and
643 sends it to particular switch
645 6. Check on mininet side if flow is set
654 - Content-Type: application/xml
656 - Accept: application/xml
660 - Use URL: "http://<controller
661 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
669 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
670 <flow xmlns="urn:opendaylight:flow:inventory">
671 <priority>2</priority>
672 <flow-name>Foo</flow-name>
679 <ipv4-destination>10.0.10.2/24</ipv4-destination>
682 <table_id>0</table_id>
696 **\*Note**: If you want to try a different flow id or a different table,
697 make sure the URL and the body stay in sync. For example, if you wanted
698 to try: table 2 flow 20 you’d change the URL to:
701 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
703 but you would also need to update the 20 and 2 in the body of the XML.
705 Other caveat, we have a known bug with updates, so please only write to
706 a given flow id and table id on a given node once at this time until we
707 resolve it. Or you can use the DELETE method with the same URL in
708 PostMan to delete the flow information on switch and controller cache.
710 Check for your flow on the switch
711 '''''''''''''''''''''''''''''''''
713 - See your flow on your mininet:
717 mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
718 OFPST_FLOW reply (OF1.3) (xid=0x2):
719 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
721 If you want to see the above information from the mininet prompt - use
722 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
725 Check for your flow in the controller config via RESTCONF
726 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
728 - See your configured flow in POSTMAN with
730 - URL http://<controller IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
734 - You no longer need to set Accept header
741 "flow-node-inventory:table": [
743 "flow-node-inventory:id": 0,
744 "flow-node-inventory:flow": [
746 "flow-node-inventory:priority": 1,
747 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
748 "flow-node-inventory:table_id": 0,
749 "flow-node-inventory:hard-timeout": 0,
750 "flow-node-inventory:idle-timeout": 0,
751 "flow-node-inventory:instructions": {
752 "flow-node-inventory:instruction": [
754 "flow-node-inventory:apply-actions": {
755 "flow-node-inventory:action": [
757 "flow-node-inventory:output-action": {
758 "flow-node-inventory:output-node-connector": "openflow:1:1"
760 "flow-node-inventory:order": 0
764 "flow-node-inventory:order": 0
768 "flow-node-inventory:match": {
769 "flow-node-inventory:ethernet-match": {
770 "flow-node-inventory:ethernet-type": {
771 "flow-node-inventory:type": 2048
774 "flow-node-inventory:ipv4-destination": "10.0.0.2"
776 "flow-node-inventory:cookie": 0
779 "flow-node-inventory:priority": 1,
780 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
781 "flow-node-inventory:table_id": 0,
782 "flow-node-inventory:hard-timeout": 0,
783 "flow-node-inventory:idle-timeout": 0,
784 "flow-node-inventory:instructions": {
785 "flow-node-inventory:instruction": [
787 "flow-node-inventory:apply-actions": {
788 "flow-node-inventory:action": [
790 "flow-node-inventory:output-action": {
791 "flow-node-inventory:output-node-connector": "openflow:1:1"
793 "flow-node-inventory:order": 0
797 "flow-node-inventory:order": 0
801 "flow-node-inventory:match": {
802 "flow-node-inventory:ethernet-match": {
803 "flow-node-inventory:ethernet-type": {
804 "flow-node-inventory:type": 2048
807 "flow-node-inventory:ipv4-destination": "10.0.0.1"
809 "flow-node-inventory:cookie": 0
812 "flow-node-inventory:priority": 1,
813 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
814 "flow-node-inventory:table_id": 0,
815 "flow-node-inventory:hard-timeout": 0,
816 "flow-node-inventory:idle-timeout": 0,
817 "flow-node-inventory:instructions": {
818 "flow-node-inventory:instruction": [
820 "flow-node-inventory:apply-actions": {
821 "flow-node-inventory:action": [
823 "flow-node-inventory:output-action": {
824 "flow-node-inventory:output-node-connector": "openflow:1:1"
826 "flow-node-inventory:order": 0
830 "flow-node-inventory:order": 0
834 "flow-node-inventory:match": {
835 "flow-node-inventory:ethernet-match": {
836 "flow-node-inventory:ethernet-type": {
837 "flow-node-inventory:type": 2048
840 "flow-node-inventory:ipv4-destination": "10.0.0.3"
842 "flow-node-inventory:cookie": 0
845 "flow-node-inventory:priority": 1,
846 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
847 "flow-node-inventory:table_id": 0,
848 "flow-node-inventory:hard-timeout": 0,
849 "flow-node-inventory:idle-timeout": 0,
850 "flow-node-inventory:instructions": {
851 "flow-node-inventory:instruction": [
853 "flow-node-inventory:apply-actions": {
854 "flow-node-inventory:action": [
856 "flow-node-inventory:output-action": {
857 "flow-node-inventory:output-node-connector": "openflow:1:1"
859 "flow-node-inventory:order": 0
863 "flow-node-inventory:order": 0
867 "flow-node-inventory:match": {
868 "flow-node-inventory:ethernet-match": {
869 "flow-node-inventory:ethernet-type": {
870 "flow-node-inventory:type": 2048
873 "flow-node-inventory:ipv4-destination": "10.0.0.4"
875 "flow-node-inventory:cookie": 0
878 "flow-node-inventory:priority": 1,
879 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
880 "flow-node-inventory:table_id": 0,
881 "flow-node-inventory:hard-timeout": 0,
882 "flow-node-inventory:idle-timeout": 0,
883 "flow-node-inventory:instructions": {
884 "flow-node-inventory:instruction": [
886 "flow-node-inventory:apply-actions": {
887 "flow-node-inventory:action": [
889 "flow-node-inventory:output-action": {
890 "flow-node-inventory:output-node-connector": "openflow:1:2"
892 "flow-node-inventory:order": 0
896 "flow-node-inventory:order": 0
900 "flow-node-inventory:match": {
901 "flow-node-inventory:ethernet-match": {
902 "flow-node-inventory:ethernet-type": {
903 "flow-node-inventory:type": 2048
906 "flow-node-inventory:ipv4-destination": "10.0.0.5"
908 "flow-node-inventory:cookie": 0
911 "flow-node-inventory:priority": 1,
912 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
913 "flow-node-inventory:table_id": 0,
914 "flow-node-inventory:hard-timeout": 0,
915 "flow-node-inventory:idle-timeout": 0,
916 "flow-node-inventory:instructions": {
917 "flow-node-inventory:instruction": [
919 "flow-node-inventory:apply-actions": {
920 "flow-node-inventory:action": [
922 "flow-node-inventory:output-action": {
923 "flow-node-inventory:output-node-connector": "openflow:1:2"
925 "flow-node-inventory:order": 0
929 "flow-node-inventory:order": 0
933 "flow-node-inventory:match": {
934 "flow-node-inventory:ethernet-match": {
935 "flow-node-inventory:ethernet-type": {
936 "flow-node-inventory:type": 2048
939 "flow-node-inventory:ipv4-destination": "10.0.0.8"
941 "flow-node-inventory:cookie": 0
944 "flow-node-inventory:priority": 1,
945 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
946 "flow-node-inventory:table_id": 0,
947 "flow-node-inventory:hard-timeout": 0,
948 "flow-node-inventory:idle-timeout": 0,
949 "flow-node-inventory:instructions": {
950 "flow-node-inventory:instruction": [
952 "flow-node-inventory:apply-actions": {
953 "flow-node-inventory:action": [
955 "flow-node-inventory:output-action": {
956 "flow-node-inventory:output-node-connector": "openflow:1:2"
958 "flow-node-inventory:order": 0
962 "flow-node-inventory:order": 0
966 "flow-node-inventory:match": {
967 "flow-node-inventory:ethernet-match": {
968 "flow-node-inventory:ethernet-type": {
969 "flow-node-inventory:type": 2048
972 "flow-node-inventory:ipv4-destination": "10.0.0.6"
974 "flow-node-inventory:cookie": 0
977 "flow-node-inventory:priority": 1,
978 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
979 "flow-node-inventory:table_id": 0,
980 "flow-node-inventory:hard-timeout": 0,
981 "flow-node-inventory:idle-timeout": 0,
982 "flow-node-inventory:instructions": {
983 "flow-node-inventory:instruction": [
985 "flow-node-inventory:apply-actions": {
986 "flow-node-inventory:action": [
988 "flow-node-inventory:output-action": {
989 "flow-node-inventory:output-node-connector": "openflow:1:2"
991 "flow-node-inventory:order": 0
995 "flow-node-inventory:order": 0
999 "flow-node-inventory:match": {
1000 "flow-node-inventory:ethernet-match": {
1001 "flow-node-inventory:ethernet-type": {
1002 "flow-node-inventory:type": 2048
1005 "flow-node-inventory:ipv4-destination": "10.0.0.7"
1007 "flow-node-inventory:cookie": 0
1014 Look for your flow stats in the controller operational data via
1015 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1019 - See your operational flow stats in POSTMAN with
1021 - URL "http://<controller
1022 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
1031 "flow-node-inventory:table": [
1033 "flow-node-inventory:id": 0,
1034 "flow-node-inventory:flow": [
1036 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
1037 "opendaylight-flow-statistics:flow-statistics": {
1038 "opendaylight-flow-statistics:cookie": 0,
1039 "opendaylight-flow-statistics:duration": {
1040 "opendaylight-flow-statistics:nanosecond": 886000000,
1041 "opendaylight-flow-statistics:second": 2707
1043 "opendaylight-flow-statistics:hard-timeout": 0,
1044 "opendaylight-flow-statistics:byte-count": 784,
1045 "opendaylight-flow-statistics:match": {
1046 "opendaylight-flow-statistics:ethernet-match": {
1047 "opendaylight-flow-statistics:ethernet-type": {
1048 "opendaylight-flow-statistics:type": 2048
1051 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
1053 "opendaylight-flow-statistics:priority": 1,
1054 "opendaylight-flow-statistics:packet-count": 8,
1055 "opendaylight-flow-statistics:table_id": 0,
1056 "opendaylight-flow-statistics:idle-timeout": 0,
1057 "opendaylight-flow-statistics:instructions": {
1058 "opendaylight-flow-statistics:instruction": [
1060 "opendaylight-flow-statistics:order": 0,
1061 "opendaylight-flow-statistics:apply-actions": {
1062 "opendaylight-flow-statistics:action": [
1064 "opendaylight-flow-statistics:order": 0,
1065 "opendaylight-flow-statistics:output-action": {
1066 "opendaylight-flow-statistics:output-node-connector": "1",
1067 "opendaylight-flow-statistics:max-length": 0
1078 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
1079 "opendaylight-flow-statistics:flow-statistics": {
1080 "opendaylight-flow-statistics:cookie": 0,
1081 "opendaylight-flow-statistics:duration": {
1082 "opendaylight-flow-statistics:nanosecond": 826000000,
1083 "opendaylight-flow-statistics:second": 2711
1085 "opendaylight-flow-statistics:hard-timeout": 0,
1086 "opendaylight-flow-statistics:byte-count": 1568,
1087 "opendaylight-flow-statistics:match": {
1088 "opendaylight-flow-statistics:ethernet-match": {
1089 "opendaylight-flow-statistics:ethernet-type": {
1090 "opendaylight-flow-statistics:type": 2048
1093 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
1095 "opendaylight-flow-statistics:priority": 1,
1096 "opendaylight-flow-statistics:packet-count": 16,
1097 "opendaylight-flow-statistics:table_id": 0,
1098 "opendaylight-flow-statistics:idle-timeout": 0,
1099 "opendaylight-flow-statistics:instructions": {
1100 "opendaylight-flow-statistics:instruction": [
1102 "opendaylight-flow-statistics:order": 0,
1103 "opendaylight-flow-statistics:apply-actions": {
1104 "opendaylight-flow-statistics:action": [
1106 "opendaylight-flow-statistics:order": 0,
1107 "opendaylight-flow-statistics:output-action": {
1108 "opendaylight-flow-statistics:output-node-connector": "1",
1109 "opendaylight-flow-statistics:max-length": 0
1120 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1121 "opendaylight-flow-statistics:flow-statistics": {
1122 "opendaylight-flow-statistics:cookie": 0,
1123 "opendaylight-flow-statistics:duration": {
1124 "opendaylight-flow-statistics:nanosecond": 548000000,
1125 "opendaylight-flow-statistics:second": 2708
1127 "opendaylight-flow-statistics:hard-timeout": 0,
1128 "opendaylight-flow-statistics:byte-count": 784,
1129 "opendaylight-flow-statistics:match": {
1130 "opendaylight-flow-statistics:ethernet-match": {
1131 "opendaylight-flow-statistics:ethernet-type": {
1132 "opendaylight-flow-statistics:type": 2048
1135 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1137 "opendaylight-flow-statistics:priority": 1,
1138 "opendaylight-flow-statistics:packet-count": 8,
1139 "opendaylight-flow-statistics:table_id": 0,
1140 "opendaylight-flow-statistics:idle-timeout": 0,
1141 "opendaylight-flow-statistics:instructions": {
1142 "opendaylight-flow-statistics:instruction": [
1144 "opendaylight-flow-statistics:order": 0,
1145 "opendaylight-flow-statistics:apply-actions": {
1146 "opendaylight-flow-statistics:action": [
1148 "opendaylight-flow-statistics:order": 0,
1149 "opendaylight-flow-statistics:output-action": {
1150 "opendaylight-flow-statistics:output-node-connector": "1",
1151 "opendaylight-flow-statistics:max-length": 0
1162 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1163 "opendaylight-flow-statistics:flow-statistics": {
1164 "opendaylight-flow-statistics:cookie": 0,
1165 "opendaylight-flow-statistics:duration": {
1166 "opendaylight-flow-statistics:nanosecond": 296000000,
1167 "opendaylight-flow-statistics:second": 2710
1169 "opendaylight-flow-statistics:hard-timeout": 0,
1170 "opendaylight-flow-statistics:byte-count": 1274,
1171 "opendaylight-flow-statistics:match": {
1172 "opendaylight-flow-statistics:ethernet-match": {
1173 "opendaylight-flow-statistics:ethernet-type": {
1174 "opendaylight-flow-statistics:type": 2048
1177 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1179 "opendaylight-flow-statistics:priority": 1,
1180 "opendaylight-flow-statistics:packet-count": 13,
1181 "opendaylight-flow-statistics:table_id": 0,
1182 "opendaylight-flow-statistics:idle-timeout": 0,
1183 "opendaylight-flow-statistics:instructions": {
1184 "opendaylight-flow-statistics:instruction": [
1186 "opendaylight-flow-statistics:order": 0,
1187 "opendaylight-flow-statistics:apply-actions": {
1188 "opendaylight-flow-statistics:action": [
1190 "opendaylight-flow-statistics:order": 0,
1191 "opendaylight-flow-statistics:output-action": {
1192 "opendaylight-flow-statistics:output-node-connector": "1",
1193 "opendaylight-flow-statistics:max-length": 0
1204 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1205 "opendaylight-flow-statistics:flow-statistics": {
1206 "opendaylight-flow-statistics:cookie": 0,
1207 "opendaylight-flow-statistics:duration": {
1208 "opendaylight-flow-statistics:nanosecond": 392000000,
1209 "opendaylight-flow-statistics:second": 2711
1211 "opendaylight-flow-statistics:hard-timeout": 0,
1212 "opendaylight-flow-statistics:byte-count": 1470,
1213 "opendaylight-flow-statistics:match": {
1214 "opendaylight-flow-statistics:ethernet-match": {
1215 "opendaylight-flow-statistics:ethernet-type": {
1216 "opendaylight-flow-statistics:type": 2048
1219 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1221 "opendaylight-flow-statistics:priority": 1,
1222 "opendaylight-flow-statistics:packet-count": 15,
1223 "opendaylight-flow-statistics:table_id": 0,
1224 "opendaylight-flow-statistics:idle-timeout": 0,
1225 "opendaylight-flow-statistics:instructions": {
1226 "opendaylight-flow-statistics:instruction": [
1228 "opendaylight-flow-statistics:order": 0,
1229 "opendaylight-flow-statistics:apply-actions": {
1230 "opendaylight-flow-statistics:action": [
1232 "opendaylight-flow-statistics:order": 0,
1233 "opendaylight-flow-statistics:output-action": {
1234 "opendaylight-flow-statistics:output-node-connector": "2",
1235 "opendaylight-flow-statistics:max-length": 0
1246 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1247 "opendaylight-flow-statistics:flow-statistics": {
1248 "opendaylight-flow-statistics:cookie": 0,
1249 "opendaylight-flow-statistics:duration": {
1250 "opendaylight-flow-statistics:nanosecond": 344000000,
1251 "opendaylight-flow-statistics:second": 2707
1253 "opendaylight-flow-statistics:hard-timeout": 0,
1254 "opendaylight-flow-statistics:byte-count": 784,
1255 "opendaylight-flow-statistics:match": {
1256 "opendaylight-flow-statistics:ethernet-match": {
1257 "opendaylight-flow-statistics:ethernet-type": {
1258 "opendaylight-flow-statistics:type": 2048
1261 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1263 "opendaylight-flow-statistics:priority": 1,
1264 "opendaylight-flow-statistics:packet-count": 8,
1265 "opendaylight-flow-statistics:table_id": 0,
1266 "opendaylight-flow-statistics:idle-timeout": 0,
1267 "opendaylight-flow-statistics:instructions": {
1268 "opendaylight-flow-statistics:instruction": [
1270 "opendaylight-flow-statistics:order": 0,
1271 "opendaylight-flow-statistics:apply-actions": {
1272 "opendaylight-flow-statistics:action": [
1274 "opendaylight-flow-statistics:order": 0,
1275 "opendaylight-flow-statistics:output-action": {
1276 "opendaylight-flow-statistics:output-node-connector": "2",
1277 "opendaylight-flow-statistics:max-length": 0
1288 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1289 "opendaylight-flow-statistics:flow-statistics": {
1290 "opendaylight-flow-statistics:cookie": 0,
1291 "opendaylight-flow-statistics:duration": {
1292 "opendaylight-flow-statistics:nanosecond": 577000000,
1293 "opendaylight-flow-statistics:second": 2706
1295 "opendaylight-flow-statistics:hard-timeout": 0,
1296 "opendaylight-flow-statistics:byte-count": 784,
1297 "opendaylight-flow-statistics:match": {
1298 "opendaylight-flow-statistics:ethernet-match": {
1299 "opendaylight-flow-statistics:ethernet-type": {
1300 "opendaylight-flow-statistics:type": 2048
1303 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1305 "opendaylight-flow-statistics:priority": 1,
1306 "opendaylight-flow-statistics:packet-count": 8,
1307 "opendaylight-flow-statistics:table_id": 0,
1308 "opendaylight-flow-statistics:idle-timeout": 0,
1309 "opendaylight-flow-statistics:instructions": {
1310 "opendaylight-flow-statistics:instruction": [
1312 "opendaylight-flow-statistics:order": 0,
1313 "opendaylight-flow-statistics:apply-actions": {
1314 "opendaylight-flow-statistics:action": [
1316 "opendaylight-flow-statistics:order": 0,
1317 "opendaylight-flow-statistics:output-action": {
1318 "opendaylight-flow-statistics:output-node-connector": "2",
1319 "opendaylight-flow-statistics:max-length": 0
1330 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1331 "opendaylight-flow-statistics:flow-statistics": {
1332 "opendaylight-flow-statistics:cookie": 0,
1333 "opendaylight-flow-statistics:duration": {
1334 "opendaylight-flow-statistics:nanosecond": 659000000,
1335 "opendaylight-flow-statistics:second": 2705
1337 "opendaylight-flow-statistics:hard-timeout": 0,
1338 "opendaylight-flow-statistics:byte-count": 784,
1339 "opendaylight-flow-statistics:match": {
1340 "opendaylight-flow-statistics:ethernet-match": {
1341 "opendaylight-flow-statistics:ethernet-type": {
1342 "opendaylight-flow-statistics:type": 2048
1345 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1347 "opendaylight-flow-statistics:priority": 1,
1348 "opendaylight-flow-statistics:packet-count": 8,
1349 "opendaylight-flow-statistics:table_id": 0,
1350 "opendaylight-flow-statistics:idle-timeout": 0,
1351 "opendaylight-flow-statistics:instructions": {
1352 "opendaylight-flow-statistics:instruction": [
1354 "opendaylight-flow-statistics:order": 0,
1355 "opendaylight-flow-statistics:apply-actions": {
1356 "opendaylight-flow-statistics:action": [
1358 "opendaylight-flow-statistics:order": 0,
1359 "opendaylight-flow-statistics:output-action": {
1360 "opendaylight-flow-statistics:output-node-connector": "2",
1361 "opendaylight-flow-statistics:max-length": 0
1372 "opendaylight-flow-table-statistics:flow-table-statistics": {
1373 "opendaylight-flow-table-statistics:active-flows": 8,
1374 "opendaylight-flow-table-statistics:packets-matched": 97683,
1375 "opendaylight-flow-table-statistics:packets-looked-up": 101772
1381 Discovering and testing new Flow Types
1382 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1384 Currently, the openflowplugin has a test-provider that allows you to
1385 push various flows through the system from the OSGI command line. Once
1386 those flows have been pushed through, you can see them as examples and
1387 then use them to see in the config what a particular flow example looks
1397 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1400 Point your mininet at the controller as described above.
1402 once you can see your node (probably openflow:1 if you’ve been following
1403 along) in the inventory, at the OSGI command line try running:
1407 addMDFlow openflow:1 f#
1409 Where # is a number between 1 and 80. This will create one of 80
1410 possible flows. You can go confirm they were created on the switch.
1412 Once you’ve done that, use
1416 - Accept: application/xml
1419 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1421 To see a full listing of the flows in table 2 (where they will be put).
1422 If you want to see a particular flow, look at
1425 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1427 Where # is 123 + the f# you used. So for example, for f22, your url
1431 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1433 Note: You may have to trim out some of the sections like that contain
1434 bitfields and binary types that are not correctly modeled.
1436 Note: Before attempting to PUT a flow you have created via addMDFlow,
1437 please change its URL and body to, for example, use table 1 instead of
1438 table 2 or another Flow Id, so you don’t collide.
1440 Note: There are several test command providers and the one handling
1441 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1442 use as **commands in OSGI-console** have prefix *\_*.
1447 Examples for XML for various flow matches, instructions & actions can be
1448 found in following section :ref:`here <ofp-example-flows>`.
1456 The purpose of this page is to walk you through how to see the Topology
1457 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1459 Basically, you will learn how to:
1461 1. Run the Base/Virtualization/Service provider Edition with the new
1462 openflowplugin: :ref:`Running the controller with the new OpenFlow
1463 Plugin <ofp-running-new-plugin>`
1465 2. Start mininet to use OF 1.3: :ref:`OpenFlow 1.3 Enabled Software Switches
1466 / Environment <ofp-test-environment>`
1468 3. Use RESTCONF to see the topology information.
1470 Restconf for Topology
1471 ^^^^^^^^^^^^^^^^^^^^^
1473 The REST url for listing all the nodes is:
1477 http://localhost:8080/restconf/operational/network-topology:network-topology/
1479 You will need to set the Accept header:
1483 Accept: application/xml
1485 You will also need to use HTTP Basic Auth with username: admin password:
1488 Alternately, if you have a node’s id you can address it as
1492 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1498 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1500 How to hit RestConf with Postman
1501 ''''''''''''''''''''''''''''''''
1504 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1507 In the chrome browser bar enter
1513 And click on Postman.
1515 Enter the URL. Click on the Headers button on the far right. Enter the
1516 Accept: header. Click on the Basic Auth Tab at the top and setup the
1517 username and password. Send.
1525 Groups are NOT SUPPORTED in current (2.0.0) version of
1526 `openvswitch <http://www.openvswitch.org/download>`__. See
1528 - http://openvswitch.org/releases/NEWS-2.0.0
1530 - http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1532 For testing group feature please use for example
1533 CPQD virtual switch in the :ref:`ofp-e2e-inv` section.
1538 Learn End to End for Inventory
1539 ''''''''''''''''''''''''''''''
1546 Run CPqD with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1548 Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1553 Current way to flush a group to switch looks like this:
1555 1. create MD-SAL modeled group and commit it into dataStore using two
1558 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1559 particular service provider (if suitable provider for given node
1562 3. the provider (plugin in this case) transforms MD-SAL modeled group
1563 into OF-API modeled group
1565 4. OF-API modeled group is then flushed into OFLibrary
1567 5. OFLibrary encodes group into particular version of wire protocol and
1568 sends it to particular switch
1570 6. check on CPqD if group is installed
1579 - Content-Type: application/xml
1581 - Accept: application/xml
1584 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1592 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1593 <group xmlns="urn:opendaylight:flow:inventory">
1594 <group-type>group-all</group-type>
1601 <bucket-id>12</bucket-id>
1602 <watch_group>14</watch_group>
1603 <watch_port>1234</watch_port>
1608 <ipv4-source>100.1.1.1</ipv4-source>
1614 <ipv4-destination>200.71.9.5210</ipv4-destination>
1618 <bucket-id>13</bucket-id>
1619 <watch_group>14</watch_group>
1620 <watch_port>1234</watch_port>
1623 <barrier>false</barrier>
1624 <group-name>Foo</group-name>
1625 <group-id>1</group-id>
1630 If you want to try a different group id, make sure the URL and the
1631 body stay in sync. For example, if you wanted to try: group-id 20
1632 you’d change the URL to
1633 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1634 but you would also need to update the <group-id>20</group-id> in the
1639 <ip-address> :Provide the IP Address of the machine on which the
1640 controller is running.
1642 Check for your group on the switch
1643 ''''''''''''''''''''''''''''''''''
1645 - See your group on your cpqd switch:
1649 COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1652 stat_req{type="grp", flags="0x0", group="all"}
1656 stat_repl{type="grp", flags="0x0", stats=[
1657 {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1659 Check for your group in the controller config via RESTCONF
1660 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1662 - See your configured group in POSTMAN with
1665 http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
1669 - You should no longer need to set Accept
1671 - Note: <ip-address> :Provide the IP Address of the machine on which
1672 the controller is running.
1674 Look for your group stats in the controller operational data via RESTCONF
1675 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1677 - See your operational group stats in POSTMAN with
1680 http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
1684 - Note: <ip-address> :Provide the IP Address of the machine on which
1685 the controller is running.
1687 Discovering and testing Group Types
1688 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1690 Currently, the openflowplugin has a test-provider that allows you to
1691 push various groups through the system from the OSGI command line. Once
1692 those groups have been pushed through, you can see them as examples and
1693 then use them to see in the config what a particular group example looks
1703 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1706 Point your CPqD at the controller as described above.
1708 once you can see your node (probably openflow:1 if you’ve been following
1709 along) in the inventory, at the OSGI command line try running:
1715 This will install a group in the switch. You can check whether the group
1716 is installed or not.
1718 Once you’ve done that, use
1722 - Accept: application/xml
1725 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1727 - Note: <ip-address> :Provide the IP Address of the machine on which
1728 the controller is running.
1732 Before attempting to PUT a group you have created via addGroup,
1733 please change its URL and body to, for example, use group 1 instead
1734 of group 2 or another Group Id, so that they don’t collide.
1738 There are several test command providers and the one handling groups
1739 is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1740 as commands in OSGI-console have prefix *\_*.
1745 Examples for XML for various Group Types can be found in the
1746 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1755 Learn End to End for Inventory
1756 ''''''''''''''''''''''''''''''
1758 - :ref:`ofp-e2e-inv`
1763 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1765 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1770 Current way to flush a meter to switch looks like this:
1772 1. create MD-SAL modeled flow and commit it into dataStore using two
1775 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1776 particular service provider (if suitable provider for given node
1779 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1780 into OF-API modeled meter
1782 4. OF-API modeled meter is then flushed into OFLibrary
1784 5. OFLibrary encodes meter into particular version of wire protocol and
1785 sends it to particular switch
1787 6. check on mininet side if meter is installed
1794 - Set Request Headers
1796 - Content-Type: application/xml
1798 - Accept: application/xml
1801 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1809 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1810 <meter xmlns="urn:opendaylight:flow:inventory">
1811 <container-name>abcd</container-name>
1812 <flags>meter-burst</flags>
1813 <meter-band-headers>
1815 <band-burst-size>444</band-burst-size>
1816 <band-id>0</band-id>
1817 <band-rate>234</band-rate>
1818 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1819 <dscp-remark-rate>12</dscp-remark-rate>
1820 <prec_level>1</prec_level>
1822 <flags>ofpmbt-dscp-remark</flags>
1824 </meter-band-header>
1825 </meter-band-headers>
1826 <meter-id>1</meter-id>
1827 <meter-name>Foo</meter-name>
1832 If you want to try a different meter id, make sure the URL and the
1833 body stay in sync. For example, if you wanted to try: meter-id 20
1834 you’d change the URL to
1835 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1836 but you would also need to update the 20 in the body to match.
1840 :Provide the IP Address of the machine on which the controller is
1843 Check for your meter on the switch
1844 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1846 - See your meter on your CPqD switch:
1850 COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1853 stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1857 stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1859 Check for your meter in the controller config via RESTCONF
1860 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1862 - See your configured flow in POSTMAN with
1865 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1869 - You should no longer need to set Request Headers for Accept
1871 - Note: :Provide the IP Address of the machine on which the
1872 controller is running.
1874 Look for your meter stats in the controller operational data via RESTCONF
1875 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1877 - See your operational meter stats in POSTMAN with
1880 "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1884 - Note: :Provide the IP Address of the machine on which the
1885 controller is running.
1887 Discovering and testing Meter Types
1888 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1890 Currently, the openflowplugin has a test-provider that allows you to
1891 push various meters through the system from the OSGI command line. Once
1892 those meters have been pushed through, you can see them as examples and
1893 then use them to see in the config what a particular meter example looks
1903 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1906 Point your CPqD at the controller as described above.
1908 Once you can see your CPqD connected to the controller, at the OSGI
1909 command line try running:
1915 Once you’ve done that, use
1919 - Accept: application/xml
1922 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1924 - Note: :Provide the IP Address of the machine on which the
1925 controller is running.
1929 Before attempting to PUT a meter you have created via addMeter,
1930 please change its URL and body to, for example, use meter 1 instead
1931 of meter 2 or another Meter Id, so you don’t collide.
1935 There are several test command providers and the one handling Meter
1936 is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1937 used as **commands in OSGI-console** have prefix *\_*. Examples:
1938 addMeter, modifyMeter and removeMeter.
1943 Examples for XML for various Meter Types can be found in the
1944 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1953 This page contains high level detail about the statistics collection
1954 mechanism in new OpenFlow plugin.
1956 Statistics collection in new OpenFlow plugin
1957 ''''''''''''''''''''''''''''''''''''''''''''
1959 New OpenFlow plugin collects following statistics from OpenFlow enabled
1962 1. Individual Flow Statistics
1964 2. Aggregate Flow Statistics
1966 3. Flow Table Statistics
1970 5. Group Description
1974 7. Meter Configuration
1980 10. Node Description
1982 11. Flow Table Features
1984 12. Port Description
1990 At a high level statistics collection mechanism is divided into
1991 following three parts
1993 1. Statistics related `YANG models, service APIs and notification
1994 interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
1995 are defined in the MD-SAL.
1997 2. Service APIs (RPCs) defined in yang models are implemented by
1998 OpenFlow plugin. Notification interfaces are wired up by OpenFlow
2001 3. Statistics Manager Module: This module use service APIs implemented
2002 by OpenFlow plugin to send statistics requests to all the connected
2003 OpenFlow enabled nodes. Module also implements notification
2004 interfaces to receive statistics response from nodes. Once it
2005 receives statistics response, it augment all the statistics data to
2006 the relevant element of the node (like node-connector, flow,
2007 table,group, meter) and store it in MD-SAL operational data store.
2009 Details of statistics collection
2010 ''''''''''''''''''''''''''''''''
2012 - Current implementation collects above mentioned statistics (except
2013 10-14) at a periodic interval of 15 seconds.
2015 - Statistics mentioned in 10 to 14 are only fetched when any node
2016 connects to the controller because these statistics are just static
2017 details about the respective elements.
2019 - Whenever any new element is added to node (like flow, group, meter,
2020 queue) it sends statistics request immediately to fetch the latest
2021 statistics and store it in the operational data store.
2023 - Whenever any element is deleted from the node, it immediately remove
2024 the relevant statistics from operational data store.
2026 - Statistics data are augmented to their respective element stored in
2027 the configuration data store. E.g Controller installed flows are
2028 stored in configuration data store. Whenever Statistics Manager
2029 receive statistics data related to these flow, it search the
2030 corresponding flow in the configuration data store and augment
2031 statistics in the corresponding location in operational data store.
2032 Similar approach is used for other elements of the node.
2034 - Statistics Manager stores flow statistics as an unaccounted flow
2035 statistics in operational data store if there is no corresponding
2036 flow exist in configuration data store. ID format of unaccounted flow
2037 statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
2040 - All the unaccounted flows will be cleaned up periodically after every
2041 two cycle of flow statistics collection, given that there is no
2042 update for these flows in the last two cycles.
2044 - Statistics Manager only entertains statistics response for the
2045 request sent by itself. User can write its own statistics collector
2046 using the statistics service APIs and notification defined in yang
2047 models, it won’t effect the functioning of Statistics Manager.
2049 - OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
2050 Manager don’t send any group & meter related statistics request to
2051 OpenFlow 1.0 enabled switch.
2053 RESTCONF Uris to access statistics of various node elements
2054 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
2056 - Aggregate Flow Statistics & Flow Table Statistics
2060 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
2062 - Individual Flow Statistics from specific table
2066 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
2068 - Group Features & Meter Features Statistics
2072 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
2074 - Group Description & Group Statistics
2078 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
2080 - Meter Configuration & Meter Statistics
2084 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
2086 - Node Connector Statistics
2090 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
2096 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
2101 For more details and queuries, please send mail to
2102 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
2103 want to report any bug in statistics collection, please use
2104 `bugzilla <https://bugs.opendaylight.org>`__.
2106 Web / Graphical Interface
2107 -------------------------
2109 In the Hydrogen & Helium release, the current Web UI does not support
2110 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2111 the flows, multiple flow tables, etc.
2113 Command Line Interface
2114 ----------------------
2116 The following is not exactly CLI - just a set of test commands which can
2117 be executed on the OSGI console testing various features in OpenFlow 1.3
2120 - :ref:`OSGI Console Test Provider Commands:
2121 Flows <ofp-test-provider-flows>`
2123 - :ref:`OSGI Console Test Provider Commands:
2124 Groups <ofp-test-provider-groups>`
2126 - :ref:`OSGI Console Test Provider Commands:
2127 Meters <ofp-test-provider-meters>`
2129 - :ref:`OSGI Console Test Provider Commands: Topology
2130 Events <ofp-test-provider-topology>`
2132 .. _ofp-test-provider-flows:
2134 Flows : Test Provider
2135 ~~~~~~~~~~~~~~~~~~~~~
2137 Currently, the openflowplugin has a test-provider that allows you to
2138 push various flows through the system from the OSGI command line. Once
2139 those flows have been pushed through, you can see them as examples and
2140 then use them to see in the config what a particular flow example looks
2146 Run the controller by executing:
2150 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2153 Point your mininet to the controller by giving the parameters
2154 --controller=remote,ip=.
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 addMDFlow openflow:1 f#
2163 Where # is a number between 1 and 80 and openflow:1 is the of the
2164 switch. This will create one of 80 possible flows. You can confirm that
2165 they were created on the switch.
2167 RemoveFlow : removeMDFlow
2168 ^^^^^^^^^^^^^^^^^^^^^^^^^
2170 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2171 is connected to the controller, try running:
2175 removeMDFlow openflow:1 f#
2177 where # is a number between 1 and 80 and openflow:1 is the of the
2178 switch. The flow to be deleted should have same flowid and Nodeid as
2181 ModifyFlow : modifyMDFlow
2182 ^^^^^^^^^^^^^^^^^^^^^^^^^
2184 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2185 is connected to the controller, try running:
2189 modifyMDFlow openflow:1 f#
2191 where # is a number between 1 and 80 and openflow:1 is the of the
2192 switch. The flow to be deleted should have same flowid and Nodeid as
2195 .. _ofp-test-provider-groups:
2197 Group : Test Provider
2198 ~~~~~~~~~~~~~~~~~~~~~
2200 Currently, the openflowplugin has a test-provider that allows you to
2201 push various flows through the system from the OSGI command line. Once
2202 those flows have been pushed through, you can see them as examples and
2203 then use them to see in the config what a particular flow example looks
2209 Run the controller by executing:
2213 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2216 Point your mininet to the controller by giving the parameters
2217 --controller=remote,ip=.
2219 Once you see your node (probably openflow:1 if you’ve been following
2220 along) in the inventory, at the OSGI command line try running:
2224 addGroup openflow:1 a# g#
2226 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2227 actiontype(a#). You can confirm that they were created on the switch.
2229 RemoveGroup : removeGroup
2230 ^^^^^^^^^^^^^^^^^^^^^^^^^
2232 Run the controller by executing:
2236 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2239 Point your mininet at the controller as described above.
2241 Once you see your node (probably openflow:1 if you’ve been following
2242 along) in the inventory, at the OSGI command line try running:
2246 removeGroup openflow:1 a# g#
2248 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2249 actiontype(a#). GroupId should be same as that used for adding the flow.
2250 You can confirm that it was removed from the switch.
2252 ModifyGroup : modifyGroup
2253 ^^^^^^^^^^^^^^^^^^^^^^^^^
2255 Run the controller by executing:
2259 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2262 Point your mininet at the controller as described above.
2264 Once you see your node (probably openflow:1 if you’ve been following
2265 along) in the inventory, at the OSGI command line try running:
2269 modifyGroup openflow:1 a# g#
2271 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2272 actiontype(a#). GroupId should be same as that used for adding the flow.
2273 You can confirm that it was modified on the switch.
2275 .. _ofp-test-provider-meters:
2277 Meters : Test Provider
2278 ~~~~~~~~~~~~~~~~~~~~~~
2280 Currently, the openflowplugin has a test-provider that allows you to
2281 push various flows through the system from the OSGI command line. Once
2282 those flows have been pushed through, you can see them as examples and
2283 then use them to see in the config what a particular flow example looks
2289 Run the controller by executing:
2293 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2296 Point your mininet to the controller by giving the parameters
2297 --controller=remote,ip=.
2299 Once you see your node (probably openflow:1 if you’ve been following
2300 along) in the inventory, at the OSGI command line try running:
2306 You can now confirm that meter has been created on the switch.
2308 RemoveMeter : removeMeter
2309 ^^^^^^^^^^^^^^^^^^^^^^^^^
2311 Run the controller by executing:
2315 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2318 Point your mininet to the controller by giving the parameters
2319 --controller=remote,ip=.
2321 Once you see your node (probably openflow:1 if you’ve been following
2322 along) in the inventory, at the OSGI command line try running:
2326 removeMeter openflow:1
2328 The CLI takes care of using the same meterId and nodeId as used for
2329 meter add. You can confirm that it was removed from the switch.
2331 ModifyMeter : modifyMeter
2332 ^^^^^^^^^^^^^^^^^^^^^^^^^
2334 Run the controller by executing:
2338 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2341 Point your mininet to the controller by giving the parameters
2342 --controller=remote,ip=.
2344 Once you see your node (probably openflow:1 if you’ve been following
2345 along) in the inventory, at the OSGI command line try running:
2349 modifyMeter openflow:1
2351 The CLI takes care of using the same meterId and nodeId as used for
2352 meter add. You can confirm that it was modified on the switch.
2354 .. _ofp-test-provider-topology:
2356 Topology : Notification
2357 ~~~~~~~~~~~~~~~~~~~~~~~
2359 Currently, the openflowplugin has a test-provider that allows you to get
2360 notifications for the topology related events like Link-Discovered ,
2361 Link-Removed events.
2363 Link Discovered Event : Testing
2364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2366 Run the controller by executing:
2370 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2373 Point your mininet to the controller by giving the parameters
2374 --controller=remote,ip=. Once the controller is connected to the switch,
2375 Link-Discovered event can be tested by initially configuring the
2376 specific flows on the switch. For Link Discovered event either
2377 table-miss flow or LLDP ether-type flow can be configured.
2379 Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
2383 addMDFlow Openflow:1 fTM
2386 OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
2387 *fTM* is the table-miss scenario here.
2389 Once the table-miss flow is configured through above command, we can see
2390 the Link-Discovered event in the debug logs on the controller console.
2392 Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
2396 addMDFlow Openflow:1 0(table-id) f81
2398 You can confirm that they were created on the switch.
2400 Once the LLDP ether-type flow is configured through above command, we
2401 can see the Link-Discovered event in the debug logs on the controller
2404 Link Removed Event : Testing
2405 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2407 Having configured either table-miss or lldp ether-type flow on switch,
2408 once the switch is disconnected we see the Link-Removed event
2410 Programmatic Interface
2411 ----------------------
2413 The API is documented in the model documentation under the section
2414 OpenFlow Services at:
2416 - `Models Documentation (OpenFlow Services
2417 Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
2419 .. _ofp-example-flows:
2427 The flow examples on this page are tested to work with OVS.
2429 Use, for example, POSTMAN with the following parameters:
2433 PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2435 - Accept: application/xml
2436 - Content-Type: application/xml
2442 PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2444 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2446 The format of the flow-programming XML is determined by by the grouping
2447 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2452 The format of the XML that describes OpenFlow matches is determined by
2453 the opendaylight-match-types yang model: .
2455 The RESTCONF documentation for the match-types yang model can be found
2457 `opendaylight-match-types.html <https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-match-types.html>`__
2462 - Flow=124, Table=2, Priority=2,
2463 Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2464 match=\\{ipv4\_destination\_address=10.0.1.1/24}
2466 - Note that ethernet-type MUST be 2048 (0x800)
2470 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2471 <flow xmlns="urn:opendaylight:flow:inventory">
2472 <strict>false</strict>
2484 <table_id>2</table_id>
2486 <cookie_mask>255</cookie_mask>
2487 <installHw>false</installHw>
2494 <ipv4-destination>10.0.1.1/24</ipv4-destination>
2496 <hard-timeout>12</hard-timeout>
2498 <idle-timeout>34</idle-timeout>
2499 <flow-name>FooXf1</flow-name>
2500 <priority>2</priority>
2501 <barrier>false</barrier>
2504 Ethernet Src Address
2505 ^^^^^^^^^^^^^^^^^^^^
2507 - Flow=126, Table=2, Priority=2,
2508 Instructions=\\{Apply\_Actions={drop}},
2509 match=\\{ethernet-source=00:00:00:00:00:01}
2513 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2514 <flow xmlns="urn:opendaylight:flow:inventory">
2515 <strict>false</strict>
2527 <table_id>2</table_id>
2529 <cookie_mask>255</cookie_mask>
2530 <installHw>false</installHw>
2534 <address>00:00:00:00:00:01</address>
2538 <hard-timeout>12</hard-timeout>
2540 <idle-timeout>34</idle-timeout>
2541 <flow-name>FooXf3</flow-name>
2542 <priority>2</priority>
2543 <barrier>false</barrier>
2546 Ethernet Src & Dest Addresses, Ethernet Type
2547 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2549 - Flow=127, Table=2, Priority=2,
2550 Instructions=\\{Apply\_Actions={drop}},
2551 match=\\{ethernet-source=00:00:00:00:23:ae,
2552 ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2556 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2557 <flow xmlns="urn:opendaylight:flow:inventory">
2558 <strict>false</strict>
2570 <table_id>2</table_id>
2572 <cookie_mask>255</cookie_mask>
2573 <installHw>false</installHw>
2579 <ethernet-destination>
2580 <address>ff:ff:ff:ff:ff:ff</address>
2581 </ethernet-destination>
2583 <address>00:00:00:00:23:ae</address>
2587 <hard-timeout>12</hard-timeout>
2589 <idle-timeout>34</idle-timeout>
2590 <flow-name>FooXf4</flow-name>
2591 <priority>2</priority>
2592 <barrier>false</barrier>
2595 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2596 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2598 - Note that ethernet-type MUST be 34887 (0x8847)
2602 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2603 <flow xmlns="urn:opendaylight:flow:inventory">
2604 <strict>false</strict>
2616 <table_id>2</table_id>
2618 <cookie_mask>255</cookie_mask>
2624 <ethernet-destination>
2625 <address>ff:ff:ff:ff:ff:ff</address>
2626 </ethernet-destination>
2628 <address>00:00:00:00:23:ae</address>
2631 <ipv4-source>10.1.2.3/24</ipv4-source>
2632 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2633 <in-port>0</in-port>
2635 <hard-timeout>12</hard-timeout>
2637 <idle-timeout>34</idle-timeout>
2638 <flow-name>FooXf5</flow-name>
2639 <priority>2</priority>
2640 <barrier>false</barrier>
2643 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2644 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2646 Protocol #, IP DSCP, IP ECN, Input Port
2648 - Note that ethernet-type MUST be 2048 (0x800)
2652 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2653 <flow xmlns="urn:opendaylight:flow:inventory">
2654 <strict>false</strict>
2666 <table_id>2</table_id>
2668 <cookie_mask>255</cookie_mask>
2674 <ethernet-destination>
2675 <address>ff:ff:ff:ff:ff:aa</address>
2676 </ethernet-destination>
2678 <address>00:00:00:11:23:ae</address>
2681 <ipv4-source>10.1.2.3/24</ipv4-source>
2682 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2684 <ip-protocol>56</ip-protocol>
2685 <ip-dscp>15</ip-dscp>
2688 <in-port>0</in-port>
2690 <hard-timeout>12000</hard-timeout>
2692 <idle-timeout>12000</idle-timeout>
2693 <flow-name>FooXf7</flow-name>
2694 <priority>2</priority>
2695 <barrier>false</barrier>
2698 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2699 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2701 Dest Ports, IP DSCP, IP ECN, Input Port
2703 - Note that ethernet-type MUST be 2048 (0x800)
2705 - Note that IP Protocol Type MUST be 6
2709 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2710 <flow xmlns="urn:opendaylight:flow:inventory">
2711 <strict>false</strict>
2723 <table_id>2</table_id>
2725 <cookie_mask>255</cookie_mask>
2731 <ethernet-destination>
2732 <address>ff:ff:29:01:19:61</address>
2733 </ethernet-destination>
2735 <address>00:00:00:11:23:ae</address>
2738 <ipv4-source>17.1.2.3/8</ipv4-source>
2739 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2741 <ip-protocol>6</ip-protocol>
2742 <ip-dscp>2</ip-dscp>
2745 <tcp-source-port>25364</tcp-source-port>
2746 <tcp-destination-port>8080</tcp-destination-port>
2747 <in-port>0</in-port>
2749 <hard-timeout>1200</hard-timeout>
2751 <idle-timeout>3400</idle-timeout>
2752 <flow-name>FooXf8</flow-name>
2753 <priority>2</priority>
2754 <barrier>false</barrier>
2757 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2758 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2760 Dest Ports, IP DSCP, IP ECN, Input Port
2762 - Note that ethernet-type MUST be 2048 (0x800)
2764 - Note that IP Protocol Type MUST be 17
2768 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2769 <flow xmlns="urn:opendaylight:flow:inventory">
2770 <strict>false</strict>
2782 <table_id>2</table_id>
2784 <cookie_mask>255</cookie_mask>
2790 <ethernet-destination>
2791 <address>20:14:29:01:19:61</address>
2792 </ethernet-destination>
2794 <address>00:00:00:11:23:ae</address>
2797 <ipv4-source>19.1.2.3/10</ipv4-source>
2798 <ipv4-destination>172.168.5.6/18</ipv4-destination>
2800 <ip-protocol>17</ip-protocol>
2801 <ip-dscp>8</ip-dscp>
2804 <udp-source-port>25364</udp-source-port>
2805 <udp-destination-port>8080</udp-destination-port>
2806 <in-port>0</in-port>
2808 <hard-timeout>1200</hard-timeout>
2810 <idle-timeout>3400</idle-timeout>
2811 <flow-name>FooXf9</flow-name>
2812 <priority>2</priority>
2813 <barrier>false</barrier>
2815 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2816 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2818 Type & Code, IP DSCP, IP ECN, Input Port
2820 - Note that ethernet-type MUST be 2048 (0x800)
2822 - Note that IP Protocol Type MUST be 1
2826 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2827 <flow xmlns="urn:opendaylight:flow:inventory">
2828 <strict>false</strict>
2840 <table_id>2</table_id>
2842 <cookie_mask>255</cookie_mask>
2848 <ethernet-destination>
2849 <address>ff:ff:29:01:19:61</address>
2850 </ethernet-destination>
2852 <address>00:00:00:11:23:ae</address>
2855 <ipv4-source>17.1.2.3/8</ipv4-source>
2856 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2858 <ip-protocol>1</ip-protocol>
2859 <ip-dscp>27</ip-dscp>
2863 <icmpv4-type>6</icmpv4-type>
2864 <icmpv4-code>3</icmpv4-code>
2866 <in-port>0</in-port>
2868 <hard-timeout>1200</hard-timeout>
2870 <idle-timeout>3400</idle-timeout>
2871 <flow-name>FooXf11</flow-name>
2872 <priority>2</priority>
2875 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2876 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2878 Transport Addresses, ARP Src & Target Hw Addresses
2880 - Note that ethernet-type MUST be 2054 (0x806)
2884 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2885 <flow xmlns="urn:opendaylight:flow:inventory">
2886 <strict>false</strict>
2902 <table_id>2</table_id>
2904 <cookie_mask>255</cookie_mask>
2910 <ethernet-destination>
2911 <address>ff:ff:ff:ff:FF:ff</address>
2912 </ethernet-destination>
2914 <address>00:00:FC:01:23:ae</address>
2918 <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2919 <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2920 <arp-source-hardware-address>
2921 <address>12:34:56:78:98:AB</address>
2922 </arp-source-hardware-address>
2923 <arp-target-hardware-address>
2924 <address>FE:DC:BA:98:76:54</address>
2925 </arp-target-hardware-address>
2927 <hard-timeout>12</hard-timeout>
2929 <idle-timeout>34</idle-timeout>
2930 <flow-name>FooXf14</flow-name>
2931 <priority>2</priority>
2932 <barrier>false</barrier>
2934 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2935 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2939 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2940 <flow xmlns="urn:opendaylight:flow:inventory">
2941 <strict>false</strict>
2953 <table_id>2</table_id>
2955 <cookie_mask>255</cookie_mask>
2961 <ethernet-destination>
2962 <address>ff:ff:29:01:19:61</address>
2963 </ethernet-destination>
2965 <address>00:00:00:11:23:ae</address>
2970 <vlan-id>78</vlan-id>
2971 <vlan-id-present>true</vlan-id-present>
2973 <vlan-pcp>3</vlan-pcp>
2976 <hard-timeout>1200</hard-timeout>
2978 <idle-timeout>3400</idle-timeout>
2979 <flow-name>FooXf15</flow-name>
2980 <priority>2</priority>
2981 <barrier>false</barrier>
2984 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2985 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2989 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2990 <flow xmlns="urn:opendaylight:flow:inventory">
2991 <flow-name>FooXf17</flow-name>
2993 <cookie_mask>255</cookie_mask>
2995 <hard-timeout>1200</hard-timeout>
2996 <idle-timeout>3400</idle-timeout>
2997 <priority>2</priority>
2998 <table_id>2</table_id>
2999 <strict>false</strict>
3016 <ethernet-destination>
3017 <address>ff:ff:29:01:19:61</address>
3018 </ethernet-destination>
3020 <address>00:00:00:11:23:ae</address>
3023 <protocol-match-fields>
3024 <mpls-label>567</mpls-label>
3025 <mpls-tc>3</mpls-tc>
3026 <mpls-bos>1</mpls-bos>
3027 </protocol-match-fields>
3031 IPv6 Src & Dest Addresses
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>FooXf18</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>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
3068 <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
3077 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3078 <flow xmlns="urn:opendaylight:flow:inventory">
3079 <strict>false</strict>
3080 <flow-name>FooXf19</flow-name>
3082 <cookie_mask>255</cookie_mask>
3084 <table_id>2</table_id>
3085 <priority>1</priority>
3086 <hard-timeout>1200</hard-timeout>
3087 <idle-timeout>3400</idle-timeout>
3088 <installHw>false</installHw>
3102 <metadata>12345</metadata>
3107 Metadata, Metadata Mask
3108 ^^^^^^^^^^^^^^^^^^^^^^^
3112 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3113 <flow xmlns="urn:opendaylight:flow:inventory">
3114 <strict>false</strict>
3115 <flow-name>FooXf20</flow-name>
3117 <cookie_mask>255</cookie_mask>
3119 <table_id>2</table_id>
3120 <priority>2</priority>
3121 <hard-timeout>1200</hard-timeout>
3122 <idle-timeout>3400</idle-timeout>
3123 <installHw>false</installHw>
3137 <metadata>12345</metadata>
3138 <metadata-mask>//FF</metadata-mask>
3143 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3144 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3146 - Note that ethernet-type MUST be 34525
3150 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3151 <flow xmlns="urn:opendaylight:flow:inventory">
3152 <strict>false</strict>
3153 <flow-name>FooXf21</flow-name>
3155 <cookie_mask>255</cookie_mask>
3157 <table_id>2</table_id>
3158 <priority>2</priority>
3159 <hard-timeout>1200</hard-timeout>
3160 <idle-timeout>3400</idle-timeout>
3161 <installHw>false</installHw>
3179 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3180 <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3182 <metadata>12345</metadata>
3185 <ip-protocol>17</ip-protocol>
3186 <ip-dscp>8</ip-dscp>
3189 <udp-source-port>25364</udp-source-port>
3190 <udp-destination-port>8080</udp-destination-port>
3194 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3195 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3197 - Note that ethernet-type MUST be 34525
3199 - Note that IP Protocol MUST be 6
3203 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3204 <flow xmlns="urn:opendaylight:flow:inventory">
3205 <strict>false</strict>
3206 <flow-name>FooXf22</flow-name>
3208 <cookie_mask>255</cookie_mask>
3210 <table_id>2</table_id>
3211 <priority>2</priority>
3212 <hard-timeout>1200</hard-timeout>
3213 <idle-timeout>3400</idle-timeout>
3214 <installHw>false</installHw>
3232 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3233 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3235 <metadata>12345</metadata>
3238 <ip-protocol>6</ip-protocol>
3239 <ip-dscp>60</ip-dscp>
3242 <tcp-source-port>183</tcp-source-port>
3243 <tcp-destination-port>8080</tcp-destination-port>
3247 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3248 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3250 - Note that ethernet-type MUST be 34525
3252 - Note that IP Protocol MUST be 6
3256 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3257 <flow xmlns="urn:opendaylight:flow:inventory">
3258 <strict>false</strict>
3259 <flow-name>FooXf23</flow-name>
3261 <cookie_mask>255</cookie_mask>
3263 <table_id>2</table_id>
3264 <priority>2</priority>
3265 <hard-timeout>1200</hard-timeout>
3266 <idle-timeout>3400</idle-timeout>
3267 <installHw>false</installHw>
3285 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3286 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3288 <metadata>12345</metadata>
3291 <ipv6-flabel>33</ipv6-flabel>
3294 <ip-protocol>6</ip-protocol>
3295 <ip-dscp>60</ip-dscp>
3298 <tcp-source-port>183</tcp-source-port>
3299 <tcp-destination-port>8080</tcp-destination-port>
3308 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3309 <flow xmlns="urn:opendaylight:flow:inventory">
3310 <strict>false</strict>
3311 <flow-name>FooXf24</flow-name>
3313 <cookie_mask>255</cookie_mask>
3315 <table_id>2</table_id>
3316 <priority>2</priority>
3317 <hard-timeout>1200</hard-timeout>
3318 <idle-timeout>3400</idle-timeout>
3319 <installHw>false</installHw>
3333 <tunnel-id>2591</tunnel-id>
3338 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3339 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3341 - Note that ethernet-type MUST be 34525
3343 - Note that IP Protocol MUST be 58
3347 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3348 <flow xmlns="urn:opendaylight:flow:inventory">
3349 <strict>false</strict>
3350 <flow-name>FooXf25</flow-name>
3352 <cookie_mask>255</cookie_mask>
3354 <table_id>2</table_id>
3355 <priority>2</priority>
3356 <hard-timeout>1200</hard-timeout>
3357 <idle-timeout>3400</idle-timeout>
3358 <installHw>false</installHw>
3376 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3377 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3379 <metadata>12345</metadata>
3382 <ipv6-flabel>33</ipv6-flabel>
3385 <ip-protocol>58</ip-protocol>
3386 <ip-dscp>60</ip-dscp>
3390 <icmpv6-type>6</icmpv6-type>
3391 <icmpv6-code>3</icmpv6-code>
3396 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3397 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3399 - Note that ethernet-type MUST be 34525
3401 - Note that IP Protocol MUST be 58
3405 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3406 <flow xmlns="urn:opendaylight:flow:inventory">
3407 <strict>false</strict>
3408 <flow-name>FooXf27</flow-name>
3410 <cookie_mask>255</cookie_mask>
3412 <table_id>2</table_id>
3413 <priority>2</priority>
3414 <hard-timeout>1200</hard-timeout>
3415 <idle-timeout>3400</idle-timeout>
3416 <installHw>false</installHw>
3434 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3435 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3437 <metadata>12345</metadata>
3440 <ipv6-flabel>33</ipv6-flabel>
3443 <ipv6-exthdr>0</ipv6-exthdr>
3446 <ip-protocol>6</ip-protocol>
3447 <ip-dscp>60</ip-dscp>
3450 <tcp-source-port>183</tcp-source-port>
3451 <tcp-destination-port>8080</tcp-destination-port>
3458 The format of the XML that describes OpenFlow actions is determined by
3459 the opendaylight-action-types yang model: .
3461 The RESTCONF documentation for the match-types yang model can be found
3463 `opendaylight-action-types.html <https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-action-types.html>`__
3473 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3474 <flow xmlns="urn:opendaylight:flow:inventory">
3475 <strict>false</strict>
3476 <flow-name>FooXf101</flow-name>
3478 <cookie_mask>255</cookie_mask>
3479 <cookie>101</cookie>
3480 <table_id>2</table_id>
3481 <priority>2</priority>
3482 <hard-timeout>1200</hard-timeout>
3483 <idle-timeout>3400</idle-timeout>
3484 <installHw>false</installHw>
3492 <output-node-connector>TABLE</output-node-connector>
3493 <max-length>60</max-length>
3505 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3506 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3508 <metadata>12345</metadata>
3511 <ip-protocol>6</ip-protocol>
3512 <ip-dscp>60</ip-dscp>
3515 <tcp-source-port>183</tcp-source-port>
3516 <tcp-destination-port>8080</tcp-destination-port>
3525 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3526 <flow xmlns="urn:opendaylight:flow:inventory">
3527 <strict>false</strict>
3528 <flow-name>FooXf102</flow-name>
3530 <cookie_mask>255</cookie_mask>
3531 <cookie>102</cookie>
3532 <table_id>2</table_id>
3533 <priority>2</priority>
3534 <hard-timeout>1200</hard-timeout>
3535 <idle-timeout>3400</idle-timeout>
3536 <installHw>false</installHw>
3544 <output-node-connector>INPORT</output-node-connector>
3545 <max-length>60</max-length>
3556 <ethernet-destination>
3557 <address>ff:ff:29:01:19:61</address>
3558 </ethernet-destination>
3560 <address>00:00:00:11:23:ae</address>
3563 <ipv4-source>17.1.2.3/8</ipv4-source>
3564 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3566 <ip-protocol>6</ip-protocol>
3567 <ip-dscp>2</ip-dscp>
3570 <tcp-source-port>25364</tcp-source-port>
3571 <tcp-destination-port>8080</tcp-destination-port>
3575 Output to Physical Port
3576 '''''''''''''''''''''''
3580 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3581 <flow xmlns="urn:opendaylight:flow:inventory">
3582 <strict>false</strict>
3583 <flow-name>FooXf103</flow-name>
3585 <cookie_mask>255</cookie_mask>
3586 <cookie>103</cookie>
3587 <table_id>2</table_id>
3588 <priority>2</priority>
3589 <hard-timeout>1200</hard-timeout>
3590 <idle-timeout>3400</idle-timeout>
3591 <installHw>false</installHw>
3599 <output-node-connector>1</output-node-connector>
3600 <max-length>60</max-length>
3611 <ethernet-destination>
3612 <address>ff:ff:29:01:19:61</address>
3613 </ethernet-destination>
3615 <address>00:00:00:11:23:ae</address>
3618 <ipv4-source>17.1.2.3/8</ipv4-source>
3619 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3621 <ip-protocol>6</ip-protocol>
3622 <ip-dscp>2</ip-dscp>
3625 <tcp-source-port>25364</tcp-source-port>
3626 <tcp-destination-port>8080</tcp-destination-port>
3635 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3636 <flow xmlns="urn:opendaylight:flow:inventory">
3637 <strict>false</strict>
3638 <flow-name>FooXf104</flow-name>
3640 <cookie_mask>255</cookie_mask>
3641 <cookie>104</cookie>
3642 <table_id>2</table_id>
3643 <priority>2</priority>
3644 <hard-timeout>1200</hard-timeout>
3645 <idle-timeout>3400</idle-timeout>
3646 <installHw>false</installHw>
3654 <output-node-connector>LOCAL</output-node-connector>
3655 <max-length>60</max-length>
3667 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3668 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3670 <metadata>12345</metadata>
3673 <ip-protocol>6</ip-protocol>
3674 <ip-dscp>60</ip-dscp>
3677 <tcp-source-port>183</tcp-source-port>
3678 <tcp-destination-port>8080</tcp-destination-port>
3687 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3688 <flow xmlns="urn:opendaylight:flow:inventory">
3689 <strict>false</strict>
3690 <flow-name>FooXf105</flow-name>
3692 <cookie_mask>255</cookie_mask>
3693 <cookie>105</cookie>
3694 <table_id>2</table_id>
3695 <priority>2</priority>
3696 <hard-timeout>1200</hard-timeout>
3697 <idle-timeout>3400</idle-timeout>
3698 <installHw>false</installHw>
3706 <output-node-connector>NORMAL</output-node-connector>
3707 <max-length>60</max-length>
3719 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3720 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3722 <metadata>12345</metadata>
3725 <ip-protocol>6</ip-protocol>
3726 <ip-dscp>45</ip-dscp>
3729 <tcp-source-port>20345</tcp-source-port>
3730 <tcp-destination-port>80</tcp-destination-port>
3739 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3740 <flow xmlns="urn:opendaylight:flow:inventory">
3741 <strict>false</strict>
3742 <flow-name>FooXf106</flow-name>
3744 <cookie_mask>255</cookie_mask>
3745 <cookie>106</cookie>
3746 <table_id>2</table_id>
3747 <priority>2</priority>
3748 <hard-timeout>1200</hard-timeout>
3749 <idle-timeout>3400</idle-timeout>
3750 <installHw>false</installHw>
3758 <output-node-connector>FLOOD</output-node-connector>
3759 <max-length>60</max-length>
3771 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3772 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3774 <metadata>12345</metadata>
3777 <ip-protocol>6</ip-protocol>
3778 <ip-dscp>45</ip-dscp>
3781 <tcp-source-port>20345</tcp-source-port>
3782 <tcp-destination-port>80</tcp-destination-port>
3791 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3792 <flow xmlns="urn:opendaylight:flow:inventory">
3793 <strict>false</strict>
3794 <flow-name>FooXf107</flow-name>
3796 <cookie_mask>255</cookie_mask>
3797 <cookie>107</cookie>
3798 <table_id>2</table_id>
3799 <priority>2</priority>
3800 <hard-timeout>1200</hard-timeout>
3801 <idle-timeout>3400</idle-timeout>
3802 <installHw>false</installHw>
3810 <output-node-connector>ALL</output-node-connector>
3811 <max-length>60</max-length>
3822 <ethernet-destination>
3823 <address>20:14:29:01:19:61</address>
3824 </ethernet-destination>
3826 <address>00:00:00:11:23:ae</address>
3829 <ipv4-source>19.1.2.3/10</ipv4-source>
3830 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3832 <ip-protocol>17</ip-protocol>
3833 <ip-dscp>8</ip-dscp>
3836 <udp-source-port>25364</udp-source-port>
3837 <udp-destination-port>8080</udp-destination-port>
3838 <in-port>0</in-port>
3842 Output to CONTROLLER
3843 ''''''''''''''''''''
3847 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3848 <flow xmlns="urn:opendaylight:flow:inventory">
3849 <strict>false</strict>
3850 <flow-name>FooXf108</flow-name>
3852 <cookie_mask>255</cookie_mask>
3853 <cookie>108</cookie>
3854 <table_id>2</table_id>
3855 <priority>2</priority>
3856 <hard-timeout>1200</hard-timeout>
3857 <idle-timeout>3400</idle-timeout>
3858 <installHw>false</installHw>
3866 <output-node-connector>CONTROLLER</output-node-connector>
3867 <max-length>60</max-length>
3878 <ethernet-destination>
3879 <address>20:14:29:01:19:61</address>
3880 </ethernet-destination>
3882 <address>00:00:00:11:23:ae</address>
3885 <ipv4-source>19.1.2.3/10</ipv4-source>
3886 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3888 <ip-protocol>17</ip-protocol>
3889 <ip-dscp>8</ip-dscp>
3892 <udp-source-port>25364</udp-source-port>
3893 <udp-destination-port>8080</udp-destination-port>
3894 <in-port>0</in-port>
3903 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3904 <flow xmlns="urn:opendaylight:flow:inventory">
3905 <strict>false</strict>
3906 <flow-name>FooXf109</flow-name>
3908 <cookie_mask>255</cookie_mask>
3909 <cookie>109</cookie>
3910 <table_id>2</table_id>
3911 <priority>2</priority>
3912 <hard-timeout>1200</hard-timeout>
3913 <idle-timeout>3400</idle-timeout>
3914 <installHw>false</installHw>
3922 <output-node-connector>ANY</output-node-connector>
3923 <max-length>60</max-length>
3934 <ethernet-destination>
3935 <address>20:14:29:01:19:61</address>
3936 </ethernet-destination>
3938 <address>00:00:00:11:23:ae</address>
3941 <ipv4-source>19.1.2.3/10</ipv4-source>
3942 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3944 <ip-protocol>17</ip-protocol>
3945 <ip-dscp>8</ip-dscp>
3948 <udp-source-port>25364</udp-source-port>
3949 <udp-destination-port>8080</udp-destination-port>
3950 <in-port>0</in-port>
3959 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3960 <flow xmlns="urn:opendaylight:flow:inventory">
3961 <strict>false</strict>
3968 <ethernet-type>33024</ethernet-type>
3976 <vlan-id>79</vlan-id>
3977 <vlan-id-present>true</vlan-id-present>
3985 <output-node-connector>5</output-node-connector>
3992 <table_id>0</table_id>
3999 <ethernet-destination>
4000 <address>FF:FF:29:01:19:61</address>
4001 </ethernet-destination>
4003 <address>00:00:00:11:23:AE</address>
4006 <in-port>1</in-port>
4008 <flow-name>vlan_flow</flow-name>
4009 <priority>2</priority>
4017 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4019 xmlns="urn:opendaylight:flow:inventory">
4020 <flow-name>push-mpls-action</flow-name>
4027 <ethernet-type>34887</ethernet-type>
4033 <protocol-match-fields>
4034 <mpls-label>27</mpls-label>
4035 </protocol-match-fields>
4041 <output-node-connector>2</output-node-connector>
4048 <strict>false</strict>
4056 <in-port>1</in-port>
4057 <ipv4-destination>10.0.0.4/32</ipv4-destination>
4059 <idle-timeout>0</idle-timeout>
4060 <cookie_mask>255</cookie_mask>
4061 <cookie>401</cookie>
4062 <priority>8</priority>
4063 <hard-timeout>0</hard-timeout>
4064 <installHw>false</installHw>
4065 <table_id>0</table_id>
4071 - Note that ethernet-type MUST be 34887
4075 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4077 xmlns="urn:opendaylight:flow:inventory">
4078 <flow-name>push-mpls-action</flow-name>
4085 <protocol-match-fields>
4086 <mpls-label>37</mpls-label>
4087 </protocol-match-fields>
4093 <output-node-connector>2</output-node-connector>
4100 <strict>false</strict>
4108 <in-port>1</in-port>
4109 <protocol-match-fields>
4110 <mpls-label>27</mpls-label>
4111 </protocol-match-fields>
4113 <idle-timeout>0</idle-timeout>
4114 <cookie_mask>255</cookie_mask>
4115 <cookie>401</cookie>
4116 <priority>8</priority>
4117 <hard-timeout>0</hard-timeout>
4118 <installHw>false</installHw>
4119 <table_id>0</table_id>
4125 - Note that ethernet-type MUST be 34887
4127 - Issue with OVS 2.1 `OVS
4128 fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4132 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4134 xmlns="urn:opendaylight:flow:inventory">
4135 <flow-name>FooXf10</flow-name>
4142 <ethernet-type>2048</ethernet-type>
4148 <output-node-connector>2</output-node-connector>
4149 <max-length>60</max-length>
4157 <strict>false</strict>
4164 <in-port>1</in-port>
4165 <protocol-match-fields>
4166 <mpls-label>37</mpls-label>
4167 </protocol-match-fields>
4169 <idle-timeout>0</idle-timeout>
4170 <cookie>889</cookie>
4171 <cookie_mask>255</cookie_mask>
4172 <installHw>false</installHw>
4173 <hard-timeout>0</hard-timeout>
4174 <priority>10</priority>
4175 <table_id>0</table_id>
4181 - Nicira extension defined in
4182 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4184 - Example section is -
4185 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4190 <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4191 <hard-timeout>0</hard-timeout>
4192 <idle-timeout>0</idle-timeout>
4200 <metadata>2199023255552</metadata>
4201 <metadata-mask>2305841909702066176</metadata-mask>
4204 <ip-protocol>1</ip-protocol>
4207 <cookie>110100480</cookie>
4215 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4222 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4223 <idle-timeout>60</idle-timeout>
4224 <fin-idle-timeout>0</fin-idle-timeout>
4225 <hard-timeout>60</hard-timeout>
4227 <table-id>41</table-id>
4228 <priority>61010</priority>
4229 <fin-hard-timeout>0</fin-hard-timeout>
4231 <flow-mod-add-match-from-value>
4232 <src-ofs>0</src-ofs>
4234 <src-field>1538</src-field>
4235 <flow-mod-num-bits>16</flow-mod-num-bits>
4236 </flow-mod-add-match-from-value>
4239 <flow-mod-add-match-from-field>
4240 <src-ofs>0</src-ofs>
4241 <dst-ofs>0</dst-ofs>
4242 <dst-field>4100</dst-field>
4243 <src-field>3588</src-field>
4244 <flow-mod-num-bits>32</flow-mod-num-bits>
4245 </flow-mod-add-match-from-field>
4248 <flow-mod-add-match-from-field>
4249 <src-ofs>0</src-ofs>
4250 <dst-ofs>0</dst-ofs>
4251 <dst-field>518</dst-field>
4252 <src-field>1030</src-field>
4253 <flow-mod-num-bits>48</flow-mod-num-bits>
4254 </flow-mod-add-match-from-field>
4257 <flow-mod-add-match-from-field>
4258 <src-ofs>0</src-ofs>
4259 <dst-ofs>0</dst-ofs>
4260 <dst-field>3073</dst-field>
4261 <src-field>3073</src-field>
4262 <flow-mod-num-bits>8</flow-mod-num-bits>
4263 </flow-mod-add-match-from-field>
4266 <flow-mod-copy-value-into-field>
4267 <dst-ofs>0</dst-ofs>
4269 <dst-field>65540</dst-field>
4270 <flow-mod-num-bits>8</flow-mod-num-bits>
4271 </flow-mod-copy-value-into-field>
4273 <cookie>110100480</cookie>
4279 <installHw>true</installHw>
4280 <barrier>false</barrier>
4281 <strict>false</strict>
4282 <priority>61010</priority>
4283 <table_id>253</table_id>
4284 <flow-name>ACL</flow-name>
4287 Opendaylight OpenFlow Plugin: Troubleshooting
4288 ---------------------------------------------