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 Spreadshee <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 Running the controller with the new OpenFlow Plugin
123 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125 Opendaylight Controller Plugin Options
126 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
128 - Run OpenDaylight controller with the new OpenFlow 1.0/1.3 plugin
130 There are 2 ways. In integration project the plugin version is
131 controlled by startup parameter. Or there is distribution build
132 available directly in openflowplugin project.
134 1. use **integration** project
136 - download and unzip latest build from
137 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.2.2-SNAPSHOT/
141 cd <extracted directory>/bin
144 - or clone and build **integration** project:
148 git clone https://git.opendaylight.org/gerrit/p/integration.git
149 cd integration/distributions/extra/karaf
151 cd ./target/assembly/bin
159 2. use **openflowplugin** project
161 - download and unzip latest build from
162 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/openflowplugin/openflowplugin-karaf/0.1.0-SNAPSHOT/
166 cd <extracted directory>/bin
169 - or clone and build **openflowplugin** project:
173 git clone https://git.opendaylight.org/gerrit/p/openflowplugin.git
176 cd ./distribution/karaf/target/assembly/bin/
178 - or build whole distribution localy from folder distribution/karaf
182 mvn clean install -DskipTests
192 There are all helium features (from features-openflowplugin) duplicated
193 into features-openflowplugin-li. The duplicates got suffix *-li* and
194 provide Lithium codebase functionality.
198 - odl-openflowplugin-app-lldp-speaker-li
200 - odl-openflowplugin-flow-services-rest-li
202 - odl-openflowplugin-drop-test-li
204 In case topology is required then the first one should be installed.
208 feature:install odl-openflowplugin-app-lldp-speaker-li
210 The Li-southbound currently provides:
222 In order to see really low level messages enter these in karaf console:
226 log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
227 log:set TRACE org.opendaylight.openflowplugin.impl
229 **How enable topology**
231 In order for topology to work (fill dataStore/operational with links)
232 there must be LLDP responses delivered back to controller. This requires
233 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
234 priority, empty match and one output action = send to controller. Having
235 this flow installed on every node will enable for gathering and
236 exporting links between nodes into dataStore/operational. This is done
237 if you use for example l2 switch application.
241 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
242 <flow xmlns="urn:opendaylight:flow:inventory">
243 <barrier>false</barrier>
245 <flags>SEND_FLOW_REM</flags>
246 <flow-name>FooXf54</flow-name>
247 <hard-timeout>0</hard-timeout>
249 <idle-timeout>0</idle-timeout>
250 <installHw>false</installHw>
256 <max-length>65535</max-length>
257 <output-node-connector>CONTROLLER</output-node-connector>
266 <priority>0</priority>
267 <strict>false</strict>
268 <table_id>0</table_id>
271 **Enable RESTCONF and Controller GUI**
273 If you want to use RESTCONF with openflowplugin project, you have to
274 install *odl-restconf* feature to enable that. To install *odl-restconf*
275 feature run the following command
279 karaf#>feature:install odl-restconf
281 If you want to access the Controller GUI, you have to install
282 *odl-dlux-core* feature to enable that. Run following command to install
287 karaf#>feature:install odl-dlux-core
289 Once you enable the feature, access the Controller GUI using following
294 http://<controller-ip>:8181/dlux/index.html
296 **Run OpenDaylight controller with the old OpenFlow 1.0-only (old)
299 There are 2 ways. In integration project the plugin version is
300 controlled by startup parameter. Or there is distribution build
301 available directly in controller project.
303 1. use **integration/distributions/base** project
305 - use the instructions from
306 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[
307 1.0/1.3 plugin], but skip the plugin version parameter:
313 2. use **controller/distribution/opendaylight** project
315 - download and unzip latest build from
316 https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight/
322 - or clone and build **controller** project:
326 git clone https://git.opendaylight.org/gerrit/p/controller.git
327 cd controller/opendaylight/distribution/opendaylight
329 cd target/distribution.opendaylight-osgipackage/opendaylight
331 - and finally run (there is no version specific option, because the
333 1.0/1.3 (new) plugin is not available here at all)
335 **Give it a minute to come up :)**
337 OpenFlow 1.3 Enabled Software Switches / Environment
338 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
340 Getting Mininet with OF 1.3
341 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
343 `Download Mininet VM Upgraded to OF
344 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
345 (or the `newer mininet-2.1.0 with
346 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
347 that works with VMware Player. For using this on VirtualBox, import this
348 to VMware Player and then export the .vmdk ) or you could build one
349 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
350 setting up Mininet with OF 1.3].
352 Installing under VirtualBox
353 '''''''''''''''''''''''''''
355 .. figure:: ./images/openflowplugin/host-only-vbox.png
356 :alt: configuring a host-only adapter
358 configuring a host-only adapter
360 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
361 don’t actually seem to allow for connections from the host to the VM.
362 Instead, you need to configure a host-only network and set it up. Do
365 - Go to the VM’s settings in VirtualBox then to network and add a
366 second adapter attached to "Host-only Adapter" (see the screenshot to
369 - Edit the /etc/network/interfaces file to configure the adapter
370 properly by adding these two lines
379 At this point you should have two interfaces one which gives you NATed
380 access to the internet and another that gives you access between your
381 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
382 address and the the host-only interface gets a 192.168.56.x address.
384 Your simplest choice: Use Vagrant
385 '''''''''''''''''''''''''''''''''
387 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
388 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
392 cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
396 This will leave you sshed into a fully provisioned Ubuntu Trusty box
397 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
399 Setup CPqD Openflow 1.3 Soft Switch
400 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
402 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
403 1.3 features, e.g group multipart statistics request. Alternate options
404 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
407 - You can setup the switch as per the instructions given on the
410 ```https://github.com/CPqD/ofsoftswitch13`` <https://github.com/CPqD/ofsoftswitch13>`__
412 - Fire following command to start the switch
418 $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
419 e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
421 ethX should not be associated with ip address and ipv6 should be
422 disabled on it. If you are installing the switch on your local machine,
423 you can use following command (for Ubuntu) to create virtual interface.
427 ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
429 ethX - Any existing interface.
431 Or if you are using mininet VM for installing this switch, you can
432 simply add one more adaptor to your VM.
434 Start Openflow protocol agent:
438 $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
439 e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
441 Commands to add entries to various tables of the switch
442 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
448 $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
454 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
458 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
464 $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
465 e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
467 "dpctl" --help is not very intuitive, so please keep adding any new
468 command you figured out while your experiment with the switch.
470 Using the built-in Wireshark
471 ''''''''''''''''''''''''''''
473 Mininet comes with pre-installed Wireshark, but for some reason it does
474 not include the Openflow protocol dissector. You may want to get and
475 install it in the */.wireshark/plugins/* directory.
477 First login to your mininet VM
481 ssh mininet@<your mininet vm ip> -X
483 The -X option in ssh will enable x-session over ssh so that the
484 wireshark window can be shown on your host machine’s display. when
485 prompted, enter the password (mininet).
487 From the mininet vm shell, set the wireshark capture privileges
488 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
492 sudo chgrp mininet /usr/bin/dumpcap
493 sudo chmod 754 /usr/bin/dumpcap
494 sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
496 Finally, start wireshark:
502 The wireshark window should show up.
504 To see only Openflow packets, you may want to apply the following filter
505 in the Filter window:
509 tcp.port == 6633 and tcp.flags.push == 1
511 Start the capture on *any* port.
513 Running Mininet with OF 1.3
514 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
516 From within the Mininet VM, run:
520 sudo mn --topo single,3 --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
528 The purpose of this page is to walk you through how to see the Inventory
529 Manager working end to end with the openflowplugin using OpenFlow 1.3.
531 Basically, you will learn how to:
533 1. Run the Base/Virtualization/Service provider Edition with the new
535 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
536 the controller with the new OpenFlow Plugin]
538 2. Start mininet to use OF 1.3:
539 OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
540 Enabled Software Switches / Environment]
542 3. Use RESTCONF to see the nodes appear in inventory.
544 Restconf for Inventory
545 ^^^^^^^^^^^^^^^^^^^^^^
547 The REST url for listing all the nodes is:
551 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
553 You will need to set the Accept header:
557 Accept: application/xml
559 You will also need to use HTTP Basic Auth with username: admin password:
562 Alternately, if you have a node’s id you can address it as
566 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
572 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
574 How to hit RestConf with Postman
575 ''''''''''''''''''''''''''''''''
578 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
580 In the chrome browser bar enter
586 And click on Postman.
588 Enter the URL. Click on the Headers button on the far right. Enter the
589 Accept: header. Click on the Basic Auth Tab at the top and setup the
590 username and password. Send.
595 If you have not had any switches come up, and though no children for
596 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
597 and exception will be thrown. I’m pretty sure I know how to fix this
598 bug, just need to get to it :)
606 Learn End to End for Inventory
607 ''''''''''''''''''''''''''''''
610 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
615 - Run mininet with support for OF 1.3 as described in `End to End
616 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
618 - Make sure you see the openflow:1 node come up as described in `End to
620 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
625 Current way to flush a flow to switch looks like this:
627 1. Create MD-SAL modeled flow and commit it into dataStore using two
629 FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
631 2. FRM gets notified and invokes corresponding rpc (addFlow) on
632 particular service provider (if suitable provider for given node
635 3. The provider (plugin in this case) transforms MD-SAL modeled flow
636 into OF-API modeled flow
638 4. OF-API modeled flow is then flushed into OFLibrary
640 5. OFLibrary encodes flow into particular version of wire protocol and
641 sends it to particular switch
643 6. Check on mininet side if flow is set
652 - Content-Type: application/xml
654 - Accept: application/xml
658 - Use URL: "http://<controller
659 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
667 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
668 <flow xmlns="urn:opendaylight:flow:inventory">
669 <priority>2</priority>
670 <flow-name>Foo</flow-name>
677 <ipv4-destination>10.0.10.2/24</ipv4-destination>
680 <table_id>0</table_id>
694 **\*Note**: If you want to try a different flow id or a different table,
695 make sure the URL and the body stay in sync. For example, if you wanted
696 to try: table 2 flow 20 you’d change the URL to:
699 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
701 but you would also need to update the 20 and 2 in the body of the XML.
703 Other caveat, we have a known bug with updates, so please only write to
704 a given flow id and table id on a given node once at this time until we
705 resolve it. Or you can use the DELETE method with the same URL in
706 PostMan to delete the flow information on switch and controller cache.
708 Check for your flow on the switch
709 '''''''''''''''''''''''''''''''''
711 - See your flow on your mininet:
715 mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
716 OFPST_FLOW reply (OF1.3) (xid=0x2):
717 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
719 If you want to see the above information from the mininet prompt - use
720 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
723 Check for your flow in the controller config via RESTCONF
724 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
726 - See your configured flow in POSTMAN with
728 - URL `http://<controller <http://<controller>`__
729 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
733 - You no longer need to set Accept header
740 "flow-node-inventory:table": [
742 "flow-node-inventory:id": 0,
743 "flow-node-inventory:flow": [
745 "flow-node-inventory:priority": 1,
746 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
747 "flow-node-inventory:table_id": 0,
748 "flow-node-inventory:hard-timeout": 0,
749 "flow-node-inventory:idle-timeout": 0,
750 "flow-node-inventory:instructions": {
751 "flow-node-inventory:instruction": [
753 "flow-node-inventory:apply-actions": {
754 "flow-node-inventory:action": [
756 "flow-node-inventory:output-action": {
757 "flow-node-inventory:output-node-connector": "openflow:1:1"
759 "flow-node-inventory:order": 0
763 "flow-node-inventory:order": 0
767 "flow-node-inventory:match": {
768 "flow-node-inventory:ethernet-match": {
769 "flow-node-inventory:ethernet-type": {
770 "flow-node-inventory:type": 2048
773 "flow-node-inventory:ipv4-destination": "10.0.0.2"
775 "flow-node-inventory:cookie": 0
778 "flow-node-inventory:priority": 1,
779 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
780 "flow-node-inventory:table_id": 0,
781 "flow-node-inventory:hard-timeout": 0,
782 "flow-node-inventory:idle-timeout": 0,
783 "flow-node-inventory:instructions": {
784 "flow-node-inventory:instruction": [
786 "flow-node-inventory:apply-actions": {
787 "flow-node-inventory:action": [
789 "flow-node-inventory:output-action": {
790 "flow-node-inventory:output-node-connector": "openflow:1:1"
792 "flow-node-inventory:order": 0
796 "flow-node-inventory:order": 0
800 "flow-node-inventory:match": {
801 "flow-node-inventory:ethernet-match": {
802 "flow-node-inventory:ethernet-type": {
803 "flow-node-inventory:type": 2048
806 "flow-node-inventory:ipv4-destination": "10.0.0.1"
808 "flow-node-inventory:cookie": 0
811 "flow-node-inventory:priority": 1,
812 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
813 "flow-node-inventory:table_id": 0,
814 "flow-node-inventory:hard-timeout": 0,
815 "flow-node-inventory:idle-timeout": 0,
816 "flow-node-inventory:instructions": {
817 "flow-node-inventory:instruction": [
819 "flow-node-inventory:apply-actions": {
820 "flow-node-inventory:action": [
822 "flow-node-inventory:output-action": {
823 "flow-node-inventory:output-node-connector": "openflow:1:1"
825 "flow-node-inventory:order": 0
829 "flow-node-inventory:order": 0
833 "flow-node-inventory:match": {
834 "flow-node-inventory:ethernet-match": {
835 "flow-node-inventory:ethernet-type": {
836 "flow-node-inventory:type": 2048
839 "flow-node-inventory:ipv4-destination": "10.0.0.3"
841 "flow-node-inventory:cookie": 0
844 "flow-node-inventory:priority": 1,
845 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
846 "flow-node-inventory:table_id": 0,
847 "flow-node-inventory:hard-timeout": 0,
848 "flow-node-inventory:idle-timeout": 0,
849 "flow-node-inventory:instructions": {
850 "flow-node-inventory:instruction": [
852 "flow-node-inventory:apply-actions": {
853 "flow-node-inventory:action": [
855 "flow-node-inventory:output-action": {
856 "flow-node-inventory:output-node-connector": "openflow:1:1"
858 "flow-node-inventory:order": 0
862 "flow-node-inventory:order": 0
866 "flow-node-inventory:match": {
867 "flow-node-inventory:ethernet-match": {
868 "flow-node-inventory:ethernet-type": {
869 "flow-node-inventory:type": 2048
872 "flow-node-inventory:ipv4-destination": "10.0.0.4"
874 "flow-node-inventory:cookie": 0
877 "flow-node-inventory:priority": 1,
878 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
879 "flow-node-inventory:table_id": 0,
880 "flow-node-inventory:hard-timeout": 0,
881 "flow-node-inventory:idle-timeout": 0,
882 "flow-node-inventory:instructions": {
883 "flow-node-inventory:instruction": [
885 "flow-node-inventory:apply-actions": {
886 "flow-node-inventory:action": [
888 "flow-node-inventory:output-action": {
889 "flow-node-inventory:output-node-connector": "openflow:1:2"
891 "flow-node-inventory:order": 0
895 "flow-node-inventory:order": 0
899 "flow-node-inventory:match": {
900 "flow-node-inventory:ethernet-match": {
901 "flow-node-inventory:ethernet-type": {
902 "flow-node-inventory:type": 2048
905 "flow-node-inventory:ipv4-destination": "10.0.0.5"
907 "flow-node-inventory:cookie": 0
910 "flow-node-inventory:priority": 1,
911 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
912 "flow-node-inventory:table_id": 0,
913 "flow-node-inventory:hard-timeout": 0,
914 "flow-node-inventory:idle-timeout": 0,
915 "flow-node-inventory:instructions": {
916 "flow-node-inventory:instruction": [
918 "flow-node-inventory:apply-actions": {
919 "flow-node-inventory:action": [
921 "flow-node-inventory:output-action": {
922 "flow-node-inventory:output-node-connector": "openflow:1:2"
924 "flow-node-inventory:order": 0
928 "flow-node-inventory:order": 0
932 "flow-node-inventory:match": {
933 "flow-node-inventory:ethernet-match": {
934 "flow-node-inventory:ethernet-type": {
935 "flow-node-inventory:type": 2048
938 "flow-node-inventory:ipv4-destination": "10.0.0.8"
940 "flow-node-inventory:cookie": 0
943 "flow-node-inventory:priority": 1,
944 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
945 "flow-node-inventory:table_id": 0,
946 "flow-node-inventory:hard-timeout": 0,
947 "flow-node-inventory:idle-timeout": 0,
948 "flow-node-inventory:instructions": {
949 "flow-node-inventory:instruction": [
951 "flow-node-inventory:apply-actions": {
952 "flow-node-inventory:action": [
954 "flow-node-inventory:output-action": {
955 "flow-node-inventory:output-node-connector": "openflow:1:2"
957 "flow-node-inventory:order": 0
961 "flow-node-inventory:order": 0
965 "flow-node-inventory:match": {
966 "flow-node-inventory:ethernet-match": {
967 "flow-node-inventory:ethernet-type": {
968 "flow-node-inventory:type": 2048
971 "flow-node-inventory:ipv4-destination": "10.0.0.6"
973 "flow-node-inventory:cookie": 0
976 "flow-node-inventory:priority": 1,
977 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
978 "flow-node-inventory:table_id": 0,
979 "flow-node-inventory:hard-timeout": 0,
980 "flow-node-inventory:idle-timeout": 0,
981 "flow-node-inventory:instructions": {
982 "flow-node-inventory:instruction": [
984 "flow-node-inventory:apply-actions": {
985 "flow-node-inventory:action": [
987 "flow-node-inventory:output-action": {
988 "flow-node-inventory:output-node-connector": "openflow:1:2"
990 "flow-node-inventory:order": 0
994 "flow-node-inventory:order": 0
998 "flow-node-inventory:match": {
999 "flow-node-inventory:ethernet-match": {
1000 "flow-node-inventory:ethernet-type": {
1001 "flow-node-inventory:type": 2048
1004 "flow-node-inventory:ipv4-destination": "10.0.0.7"
1006 "flow-node-inventory:cookie": 0
1013 Look for your flow stats in the controller operational data via
1014 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1018 - See your operational flow stats in POSTMAN with
1020 - URL "http://<controller
1021 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
1030 "flow-node-inventory:table": [
1032 "flow-node-inventory:id": 0,
1033 "flow-node-inventory:flow": [
1035 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
1036 "opendaylight-flow-statistics:flow-statistics": {
1037 "opendaylight-flow-statistics:cookie": 0,
1038 "opendaylight-flow-statistics:duration": {
1039 "opendaylight-flow-statistics:nanosecond": 886000000,
1040 "opendaylight-flow-statistics:second": 2707
1042 "opendaylight-flow-statistics:hard-timeout": 0,
1043 "opendaylight-flow-statistics:byte-count": 784,
1044 "opendaylight-flow-statistics:match": {
1045 "opendaylight-flow-statistics:ethernet-match": {
1046 "opendaylight-flow-statistics:ethernet-type": {
1047 "opendaylight-flow-statistics:type": 2048
1050 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
1052 "opendaylight-flow-statistics:priority": 1,
1053 "opendaylight-flow-statistics:packet-count": 8,
1054 "opendaylight-flow-statistics:table_id": 0,
1055 "opendaylight-flow-statistics:idle-timeout": 0,
1056 "opendaylight-flow-statistics:instructions": {
1057 "opendaylight-flow-statistics:instruction": [
1059 "opendaylight-flow-statistics:order": 0,
1060 "opendaylight-flow-statistics:apply-actions": {
1061 "opendaylight-flow-statistics:action": [
1063 "opendaylight-flow-statistics:order": 0,
1064 "opendaylight-flow-statistics:output-action": {
1065 "opendaylight-flow-statistics:output-node-connector": "1",
1066 "opendaylight-flow-statistics:max-length": 0
1077 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
1078 "opendaylight-flow-statistics:flow-statistics": {
1079 "opendaylight-flow-statistics:cookie": 0,
1080 "opendaylight-flow-statistics:duration": {
1081 "opendaylight-flow-statistics:nanosecond": 826000000,
1082 "opendaylight-flow-statistics:second": 2711
1084 "opendaylight-flow-statistics:hard-timeout": 0,
1085 "opendaylight-flow-statistics:byte-count": 1568,
1086 "opendaylight-flow-statistics:match": {
1087 "opendaylight-flow-statistics:ethernet-match": {
1088 "opendaylight-flow-statistics:ethernet-type": {
1089 "opendaylight-flow-statistics:type": 2048
1092 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
1094 "opendaylight-flow-statistics:priority": 1,
1095 "opendaylight-flow-statistics:packet-count": 16,
1096 "opendaylight-flow-statistics:table_id": 0,
1097 "opendaylight-flow-statistics:idle-timeout": 0,
1098 "opendaylight-flow-statistics:instructions": {
1099 "opendaylight-flow-statistics:instruction": [
1101 "opendaylight-flow-statistics:order": 0,
1102 "opendaylight-flow-statistics:apply-actions": {
1103 "opendaylight-flow-statistics:action": [
1105 "opendaylight-flow-statistics:order": 0,
1106 "opendaylight-flow-statistics:output-action": {
1107 "opendaylight-flow-statistics:output-node-connector": "1",
1108 "opendaylight-flow-statistics:max-length": 0
1119 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1120 "opendaylight-flow-statistics:flow-statistics": {
1121 "opendaylight-flow-statistics:cookie": 0,
1122 "opendaylight-flow-statistics:duration": {
1123 "opendaylight-flow-statistics:nanosecond": 548000000,
1124 "opendaylight-flow-statistics:second": 2708
1126 "opendaylight-flow-statistics:hard-timeout": 0,
1127 "opendaylight-flow-statistics:byte-count": 784,
1128 "opendaylight-flow-statistics:match": {
1129 "opendaylight-flow-statistics:ethernet-match": {
1130 "opendaylight-flow-statistics:ethernet-type": {
1131 "opendaylight-flow-statistics:type": 2048
1134 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1136 "opendaylight-flow-statistics:priority": 1,
1137 "opendaylight-flow-statistics:packet-count": 8,
1138 "opendaylight-flow-statistics:table_id": 0,
1139 "opendaylight-flow-statistics:idle-timeout": 0,
1140 "opendaylight-flow-statistics:instructions": {
1141 "opendaylight-flow-statistics:instruction": [
1143 "opendaylight-flow-statistics:order": 0,
1144 "opendaylight-flow-statistics:apply-actions": {
1145 "opendaylight-flow-statistics:action": [
1147 "opendaylight-flow-statistics:order": 0,
1148 "opendaylight-flow-statistics:output-action": {
1149 "opendaylight-flow-statistics:output-node-connector": "1",
1150 "opendaylight-flow-statistics:max-length": 0
1161 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1162 "opendaylight-flow-statistics:flow-statistics": {
1163 "opendaylight-flow-statistics:cookie": 0,
1164 "opendaylight-flow-statistics:duration": {
1165 "opendaylight-flow-statistics:nanosecond": 296000000,
1166 "opendaylight-flow-statistics:second": 2710
1168 "opendaylight-flow-statistics:hard-timeout": 0,
1169 "opendaylight-flow-statistics:byte-count": 1274,
1170 "opendaylight-flow-statistics:match": {
1171 "opendaylight-flow-statistics:ethernet-match": {
1172 "opendaylight-flow-statistics:ethernet-type": {
1173 "opendaylight-flow-statistics:type": 2048
1176 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1178 "opendaylight-flow-statistics:priority": 1,
1179 "opendaylight-flow-statistics:packet-count": 13,
1180 "opendaylight-flow-statistics:table_id": 0,
1181 "opendaylight-flow-statistics:idle-timeout": 0,
1182 "opendaylight-flow-statistics:instructions": {
1183 "opendaylight-flow-statistics:instruction": [
1185 "opendaylight-flow-statistics:order": 0,
1186 "opendaylight-flow-statistics:apply-actions": {
1187 "opendaylight-flow-statistics:action": [
1189 "opendaylight-flow-statistics:order": 0,
1190 "opendaylight-flow-statistics:output-action": {
1191 "opendaylight-flow-statistics:output-node-connector": "1",
1192 "opendaylight-flow-statistics:max-length": 0
1203 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1204 "opendaylight-flow-statistics:flow-statistics": {
1205 "opendaylight-flow-statistics:cookie": 0,
1206 "opendaylight-flow-statistics:duration": {
1207 "opendaylight-flow-statistics:nanosecond": 392000000,
1208 "opendaylight-flow-statistics:second": 2711
1210 "opendaylight-flow-statistics:hard-timeout": 0,
1211 "opendaylight-flow-statistics:byte-count": 1470,
1212 "opendaylight-flow-statistics:match": {
1213 "opendaylight-flow-statistics:ethernet-match": {
1214 "opendaylight-flow-statistics:ethernet-type": {
1215 "opendaylight-flow-statistics:type": 2048
1218 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1220 "opendaylight-flow-statistics:priority": 1,
1221 "opendaylight-flow-statistics:packet-count": 15,
1222 "opendaylight-flow-statistics:table_id": 0,
1223 "opendaylight-flow-statistics:idle-timeout": 0,
1224 "opendaylight-flow-statistics:instructions": {
1225 "opendaylight-flow-statistics:instruction": [
1227 "opendaylight-flow-statistics:order": 0,
1228 "opendaylight-flow-statistics:apply-actions": {
1229 "opendaylight-flow-statistics:action": [
1231 "opendaylight-flow-statistics:order": 0,
1232 "opendaylight-flow-statistics:output-action": {
1233 "opendaylight-flow-statistics:output-node-connector": "2",
1234 "opendaylight-flow-statistics:max-length": 0
1245 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1246 "opendaylight-flow-statistics:flow-statistics": {
1247 "opendaylight-flow-statistics:cookie": 0,
1248 "opendaylight-flow-statistics:duration": {
1249 "opendaylight-flow-statistics:nanosecond": 344000000,
1250 "opendaylight-flow-statistics:second": 2707
1252 "opendaylight-flow-statistics:hard-timeout": 0,
1253 "opendaylight-flow-statistics:byte-count": 784,
1254 "opendaylight-flow-statistics:match": {
1255 "opendaylight-flow-statistics:ethernet-match": {
1256 "opendaylight-flow-statistics:ethernet-type": {
1257 "opendaylight-flow-statistics:type": 2048
1260 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1262 "opendaylight-flow-statistics:priority": 1,
1263 "opendaylight-flow-statistics:packet-count": 8,
1264 "opendaylight-flow-statistics:table_id": 0,
1265 "opendaylight-flow-statistics:idle-timeout": 0,
1266 "opendaylight-flow-statistics:instructions": {
1267 "opendaylight-flow-statistics:instruction": [
1269 "opendaylight-flow-statistics:order": 0,
1270 "opendaylight-flow-statistics:apply-actions": {
1271 "opendaylight-flow-statistics:action": [
1273 "opendaylight-flow-statistics:order": 0,
1274 "opendaylight-flow-statistics:output-action": {
1275 "opendaylight-flow-statistics:output-node-connector": "2",
1276 "opendaylight-flow-statistics:max-length": 0
1287 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1288 "opendaylight-flow-statistics:flow-statistics": {
1289 "opendaylight-flow-statistics:cookie": 0,
1290 "opendaylight-flow-statistics:duration": {
1291 "opendaylight-flow-statistics:nanosecond": 577000000,
1292 "opendaylight-flow-statistics:second": 2706
1294 "opendaylight-flow-statistics:hard-timeout": 0,
1295 "opendaylight-flow-statistics:byte-count": 784,
1296 "opendaylight-flow-statistics:match": {
1297 "opendaylight-flow-statistics:ethernet-match": {
1298 "opendaylight-flow-statistics:ethernet-type": {
1299 "opendaylight-flow-statistics:type": 2048
1302 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1304 "opendaylight-flow-statistics:priority": 1,
1305 "opendaylight-flow-statistics:packet-count": 8,
1306 "opendaylight-flow-statistics:table_id": 0,
1307 "opendaylight-flow-statistics:idle-timeout": 0,
1308 "opendaylight-flow-statistics:instructions": {
1309 "opendaylight-flow-statistics:instruction": [
1311 "opendaylight-flow-statistics:order": 0,
1312 "opendaylight-flow-statistics:apply-actions": {
1313 "opendaylight-flow-statistics:action": [
1315 "opendaylight-flow-statistics:order": 0,
1316 "opendaylight-flow-statistics:output-action": {
1317 "opendaylight-flow-statistics:output-node-connector": "2",
1318 "opendaylight-flow-statistics:max-length": 0
1329 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1330 "opendaylight-flow-statistics:flow-statistics": {
1331 "opendaylight-flow-statistics:cookie": 0,
1332 "opendaylight-flow-statistics:duration": {
1333 "opendaylight-flow-statistics:nanosecond": 659000000,
1334 "opendaylight-flow-statistics:second": 2705
1336 "opendaylight-flow-statistics:hard-timeout": 0,
1337 "opendaylight-flow-statistics:byte-count": 784,
1338 "opendaylight-flow-statistics:match": {
1339 "opendaylight-flow-statistics:ethernet-match": {
1340 "opendaylight-flow-statistics:ethernet-type": {
1341 "opendaylight-flow-statistics:type": 2048
1344 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1346 "opendaylight-flow-statistics:priority": 1,
1347 "opendaylight-flow-statistics:packet-count": 8,
1348 "opendaylight-flow-statistics:table_id": 0,
1349 "opendaylight-flow-statistics:idle-timeout": 0,
1350 "opendaylight-flow-statistics:instructions": {
1351 "opendaylight-flow-statistics:instruction": [
1353 "opendaylight-flow-statistics:order": 0,
1354 "opendaylight-flow-statistics:apply-actions": {
1355 "opendaylight-flow-statistics:action": [
1357 "opendaylight-flow-statistics:order": 0,
1358 "opendaylight-flow-statistics:output-action": {
1359 "opendaylight-flow-statistics:output-node-connector": "2",
1360 "opendaylight-flow-statistics:max-length": 0
1371 "opendaylight-flow-table-statistics:flow-table-statistics": {
1372 "opendaylight-flow-table-statistics:active-flows": 8,
1373 "opendaylight-flow-table-statistics:packets-matched": 97683,
1374 "opendaylight-flow-table-statistics:packets-looked-up": 101772
1380 Discovering and testing new Flow Types
1381 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1383 Currently, the openflowplugin has a test-provider that allows you to
1384 push various flows through the system from the OSGI command line. Once
1385 those flows have been pushed through, you can see them as examples and
1386 then use them to see in the config what a particular flow example looks
1396 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1399 Point your mininet at the controller as described above.
1401 once you can see your node (probably openflow:1 if you’ve been following
1402 along) in the inventory, at the OSGI command line try running:
1406 addMDFlow openflow:1 f#
1408 Where # is a number between 1 and 80. This will create one of 80
1409 possible flows. You can go confirm they were created on the switch.
1411 Once you’ve done that, use
1415 - Accept: application/xml
1418 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1420 To see a full listing of the flows in table 2 (where they will be put).
1421 If you want to see a particular flow, look at
1424 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1426 Where # is 123 + the f# you used. So for example, for f22, your url
1430 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1432 Note: You may have to trim out some of the sections like that contain
1433 bitfields and binary types that are not correctly modeled.
1435 Note: Before attempting to PUT a flow you have created via addMDFlow,
1436 please change its URL and body to, for example, use table 1 instead of
1437 table 2 or another Flow Id, so you don’t collide.
1439 Note: There are several test command providers and the one handling
1440 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1441 use as **commands in OSGI-console** have prefix *\_*.
1446 Examples for XML for various flow matches, instructions & actions can be
1447 found in following section `here <#odl-ofp-example-flows_overview>`__
1455 The purpose of this page is to walk you through how to see the Topology
1456 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1458 Basically, you will learn how to:
1460 1. Run the Base/Virtualization/Service provider Edition with the new
1461 openflowplugin: `Running the controller with the new OpenFlow
1462 Plugin <#odl-ofp-running-controller-with-the-new-of-plugin_top>`__
1464 2. Start mininet to use OF 1.3: `OpenFlow 1.3 Enabled Software Switches
1465 / Environment <#odl-ofp-test-environment_top>`__
1467 3. Use RESTCONF to see the topology information.
1469 Restconf for Topology
1470 ^^^^^^^^^^^^^^^^^^^^^
1472 The REST url for listing all the nodes is:
1476 http://localhost:8080/restconf/operational/network-topology:network-topology/
1478 You will need to set the Accept header:
1482 Accept: application/xml
1484 You will also need to use HTTP Basic Auth with username: admin password:
1487 Alternately, if you have a node’s id you can address it as
1491 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1497 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1499 How to hit RestConf with Postman
1500 ''''''''''''''''''''''''''''''''
1503 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1506 In the chrome browser bar enter
1512 And click on Postman.
1514 Enter the URL. Click on the Headers button on the far right. Enter the
1515 Accept: header. Click on the Basic Auth Tab at the top and setup the
1516 username and password. Send.
1524 Groups are NOT SUPPORTED in current (2.0.0) version of
1525 `openvswitch <http://www.openvswitch.org/download>`__. See
1527 - http://openvswitch.org/releases/NEWS-2.0.0
1529 - http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1531 For testing group feature please use for example
1532 `CPQD <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1538 Learn End to End for Inventory
1539 ''''''''''''''''''''''''''''''
1542 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1547 Run CPqD with support for OF 1.3 as described in `End to End
1548 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1550 Make sure you see the openflow:1 node come up as described in `End to
1552 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1557 Current way to flush a group to switch looks like this:
1559 1. create MD-SAL modeled group and commit it into dataStore using two
1562 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1563 particular service provider (if suitable provider for given node
1566 3. the provider (plugin in this case) transforms MD-SAL modeled group
1567 into OF-API modeled group
1569 4. OF-API modeled group is then flushed into OFLibrary
1571 5. OFLibrary encodes group into particular version of wire protocol and
1572 sends it to particular switch
1574 6. check on CPqD if group is installed
1583 - Content-Type: application/xml
1585 - Accept: application/xml
1588 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1596 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1597 <group xmlns="urn:opendaylight:flow:inventory">
1598 <group-type>group-all</group-type>
1605 <bucket-id>12</bucket-id>
1606 <watch_group>14</watch_group>
1607 <watch_port>1234</watch_port>
1612 <ipv4-source>100.1.1.1</ipv4-source>
1618 <ipv4-destination>200.71.9.5210</ipv4-destination>
1622 <bucket-id>13</bucket-id>
1623 <watch_group>14</watch_group>
1624 <watch_port>1234</watch_port>
1627 <barrier>false</barrier>
1628 <group-name>Foo</group-name>
1629 <group-id>1</group-id>
1634 If you want to try a different group id, make sure the URL and the
1635 body stay in sync. For example, if you wanted to try: group-id 20
1636 you’d change the URL to
1637 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1638 but you would also need to update the <group-id>20</group-id> in the
1643 <ip-address> :Provide the IP Address of the machine on which the
1644 controller is running.
1646 Check for your group on the switch
1647 ''''''''''''''''''''''''''''''''''
1649 - See your group on your cpqd switch:
1653 COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1656 stat_req{type="grp", flags="0x0", group="all"}
1660 stat_repl{type="grp", flags="0x0", stats=[
1661 {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1663 Check for your group in the controller config via RESTCONF
1664 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1666 - See your configured group in POSTMAN with
1669 `http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1 <http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1>`__
1673 - You should no longer need to set Accept
1675 - Note: <ip-address> :Provide the IP Address of the machine on which
1676 the controller is running.
1678 Look for your group stats in the controller operational data via RESTCONF
1679 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1681 - See your operational group stats in POSTMAN with
1684 `http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1 <http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1>`__
1688 - Note: <ip-address> :Provide the IP Address of the machine on which
1689 the controller is running.
1691 Discovering and testing Group Types
1692 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1694 Currently, the openflowplugin has a test-provider that allows you to
1695 push various groups through the system from the OSGI command line. Once
1696 those groups have been pushed through, you can see them as examples and
1697 then use them to see in the config what a particular group example looks
1707 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1710 Point your CPqD at the controller as described above.
1712 once you can see your node (probably openflow:1 if you’ve been following
1713 along) in the inventory, at the OSGI command line try running:
1719 This will install a group in the switch. You can check whether the group
1720 is installed or not.
1722 Once you’ve done that, use
1726 - Accept: application/xml
1729 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1731 - Note: <ip-address> :Provide the IP Address of the machine on which
1732 the controller is running.
1736 Before attempting to PUT a group you have created via addGroup,
1737 please change its URL and body to, for example, use group 1 instead
1738 of group 2 or another Group Id, so that they don’t collide.
1742 There are several test command providers and the one handling groups
1743 is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1744 as commands in OSGI-console have prefix *\_*.
1749 Examples for XML for various Group Types can be found in the
1750 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1759 Learn End to End for Inventory
1760 ''''''''''''''''''''''''''''''
1763 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1768 - Run mininet with support for OF 1.3 as described in `End to End
1769 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1771 - Make sure you see the openflow:1 node come up as described in `End to
1773 Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
1778 Current way to flush a meter to switch looks like this:
1780 1. create MD-SAL modeled flow and commit it into dataStore using two
1783 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1784 particular service provider (if suitable provider for given node
1787 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1788 into OF-API modeled meter
1790 4. OF-API modeled meter is then flushed into OFLibrary
1792 5. OFLibrary encodes meter into particular version of wire protocol and
1793 sends it to particular switch
1795 6. check on mininet side if meter is installed
1802 - Set Request Headers
1804 - Content-Type: application/xml
1806 - Accept: application/xml
1809 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1817 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1818 <meter xmlns="urn:opendaylight:flow:inventory">
1819 <container-name>abcd</container-name>
1820 <flags>meter-burst</flags>
1821 <meter-band-headers>
1823 <band-burst-size>444</band-burst-size>
1824 <band-id>0</band-id>
1825 <band-rate>234</band-rate>
1826 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1827 <dscp-remark-rate>12</dscp-remark-rate>
1828 <prec_level>1</prec_level>
1830 <flags>ofpmbt-dscp-remark</flags>
1832 </meter-band-header>
1833 </meter-band-headers>
1834 <meter-id>1</meter-id>
1835 <meter-name>Foo</meter-name>
1840 If you want to try a different meter id, make sure the URL and the
1841 body stay in sync. For example, if you wanted to try: meter-id 20
1842 you’d change the URL to
1843 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1844 but you would also need to update the 20 in the body to match.
1848 :Provide the IP Address of the machine on which the controller is
1851 Check for your meter on the switch
1852 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1854 - See your meter on your CPqD switch:
1858 COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1861 stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1865 stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1867 Check for your meter in the controller config via RESTCONF
1868 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1870 - See your configured flow in POSTMAN with
1873 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1877 - You should no longer need to set Request Headers for Accept
1879 - Note: :Provide the IP Address of the machine on which the
1880 controller is running.
1882 Look for your meter stats in the controller operational data via RESTCONF
1883 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1885 - See your operational meter stats in POSTMAN with
1888 "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1892 - Note: :Provide the IP Address of the machine on which the
1893 controller is running.
1895 Discovering and testing Meter Types
1896 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1898 Currently, the openflowplugin has a test-provider that allows you to
1899 push various meters through the system from the OSGI command line. Once
1900 those meters have been pushed through, you can see them as examples and
1901 then use them to see in the config what a particular meter example looks
1911 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1914 Point your CPqD at the controller as described above.
1916 Once you can see your CPqD connected to the controller, at the OSGI
1917 command line try running:
1923 Once you’ve done that, use
1927 - Accept: application/xml
1930 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1932 - Note: :Provide the IP Address of the machine on which the
1933 controller is running.
1937 Before attempting to PUT a meter you have created via addMeter,
1938 please change its URL and body to, for example, use meter 1 instead
1939 of meter 2 or another Meter Id, so you don’t collide.
1943 There are several test command providers and the one handling Meter
1944 is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1945 used as **commands in OSGI-console** have prefix *\_*. Examples:
1946 addMeter, modifyMeter and removeMeter.
1951 Examples for XML for various Meter Types can be found in the
1952 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1961 This page contains high level detail about the statistics collection
1962 mechanism in new OpenFlow plugin.
1964 Statistics collection in new OpenFlow plugin
1965 ''''''''''''''''''''''''''''''''''''''''''''
1967 New OpenFlow plugin collects following statistics from OpenFlow enabled
1970 1. Individual Flow Statistics
1972 2. Aggregate Flow Statistics
1974 3. Flow Table Statistics
1978 5. Group Description
1982 7. Meter Configuration
1988 10. Node Description
1990 11. Flow Table Features
1992 12. Port Description
1998 At a high level statistics collection mechanism is divided into
1999 following three parts
2001 1. Statistics related `YANG models, service APIs and notification
2002 interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
2003 are defined in the MD-SAL.
2005 2. Service APIs (RPCs) defined in yang models are implemented by
2006 OpenFlow plugin. Notification interfaces are wired up by OpenFlow
2009 3. Statistics Manager Module: This module use service APIs implemented
2010 by OpenFlow plugin to send statistics requests to all the connected
2011 OpenFlow enabled nodes. Module also implements notification
2012 interfaces to receive statistics response from nodes. Once it
2013 receives statistics response, it augment all the statistics data to
2014 the relevant element of the node (like node-connector, flow,
2015 table,group, meter) and store it in MD-SAL operational data store.
2017 Details of statistics collection
2018 ''''''''''''''''''''''''''''''''
2020 - Current implementation collects above mentioned statistics (except
2021 10-14) at a periodic interval of 15 seconds.
2023 - Statistics mentioned in 10 to 14 are only fetched when any node
2024 connects to the controller because these statistics are just static
2025 details about the respective elements.
2027 - Whenever any new element is added to node (like flow, group, meter,
2028 queue) it sends statistics request immediately to fetch the latest
2029 statistics and store it in the operational data store.
2031 - Whenever any element is deleted from the node, it immediately remove
2032 the relevant statistics from operational data store.
2034 - Statistics data are augmented to their respective element stored in
2035 the configuration data store. E.g Controller installed flows are
2036 stored in configuration data store. Whenever Statistics Manager
2037 receive statistics data related to these flow, it search the
2038 corresponding flow in the configuration data store and augment
2039 statistics in the corresponding location in operational data store.
2040 Similar approach is used for other elements of the node.
2042 - Statistics Manager stores flow statistics as an unaccounted flow
2043 statistics in operational data store if there is no corresponding
2044 flow exist in configuration data store. ID format of unaccounted flow
2045 statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
2048 - All the unaccounted flows will be cleaned up periodically after every
2049 two cycle of flow statistics collection, given that there is no
2050 update for these flows in the last two cycles.
2052 - Statistics Manager only entertains statistics response for the
2053 request sent by itself. User can write its own statistics collector
2054 using the statistics service APIs and notification defined in yang
2055 models, it won’t effect the functioning of Statistics Manager.
2057 - OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
2058 Manager don’t send any group & meter related statistics request to
2059 OpenFlow 1.0 enabled switch.
2061 RESTCONF Uris to access statistics of various node elements
2062 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
2064 - Aggregate Flow Statistics & Flow Table Statistics
2068 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
2070 - Individual Flow Statistics from specific table
2074 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
2076 - Group Features & Meter Features Statistics
2080 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
2082 - Group Description & Group Statistics
2086 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
2088 - Meter Configuration & Meter Statistics
2092 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
2094 - Node Connector Statistics
2098 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
2104 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
2109 For more details and queuries, please send mail to
2110 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
2111 want to report any bug in statistics collection, please use
2112 `bugzilla <https://bugs.opendaylight.org>`__.
2114 Web / Graphical Interface
2115 -------------------------
2117 In the Hydrogen & Helium release, the current Web UI does not support
2118 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2119 the flows, multiple flow tables, etc.
2121 Command Line Interface
2122 ----------------------
2124 The following is not exactly CLI - just a set of test commands which can
2125 be executed on the OSGI console testing various features in OpenFlow 1.3
2128 - `OSGI Console Test Provider Commands:
2129 Flows <#odl-ofp-test-provider-flows_test-provider>`__
2131 - `OSGI Console Test Provider Commands:
2132 Groups <#odl-ofp-test-provider-groups_test-provider>`__
2134 - `OSGI Console Test Provider Commands:
2135 Meters <#odl-ofp-test-provider-meters_test-provider>`__
2137 - `OSGI Console Test Provider Commands: Topology
2138 Events <#odl-ofp-test-provider-topoogy_test-provider>`__
2140 Flows : Test Provider
2141 ~~~~~~~~~~~~~~~~~~~~~
2143 Currently, the openflowplugin has a test-provider that allows you to
2144 push various flows through the system from the OSGI command line. Once
2145 those flows have been pushed through, you can see them as examples and
2146 then use them to see in the config what a particular flow example looks
2152 Run the controller by executing:
2156 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2159 Point your mininet to the controller by giving the parameters
2160 --controller=remote,ip=.
2162 Once you see your node (probably openflow:1 if you’ve been following
2163 along) in the inventory, at the OSGI command line try running:
2167 addMDFlow openflow:1 f#
2169 Where # is a number between 1 and 80 and openflow:1 is the of the
2170 switch. This will create one of 80 possible flows. You can confirm that
2171 they were created on the switch.
2173 RemoveFlow : removeMDFlow
2174 ^^^^^^^^^^^^^^^^^^^^^^^^^
2176 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2177 is connected to the controller, try running:
2181 removeMDFlow openflow:1 f#
2183 where # is a number between 1 and 80 and openflow:1 is the of the
2184 switch. The flow to be deleted should have same flowid and Nodeid as
2187 ModifyFlow : modifyMDFlow
2188 ^^^^^^^^^^^^^^^^^^^^^^^^^
2190 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2191 is connected to the controller, try running:
2195 modifyMDFlow openflow:1 f#
2197 where # is a number between 1 and 80 and openflow:1 is the of the
2198 switch. The flow to be deleted should have same flowid and Nodeid as
2201 Group : Test Provider
2202 ~~~~~~~~~~~~~~~~~~~~~
2204 Currently, the openflowplugin has a test-provider that allows you to
2205 push various flows through the system from the OSGI command line. Once
2206 those flows have been pushed through, you can see them as examples and
2207 then use them to see in the config what a particular flow example looks
2213 Run the controller by executing:
2217 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2220 Point your mininet to the controller by giving the parameters
2221 --controller=remote,ip=.
2223 Once you see your node (probably openflow:1 if you’ve been following
2224 along) in the inventory, at the OSGI command line try running:
2228 addGroup openflow:1 a# g#
2230 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2231 actiontype(a#). You can confirm that they were created on the switch.
2233 RemoveGroup : removeGroup
2234 ^^^^^^^^^^^^^^^^^^^^^^^^^
2236 Run the controller by executing:
2240 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2243 Point your mininet at the controller as described above.
2245 Once you see your node (probably openflow:1 if you’ve been following
2246 along) in the inventory, at the OSGI command line try running:
2250 removeGroup openflow:1 a# g#
2252 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2253 actiontype(a#). GroupId should be same as that used for adding the flow.
2254 You can confirm that it was removed from the switch.
2256 ModifyGroup : modifyGroup
2257 ^^^^^^^^^^^^^^^^^^^^^^^^^
2259 Run the controller by executing:
2263 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2266 Point your mininet at the controller as described above.
2268 Once you see your node (probably openflow:1 if you’ve been following
2269 along) in the inventory, at the OSGI command line try running:
2273 modifyGroup openflow:1 a# g#
2275 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2276 actiontype(a#). GroupId should be same as that used for adding the flow.
2277 You can confirm that it was modified on the switch.
2279 Meters : Test Provider
2280 ~~~~~~~~~~~~~~~~~~~~~~
2282 Currently, the openflowplugin has a test-provider that allows you to
2283 push various flows through the system from the OSGI command line. Once
2284 those flows have been pushed through, you can see them as examples and
2285 then use them to see in the config what a particular flow example looks
2291 Run the controller by executing:
2295 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2298 Point your mininet to the controller by giving the parameters
2299 --controller=remote,ip=.
2301 Once you see your node (probably openflow:1 if you’ve been following
2302 along) in the inventory, at the OSGI command line try running:
2308 You can now confirm that meter has been created on the switch.
2310 RemoveMeter : removeMeter
2311 ^^^^^^^^^^^^^^^^^^^^^^^^^
2313 Run the controller by executing:
2317 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2320 Point your mininet to the controller by giving the parameters
2321 --controller=remote,ip=.
2323 Once you see your node (probably openflow:1 if you’ve been following
2324 along) in the inventory, at the OSGI command line try running:
2328 removeMeter openflow:1
2330 The CLI takes care of using the same meterId and nodeId as used for
2331 meter add. You can confirm that it was removed from the switch.
2333 ModifyMeter : modifyMeter
2334 ^^^^^^^^^^^^^^^^^^^^^^^^^
2336 Run the controller by executing:
2340 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2343 Point your mininet to the controller by giving the parameters
2344 --controller=remote,ip=.
2346 Once you see your node (probably openflow:1 if you’ve been following
2347 along) in the inventory, at the OSGI command line try running:
2351 modifyMeter openflow:1
2353 The CLI takes care of using the same meterId and nodeId as used for
2354 meter add. You can confirm that it was modified on the switch.
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>`__
2425 The flow examples on this page are tested to work with OVS.
2427 Use, for example, POSTMAN with the following parameters:
2431 PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2433 - Accept: application/xml
2434 - Content-Type: application/xml
2440 PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2442 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2444 The format of the flow-programming XML is determined by by the grouping
2445 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2450 The format of the XML that describes OpenFlow matches is determined by
2451 the opendaylight-match-types yang model: .
2453 The RESTCONF documentation for the match-types yang model can be found
2455 `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>`__
2460 - Flow=124, Table=2, Priority=2,
2461 Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2462 match=\\{ipv4\_destination\_address=10.0.1.1/24}
2464 - Note that ethernet-type MUST be 2048 (0x800)
2468 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2469 <flow xmlns="urn:opendaylight:flow:inventory">
2470 <strict>false</strict>
2482 <table_id>2</table_id>
2484 <cookie_mask>255</cookie_mask>
2485 <installHw>false</installHw>
2492 <ipv4-destination>10.0.1.1/24</ipv4-destination>
2494 <hard-timeout>12</hard-timeout>
2496 <idle-timeout>34</idle-timeout>
2497 <flow-name>FooXf1</flow-name>
2498 <priority>2</priority>
2499 <barrier>false</barrier>
2502 Ethernet Src Address
2503 ^^^^^^^^^^^^^^^^^^^^
2505 - Flow=126, Table=2, Priority=2,
2506 Instructions=\\{Apply\_Actions={drop}},
2507 match=\\{ethernet-source=00:00:00:00:00:01}
2511 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2512 <flow xmlns="urn:opendaylight:flow:inventory">
2513 <strict>false</strict>
2525 <table_id>2</table_id>
2527 <cookie_mask>255</cookie_mask>
2528 <installHw>false</installHw>
2532 <address>00:00:00:00:00:01</address>
2536 <hard-timeout>12</hard-timeout>
2538 <idle-timeout>34</idle-timeout>
2539 <flow-name>FooXf3</flow-name>
2540 <priority>2</priority>
2541 <barrier>false</barrier>
2544 Ethernet Src & Dest Addresses, Ethernet Type
2545 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2547 - Flow=127, Table=2, Priority=2,
2548 Instructions=\\{Apply\_Actions={drop}},
2549 match=\\{ethernet-source=00:00:00:00:23:ae,
2550 ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2554 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2555 <flow xmlns="urn:opendaylight:flow:inventory">
2556 <strict>false</strict>
2568 <table_id>2</table_id>
2570 <cookie_mask>255</cookie_mask>
2571 <installHw>false</installHw>
2577 <ethernet-destination>
2578 <address>ff:ff:ff:ff:ff:ff</address>
2579 </ethernet-destination>
2581 <address>00:00:00:00:23:ae</address>
2585 <hard-timeout>12</hard-timeout>
2587 <idle-timeout>34</idle-timeout>
2588 <flow-name>FooXf4</flow-name>
2589 <priority>2</priority>
2590 <barrier>false</barrier>
2593 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2594 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2596 - Note that ethernet-type MUST be 34887 (0x8847)
2600 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2601 <flow xmlns="urn:opendaylight:flow:inventory">
2602 <strict>false</strict>
2614 <table_id>2</table_id>
2616 <cookie_mask>255</cookie_mask>
2622 <ethernet-destination>
2623 <address>ff:ff:ff:ff:ff:ff</address>
2624 </ethernet-destination>
2626 <address>00:00:00:00:23:ae</address>
2629 <ipv4-source>10.1.2.3/24</ipv4-source>
2630 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2631 <in-port>0</in-port>
2633 <hard-timeout>12</hard-timeout>
2635 <idle-timeout>34</idle-timeout>
2636 <flow-name>FooXf5</flow-name>
2637 <priority>2</priority>
2638 <barrier>false</barrier>
2641 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2642 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2644 Protocol #, IP DSCP, IP ECN, Input Port
2646 - Note that ethernet-type MUST be 2048 (0x800)
2650 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2651 <flow xmlns="urn:opendaylight:flow:inventory">
2652 <strict>false</strict>
2664 <table_id>2</table_id>
2666 <cookie_mask>255</cookie_mask>
2672 <ethernet-destination>
2673 <address>ff:ff:ff:ff:ff:aa</address>
2674 </ethernet-destination>
2676 <address>00:00:00:11:23:ae</address>
2679 <ipv4-source>10.1.2.3/24</ipv4-source>
2680 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2682 <ip-protocol>56</ip-protocol>
2683 <ip-dscp>15</ip-dscp>
2686 <in-port>0</in-port>
2688 <hard-timeout>12000</hard-timeout>
2690 <idle-timeout>12000</idle-timeout>
2691 <flow-name>FooXf7</flow-name>
2692 <priority>2</priority>
2693 <barrier>false</barrier>
2696 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2699 Dest Ports, IP DSCP, IP ECN, Input Port
2701 - Note that ethernet-type MUST be 2048 (0x800)
2703 - Note that IP Protocol Type MUST be 6
2707 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2708 <flow xmlns="urn:opendaylight:flow:inventory">
2709 <strict>false</strict>
2721 <table_id>2</table_id>
2723 <cookie_mask>255</cookie_mask>
2729 <ethernet-destination>
2730 <address>ff:ff:29:01:19:61</address>
2731 </ethernet-destination>
2733 <address>00:00:00:11:23:ae</address>
2736 <ipv4-source>17.1.2.3/8</ipv4-source>
2737 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2739 <ip-protocol>6</ip-protocol>
2740 <ip-dscp>2</ip-dscp>
2743 <tcp-source-port>25364</tcp-source-port>
2744 <tcp-destination-port>8080</tcp-destination-port>
2745 <in-port>0</in-port>
2747 <hard-timeout>1200</hard-timeout>
2749 <idle-timeout>3400</idle-timeout>
2750 <flow-name>FooXf8</flow-name>
2751 <priority>2</priority>
2752 <barrier>false</barrier>
2755 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2756 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2758 Dest Ports, IP DSCP, IP ECN, Input Port
2760 - Note that ethernet-type MUST be 2048 (0x800)
2762 - Note that IP Protocol Type MUST be 17
2766 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2767 <flow xmlns="urn:opendaylight:flow:inventory">
2768 <strict>false</strict>
2780 <table_id>2</table_id>
2782 <cookie_mask>255</cookie_mask>
2788 <ethernet-destination>
2789 <address>20:14:29:01:19:61</address>
2790 </ethernet-destination>
2792 <address>00:00:00:11:23:ae</address>
2795 <ipv4-source>19.1.2.3/10</ipv4-source>
2796 <ipv4-destination>172.168.5.6/18</ipv4-destination>
2798 <ip-protocol>17</ip-protocol>
2799 <ip-dscp>8</ip-dscp>
2802 <udp-source-port>25364</udp-source-port>
2803 <udp-destination-port>8080</udp-destination-port>
2804 <in-port>0</in-port>
2806 <hard-timeout>1200</hard-timeout>
2808 <idle-timeout>3400</idle-timeout>
2809 <flow-name>FooXf9</flow-name>
2810 <priority>2</priority>
2811 <barrier>false</barrier>
2813 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2814 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2816 Type & Code, IP DSCP, IP ECN, Input Port
2818 - Note that ethernet-type MUST be 2048 (0x800)
2820 - Note that IP Protocol Type MUST be 1
2824 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2825 <flow xmlns="urn:opendaylight:flow:inventory">
2826 <strict>false</strict>
2838 <table_id>2</table_id>
2840 <cookie_mask>255</cookie_mask>
2846 <ethernet-destination>
2847 <address>ff:ff:29:01:19:61</address>
2848 </ethernet-destination>
2850 <address>00:00:00:11:23:ae</address>
2853 <ipv4-source>17.1.2.3/8</ipv4-source>
2854 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2856 <ip-protocol>1</ip-protocol>
2857 <ip-dscp>27</ip-dscp>
2861 <icmpv4-type>6</icmpv4-type>
2862 <icmpv4-code>3</icmpv4-code>
2864 <in-port>0</in-port>
2866 <hard-timeout>1200</hard-timeout>
2868 <idle-timeout>3400</idle-timeout>
2869 <flow-name>FooXf11</flow-name>
2870 <priority>2</priority>
2873 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2874 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2876 Transport Addresses, ARP Src & Target Hw Addresses
2878 - Note that ethernet-type MUST be 2054 (0x806)
2882 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2883 <flow xmlns="urn:opendaylight:flow:inventory">
2884 <strict>false</strict>
2900 <table_id>2</table_id>
2902 <cookie_mask>255</cookie_mask>
2908 <ethernet-destination>
2909 <address>ff:ff:ff:ff:FF:ff</address>
2910 </ethernet-destination>
2912 <address>00:00:FC:01:23:ae</address>
2916 <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2917 <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2918 <arp-source-hardware-address>
2919 <address>12:34:56:78:98:AB</address>
2920 </arp-source-hardware-address>
2921 <arp-target-hardware-address>
2922 <address>FE:DC:BA:98:76:54</address>
2923 </arp-target-hardware-address>
2925 <hard-timeout>12</hard-timeout>
2927 <idle-timeout>34</idle-timeout>
2928 <flow-name>FooXf14</flow-name>
2929 <priority>2</priority>
2930 <barrier>false</barrier>
2932 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2933 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2937 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2938 <flow xmlns="urn:opendaylight:flow:inventory">
2939 <strict>false</strict>
2951 <table_id>2</table_id>
2953 <cookie_mask>255</cookie_mask>
2959 <ethernet-destination>
2960 <address>ff:ff:29:01:19:61</address>
2961 </ethernet-destination>
2963 <address>00:00:00:11:23:ae</address>
2968 <vlan-id>78</vlan-id>
2969 <vlan-id-present>true</vlan-id-present>
2971 <vlan-pcp>3</vlan-pcp>
2974 <hard-timeout>1200</hard-timeout>
2976 <idle-timeout>3400</idle-timeout>
2977 <flow-name>FooXf15</flow-name>
2978 <priority>2</priority>
2979 <barrier>false</barrier>
2982 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2983 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2987 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2988 <flow xmlns="urn:opendaylight:flow:inventory">
2989 <flow-name>FooXf17</flow-name>
2991 <cookie_mask>255</cookie_mask>
2993 <hard-timeout>1200</hard-timeout>
2994 <idle-timeout>3400</idle-timeout>
2995 <priority>2</priority>
2996 <table_id>2</table_id>
2997 <strict>false</strict>
3014 <ethernet-destination>
3015 <address>ff:ff:29:01:19:61</address>
3016 </ethernet-destination>
3018 <address>00:00:00:11:23:ae</address>
3021 <protocol-match-fields>
3022 <mpls-label>567</mpls-label>
3023 <mpls-tc>3</mpls-tc>
3024 <mpls-bos>1</mpls-bos>
3025 </protocol-match-fields>
3029 IPv6 Src & Dest Addresses
3030 ^^^^^^^^^^^^^^^^^^^^^^^^^
3032 - Note that ethernet-type MUST be 34525
3036 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3037 <flow xmlns="urn:opendaylight:flow:inventory">
3038 <strict>false</strict>
3039 <flow-name>FooXf18</flow-name>
3041 <cookie_mask>255</cookie_mask>
3043 <table_id>2</table_id>
3044 <priority>2</priority>
3045 <hard-timeout>1200</hard-timeout>
3046 <idle-timeout>3400</idle-timeout>
3047 <installHw>false</installHw>
3065 <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
3066 <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
3075 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3076 <flow xmlns="urn:opendaylight:flow:inventory">
3077 <strict>false</strict>
3078 <flow-name>FooXf19</flow-name>
3080 <cookie_mask>255</cookie_mask>
3082 <table_id>2</table_id>
3083 <priority>1</priority>
3084 <hard-timeout>1200</hard-timeout>
3085 <idle-timeout>3400</idle-timeout>
3086 <installHw>false</installHw>
3100 <metadata>12345</metadata>
3105 Metadata, Metadata Mask
3106 ^^^^^^^^^^^^^^^^^^^^^^^
3110 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3111 <flow xmlns="urn:opendaylight:flow:inventory">
3112 <strict>false</strict>
3113 <flow-name>FooXf20</flow-name>
3115 <cookie_mask>255</cookie_mask>
3117 <table_id>2</table_id>
3118 <priority>2</priority>
3119 <hard-timeout>1200</hard-timeout>
3120 <idle-timeout>3400</idle-timeout>
3121 <installHw>false</installHw>
3135 <metadata>12345</metadata>
3136 <metadata-mask>//FF</metadata-mask>
3141 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3142 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3144 - Note that ethernet-type MUST be 34525
3148 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3149 <flow xmlns="urn:opendaylight:flow:inventory">
3150 <strict>false</strict>
3151 <flow-name>FooXf21</flow-name>
3153 <cookie_mask>255</cookie_mask>
3155 <table_id>2</table_id>
3156 <priority>2</priority>
3157 <hard-timeout>1200</hard-timeout>
3158 <idle-timeout>3400</idle-timeout>
3159 <installHw>false</installHw>
3177 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3178 <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3180 <metadata>12345</metadata>
3183 <ip-protocol>17</ip-protocol>
3184 <ip-dscp>8</ip-dscp>
3187 <udp-source-port>25364</udp-source-port>
3188 <udp-destination-port>8080</udp-destination-port>
3192 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3193 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3195 - Note that ethernet-type MUST be 34525
3197 - Note that IP Protocol MUST be 6
3201 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3202 <flow xmlns="urn:opendaylight:flow:inventory">
3203 <strict>false</strict>
3204 <flow-name>FooXf22</flow-name>
3206 <cookie_mask>255</cookie_mask>
3208 <table_id>2</table_id>
3209 <priority>2</priority>
3210 <hard-timeout>1200</hard-timeout>
3211 <idle-timeout>3400</idle-timeout>
3212 <installHw>false</installHw>
3230 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3231 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3233 <metadata>12345</metadata>
3236 <ip-protocol>6</ip-protocol>
3237 <ip-dscp>60</ip-dscp>
3240 <tcp-source-port>183</tcp-source-port>
3241 <tcp-destination-port>8080</tcp-destination-port>
3245 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3246 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3248 - Note that ethernet-type MUST be 34525
3250 - Note that IP Protocol MUST be 6
3254 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3255 <flow xmlns="urn:opendaylight:flow:inventory">
3256 <strict>false</strict>
3257 <flow-name>FooXf23</flow-name>
3259 <cookie_mask>255</cookie_mask>
3261 <table_id>2</table_id>
3262 <priority>2</priority>
3263 <hard-timeout>1200</hard-timeout>
3264 <idle-timeout>3400</idle-timeout>
3265 <installHw>false</installHw>
3283 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3284 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3286 <metadata>12345</metadata>
3289 <ipv6-flabel>33</ipv6-flabel>
3292 <ip-protocol>6</ip-protocol>
3293 <ip-dscp>60</ip-dscp>
3296 <tcp-source-port>183</tcp-source-port>
3297 <tcp-destination-port>8080</tcp-destination-port>
3306 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3307 <flow xmlns="urn:opendaylight:flow:inventory">
3308 <strict>false</strict>
3309 <flow-name>FooXf24</flow-name>
3311 <cookie_mask>255</cookie_mask>
3313 <table_id>2</table_id>
3314 <priority>2</priority>
3315 <hard-timeout>1200</hard-timeout>
3316 <idle-timeout>3400</idle-timeout>
3317 <installHw>false</installHw>
3331 <tunnel-id>2591</tunnel-id>
3336 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3337 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3339 - Note that ethernet-type MUST be 34525
3341 - Note that IP Protocol MUST be 58
3345 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3346 <flow xmlns="urn:opendaylight:flow:inventory">
3347 <strict>false</strict>
3348 <flow-name>FooXf25</flow-name>
3350 <cookie_mask>255</cookie_mask>
3352 <table_id>2</table_id>
3353 <priority>2</priority>
3354 <hard-timeout>1200</hard-timeout>
3355 <idle-timeout>3400</idle-timeout>
3356 <installHw>false</installHw>
3374 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3375 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3377 <metadata>12345</metadata>
3380 <ipv6-flabel>33</ipv6-flabel>
3383 <ip-protocol>58</ip-protocol>
3384 <ip-dscp>60</ip-dscp>
3388 <icmpv6-type>6</icmpv6-type>
3389 <icmpv6-code>3</icmpv6-code>
3394 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3395 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3397 - Note that ethernet-type MUST be 34525
3399 - Note that IP Protocol MUST be 58
3403 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3404 <flow xmlns="urn:opendaylight:flow:inventory">
3405 <strict>false</strict>
3406 <flow-name>FooXf27</flow-name>
3408 <cookie_mask>255</cookie_mask>
3410 <table_id>2</table_id>
3411 <priority>2</priority>
3412 <hard-timeout>1200</hard-timeout>
3413 <idle-timeout>3400</idle-timeout>
3414 <installHw>false</installHw>
3432 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3433 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3435 <metadata>12345</metadata>
3438 <ipv6-flabel>33</ipv6-flabel>
3441 <ipv6-exthdr>0</ipv6-exthdr>
3444 <ip-protocol>6</ip-protocol>
3445 <ip-dscp>60</ip-dscp>
3448 <tcp-source-port>183</tcp-source-port>
3449 <tcp-destination-port>8080</tcp-destination-port>
3456 The format of the XML that describes OpenFlow actions is determined by
3457 the opendaylight-action-types yang model: .
3459 The RESTCONF documentation for the match-types yang model can be found
3461 `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>`__
3471 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3472 <flow xmlns="urn:opendaylight:flow:inventory">
3473 <strict>false</strict>
3474 <flow-name>FooXf101</flow-name>
3476 <cookie_mask>255</cookie_mask>
3477 <cookie>101</cookie>
3478 <table_id>2</table_id>
3479 <priority>2</priority>
3480 <hard-timeout>1200</hard-timeout>
3481 <idle-timeout>3400</idle-timeout>
3482 <installHw>false</installHw>
3490 <output-node-connector>TABLE</output-node-connector>
3491 <max-length>60</max-length>
3503 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3504 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3506 <metadata>12345</metadata>
3509 <ip-protocol>6</ip-protocol>
3510 <ip-dscp>60</ip-dscp>
3513 <tcp-source-port>183</tcp-source-port>
3514 <tcp-destination-port>8080</tcp-destination-port>
3523 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3524 <flow xmlns="urn:opendaylight:flow:inventory">
3525 <strict>false</strict>
3526 <flow-name>FooXf102</flow-name>
3528 <cookie_mask>255</cookie_mask>
3529 <cookie>102</cookie>
3530 <table_id>2</table_id>
3531 <priority>2</priority>
3532 <hard-timeout>1200</hard-timeout>
3533 <idle-timeout>3400</idle-timeout>
3534 <installHw>false</installHw>
3542 <output-node-connector>INPORT</output-node-connector>
3543 <max-length>60</max-length>
3554 <ethernet-destination>
3555 <address>ff:ff:29:01:19:61</address>
3556 </ethernet-destination>
3558 <address>00:00:00:11:23:ae</address>
3561 <ipv4-source>17.1.2.3/8</ipv4-source>
3562 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3564 <ip-protocol>6</ip-protocol>
3565 <ip-dscp>2</ip-dscp>
3568 <tcp-source-port>25364</tcp-source-port>
3569 <tcp-destination-port>8080</tcp-destination-port>
3573 Output to Physical Port
3574 '''''''''''''''''''''''
3578 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3579 <flow xmlns="urn:opendaylight:flow:inventory">
3580 <strict>false</strict>
3581 <flow-name>FooXf103</flow-name>
3583 <cookie_mask>255</cookie_mask>
3584 <cookie>103</cookie>
3585 <table_id>2</table_id>
3586 <priority>2</priority>
3587 <hard-timeout>1200</hard-timeout>
3588 <idle-timeout>3400</idle-timeout>
3589 <installHw>false</installHw>
3597 <output-node-connector>1</output-node-connector>
3598 <max-length>60</max-length>
3609 <ethernet-destination>
3610 <address>ff:ff:29:01:19:61</address>
3611 </ethernet-destination>
3613 <address>00:00:00:11:23:ae</address>
3616 <ipv4-source>17.1.2.3/8</ipv4-source>
3617 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3619 <ip-protocol>6</ip-protocol>
3620 <ip-dscp>2</ip-dscp>
3623 <tcp-source-port>25364</tcp-source-port>
3624 <tcp-destination-port>8080</tcp-destination-port>
3633 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3634 <flow xmlns="urn:opendaylight:flow:inventory">
3635 <strict>false</strict>
3636 <flow-name>FooXf104</flow-name>
3638 <cookie_mask>255</cookie_mask>
3639 <cookie>104</cookie>
3640 <table_id>2</table_id>
3641 <priority>2</priority>
3642 <hard-timeout>1200</hard-timeout>
3643 <idle-timeout>3400</idle-timeout>
3644 <installHw>false</installHw>
3652 <output-node-connector>LOCAL</output-node-connector>
3653 <max-length>60</max-length>
3665 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3666 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3668 <metadata>12345</metadata>
3671 <ip-protocol>6</ip-protocol>
3672 <ip-dscp>60</ip-dscp>
3675 <tcp-source-port>183</tcp-source-port>
3676 <tcp-destination-port>8080</tcp-destination-port>
3685 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3686 <flow xmlns="urn:opendaylight:flow:inventory">
3687 <strict>false</strict>
3688 <flow-name>FooXf105</flow-name>
3690 <cookie_mask>255</cookie_mask>
3691 <cookie>105</cookie>
3692 <table_id>2</table_id>
3693 <priority>2</priority>
3694 <hard-timeout>1200</hard-timeout>
3695 <idle-timeout>3400</idle-timeout>
3696 <installHw>false</installHw>
3704 <output-node-connector>NORMAL</output-node-connector>
3705 <max-length>60</max-length>
3717 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3718 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3720 <metadata>12345</metadata>
3723 <ip-protocol>6</ip-protocol>
3724 <ip-dscp>45</ip-dscp>
3727 <tcp-source-port>20345</tcp-source-port>
3728 <tcp-destination-port>80</tcp-destination-port>
3737 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3738 <flow xmlns="urn:opendaylight:flow:inventory">
3739 <strict>false</strict>
3740 <flow-name>FooXf106</flow-name>
3742 <cookie_mask>255</cookie_mask>
3743 <cookie>106</cookie>
3744 <table_id>2</table_id>
3745 <priority>2</priority>
3746 <hard-timeout>1200</hard-timeout>
3747 <idle-timeout>3400</idle-timeout>
3748 <installHw>false</installHw>
3756 <output-node-connector>FLOOD</output-node-connector>
3757 <max-length>60</max-length>
3769 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3770 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3772 <metadata>12345</metadata>
3775 <ip-protocol>6</ip-protocol>
3776 <ip-dscp>45</ip-dscp>
3779 <tcp-source-port>20345</tcp-source-port>
3780 <tcp-destination-port>80</tcp-destination-port>
3789 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3790 <flow xmlns="urn:opendaylight:flow:inventory">
3791 <strict>false</strict>
3792 <flow-name>FooXf107</flow-name>
3794 <cookie_mask>255</cookie_mask>
3795 <cookie>107</cookie>
3796 <table_id>2</table_id>
3797 <priority>2</priority>
3798 <hard-timeout>1200</hard-timeout>
3799 <idle-timeout>3400</idle-timeout>
3800 <installHw>false</installHw>
3808 <output-node-connector>ALL</output-node-connector>
3809 <max-length>60</max-length>
3820 <ethernet-destination>
3821 <address>20:14:29:01:19:61</address>
3822 </ethernet-destination>
3824 <address>00:00:00:11:23:ae</address>
3827 <ipv4-source>19.1.2.3/10</ipv4-source>
3828 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3830 <ip-protocol>17</ip-protocol>
3831 <ip-dscp>8</ip-dscp>
3834 <udp-source-port>25364</udp-source-port>
3835 <udp-destination-port>8080</udp-destination-port>
3836 <in-port>0</in-port>
3840 Output to CONTROLLER
3841 ''''''''''''''''''''
3845 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3846 <flow xmlns="urn:opendaylight:flow:inventory">
3847 <strict>false</strict>
3848 <flow-name>FooXf108</flow-name>
3850 <cookie_mask>255</cookie_mask>
3851 <cookie>108</cookie>
3852 <table_id>2</table_id>
3853 <priority>2</priority>
3854 <hard-timeout>1200</hard-timeout>
3855 <idle-timeout>3400</idle-timeout>
3856 <installHw>false</installHw>
3864 <output-node-connector>CONTROLLER</output-node-connector>
3865 <max-length>60</max-length>
3876 <ethernet-destination>
3877 <address>20:14:29:01:19:61</address>
3878 </ethernet-destination>
3880 <address>00:00:00:11:23:ae</address>
3883 <ipv4-source>19.1.2.3/10</ipv4-source>
3884 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3886 <ip-protocol>17</ip-protocol>
3887 <ip-dscp>8</ip-dscp>
3890 <udp-source-port>25364</udp-source-port>
3891 <udp-destination-port>8080</udp-destination-port>
3892 <in-port>0</in-port>
3901 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3902 <flow xmlns="urn:opendaylight:flow:inventory">
3903 <strict>false</strict>
3904 <flow-name>FooXf109</flow-name>
3906 <cookie_mask>255</cookie_mask>
3907 <cookie>109</cookie>
3908 <table_id>2</table_id>
3909 <priority>2</priority>
3910 <hard-timeout>1200</hard-timeout>
3911 <idle-timeout>3400</idle-timeout>
3912 <installHw>false</installHw>
3920 <output-node-connector>ANY</output-node-connector>
3921 <max-length>60</max-length>
3932 <ethernet-destination>
3933 <address>20:14:29:01:19:61</address>
3934 </ethernet-destination>
3936 <address>00:00:00:11:23:ae</address>
3939 <ipv4-source>19.1.2.3/10</ipv4-source>
3940 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3942 <ip-protocol>17</ip-protocol>
3943 <ip-dscp>8</ip-dscp>
3946 <udp-source-port>25364</udp-source-port>
3947 <udp-destination-port>8080</udp-destination-port>
3948 <in-port>0</in-port>
3957 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3958 <flow xmlns="urn:opendaylight:flow:inventory">
3959 <strict>false</strict>
3966 <ethernet-type>33024</ethernet-type>
3974 <vlan-id>79</vlan-id>
3975 <vlan-id-present>true</vlan-id-present>
3983 <output-node-connector>5</output-node-connector>
3990 <table_id>0</table_id>
3997 <ethernet-destination>
3998 <address>FF:FF:29:01:19:61</address>
3999 </ethernet-destination>
4001 <address>00:00:00:11:23:AE</address>
4004 <in-port>1</in-port>
4006 <flow-name>vlan_flow</flow-name>
4007 <priority>2</priority>
4015 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4017 xmlns="urn:opendaylight:flow:inventory">
4018 <flow-name>push-mpls-action</flow-name>
4025 <ethernet-type>34887</ethernet-type>
4031 <protocol-match-fields>
4032 <mpls-label>27</mpls-label>
4033 </protocol-match-fields>
4039 <output-node-connector>2</output-node-connector>
4046 <strict>false</strict>
4054 <in-port>1</in-port>
4055 <ipv4-destination>10.0.0.4/32</ipv4-destination>
4057 <idle-timeout>0</idle-timeout>
4058 <cookie_mask>255</cookie_mask>
4059 <cookie>401</cookie>
4060 <priority>8</priority>
4061 <hard-timeout>0</hard-timeout>
4062 <installHw>false</installHw>
4063 <table_id>0</table_id>
4069 - Note that ethernet-type MUST be 34887
4073 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4075 xmlns="urn:opendaylight:flow:inventory">
4076 <flow-name>push-mpls-action</flow-name>
4083 <protocol-match-fields>
4084 <mpls-label>37</mpls-label>
4085 </protocol-match-fields>
4091 <output-node-connector>2</output-node-connector>
4098 <strict>false</strict>
4106 <in-port>1</in-port>
4107 <protocol-match-fields>
4108 <mpls-label>27</mpls-label>
4109 </protocol-match-fields>
4111 <idle-timeout>0</idle-timeout>
4112 <cookie_mask>255</cookie_mask>
4113 <cookie>401</cookie>
4114 <priority>8</priority>
4115 <hard-timeout>0</hard-timeout>
4116 <installHw>false</installHw>
4117 <table_id>0</table_id>
4123 - Note that ethernet-type MUST be 34887
4125 - Issue with OVS 2.1 `OVS
4126 fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4130 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4132 xmlns="urn:opendaylight:flow:inventory">
4133 <flow-name>FooXf10</flow-name>
4140 <ethernet-type>2048</ethernet-type>
4146 <output-node-connector>2</output-node-connector>
4147 <max-length>60</max-length>
4155 <strict>false</strict>
4162 <in-port>1</in-port>
4163 <protocol-match-fields>
4164 <mpls-label>37</mpls-label>
4165 </protocol-match-fields>
4167 <idle-timeout>0</idle-timeout>
4168 <cookie>889</cookie>
4169 <cookie_mask>255</cookie_mask>
4170 <installHw>false</installHw>
4171 <hard-timeout>0</hard-timeout>
4172 <priority>10</priority>
4173 <table_id>0</table_id>
4179 - Nicira extension defined in
4180 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4182 - Example section is -
4183 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4188 <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4189 <hard-timeout>0</hard-timeout>
4190 <idle-timeout>0</idle-timeout>
4198 <metadata>2199023255552</metadata>
4199 <metadata-mask>2305841909702066176</metadata-mask>
4202 <ip-protocol>1</ip-protocol>
4205 <cookie>110100480</cookie>
4213 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4220 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4221 <idle-timeout>60</idle-timeout>
4222 <fin-idle-timeout>0</fin-idle-timeout>
4223 <hard-timeout>60</hard-timeout>
4225 <table-id>41</table-id>
4226 <priority>61010</priority>
4227 <fin-hard-timeout>0</fin-hard-timeout>
4229 <flow-mod-add-match-from-value>
4230 <src-ofs>0</src-ofs>
4232 <src-field>1538</src-field>
4233 <flow-mod-num-bits>16</flow-mod-num-bits>
4234 </flow-mod-add-match-from-value>
4237 <flow-mod-add-match-from-field>
4238 <src-ofs>0</src-ofs>
4239 <dst-ofs>0</dst-ofs>
4240 <dst-field>4100</dst-field>
4241 <src-field>3588</src-field>
4242 <flow-mod-num-bits>32</flow-mod-num-bits>
4243 </flow-mod-add-match-from-field>
4246 <flow-mod-add-match-from-field>
4247 <src-ofs>0</src-ofs>
4248 <dst-ofs>0</dst-ofs>
4249 <dst-field>518</dst-field>
4250 <src-field>1030</src-field>
4251 <flow-mod-num-bits>48</flow-mod-num-bits>
4252 </flow-mod-add-match-from-field>
4255 <flow-mod-add-match-from-field>
4256 <src-ofs>0</src-ofs>
4257 <dst-ofs>0</dst-ofs>
4258 <dst-field>3073</dst-field>
4259 <src-field>3073</src-field>
4260 <flow-mod-num-bits>8</flow-mod-num-bits>
4261 </flow-mod-add-match-from-field>
4264 <flow-mod-copy-value-into-field>
4265 <dst-ofs>0</dst-ofs>
4267 <dst-field>65540</dst-field>
4268 <flow-mod-num-bits>8</flow-mod-num-bits>
4269 </flow-mod-copy-value-into-field>
4271 <cookie>110100480</cookie>
4277 <installHw>true</installHw>
4278 <barrier>false</barrier>
4279 <strict>false</strict>
4280 <priority>61010</priority>
4281 <table_id>253</table_id>
4282 <flow-name>ACL</flow-name>
4285 Opendaylight OpenFlow Plugin: Troubleshooting
4286 ---------------------------------------------