3 OpenFlow Plugin Project User Guide
4 ==================================
6 Overview and Architecture
7 -------------------------
9 Overview and Architecture
10 ~~~~~~~~~~~~~~~~~~~~~~~~~
15 OpenFlow is a vendor-neutral standard communications interface defined
16 to enable interaction between the control and forwarding layers of an
17 SDN architecture. The OpenFlow plugin project intends to develop a
18 plugin to support implementations of the OpenFlow specification as it
19 develops and evolves. Specifically the project has developed a plugin
20 aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
21 support for subsequent OpenFlow specifications. The plugin is based on
22 the Model Driven Service Abstraction Layer (MD-SAL) architecture
23 (https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
24 This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
25 OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
31 - Southbound plugin and integration of OpenFlow 1.0/1.3.x library
34 - Ongoing support and integration of the OpenFlow specification
36 - The plugin should be implemented in an easily extensible manner
38 - Protocol verification activities will be performed on supported
39 OpenFlow specifications
41 Architecture and Design
42 ^^^^^^^^^^^^^^^^^^^^^^^
47 OpenFlow 1.3 Plugin will support the following functionality
57 - Mapping function(Infrastructure to OF structures).
59 - Connection establishment will be handled by OpenFlow library using
60 opensource netty.io library.
62 - Message handling(Ex: Packet in).
64 - Event handling and propagation to upper layers.
66 - Plugin will support both MD-SAL and Hard SAL.
68 - Will be backward compatible with OF 1.0.
70 **Activities in OF plugin module**
72 - New OF plugin bundle will support both OF 1.0 and OF 1.3.
74 - Integration with OpenFlow library.
76 - Integration with corresponding MD-SAL infrastructure.
78 - Hard SAL will be supported as adapter on top of MD-SAL plugin.
80 - OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
85 **Overall Architecture**
87 .. figure:: ./images/openflowplugin/plugin_design.jpg
88 :alt: overal architecture
98 This page is to catalog the things that have been tested and confirmed
104 Coverage has been moved to a `GoogleDoc
105 Spreadsheet <https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0>`__
107 OF 1.3 Considerations
108 ^^^^^^^^^^^^^^^^^^^^^
110 The baseline model is a OF 1.3 model, and the coverage tables primarily
111 deal with OF 1.3. However for OF 1.0, we have a column to indicate
112 either N/A if it doesn’t apply, or whether its been confirmed working.
114 OF 1.0 Considerations
115 ^^^^^^^^^^^^^^^^^^^^^
117 OF 1.0 is being considered as a switch with: \* 1 Table \* 0 Groups \* 0
118 Meters \* 1 Instruction (Apply Actions) \* and a limited vocabulary of
124 .. _ofp-running-new-plugin:
126 Running the controller with the new OpenFlow Plugin
127 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
131 There are all helium features (from features-openflowplugin) duplicated
132 into features-openflowplugin-li. The duplicates got suffix *-li* and
133 provide Lithium codebase functionality.
137 - odl-openflowplugin-app-lldp-speaker-li
139 - odl-openflowplugin-flow-services-rest-li
141 - odl-openflowplugin-drop-test-li
143 In case topology is required then the first one should be installed.
147 feature:install odl-openflowplugin-app-lldp-speaker-li
149 The Li-southbound currently provides:
161 In order to see really low level messages enter these in karaf console:
165 log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
166 log:set TRACE org.opendaylight.openflowplugin.impl
168 **How enable topology**
170 In order for topology to work (fill dataStore/operational with links)
171 there must be LLDP responses delivered back to controller. This requires
172 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
173 priority, empty match and one output action = send to controller. Having
174 this flow installed on every node will enable for gathering and
175 exporting links between nodes into dataStore/operational. This is done
176 if you use for example l2 switch application.
180 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
181 <flow xmlns="urn:opendaylight:flow:inventory">
182 <barrier>false</barrier>
184 <flags>SEND_FLOW_REM</flags>
185 <flow-name>FooXf54</flow-name>
186 <hard-timeout>0</hard-timeout>
188 <idle-timeout>0</idle-timeout>
189 <installHw>false</installHw>
195 <max-length>65535</max-length>
196 <output-node-connector>CONTROLLER</output-node-connector>
205 <priority>0</priority>
206 <strict>false</strict>
207 <table_id>0</table_id>
210 **Enable RESTCONF and Controller GUI**
212 If you want to use RESTCONF with openflowplugin project, you have to
213 install *odl-restconf* feature to enable that. To install *odl-restconf*
214 feature run the following command
218 karaf#>feature:install odl-restconf
220 If you want to access the Controller GUI, you have to install
221 *odl-dlux-core* feature to enable that. Run following command to install
226 karaf#>feature:install odl-dlux-core
228 Once you enable the feature, access the Controller GUI using following
233 http://<controller-ip>:8181/dlux/index.html
235 OpenFlow 1.3 Enabled Software Switches / Environment
236 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
238 Getting Mininet with OF 1.3
239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
241 `Download Mininet VM Upgraded to OF
242 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
243 (or the `newer mininet-2.1.0 with
244 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
245 that works with VMware Player. For using this on VirtualBox, import this
246 to VMware Player and then export the .vmdk ) or you could build one
247 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
248 setting up Mininet with OF 1.3].
250 Installing under VirtualBox
251 '''''''''''''''''''''''''''
253 .. figure:: ./images/openflowplugin/host-only-vbox.png
254 :alt: configuring a host-only adapter
256 configuring a host-only adapter
258 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
259 don’t actually seem to allow for connections from the host to the VM.
260 Instead, you need to configure a host-only network and set it up. Do
263 - Go to the VM’s settings in VirtualBox then to network and add a
264 second adapter attached to "Host-only Adapter" (see the screenshot to
267 - Edit the /etc/network/interfaces file to configure the adapter
268 properly by adding these two lines
277 At this point you should have two interfaces one which gives you NATed
278 access to the internet and another that gives you access between your
279 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
280 address and the the host-only interface gets a 192.168.56.x address.
282 Your simplest choice: Use Vagrant
283 '''''''''''''''''''''''''''''''''
285 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
286 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
290 cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
294 This will leave you sshed into a fully provisioned Ubuntu Trusty box
295 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
297 Setup CPqD Openflow 1.3 Soft Switch
298 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
300 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
301 1.3 features, e.g group multipart statistics request. Alternate options
302 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
305 - You can setup the switch as per the instructions given on the
308 `https://github.com/CPqD/ofsoftswitch13 <https://github.com/CPqD/ofsoftswitch13>`__
310 - Fire following command to start the switch
316 $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
317 e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
319 ethX should not be associated with ip address and ipv6 should be
320 disabled on it. If you are installing the switch on your local machine,
321 you can use following command (for Ubuntu) to create virtual interface.
325 ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
327 ethX - Any existing interface.
329 Or if you are using mininet VM for installing this switch, you can
330 simply add one more adaptor to your VM.
332 Start Openflow protocol agent:
336 $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
337 e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
339 Commands to add entries to various tables of the switch
340 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
346 $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
352 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
356 $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
362 $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
363 e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
365 "dpctl" --help is not very intuitive, so please keep adding any new
366 command you figured out while your experiment with the switch.
368 Using the built-in Wireshark
369 ''''''''''''''''''''''''''''
371 Mininet comes with pre-installed Wireshark, but for some reason it does
372 not include the Openflow protocol dissector. You may want to get and
373 install it in the */.wireshark/plugins/* directory.
375 First login to your mininet VM
379 ssh mininet@<your mininet vm ip> -X
381 The -X option in ssh will enable x-session over ssh so that the
382 wireshark window can be shown on your host machine’s display. when
383 prompted, enter the password (mininet).
385 From the mininet vm shell, set the wireshark capture privileges
386 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
390 sudo chgrp mininet /usr/bin/dumpcap
391 sudo chmod 754 /usr/bin/dumpcap
392 sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
394 Finally, start wireshark:
400 The wireshark window should show up.
402 To see only Openflow packets, you may want to apply the following filter
403 in the Filter window:
407 tcp.port == 6633 and tcp.flags.push == 1
409 Start the capture on *any* port.
411 Running Mininet with OF 1.3
412 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
414 From within the Mininet VM, run:
418 sudo mn --topo single,3 --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
428 The purpose of this page is to walk you through how to see the Inventory
429 Manager working end to end with the openflowplugin using OpenFlow 1.3.
431 Basically, you will learn how to:
433 1. Run the Base/Virtualization/Service provider Edition with the new
435 OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
436 the controller with the new OpenFlow Plugin]
438 2. Start mininet to use OF 1.3:
439 OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
440 Enabled Software Switches / Environment]
442 3. Use RESTCONF to see the nodes appear in inventory.
444 Restconf for Inventory
445 ^^^^^^^^^^^^^^^^^^^^^^
447 The REST url for listing all the nodes is:
451 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
453 You will need to set the Accept header:
457 Accept: application/xml
459 You will also need to use HTTP Basic Auth with username: admin password:
462 Alternately, if you have a node’s id you can address it as
466 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
472 http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
474 How to hit RestConf with Postman
475 ''''''''''''''''''''''''''''''''
478 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
480 In the chrome browser bar enter
486 And click on Postman.
488 Enter the URL. Click on the Headers button on the far right. Enter the
489 Accept: header. Click on the Basic Auth Tab at the top and setup the
490 username and password. Send.
495 If you have not had any switches come up, and though no children for
496 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
497 and exception will be thrown. I’m pretty sure I know how to fix this
498 bug, just need to get to it :)
506 Learn End to End for Inventory
507 ''''''''''''''''''''''''''''''
509 See :ref:`ofp-e2e-inv`
514 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
516 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
521 Current way to flush a flow to switch looks like this:
523 1. Create MD-SAL modeled flow and commit it into dataStore using two
525 FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
527 2. FRM gets notified and invokes corresponding rpc (addFlow) on
528 particular service provider (if suitable provider for given node
531 3. The provider (plugin in this case) transforms MD-SAL modeled flow
532 into OF-API modeled flow
534 4. OF-API modeled flow is then flushed into OFLibrary
536 5. OFLibrary encodes flow into particular version of wire protocol and
537 sends it to particular switch
539 6. Check on mininet side if flow is set
548 - Content-Type: application/xml
550 - Accept: application/xml
554 - Use URL: "http://<controller
555 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
563 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
564 <flow xmlns="urn:opendaylight:flow:inventory">
565 <priority>2</priority>
566 <flow-name>Foo</flow-name>
573 <ipv4-destination>10.0.10.2/24</ipv4-destination>
576 <table_id>0</table_id>
590 **\*Note**: If you want to try a different flow id or a different table,
591 make sure the URL and the body stay in sync. For example, if you wanted
592 to try: table 2 flow 20 you’d change the URL to:
595 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
597 but you would also need to update the 20 and 2 in the body of the XML.
599 Other caveat, we have a known bug with updates, so please only write to
600 a given flow id and table id on a given node once at this time until we
601 resolve it. Or you can use the DELETE method with the same URL in
602 PostMan to delete the flow information on switch and controller cache.
604 Check for your flow on the switch
605 '''''''''''''''''''''''''''''''''
607 - See your flow on your mininet:
611 mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
612 OFPST_FLOW reply (OF1.3) (xid=0x2):
613 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
615 If you want to see the above information from the mininet prompt - use
616 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
619 Check for your flow in the controller config via RESTCONF
620 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
622 - See your configured flow in POSTMAN with
624 - URL http://<controller IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
628 - You no longer need to set Accept header
635 "flow-node-inventory:table": [
637 "flow-node-inventory:id": 0,
638 "flow-node-inventory:flow": [
640 "flow-node-inventory:priority": 1,
641 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
642 "flow-node-inventory:table_id": 0,
643 "flow-node-inventory:hard-timeout": 0,
644 "flow-node-inventory:idle-timeout": 0,
645 "flow-node-inventory:instructions": {
646 "flow-node-inventory:instruction": [
648 "flow-node-inventory:apply-actions": {
649 "flow-node-inventory:action": [
651 "flow-node-inventory:output-action": {
652 "flow-node-inventory:output-node-connector": "openflow:1:1"
654 "flow-node-inventory:order": 0
658 "flow-node-inventory:order": 0
662 "flow-node-inventory:match": {
663 "flow-node-inventory:ethernet-match": {
664 "flow-node-inventory:ethernet-type": {
665 "flow-node-inventory:type": 2048
668 "flow-node-inventory:ipv4-destination": "10.0.0.2"
670 "flow-node-inventory:cookie": 0
673 "flow-node-inventory:priority": 1,
674 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
675 "flow-node-inventory:table_id": 0,
676 "flow-node-inventory:hard-timeout": 0,
677 "flow-node-inventory:idle-timeout": 0,
678 "flow-node-inventory:instructions": {
679 "flow-node-inventory:instruction": [
681 "flow-node-inventory:apply-actions": {
682 "flow-node-inventory:action": [
684 "flow-node-inventory:output-action": {
685 "flow-node-inventory:output-node-connector": "openflow:1:1"
687 "flow-node-inventory:order": 0
691 "flow-node-inventory:order": 0
695 "flow-node-inventory:match": {
696 "flow-node-inventory:ethernet-match": {
697 "flow-node-inventory:ethernet-type": {
698 "flow-node-inventory:type": 2048
701 "flow-node-inventory:ipv4-destination": "10.0.0.1"
703 "flow-node-inventory:cookie": 0
706 "flow-node-inventory:priority": 1,
707 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
708 "flow-node-inventory:table_id": 0,
709 "flow-node-inventory:hard-timeout": 0,
710 "flow-node-inventory:idle-timeout": 0,
711 "flow-node-inventory:instructions": {
712 "flow-node-inventory:instruction": [
714 "flow-node-inventory:apply-actions": {
715 "flow-node-inventory:action": [
717 "flow-node-inventory:output-action": {
718 "flow-node-inventory:output-node-connector": "openflow:1:1"
720 "flow-node-inventory:order": 0
724 "flow-node-inventory:order": 0
728 "flow-node-inventory:match": {
729 "flow-node-inventory:ethernet-match": {
730 "flow-node-inventory:ethernet-type": {
731 "flow-node-inventory:type": 2048
734 "flow-node-inventory:ipv4-destination": "10.0.0.3"
736 "flow-node-inventory:cookie": 0
739 "flow-node-inventory:priority": 1,
740 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
741 "flow-node-inventory:table_id": 0,
742 "flow-node-inventory:hard-timeout": 0,
743 "flow-node-inventory:idle-timeout": 0,
744 "flow-node-inventory:instructions": {
745 "flow-node-inventory:instruction": [
747 "flow-node-inventory:apply-actions": {
748 "flow-node-inventory:action": [
750 "flow-node-inventory:output-action": {
751 "flow-node-inventory:output-node-connector": "openflow:1:1"
753 "flow-node-inventory:order": 0
757 "flow-node-inventory:order": 0
761 "flow-node-inventory:match": {
762 "flow-node-inventory:ethernet-match": {
763 "flow-node-inventory:ethernet-type": {
764 "flow-node-inventory:type": 2048
767 "flow-node-inventory:ipv4-destination": "10.0.0.4"
769 "flow-node-inventory:cookie": 0
772 "flow-node-inventory:priority": 1,
773 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
774 "flow-node-inventory:table_id": 0,
775 "flow-node-inventory:hard-timeout": 0,
776 "flow-node-inventory:idle-timeout": 0,
777 "flow-node-inventory:instructions": {
778 "flow-node-inventory:instruction": [
780 "flow-node-inventory:apply-actions": {
781 "flow-node-inventory:action": [
783 "flow-node-inventory:output-action": {
784 "flow-node-inventory:output-node-connector": "openflow:1:2"
786 "flow-node-inventory:order": 0
790 "flow-node-inventory:order": 0
794 "flow-node-inventory:match": {
795 "flow-node-inventory:ethernet-match": {
796 "flow-node-inventory:ethernet-type": {
797 "flow-node-inventory:type": 2048
800 "flow-node-inventory:ipv4-destination": "10.0.0.5"
802 "flow-node-inventory:cookie": 0
805 "flow-node-inventory:priority": 1,
806 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
807 "flow-node-inventory:table_id": 0,
808 "flow-node-inventory:hard-timeout": 0,
809 "flow-node-inventory:idle-timeout": 0,
810 "flow-node-inventory:instructions": {
811 "flow-node-inventory:instruction": [
813 "flow-node-inventory:apply-actions": {
814 "flow-node-inventory:action": [
816 "flow-node-inventory:output-action": {
817 "flow-node-inventory:output-node-connector": "openflow:1:2"
819 "flow-node-inventory:order": 0
823 "flow-node-inventory:order": 0
827 "flow-node-inventory:match": {
828 "flow-node-inventory:ethernet-match": {
829 "flow-node-inventory:ethernet-type": {
830 "flow-node-inventory:type": 2048
833 "flow-node-inventory:ipv4-destination": "10.0.0.8"
835 "flow-node-inventory:cookie": 0
838 "flow-node-inventory:priority": 1,
839 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
840 "flow-node-inventory:table_id": 0,
841 "flow-node-inventory:hard-timeout": 0,
842 "flow-node-inventory:idle-timeout": 0,
843 "flow-node-inventory:instructions": {
844 "flow-node-inventory:instruction": [
846 "flow-node-inventory:apply-actions": {
847 "flow-node-inventory:action": [
849 "flow-node-inventory:output-action": {
850 "flow-node-inventory:output-node-connector": "openflow:1:2"
852 "flow-node-inventory:order": 0
856 "flow-node-inventory:order": 0
860 "flow-node-inventory:match": {
861 "flow-node-inventory:ethernet-match": {
862 "flow-node-inventory:ethernet-type": {
863 "flow-node-inventory:type": 2048
866 "flow-node-inventory:ipv4-destination": "10.0.0.6"
868 "flow-node-inventory:cookie": 0
871 "flow-node-inventory:priority": 1,
872 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
873 "flow-node-inventory:table_id": 0,
874 "flow-node-inventory:hard-timeout": 0,
875 "flow-node-inventory:idle-timeout": 0,
876 "flow-node-inventory:instructions": {
877 "flow-node-inventory:instruction": [
879 "flow-node-inventory:apply-actions": {
880 "flow-node-inventory:action": [
882 "flow-node-inventory:output-action": {
883 "flow-node-inventory:output-node-connector": "openflow:1:2"
885 "flow-node-inventory:order": 0
889 "flow-node-inventory:order": 0
893 "flow-node-inventory:match": {
894 "flow-node-inventory:ethernet-match": {
895 "flow-node-inventory:ethernet-type": {
896 "flow-node-inventory:type": 2048
899 "flow-node-inventory:ipv4-destination": "10.0.0.7"
901 "flow-node-inventory:cookie": 0
908 Look for your flow stats in the controller operational data via
909 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
913 - See your operational flow stats in POSTMAN with
915 - URL "http://<controller
916 IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
925 "flow-node-inventory:table": [
927 "flow-node-inventory:id": 0,
928 "flow-node-inventory:flow": [
930 "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
931 "opendaylight-flow-statistics:flow-statistics": {
932 "opendaylight-flow-statistics:cookie": 0,
933 "opendaylight-flow-statistics:duration": {
934 "opendaylight-flow-statistics:nanosecond": 886000000,
935 "opendaylight-flow-statistics:second": 2707
937 "opendaylight-flow-statistics:hard-timeout": 0,
938 "opendaylight-flow-statistics:byte-count": 784,
939 "opendaylight-flow-statistics:match": {
940 "opendaylight-flow-statistics:ethernet-match": {
941 "opendaylight-flow-statistics:ethernet-type": {
942 "opendaylight-flow-statistics:type": 2048
945 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
947 "opendaylight-flow-statistics:priority": 1,
948 "opendaylight-flow-statistics:packet-count": 8,
949 "opendaylight-flow-statistics:table_id": 0,
950 "opendaylight-flow-statistics:idle-timeout": 0,
951 "opendaylight-flow-statistics:instructions": {
952 "opendaylight-flow-statistics:instruction": [
954 "opendaylight-flow-statistics:order": 0,
955 "opendaylight-flow-statistics:apply-actions": {
956 "opendaylight-flow-statistics:action": [
958 "opendaylight-flow-statistics:order": 0,
959 "opendaylight-flow-statistics:output-action": {
960 "opendaylight-flow-statistics:output-node-connector": "1",
961 "opendaylight-flow-statistics:max-length": 0
972 "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
973 "opendaylight-flow-statistics:flow-statistics": {
974 "opendaylight-flow-statistics:cookie": 0,
975 "opendaylight-flow-statistics:duration": {
976 "opendaylight-flow-statistics:nanosecond": 826000000,
977 "opendaylight-flow-statistics:second": 2711
979 "opendaylight-flow-statistics:hard-timeout": 0,
980 "opendaylight-flow-statistics:byte-count": 1568,
981 "opendaylight-flow-statistics:match": {
982 "opendaylight-flow-statistics:ethernet-match": {
983 "opendaylight-flow-statistics:ethernet-type": {
984 "opendaylight-flow-statistics:type": 2048
987 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
989 "opendaylight-flow-statistics:priority": 1,
990 "opendaylight-flow-statistics:packet-count": 16,
991 "opendaylight-flow-statistics:table_id": 0,
992 "opendaylight-flow-statistics:idle-timeout": 0,
993 "opendaylight-flow-statistics:instructions": {
994 "opendaylight-flow-statistics:instruction": [
996 "opendaylight-flow-statistics:order": 0,
997 "opendaylight-flow-statistics:apply-actions": {
998 "opendaylight-flow-statistics:action": [
1000 "opendaylight-flow-statistics:order": 0,
1001 "opendaylight-flow-statistics:output-action": {
1002 "opendaylight-flow-statistics:output-node-connector": "1",
1003 "opendaylight-flow-statistics:max-length": 0
1014 "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1015 "opendaylight-flow-statistics:flow-statistics": {
1016 "opendaylight-flow-statistics:cookie": 0,
1017 "opendaylight-flow-statistics:duration": {
1018 "opendaylight-flow-statistics:nanosecond": 548000000,
1019 "opendaylight-flow-statistics:second": 2708
1021 "opendaylight-flow-statistics:hard-timeout": 0,
1022 "opendaylight-flow-statistics:byte-count": 784,
1023 "opendaylight-flow-statistics:match": {
1024 "opendaylight-flow-statistics:ethernet-match": {
1025 "opendaylight-flow-statistics:ethernet-type": {
1026 "opendaylight-flow-statistics:type": 2048
1029 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1031 "opendaylight-flow-statistics:priority": 1,
1032 "opendaylight-flow-statistics:packet-count": 8,
1033 "opendaylight-flow-statistics:table_id": 0,
1034 "opendaylight-flow-statistics:idle-timeout": 0,
1035 "opendaylight-flow-statistics:instructions": {
1036 "opendaylight-flow-statistics:instruction": [
1038 "opendaylight-flow-statistics:order": 0,
1039 "opendaylight-flow-statistics:apply-actions": {
1040 "opendaylight-flow-statistics:action": [
1042 "opendaylight-flow-statistics:order": 0,
1043 "opendaylight-flow-statistics:output-action": {
1044 "opendaylight-flow-statistics:output-node-connector": "1",
1045 "opendaylight-flow-statistics:max-length": 0
1056 "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1057 "opendaylight-flow-statistics:flow-statistics": {
1058 "opendaylight-flow-statistics:cookie": 0,
1059 "opendaylight-flow-statistics:duration": {
1060 "opendaylight-flow-statistics:nanosecond": 296000000,
1061 "opendaylight-flow-statistics:second": 2710
1063 "opendaylight-flow-statistics:hard-timeout": 0,
1064 "opendaylight-flow-statistics:byte-count": 1274,
1065 "opendaylight-flow-statistics:match": {
1066 "opendaylight-flow-statistics:ethernet-match": {
1067 "opendaylight-flow-statistics:ethernet-type": {
1068 "opendaylight-flow-statistics:type": 2048
1071 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1073 "opendaylight-flow-statistics:priority": 1,
1074 "opendaylight-flow-statistics:packet-count": 13,
1075 "opendaylight-flow-statistics:table_id": 0,
1076 "opendaylight-flow-statistics:idle-timeout": 0,
1077 "opendaylight-flow-statistics:instructions": {
1078 "opendaylight-flow-statistics:instruction": [
1080 "opendaylight-flow-statistics:order": 0,
1081 "opendaylight-flow-statistics:apply-actions": {
1082 "opendaylight-flow-statistics:action": [
1084 "opendaylight-flow-statistics:order": 0,
1085 "opendaylight-flow-statistics:output-action": {
1086 "opendaylight-flow-statistics:output-node-connector": "1",
1087 "opendaylight-flow-statistics:max-length": 0
1098 "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1099 "opendaylight-flow-statistics:flow-statistics": {
1100 "opendaylight-flow-statistics:cookie": 0,
1101 "opendaylight-flow-statistics:duration": {
1102 "opendaylight-flow-statistics:nanosecond": 392000000,
1103 "opendaylight-flow-statistics:second": 2711
1105 "opendaylight-flow-statistics:hard-timeout": 0,
1106 "opendaylight-flow-statistics:byte-count": 1470,
1107 "opendaylight-flow-statistics:match": {
1108 "opendaylight-flow-statistics:ethernet-match": {
1109 "opendaylight-flow-statistics:ethernet-type": {
1110 "opendaylight-flow-statistics:type": 2048
1113 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1115 "opendaylight-flow-statistics:priority": 1,
1116 "opendaylight-flow-statistics:packet-count": 15,
1117 "opendaylight-flow-statistics:table_id": 0,
1118 "opendaylight-flow-statistics:idle-timeout": 0,
1119 "opendaylight-flow-statistics:instructions": {
1120 "opendaylight-flow-statistics:instruction": [
1122 "opendaylight-flow-statistics:order": 0,
1123 "opendaylight-flow-statistics:apply-actions": {
1124 "opendaylight-flow-statistics:action": [
1126 "opendaylight-flow-statistics:order": 0,
1127 "opendaylight-flow-statistics:output-action": {
1128 "opendaylight-flow-statistics:output-node-connector": "2",
1129 "opendaylight-flow-statistics:max-length": 0
1140 "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1141 "opendaylight-flow-statistics:flow-statistics": {
1142 "opendaylight-flow-statistics:cookie": 0,
1143 "opendaylight-flow-statistics:duration": {
1144 "opendaylight-flow-statistics:nanosecond": 344000000,
1145 "opendaylight-flow-statistics:second": 2707
1147 "opendaylight-flow-statistics:hard-timeout": 0,
1148 "opendaylight-flow-statistics:byte-count": 784,
1149 "opendaylight-flow-statistics:match": {
1150 "opendaylight-flow-statistics:ethernet-match": {
1151 "opendaylight-flow-statistics:ethernet-type": {
1152 "opendaylight-flow-statistics:type": 2048
1155 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1157 "opendaylight-flow-statistics:priority": 1,
1158 "opendaylight-flow-statistics:packet-count": 8,
1159 "opendaylight-flow-statistics:table_id": 0,
1160 "opendaylight-flow-statistics:idle-timeout": 0,
1161 "opendaylight-flow-statistics:instructions": {
1162 "opendaylight-flow-statistics:instruction": [
1164 "opendaylight-flow-statistics:order": 0,
1165 "opendaylight-flow-statistics:apply-actions": {
1166 "opendaylight-flow-statistics:action": [
1168 "opendaylight-flow-statistics:order": 0,
1169 "opendaylight-flow-statistics:output-action": {
1170 "opendaylight-flow-statistics:output-node-connector": "2",
1171 "opendaylight-flow-statistics:max-length": 0
1182 "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1183 "opendaylight-flow-statistics:flow-statistics": {
1184 "opendaylight-flow-statistics:cookie": 0,
1185 "opendaylight-flow-statistics:duration": {
1186 "opendaylight-flow-statistics:nanosecond": 577000000,
1187 "opendaylight-flow-statistics:second": 2706
1189 "opendaylight-flow-statistics:hard-timeout": 0,
1190 "opendaylight-flow-statistics:byte-count": 784,
1191 "opendaylight-flow-statistics:match": {
1192 "opendaylight-flow-statistics:ethernet-match": {
1193 "opendaylight-flow-statistics:ethernet-type": {
1194 "opendaylight-flow-statistics:type": 2048
1197 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1199 "opendaylight-flow-statistics:priority": 1,
1200 "opendaylight-flow-statistics:packet-count": 8,
1201 "opendaylight-flow-statistics:table_id": 0,
1202 "opendaylight-flow-statistics:idle-timeout": 0,
1203 "opendaylight-flow-statistics:instructions": {
1204 "opendaylight-flow-statistics:instruction": [
1206 "opendaylight-flow-statistics:order": 0,
1207 "opendaylight-flow-statistics:apply-actions": {
1208 "opendaylight-flow-statistics:action": [
1210 "opendaylight-flow-statistics:order": 0,
1211 "opendaylight-flow-statistics:output-action": {
1212 "opendaylight-flow-statistics:output-node-connector": "2",
1213 "opendaylight-flow-statistics:max-length": 0
1224 "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1225 "opendaylight-flow-statistics:flow-statistics": {
1226 "opendaylight-flow-statistics:cookie": 0,
1227 "opendaylight-flow-statistics:duration": {
1228 "opendaylight-flow-statistics:nanosecond": 659000000,
1229 "opendaylight-flow-statistics:second": 2705
1231 "opendaylight-flow-statistics:hard-timeout": 0,
1232 "opendaylight-flow-statistics:byte-count": 784,
1233 "opendaylight-flow-statistics:match": {
1234 "opendaylight-flow-statistics:ethernet-match": {
1235 "opendaylight-flow-statistics:ethernet-type": {
1236 "opendaylight-flow-statistics:type": 2048
1239 "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1241 "opendaylight-flow-statistics:priority": 1,
1242 "opendaylight-flow-statistics:packet-count": 8,
1243 "opendaylight-flow-statistics:table_id": 0,
1244 "opendaylight-flow-statistics:idle-timeout": 0,
1245 "opendaylight-flow-statistics:instructions": {
1246 "opendaylight-flow-statistics:instruction": [
1248 "opendaylight-flow-statistics:order": 0,
1249 "opendaylight-flow-statistics:apply-actions": {
1250 "opendaylight-flow-statistics:action": [
1252 "opendaylight-flow-statistics:order": 0,
1253 "opendaylight-flow-statistics:output-action": {
1254 "opendaylight-flow-statistics:output-node-connector": "2",
1255 "opendaylight-flow-statistics:max-length": 0
1266 "opendaylight-flow-table-statistics:flow-table-statistics": {
1267 "opendaylight-flow-table-statistics:active-flows": 8,
1268 "opendaylight-flow-table-statistics:packets-matched": 97683,
1269 "opendaylight-flow-table-statistics:packets-looked-up": 101772
1275 Discovering and testing new Flow Types
1276 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1278 Currently, the openflowplugin has a test-provider that allows you to
1279 push various flows through the system from the OSGI command line. Once
1280 those flows have been pushed through, you can see them as examples and
1281 then use them to see in the config what a particular flow example looks
1291 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1294 Point your mininet at the controller as described above.
1296 once you can see your node (probably openflow:1 if you’ve been following
1297 along) in the inventory, at the OSGI command line try running:
1301 addMDFlow openflow:1 f#
1303 Where # is a number between 1 and 80. This will create one of 80
1304 possible flows. You can go confirm they were created on the switch.
1306 Once you’ve done that, use
1310 - Accept: application/xml
1313 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1315 To see a full listing of the flows in table 2 (where they will be put).
1316 If you want to see a particular flow, look at
1319 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1321 Where # is 123 + the f# you used. So for example, for f22, your url
1325 "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1327 Note: You may have to trim out some of the sections like that contain
1328 bitfields and binary types that are not correctly modeled.
1330 Note: Before attempting to PUT a flow you have created via addMDFlow,
1331 please change its URL and body to, for example, use table 1 instead of
1332 table 2 or another Flow Id, so you don’t collide.
1334 Note: There are several test command providers and the one handling
1335 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1336 use as **commands in OSGI-console** have prefix *\_*.
1341 Examples for XML for various flow matches, instructions & actions can be
1342 found in following section :ref:`here <ofp-example-flows>`.
1350 The purpose of this page is to walk you through how to see the Topology
1351 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1353 Basically, you will learn how to:
1355 1. Run the Base/Virtualization/Service provider Edition with the new
1356 openflowplugin: :ref:`Running the controller with the new OpenFlow
1357 Plugin <ofp-running-new-plugin>`
1359 2. Start mininet to use OF 1.3: :ref:`OpenFlow 1.3 Enabled Software Switches
1360 / Environment <ofp-test-environment>`
1362 3. Use RESTCONF to see the topology information.
1364 Restconf for Topology
1365 ^^^^^^^^^^^^^^^^^^^^^
1367 The REST url for listing all the nodes is:
1371 http://localhost:8080/restconf/operational/network-topology:network-topology/
1373 You will need to set the Accept header:
1377 Accept: application/xml
1379 You will also need to use HTTP Basic Auth with username: admin password:
1382 Alternately, if you have a node’s id you can address it as
1386 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1392 http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1394 How to hit RestConf with Postman
1395 ''''''''''''''''''''''''''''''''
1398 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1401 In the chrome browser bar enter
1407 And click on Postman.
1409 Enter the URL. Click on the Headers button on the far right. Enter the
1410 Accept: header. Click on the Basic Auth Tab at the top and setup the
1411 username and password. Send.
1419 Groups are NOT SUPPORTED in current (2.0.0) version of
1420 `openvswitch <http://www.openvswitch.org/download>`__. See
1422 - http://openvswitch.org/releases/NEWS-2.0.0
1424 - http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1426 For testing group feature please use for example
1427 CPQD virtual switch in the :ref:`ofp-e2e-inv` section.
1432 Learn End to End for Inventory
1433 ''''''''''''''''''''''''''''''
1440 Run CPqD with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1442 Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1447 Current way to flush a group to switch looks like this:
1449 1. create MD-SAL modeled group and commit it into dataStore using two
1452 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1453 particular service provider (if suitable provider for given node
1456 3. the provider (plugin in this case) transforms MD-SAL modeled group
1457 into OF-API modeled group
1459 4. OF-API modeled group is then flushed into OFLibrary
1461 5. OFLibrary encodes group into particular version of wire protocol and
1462 sends it to particular switch
1464 6. check on CPqD if group is installed
1473 - Content-Type: application/xml
1475 - Accept: application/xml
1478 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1486 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1487 <group xmlns="urn:opendaylight:flow:inventory">
1488 <group-type>group-all</group-type>
1495 <bucket-id>12</bucket-id>
1496 <watch_group>14</watch_group>
1497 <watch_port>1234</watch_port>
1502 <ipv4-source>100.1.1.1</ipv4-source>
1508 <ipv4-destination>200.71.9.5210</ipv4-destination>
1512 <bucket-id>13</bucket-id>
1513 <watch_group>14</watch_group>
1514 <watch_port>1234</watch_port>
1517 <barrier>false</barrier>
1518 <group-name>Foo</group-name>
1519 <group-id>1</group-id>
1524 If you want to try a different group id, make sure the URL and the
1525 body stay in sync. For example, if you wanted to try: group-id 20
1526 you’d change the URL to
1527 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1528 but you would also need to update the <group-id>20</group-id> in the
1533 <ip-address> :Provide the IP Address of the machine on which the
1534 controller is running.
1536 Check for your group on the switch
1537 ''''''''''''''''''''''''''''''''''
1539 - See your group on your cpqd switch:
1543 COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1546 stat_req{type="grp", flags="0x0", group="all"}
1550 stat_repl{type="grp", flags="0x0", stats=[
1551 {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1553 Check for your group in the controller config via RESTCONF
1554 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1556 - See your configured group in POSTMAN with
1559 http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
1563 - You should no longer need to set Accept
1565 - Note: <ip-address> :Provide the IP Address of the machine on which
1566 the controller is running.
1568 Look for your group stats in the controller operational data via RESTCONF
1569 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1571 - See your operational group stats in POSTMAN with
1574 http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
1578 - Note: <ip-address> :Provide the IP Address of the machine on which
1579 the controller is running.
1581 Discovering and testing Group Types
1582 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1584 Currently, the openflowplugin has a test-provider that allows you to
1585 push various groups through the system from the OSGI command line. Once
1586 those groups have been pushed through, you can see them as examples and
1587 then use them to see in the config what a particular group example looks
1597 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1600 Point your CPqD at the controller as described above.
1602 once you can see your node (probably openflow:1 if you’ve been following
1603 along) in the inventory, at the OSGI command line try running:
1609 This will install a group in the switch. You can check whether the group
1610 is installed or not.
1612 Once you’ve done that, use
1616 - Accept: application/xml
1619 "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1621 - Note: <ip-address> :Provide the IP Address of the machine on which
1622 the controller is running.
1626 Before attempting to PUT a group you have created via addGroup,
1627 please change its URL and body to, for example, use group 1 instead
1628 of group 2 or another Group Id, so that they don’t collide.
1632 There are several test command providers and the one handling groups
1633 is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1634 as commands in OSGI-console have prefix *\_*.
1639 Examples for XML for various Group Types can be found in the
1640 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1649 Learn End to End for Inventory
1650 ''''''''''''''''''''''''''''''
1652 - :ref:`ofp-e2e-inv`
1657 - Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1659 - Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1664 Current way to flush a meter to switch looks like this:
1666 1. create MD-SAL modeled flow and commit it into dataStore using two
1669 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1670 particular service provider (if suitable provider for given node
1673 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1674 into OF-API modeled meter
1676 4. OF-API modeled meter is then flushed into OFLibrary
1678 5. OFLibrary encodes meter into particular version of wire protocol and
1679 sends it to particular switch
1681 6. check on mininet side if meter is installed
1688 - Set Request Headers
1690 - Content-Type: application/xml
1692 - Accept: application/xml
1695 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1703 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1704 <meter xmlns="urn:opendaylight:flow:inventory">
1705 <container-name>abcd</container-name>
1706 <flags>meter-burst</flags>
1707 <meter-band-headers>
1709 <band-burst-size>444</band-burst-size>
1710 <band-id>0</band-id>
1711 <band-rate>234</band-rate>
1712 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1713 <dscp-remark-rate>12</dscp-remark-rate>
1714 <prec_level>1</prec_level>
1716 <flags>ofpmbt-dscp-remark</flags>
1718 </meter-band-header>
1719 </meter-band-headers>
1720 <meter-id>1</meter-id>
1721 <meter-name>Foo</meter-name>
1726 If you want to try a different meter id, make sure the URL and the
1727 body stay in sync. For example, if you wanted to try: meter-id 20
1728 you’d change the URL to
1729 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1730 but you would also need to update the 20 in the body to match.
1734 :Provide the IP Address of the machine on which the controller is
1737 Check for your meter on the switch
1738 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1740 - See your meter on your CPqD switch:
1744 COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1747 stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1751 stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1753 Check for your meter in the controller config via RESTCONF
1754 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1756 - See your configured flow in POSTMAN with
1759 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1763 - You should no longer need to set Request Headers for Accept
1765 - Note: :Provide the IP Address of the machine on which the
1766 controller is running.
1768 Look for your meter stats in the controller operational data via RESTCONF
1769 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1771 - See your operational meter stats in POSTMAN with
1774 "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1778 - Note: :Provide the IP Address of the machine on which the
1779 controller is running.
1781 Discovering and testing Meter Types
1782 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1784 Currently, the openflowplugin has a test-provider that allows you to
1785 push various meters through the system from the OSGI command line. Once
1786 those meters have been pushed through, you can see them as examples and
1787 then use them to see in the config what a particular meter example looks
1797 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1800 Point your CPqD at the controller as described above.
1802 Once you can see your CPqD connected to the controller, at the OSGI
1803 command line try running:
1809 Once you’ve done that, use
1813 - Accept: application/xml
1816 "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1818 - Note: :Provide the IP Address of the machine on which the
1819 controller is running.
1823 Before attempting to PUT a meter you have created via addMeter,
1824 please change its URL and body to, for example, use meter 1 instead
1825 of meter 2 or another Meter Id, so you don’t collide.
1829 There are several test command providers and the one handling Meter
1830 is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1831 used as **commands in OSGI-console** have prefix *\_*. Examples:
1832 addMeter, modifyMeter and removeMeter.
1837 Examples for XML for various Meter Types can be found in the
1838 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1847 This page contains high level detail about the statistics collection
1848 mechanism in new OpenFlow plugin.
1850 Statistics collection in new OpenFlow plugin
1851 ''''''''''''''''''''''''''''''''''''''''''''
1853 New OpenFlow plugin collects following statistics from OpenFlow enabled
1856 1. Individual Flow Statistics
1858 2. Aggregate Flow Statistics
1860 3. Flow Table Statistics
1864 5. Group Description
1868 7. Meter Configuration
1874 10. Node Description
1876 11. Flow Table Features
1878 12. Port Description
1884 At a high level statistics collection mechanism is divided into
1885 following three parts
1887 1. Statistics related `YANG models, service APIs and notification
1888 interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
1889 are defined in the MD-SAL.
1891 2. Service APIs (RPCs) defined in yang models are implemented by
1892 OpenFlow plugin. Notification interfaces are wired up by OpenFlow
1895 3. Statistics Manager Module: This module use service APIs implemented
1896 by OpenFlow plugin to send statistics requests to all the connected
1897 OpenFlow enabled nodes. Module also implements notification
1898 interfaces to receive statistics response from nodes. Once it
1899 receives statistics response, it augment all the statistics data to
1900 the relevant element of the node (like node-connector, flow,
1901 table,group, meter) and store it in MD-SAL operational data store.
1903 Details of statistics collection
1904 ''''''''''''''''''''''''''''''''
1906 - Current implementation collects above mentioned statistics (except
1907 10-14) at a periodic interval of 15 seconds.
1909 - Statistics mentioned in 10 to 14 are only fetched when any node
1910 connects to the controller because these statistics are just static
1911 details about the respective elements.
1913 - Whenever any new element is added to node (like flow, group, meter,
1914 queue) it sends statistics request immediately to fetch the latest
1915 statistics and store it in the operational data store.
1917 - Whenever any element is deleted from the node, it immediately remove
1918 the relevant statistics from operational data store.
1920 - Statistics data are augmented to their respective element stored in
1921 the configuration data store. E.g Controller installed flows are
1922 stored in configuration data store. Whenever Statistics Manager
1923 receive statistics data related to these flow, it search the
1924 corresponding flow in the configuration data store and augment
1925 statistics in the corresponding location in operational data store.
1926 Similar approach is used for other elements of the node.
1928 - Statistics Manager stores flow statistics as an unaccounted flow
1929 statistics in operational data store if there is no corresponding
1930 flow exist in configuration data store. ID format of unaccounted flow
1931 statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
1934 - All the unaccounted flows will be cleaned up periodically after every
1935 two cycle of flow statistics collection, given that there is no
1936 update for these flows in the last two cycles.
1938 - Statistics Manager only entertains statistics response for the
1939 request sent by itself. User can write its own statistics collector
1940 using the statistics service APIs and notification defined in yang
1941 models, it won’t effect the functioning of Statistics Manager.
1943 - OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
1944 Manager don’t send any group & meter related statistics request to
1945 OpenFlow 1.0 enabled switch.
1947 RESTCONF Uris to access statistics of various node elements
1948 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1950 - Aggregate Flow Statistics & Flow Table Statistics
1954 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
1956 - Individual Flow Statistics from specific table
1960 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
1962 - Group Features & Meter Features Statistics
1966 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
1968 - Group Description & Group Statistics
1972 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
1974 - Meter Configuration & Meter Statistics
1978 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
1980 - Node Connector Statistics
1984 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
1990 GET http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
1995 For more details and queuries, please send mail to
1996 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
1997 want to report any bug in statistics collection, please use
1998 `bugzilla <https://bugs.opendaylight.org>`__.
2000 Web / Graphical Interface
2001 -------------------------
2003 In the Hydrogen & Helium release, the current Web UI does not support
2004 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2005 the flows, multiple flow tables, etc.
2007 Command Line Interface
2008 ----------------------
2010 The following is not exactly CLI - just a set of test commands which can
2011 be executed on the OSGI console testing various features in OpenFlow 1.3
2014 - :ref:`OSGI Console Test Provider Commands:
2015 Flows <ofp-test-provider-flows>`
2017 - :ref:`OSGI Console Test Provider Commands:
2018 Groups <ofp-test-provider-groups>`
2020 - :ref:`OSGI Console Test Provider Commands:
2021 Meters <ofp-test-provider-meters>`
2023 - :ref:`OSGI Console Test Provider Commands: Topology
2024 Events <ofp-test-provider-topology>`
2026 .. _ofp-test-provider-flows:
2028 Flows : Test Provider
2029 ~~~~~~~~~~~~~~~~~~~~~
2031 Currently, the openflowplugin has a test-provider that allows you to
2032 push various flows through the system from the OSGI command line. Once
2033 those flows have been pushed through, you can see them as examples and
2034 then use them to see in the config what a particular flow example looks
2040 Run the controller by executing:
2044 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2047 Point your mininet to the controller by giving the parameters
2048 --controller=remote,ip=.
2050 Once you see your node (probably openflow:1 if you’ve been following
2051 along) in the inventory, at the OSGI command line try running:
2055 addMDFlow openflow:1 f#
2057 Where # is a number between 1 and 80 and openflow:1 is the of the
2058 switch. This will create one of 80 possible flows. You can confirm that
2059 they were created on the switch.
2061 RemoveFlow : removeMDFlow
2062 ^^^^^^^^^^^^^^^^^^^^^^^^^
2064 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2065 is connected to the controller, try running:
2069 removeMDFlow openflow:1 f#
2071 where # is a number between 1 and 80 and openflow:1 is the of the
2072 switch. The flow to be deleted should have same flowid and Nodeid as
2075 ModifyFlow : modifyMDFlow
2076 ^^^^^^^^^^^^^^^^^^^^^^^^^
2078 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2079 is connected to the controller, try running:
2083 modifyMDFlow openflow:1 f#
2085 where # is a number between 1 and 80 and openflow:1 is the of the
2086 switch. The flow to be deleted should have same flowid and Nodeid as
2089 .. _ofp-test-provider-groups:
2091 Group : Test Provider
2092 ~~~~~~~~~~~~~~~~~~~~~
2094 Currently, the openflowplugin has a test-provider that allows you to
2095 push various flows through the system from the OSGI command line. Once
2096 those flows have been pushed through, you can see them as examples and
2097 then use them to see in the config what a particular flow example looks
2103 Run the controller by executing:
2107 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2110 Point your mininet to the controller by giving the parameters
2111 --controller=remote,ip=.
2113 Once you see your node (probably openflow:1 if you’ve been following
2114 along) in the inventory, at the OSGI command line try running:
2118 addGroup openflow:1 a# g#
2120 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2121 actiontype(a#). You can confirm that they were created on the switch.
2123 RemoveGroup : removeGroup
2124 ^^^^^^^^^^^^^^^^^^^^^^^^^
2126 Run the controller by executing:
2130 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2133 Point your mininet at the controller as described above.
2135 Once you see your node (probably openflow:1 if you’ve been following
2136 along) in the inventory, at the OSGI command line try running:
2140 removeGroup openflow:1 a# g#
2142 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2143 actiontype(a#). GroupId should be same as that used for adding the flow.
2144 You can confirm that it was removed from the switch.
2146 ModifyGroup : modifyGroup
2147 ^^^^^^^^^^^^^^^^^^^^^^^^^
2149 Run the controller by executing:
2153 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2156 Point your mininet at the controller as described above.
2158 Once you see your node (probably openflow:1 if you’ve been following
2159 along) in the inventory, at the OSGI command line try running:
2163 modifyGroup openflow:1 a# g#
2165 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2166 actiontype(a#). GroupId should be same as that used for adding the flow.
2167 You can confirm that it was modified on the switch.
2169 .. _ofp-test-provider-meters:
2171 Meters : Test Provider
2172 ~~~~~~~~~~~~~~~~~~~~~~
2174 Currently, the openflowplugin has a test-provider that allows you to
2175 push various flows through the system from the OSGI command line. Once
2176 those flows have been pushed through, you can see them as examples and
2177 then use them to see in the config what a particular flow example looks
2183 Run the controller by executing:
2187 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2190 Point your mininet to the controller by giving the parameters
2191 --controller=remote,ip=.
2193 Once you see your node (probably openflow:1 if you’ve been following
2194 along) in the inventory, at the OSGI command line try running:
2200 You can now confirm that meter has been created on the switch.
2202 RemoveMeter : removeMeter
2203 ^^^^^^^^^^^^^^^^^^^^^^^^^
2205 Run the controller by executing:
2209 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2212 Point your mininet to the controller by giving the parameters
2213 --controller=remote,ip=.
2215 Once you see your node (probably openflow:1 if you’ve been following
2216 along) in the inventory, at the OSGI command line try running:
2220 removeMeter openflow:1
2222 The CLI takes care of using the same meterId and nodeId as used for
2223 meter add. You can confirm that it was removed from the switch.
2225 ModifyMeter : modifyMeter
2226 ^^^^^^^^^^^^^^^^^^^^^^^^^
2228 Run the controller by executing:
2232 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2235 Point your mininet to the controller by giving the parameters
2236 --controller=remote,ip=.
2238 Once you see your node (probably openflow:1 if you’ve been following
2239 along) in the inventory, at the OSGI command line try running:
2243 modifyMeter openflow:1
2245 The CLI takes care of using the same meterId and nodeId as used for
2246 meter add. You can confirm that it was modified on the switch.
2248 .. _ofp-test-provider-topology:
2250 Topology : Notification
2251 ~~~~~~~~~~~~~~~~~~~~~~~
2253 Currently, the openflowplugin has a test-provider that allows you to get
2254 notifications for the topology related events like Link-Discovered ,
2255 Link-Removed events.
2257 Link Discovered Event : Testing
2258 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2260 Run the controller by executing:
2264 cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2267 Point your mininet to the controller by giving the parameters
2268 --controller=remote,ip=. Once the controller is connected to the switch,
2269 Link-Discovered event can be tested by initially configuring the
2270 specific flows on the switch. For Link Discovered event either
2271 table-miss flow or LLDP ether-type flow can be configured.
2273 Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
2277 addMDFlow Openflow:1 fTM
2280 OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
2281 *fTM* is the table-miss scenario here.
2283 Once the table-miss flow is configured through above command, we can see
2284 the Link-Discovered event in the debug logs on the controller console.
2286 Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
2290 addMDFlow Openflow:1 0(table-id) f81
2292 You can confirm that they were created on the switch.
2294 Once the LLDP ether-type flow is configured through above command, we
2295 can see the Link-Discovered event in the debug logs on the controller
2298 Link Removed Event : Testing
2299 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2301 Having configured either table-miss or lldp ether-type flow on switch,
2302 once the switch is disconnected we see the Link-Removed event
2304 Programmatic Interface
2305 ----------------------
2307 The API is documented in the model documentation under the section
2308 OpenFlow Services at:
2310 - `Models Documentation (OpenFlow Services
2311 Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
2313 .. _ofp-example-flows:
2321 The flow examples on this page are tested to work with OVS.
2323 Use, for example, POSTMAN with the following parameters:
2327 PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2329 - Accept: application/xml
2330 - Content-Type: application/xml
2336 PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2338 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2340 The format of the flow-programming XML is determined by by the grouping
2341 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2346 The format of the XML that describes OpenFlow matches is determined by
2347 the opendaylight-match-types yang model: .
2352 - Flow=124, Table=2, Priority=2,
2353 Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2354 match=\\{ipv4\_destination\_address=10.0.1.1/24}
2356 - Note that ethernet-type MUST be 2048 (0x800)
2360 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2361 <flow xmlns="urn:opendaylight:flow:inventory">
2362 <strict>false</strict>
2374 <table_id>2</table_id>
2376 <cookie_mask>255</cookie_mask>
2377 <installHw>false</installHw>
2384 <ipv4-destination>10.0.1.1/24</ipv4-destination>
2386 <hard-timeout>12</hard-timeout>
2388 <idle-timeout>34</idle-timeout>
2389 <flow-name>FooXf1</flow-name>
2390 <priority>2</priority>
2391 <barrier>false</barrier>
2394 Ethernet Src Address
2395 ^^^^^^^^^^^^^^^^^^^^
2397 - Flow=126, Table=2, Priority=2,
2398 Instructions=\\{Apply\_Actions={drop}},
2399 match=\\{ethernet-source=00:00:00:00:00:01}
2403 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2404 <flow xmlns="urn:opendaylight:flow:inventory">
2405 <strict>false</strict>
2417 <table_id>2</table_id>
2419 <cookie_mask>255</cookie_mask>
2420 <installHw>false</installHw>
2424 <address>00:00:00:00:00:01</address>
2428 <hard-timeout>12</hard-timeout>
2430 <idle-timeout>34</idle-timeout>
2431 <flow-name>FooXf3</flow-name>
2432 <priority>2</priority>
2433 <barrier>false</barrier>
2436 Ethernet Src & Dest Addresses, Ethernet Type
2437 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2439 - Flow=127, Table=2, Priority=2,
2440 Instructions=\\{Apply\_Actions={drop}},
2441 match=\\{ethernet-source=00:00:00:00:23:ae,
2442 ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2446 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2447 <flow xmlns="urn:opendaylight:flow:inventory">
2448 <strict>false</strict>
2460 <table_id>2</table_id>
2462 <cookie_mask>255</cookie_mask>
2463 <installHw>false</installHw>
2469 <ethernet-destination>
2470 <address>ff:ff:ff:ff:ff:ff</address>
2471 </ethernet-destination>
2473 <address>00:00:00:00:23:ae</address>
2477 <hard-timeout>12</hard-timeout>
2479 <idle-timeout>34</idle-timeout>
2480 <flow-name>FooXf4</flow-name>
2481 <priority>2</priority>
2482 <barrier>false</barrier>
2485 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2486 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2488 - Note that ethernet-type MUST be 34887 (0x8847)
2492 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2493 <flow xmlns="urn:opendaylight:flow:inventory">
2494 <strict>false</strict>
2506 <table_id>2</table_id>
2508 <cookie_mask>255</cookie_mask>
2514 <ethernet-destination>
2515 <address>ff:ff:ff:ff:ff:ff</address>
2516 </ethernet-destination>
2518 <address>00:00:00:00:23:ae</address>
2521 <ipv4-source>10.1.2.3/24</ipv4-source>
2522 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2523 <in-port>0</in-port>
2525 <hard-timeout>12</hard-timeout>
2527 <idle-timeout>34</idle-timeout>
2528 <flow-name>FooXf5</flow-name>
2529 <priority>2</priority>
2530 <barrier>false</barrier>
2533 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2534 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2536 Protocol #, IP DSCP, IP ECN, Input Port
2538 - Note that ethernet-type MUST be 2048 (0x800)
2542 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2543 <flow xmlns="urn:opendaylight:flow:inventory">
2544 <strict>false</strict>
2556 <table_id>2</table_id>
2558 <cookie_mask>255</cookie_mask>
2564 <ethernet-destination>
2565 <address>ff:ff:ff:ff:ff:aa</address>
2566 </ethernet-destination>
2568 <address>00:00:00:11:23:ae</address>
2571 <ipv4-source>10.1.2.3/24</ipv4-source>
2572 <ipv4-destination>20.4.5.6/16</ipv4-destination>
2574 <ip-protocol>56</ip-protocol>
2575 <ip-dscp>15</ip-dscp>
2578 <in-port>0</in-port>
2580 <hard-timeout>12000</hard-timeout>
2582 <idle-timeout>12000</idle-timeout>
2583 <flow-name>FooXf7</flow-name>
2584 <priority>2</priority>
2585 <barrier>false</barrier>
2588 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2589 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2591 Dest Ports, IP DSCP, IP ECN, Input Port
2593 - Note that ethernet-type MUST be 2048 (0x800)
2595 - Note that IP Protocol Type MUST be 6
2599 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2600 <flow xmlns="urn:opendaylight:flow:inventory">
2601 <strict>false</strict>
2613 <table_id>2</table_id>
2615 <cookie_mask>255</cookie_mask>
2621 <ethernet-destination>
2622 <address>ff:ff:29:01:19:61</address>
2623 </ethernet-destination>
2625 <address>00:00:00:11:23:ae</address>
2628 <ipv4-source>17.1.2.3/8</ipv4-source>
2629 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2631 <ip-protocol>6</ip-protocol>
2632 <ip-dscp>2</ip-dscp>
2635 <tcp-source-port>25364</tcp-source-port>
2636 <tcp-destination-port>8080</tcp-destination-port>
2637 <in-port>0</in-port>
2639 <hard-timeout>1200</hard-timeout>
2641 <idle-timeout>3400</idle-timeout>
2642 <flow-name>FooXf8</flow-name>
2643 <priority>2</priority>
2644 <barrier>false</barrier>
2647 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2648 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2650 Dest Ports, IP DSCP, IP ECN, Input Port
2652 - Note that ethernet-type MUST be 2048 (0x800)
2654 - Note that IP Protocol Type MUST be 17
2658 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2659 <flow xmlns="urn:opendaylight:flow:inventory">
2660 <strict>false</strict>
2672 <table_id>2</table_id>
2674 <cookie_mask>255</cookie_mask>
2680 <ethernet-destination>
2681 <address>20:14:29:01:19:61</address>
2682 </ethernet-destination>
2684 <address>00:00:00:11:23:ae</address>
2687 <ipv4-source>19.1.2.3/10</ipv4-source>
2688 <ipv4-destination>172.168.5.6/18</ipv4-destination>
2690 <ip-protocol>17</ip-protocol>
2691 <ip-dscp>8</ip-dscp>
2694 <udp-source-port>25364</udp-source-port>
2695 <udp-destination-port>8080</udp-destination-port>
2696 <in-port>0</in-port>
2698 <hard-timeout>1200</hard-timeout>
2700 <idle-timeout>3400</idle-timeout>
2701 <flow-name>FooXf9</flow-name>
2702 <priority>2</priority>
2703 <barrier>false</barrier>
2705 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2706 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2708 Type & Code, IP DSCP, IP ECN, Input Port
2710 - Note that ethernet-type MUST be 2048 (0x800)
2712 - Note that IP Protocol Type MUST be 1
2716 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2717 <flow xmlns="urn:opendaylight:flow:inventory">
2718 <strict>false</strict>
2730 <table_id>2</table_id>
2732 <cookie_mask>255</cookie_mask>
2738 <ethernet-destination>
2739 <address>ff:ff:29:01:19:61</address>
2740 </ethernet-destination>
2742 <address>00:00:00:11:23:ae</address>
2745 <ipv4-source>17.1.2.3/8</ipv4-source>
2746 <ipv4-destination>172.168.5.6/16</ipv4-destination>
2748 <ip-protocol>1</ip-protocol>
2749 <ip-dscp>27</ip-dscp>
2753 <icmpv4-type>6</icmpv4-type>
2754 <icmpv4-code>3</icmpv4-code>
2756 <in-port>0</in-port>
2758 <hard-timeout>1200</hard-timeout>
2760 <idle-timeout>3400</idle-timeout>
2761 <flow-name>FooXf11</flow-name>
2762 <priority>2</priority>
2765 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2766 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2768 Transport Addresses, ARP Src & Target Hw Addresses
2770 - Note that ethernet-type MUST be 2054 (0x806)
2774 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2775 <flow xmlns="urn:opendaylight:flow:inventory">
2776 <strict>false</strict>
2792 <table_id>2</table_id>
2794 <cookie_mask>255</cookie_mask>
2800 <ethernet-destination>
2801 <address>ff:ff:ff:ff:FF:ff</address>
2802 </ethernet-destination>
2804 <address>00:00:FC:01:23:ae</address>
2808 <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2809 <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2810 <arp-source-hardware-address>
2811 <address>12:34:56:78:98:AB</address>
2812 </arp-source-hardware-address>
2813 <arp-target-hardware-address>
2814 <address>FE:DC:BA:98:76:54</address>
2815 </arp-target-hardware-address>
2817 <hard-timeout>12</hard-timeout>
2819 <idle-timeout>34</idle-timeout>
2820 <flow-name>FooXf14</flow-name>
2821 <priority>2</priority>
2822 <barrier>false</barrier>
2824 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2825 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2829 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2830 <flow xmlns="urn:opendaylight:flow:inventory">
2831 <strict>false</strict>
2843 <table_id>2</table_id>
2845 <cookie_mask>255</cookie_mask>
2851 <ethernet-destination>
2852 <address>ff:ff:29:01:19:61</address>
2853 </ethernet-destination>
2855 <address>00:00:00:11:23:ae</address>
2860 <vlan-id>78</vlan-id>
2861 <vlan-id-present>true</vlan-id-present>
2863 <vlan-pcp>3</vlan-pcp>
2866 <hard-timeout>1200</hard-timeout>
2868 <idle-timeout>3400</idle-timeout>
2869 <flow-name>FooXf15</flow-name>
2870 <priority>2</priority>
2871 <barrier>false</barrier>
2874 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2875 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2879 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2880 <flow xmlns="urn:opendaylight:flow:inventory">
2881 <flow-name>FooXf17</flow-name>
2883 <cookie_mask>255</cookie_mask>
2885 <hard-timeout>1200</hard-timeout>
2886 <idle-timeout>3400</idle-timeout>
2887 <priority>2</priority>
2888 <table_id>2</table_id>
2889 <strict>false</strict>
2906 <ethernet-destination>
2907 <address>ff:ff:29:01:19:61</address>
2908 </ethernet-destination>
2910 <address>00:00:00:11:23:ae</address>
2913 <protocol-match-fields>
2914 <mpls-label>567</mpls-label>
2915 <mpls-tc>3</mpls-tc>
2916 <mpls-bos>1</mpls-bos>
2917 </protocol-match-fields>
2921 IPv6 Src & Dest Addresses
2922 ^^^^^^^^^^^^^^^^^^^^^^^^^
2924 - Note that ethernet-type MUST be 34525
2928 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2929 <flow xmlns="urn:opendaylight:flow:inventory">
2930 <strict>false</strict>
2931 <flow-name>FooXf18</flow-name>
2933 <cookie_mask>255</cookie_mask>
2935 <table_id>2</table_id>
2936 <priority>2</priority>
2937 <hard-timeout>1200</hard-timeout>
2938 <idle-timeout>3400</idle-timeout>
2939 <installHw>false</installHw>
2957 <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
2958 <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
2967 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2968 <flow xmlns="urn:opendaylight:flow:inventory">
2969 <strict>false</strict>
2970 <flow-name>FooXf19</flow-name>
2972 <cookie_mask>255</cookie_mask>
2974 <table_id>2</table_id>
2975 <priority>1</priority>
2976 <hard-timeout>1200</hard-timeout>
2977 <idle-timeout>3400</idle-timeout>
2978 <installHw>false</installHw>
2992 <metadata>12345</metadata>
2997 Metadata, Metadata Mask
2998 ^^^^^^^^^^^^^^^^^^^^^^^
3002 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3003 <flow xmlns="urn:opendaylight:flow:inventory">
3004 <strict>false</strict>
3005 <flow-name>FooXf20</flow-name>
3007 <cookie_mask>255</cookie_mask>
3009 <table_id>2</table_id>
3010 <priority>2</priority>
3011 <hard-timeout>1200</hard-timeout>
3012 <idle-timeout>3400</idle-timeout>
3013 <installHw>false</installHw>
3027 <metadata>12345</metadata>
3028 <metadata-mask>//FF</metadata-mask>
3033 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3034 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3036 - Note that ethernet-type MUST be 34525
3040 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3041 <flow xmlns="urn:opendaylight:flow:inventory">
3042 <strict>false</strict>
3043 <flow-name>FooXf21</flow-name>
3045 <cookie_mask>255</cookie_mask>
3047 <table_id>2</table_id>
3048 <priority>2</priority>
3049 <hard-timeout>1200</hard-timeout>
3050 <idle-timeout>3400</idle-timeout>
3051 <installHw>false</installHw>
3069 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3070 <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3072 <metadata>12345</metadata>
3075 <ip-protocol>17</ip-protocol>
3076 <ip-dscp>8</ip-dscp>
3079 <udp-source-port>25364</udp-source-port>
3080 <udp-destination-port>8080</udp-destination-port>
3084 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3085 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3087 - Note that ethernet-type MUST be 34525
3089 - Note that IP Protocol MUST be 6
3093 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3094 <flow xmlns="urn:opendaylight:flow:inventory">
3095 <strict>false</strict>
3096 <flow-name>FooXf22</flow-name>
3098 <cookie_mask>255</cookie_mask>
3100 <table_id>2</table_id>
3101 <priority>2</priority>
3102 <hard-timeout>1200</hard-timeout>
3103 <idle-timeout>3400</idle-timeout>
3104 <installHw>false</installHw>
3122 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3123 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3125 <metadata>12345</metadata>
3128 <ip-protocol>6</ip-protocol>
3129 <ip-dscp>60</ip-dscp>
3132 <tcp-source-port>183</tcp-source-port>
3133 <tcp-destination-port>8080</tcp-destination-port>
3137 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3138 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3140 - Note that ethernet-type MUST be 34525
3142 - Note that IP Protocol MUST be 6
3146 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3147 <flow xmlns="urn:opendaylight:flow:inventory">
3148 <strict>false</strict>
3149 <flow-name>FooXf23</flow-name>
3151 <cookie_mask>255</cookie_mask>
3153 <table_id>2</table_id>
3154 <priority>2</priority>
3155 <hard-timeout>1200</hard-timeout>
3156 <idle-timeout>3400</idle-timeout>
3157 <installHw>false</installHw>
3175 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3176 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3178 <metadata>12345</metadata>
3181 <ipv6-flabel>33</ipv6-flabel>
3184 <ip-protocol>6</ip-protocol>
3185 <ip-dscp>60</ip-dscp>
3188 <tcp-source-port>183</tcp-source-port>
3189 <tcp-destination-port>8080</tcp-destination-port>
3198 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3199 <flow xmlns="urn:opendaylight:flow:inventory">
3200 <strict>false</strict>
3201 <flow-name>FooXf24</flow-name>
3203 <cookie_mask>255</cookie_mask>
3205 <table_id>2</table_id>
3206 <priority>2</priority>
3207 <hard-timeout>1200</hard-timeout>
3208 <idle-timeout>3400</idle-timeout>
3209 <installHw>false</installHw>
3223 <tunnel-id>2591</tunnel-id>
3228 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3229 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3231 - Note that ethernet-type MUST be 34525
3233 - Note that IP Protocol MUST be 58
3237 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3238 <flow xmlns="urn:opendaylight:flow:inventory">
3239 <strict>false</strict>
3240 <flow-name>FooXf25</flow-name>
3242 <cookie_mask>255</cookie_mask>
3244 <table_id>2</table_id>
3245 <priority>2</priority>
3246 <hard-timeout>1200</hard-timeout>
3247 <idle-timeout>3400</idle-timeout>
3248 <installHw>false</installHw>
3266 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3267 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3269 <metadata>12345</metadata>
3272 <ipv6-flabel>33</ipv6-flabel>
3275 <ip-protocol>58</ip-protocol>
3276 <ip-dscp>60</ip-dscp>
3280 <icmpv6-type>6</icmpv6-type>
3281 <icmpv6-code>3</icmpv6-code>
3286 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3287 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3289 - Note that ethernet-type MUST be 34525
3291 - Note that IP Protocol MUST be 58
3295 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3296 <flow xmlns="urn:opendaylight:flow:inventory">
3297 <strict>false</strict>
3298 <flow-name>FooXf27</flow-name>
3300 <cookie_mask>255</cookie_mask>
3302 <table_id>2</table_id>
3303 <priority>2</priority>
3304 <hard-timeout>1200</hard-timeout>
3305 <idle-timeout>3400</idle-timeout>
3306 <installHw>false</installHw>
3324 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3325 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3327 <metadata>12345</metadata>
3330 <ipv6-flabel>33</ipv6-flabel>
3333 <ipv6-exthdr>0</ipv6-exthdr>
3336 <ip-protocol>6</ip-protocol>
3337 <ip-dscp>60</ip-dscp>
3340 <tcp-source-port>183</tcp-source-port>
3341 <tcp-destination-port>8080</tcp-destination-port>
3348 The format of the XML that describes OpenFlow actions is determined by
3349 the opendaylight-action-types yang model: .
3359 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3360 <flow xmlns="urn:opendaylight:flow:inventory">
3361 <strict>false</strict>
3362 <flow-name>FooXf101</flow-name>
3364 <cookie_mask>255</cookie_mask>
3365 <cookie>101</cookie>
3366 <table_id>2</table_id>
3367 <priority>2</priority>
3368 <hard-timeout>1200</hard-timeout>
3369 <idle-timeout>3400</idle-timeout>
3370 <installHw>false</installHw>
3378 <output-node-connector>TABLE</output-node-connector>
3379 <max-length>60</max-length>
3391 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3392 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3394 <metadata>12345</metadata>
3397 <ip-protocol>6</ip-protocol>
3398 <ip-dscp>60</ip-dscp>
3401 <tcp-source-port>183</tcp-source-port>
3402 <tcp-destination-port>8080</tcp-destination-port>
3411 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3412 <flow xmlns="urn:opendaylight:flow:inventory">
3413 <strict>false</strict>
3414 <flow-name>FooXf102</flow-name>
3416 <cookie_mask>255</cookie_mask>
3417 <cookie>102</cookie>
3418 <table_id>2</table_id>
3419 <priority>2</priority>
3420 <hard-timeout>1200</hard-timeout>
3421 <idle-timeout>3400</idle-timeout>
3422 <installHw>false</installHw>
3430 <output-node-connector>INPORT</output-node-connector>
3431 <max-length>60</max-length>
3442 <ethernet-destination>
3443 <address>ff:ff:29:01:19:61</address>
3444 </ethernet-destination>
3446 <address>00:00:00:11:23:ae</address>
3449 <ipv4-source>17.1.2.3/8</ipv4-source>
3450 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3452 <ip-protocol>6</ip-protocol>
3453 <ip-dscp>2</ip-dscp>
3456 <tcp-source-port>25364</tcp-source-port>
3457 <tcp-destination-port>8080</tcp-destination-port>
3461 Output to Physical Port
3462 '''''''''''''''''''''''
3466 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3467 <flow xmlns="urn:opendaylight:flow:inventory">
3468 <strict>false</strict>
3469 <flow-name>FooXf103</flow-name>
3471 <cookie_mask>255</cookie_mask>
3472 <cookie>103</cookie>
3473 <table_id>2</table_id>
3474 <priority>2</priority>
3475 <hard-timeout>1200</hard-timeout>
3476 <idle-timeout>3400</idle-timeout>
3477 <installHw>false</installHw>
3485 <output-node-connector>1</output-node-connector>
3486 <max-length>60</max-length>
3497 <ethernet-destination>
3498 <address>ff:ff:29:01:19:61</address>
3499 </ethernet-destination>
3501 <address>00:00:00:11:23:ae</address>
3504 <ipv4-source>17.1.2.3/8</ipv4-source>
3505 <ipv4-destination>172.168.5.6/16</ipv4-destination>
3507 <ip-protocol>6</ip-protocol>
3508 <ip-dscp>2</ip-dscp>
3511 <tcp-source-port>25364</tcp-source-port>
3512 <tcp-destination-port>8080</tcp-destination-port>
3521 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3522 <flow xmlns="urn:opendaylight:flow:inventory">
3523 <strict>false</strict>
3524 <flow-name>FooXf104</flow-name>
3526 <cookie_mask>255</cookie_mask>
3527 <cookie>104</cookie>
3528 <table_id>2</table_id>
3529 <priority>2</priority>
3530 <hard-timeout>1200</hard-timeout>
3531 <idle-timeout>3400</idle-timeout>
3532 <installHw>false</installHw>
3540 <output-node-connector>LOCAL</output-node-connector>
3541 <max-length>60</max-length>
3553 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3554 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3556 <metadata>12345</metadata>
3559 <ip-protocol>6</ip-protocol>
3560 <ip-dscp>60</ip-dscp>
3563 <tcp-source-port>183</tcp-source-port>
3564 <tcp-destination-port>8080</tcp-destination-port>
3573 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3574 <flow xmlns="urn:opendaylight:flow:inventory">
3575 <strict>false</strict>
3576 <flow-name>FooXf105</flow-name>
3578 <cookie_mask>255</cookie_mask>
3579 <cookie>105</cookie>
3580 <table_id>2</table_id>
3581 <priority>2</priority>
3582 <hard-timeout>1200</hard-timeout>
3583 <idle-timeout>3400</idle-timeout>
3584 <installHw>false</installHw>
3592 <output-node-connector>NORMAL</output-node-connector>
3593 <max-length>60</max-length>
3605 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3606 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3608 <metadata>12345</metadata>
3611 <ip-protocol>6</ip-protocol>
3612 <ip-dscp>45</ip-dscp>
3615 <tcp-source-port>20345</tcp-source-port>
3616 <tcp-destination-port>80</tcp-destination-port>
3625 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3626 <flow xmlns="urn:opendaylight:flow:inventory">
3627 <strict>false</strict>
3628 <flow-name>FooXf106</flow-name>
3630 <cookie_mask>255</cookie_mask>
3631 <cookie>106</cookie>
3632 <table_id>2</table_id>
3633 <priority>2</priority>
3634 <hard-timeout>1200</hard-timeout>
3635 <idle-timeout>3400</idle-timeout>
3636 <installHw>false</installHw>
3644 <output-node-connector>FLOOD</output-node-connector>
3645 <max-length>60</max-length>
3657 <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3658 <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3660 <metadata>12345</metadata>
3663 <ip-protocol>6</ip-protocol>
3664 <ip-dscp>45</ip-dscp>
3667 <tcp-source-port>20345</tcp-source-port>
3668 <tcp-destination-port>80</tcp-destination-port>
3677 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3678 <flow xmlns="urn:opendaylight:flow:inventory">
3679 <strict>false</strict>
3680 <flow-name>FooXf107</flow-name>
3682 <cookie_mask>255</cookie_mask>
3683 <cookie>107</cookie>
3684 <table_id>2</table_id>
3685 <priority>2</priority>
3686 <hard-timeout>1200</hard-timeout>
3687 <idle-timeout>3400</idle-timeout>
3688 <installHw>false</installHw>
3696 <output-node-connector>ALL</output-node-connector>
3697 <max-length>60</max-length>
3708 <ethernet-destination>
3709 <address>20:14:29:01:19:61</address>
3710 </ethernet-destination>
3712 <address>00:00:00:11:23:ae</address>
3715 <ipv4-source>19.1.2.3/10</ipv4-source>
3716 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3718 <ip-protocol>17</ip-protocol>
3719 <ip-dscp>8</ip-dscp>
3722 <udp-source-port>25364</udp-source-port>
3723 <udp-destination-port>8080</udp-destination-port>
3724 <in-port>0</in-port>
3728 Output to CONTROLLER
3729 ''''''''''''''''''''
3733 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3734 <flow xmlns="urn:opendaylight:flow:inventory">
3735 <strict>false</strict>
3736 <flow-name>FooXf108</flow-name>
3738 <cookie_mask>255</cookie_mask>
3739 <cookie>108</cookie>
3740 <table_id>2</table_id>
3741 <priority>2</priority>
3742 <hard-timeout>1200</hard-timeout>
3743 <idle-timeout>3400</idle-timeout>
3744 <installHw>false</installHw>
3752 <output-node-connector>CONTROLLER</output-node-connector>
3753 <max-length>60</max-length>
3764 <ethernet-destination>
3765 <address>20:14:29:01:19:61</address>
3766 </ethernet-destination>
3768 <address>00:00:00:11:23:ae</address>
3771 <ipv4-source>19.1.2.3/10</ipv4-source>
3772 <ipv4-destination>172.168.5.6/18</ipv4-destination>
3774 <ip-protocol>17</ip-protocol>
3775 <ip-dscp>8</ip-dscp>
3778 <udp-source-port>25364</udp-source-port>
3779 <udp-destination-port>8080</udp-destination-port>
3780 <in-port>0</in-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>FooXf109</flow-name>
3794 <cookie_mask>255</cookie_mask>
3795 <cookie>109</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>ANY</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>
3845 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3846 <flow xmlns="urn:opendaylight:flow:inventory">
3847 <strict>false</strict>
3854 <ethernet-type>33024</ethernet-type>
3862 <vlan-id>79</vlan-id>
3863 <vlan-id-present>true</vlan-id-present>
3871 <output-node-connector>5</output-node-connector>
3878 <table_id>0</table_id>
3885 <ethernet-destination>
3886 <address>FF:FF:29:01:19:61</address>
3887 </ethernet-destination>
3889 <address>00:00:00:11:23:AE</address>
3892 <in-port>1</in-port>
3894 <flow-name>vlan_flow</flow-name>
3895 <priority>2</priority>
3903 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3905 xmlns="urn:opendaylight:flow:inventory">
3906 <flow-name>push-mpls-action</flow-name>
3913 <ethernet-type>34887</ethernet-type>
3919 <protocol-match-fields>
3920 <mpls-label>27</mpls-label>
3921 </protocol-match-fields>
3927 <output-node-connector>2</output-node-connector>
3934 <strict>false</strict>
3942 <in-port>1</in-port>
3943 <ipv4-destination>10.0.0.4/32</ipv4-destination>
3945 <idle-timeout>0</idle-timeout>
3946 <cookie_mask>255</cookie_mask>
3947 <cookie>401</cookie>
3948 <priority>8</priority>
3949 <hard-timeout>0</hard-timeout>
3950 <installHw>false</installHw>
3951 <table_id>0</table_id>
3957 - Note that ethernet-type MUST be 34887
3961 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3963 xmlns="urn:opendaylight:flow:inventory">
3964 <flow-name>push-mpls-action</flow-name>
3971 <protocol-match-fields>
3972 <mpls-label>37</mpls-label>
3973 </protocol-match-fields>
3979 <output-node-connector>2</output-node-connector>
3986 <strict>false</strict>
3994 <in-port>1</in-port>
3995 <protocol-match-fields>
3996 <mpls-label>27</mpls-label>
3997 </protocol-match-fields>
3999 <idle-timeout>0</idle-timeout>
4000 <cookie_mask>255</cookie_mask>
4001 <cookie>401</cookie>
4002 <priority>8</priority>
4003 <hard-timeout>0</hard-timeout>
4004 <installHw>false</installHw>
4005 <table_id>0</table_id>
4011 - Note that ethernet-type MUST be 34887
4013 - Issue with OVS 2.1 `OVS
4014 fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4018 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4020 xmlns="urn:opendaylight:flow:inventory">
4021 <flow-name>FooXf10</flow-name>
4028 <ethernet-type>2048</ethernet-type>
4034 <output-node-connector>2</output-node-connector>
4035 <max-length>60</max-length>
4043 <strict>false</strict>
4050 <in-port>1</in-port>
4051 <protocol-match-fields>
4052 <mpls-label>37</mpls-label>
4053 </protocol-match-fields>
4055 <idle-timeout>0</idle-timeout>
4056 <cookie>889</cookie>
4057 <cookie_mask>255</cookie_mask>
4058 <installHw>false</installHw>
4059 <hard-timeout>0</hard-timeout>
4060 <priority>10</priority>
4061 <table_id>0</table_id>
4067 - Nicira extension defined in
4068 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4070 - Example section is -
4071 https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4076 <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4077 <hard-timeout>0</hard-timeout>
4078 <idle-timeout>0</idle-timeout>
4086 <metadata>2199023255552</metadata>
4087 <metadata-mask>2305841909702066176</metadata-mask>
4090 <ip-protocol>1</ip-protocol>
4093 <cookie>110100480</cookie>
4101 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4108 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4109 <idle-timeout>60</idle-timeout>
4110 <fin-idle-timeout>0</fin-idle-timeout>
4111 <hard-timeout>60</hard-timeout>
4113 <table-id>41</table-id>
4114 <priority>61010</priority>
4115 <fin-hard-timeout>0</fin-hard-timeout>
4117 <flow-mod-add-match-from-value>
4118 <src-ofs>0</src-ofs>
4120 <src-field>1538</src-field>
4121 <flow-mod-num-bits>16</flow-mod-num-bits>
4122 </flow-mod-add-match-from-value>
4125 <flow-mod-add-match-from-field>
4126 <src-ofs>0</src-ofs>
4127 <dst-ofs>0</dst-ofs>
4128 <dst-field>4100</dst-field>
4129 <src-field>3588</src-field>
4130 <flow-mod-num-bits>32</flow-mod-num-bits>
4131 </flow-mod-add-match-from-field>
4134 <flow-mod-add-match-from-field>
4135 <src-ofs>0</src-ofs>
4136 <dst-ofs>0</dst-ofs>
4137 <dst-field>518</dst-field>
4138 <src-field>1030</src-field>
4139 <flow-mod-num-bits>48</flow-mod-num-bits>
4140 </flow-mod-add-match-from-field>
4143 <flow-mod-add-match-from-field>
4144 <src-ofs>0</src-ofs>
4145 <dst-ofs>0</dst-ofs>
4146 <dst-field>3073</dst-field>
4147 <src-field>3073</src-field>
4148 <flow-mod-num-bits>8</flow-mod-num-bits>
4149 </flow-mod-add-match-from-field>
4152 <flow-mod-copy-value-into-field>
4153 <dst-ofs>0</dst-ofs>
4155 <dst-field>65540</dst-field>
4156 <flow-mod-num-bits>8</flow-mod-num-bits>
4157 </flow-mod-copy-value-into-field>
4159 <cookie>110100480</cookie>
4165 <installHw>true</installHw>
4166 <barrier>false</barrier>
4167 <strict>false</strict>
4168 <priority>61010</priority>
4169 <table_id>253</table_id>
4170 <flow-name>ACL</flow-name>
4173 Opendaylight OpenFlow Plugin: Troubleshooting
4174 ---------------------------------------------