Merge "Use OVSDB/docs for OVSDB"
[docs.git] / docs / user-guide / openflow-plugin-project-user-guide.rst
1 .. _ofp-user-guide:
2
3 OpenFlow Plugin Project User Guide
4 ==================================
5
6 Overview and Architecture
7 -------------------------
8
9 Overview and Architecture
10 ~~~~~~~~~~~~~~~~~~~~~~~~~
11
12 Overview
13 ^^^^^^^^
14
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)
26 architecture.
27
28 Scope
29 ^^^^^
30
31 -  Southbound plugin and integration of OpenFlow 1.0/1.3.x library
32    project
33
34 -  Ongoing support and integration of the OpenFlow specification
35
36 -  The plugin should be implemented in an easily extensible manner
37
38 -  Protocol verification activities will be performed on supported
39    OpenFlow specifications
40
41 Architecture and Design
42 ^^^^^^^^^^^^^^^^^^^^^^^
43
44 Functionality
45 '''''''''''''
46
47 OpenFlow 1.3 Plugin will support the following functionality
48
49 -  Connection Handling
50
51 -  Session Management
52
53 -  State Management.
54
55 -  Error Handling.
56
57 -  Mapping function(Infrastructure to OF structures).
58
59 -  Connection establishment will be handled by OpenFlow library using
60    opensource netty.io library.
61
62 -  Message handling(Ex: Packet in).
63
64 -  Event handling and propagation to upper layers.
65
66 -  Plugin will support both MD-SAL and Hard SAL.
67
68 -  Will be backward compatible with OF 1.0.
69
70 **Activities in OF plugin module**
71
72 -  New OF plugin bundle will support both OF 1.0 and OF 1.3.
73
74 -  Integration with OpenFlow library.
75
76 -  Integration with corresponding MD-SAL infrastructure.
77
78 -  Hard SAL will be supported as adapter on top of MD-SAL plugin.
79
80 -  OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
81
82 Design
83 ''''''
84
85 **Overall Architecture**
86
87 .. figure:: ./images/openflowplugin/plugin_design.jpg
88    :alt: overal architecture
89
90    overal architecture
91
92 Security
93 ''''''''
94
95 **TLS**
96
97 It is strongly recommended that any production deployments utilising
98 the OpenFlow Plugin do so with TLS encryption to protect against
99 various man-in-the-middle attacks. Please refer to the `Certificate
100 Management section of the user guide <https://docs.opendaylight.org/en/latest/user-guide/authentication-and-authorization-services.html#id4>`__
101 for more details. TLS Support in the OpenFlow Plugin is outlined on `this
102 wiki page <https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:_TLS_Support`__.
103
104 Coverage
105 ~~~~~~~~
106
107 Intro
108 ^^^^^
109
110 This page is to catalog the things that have been tested and confirmed
111 to work:
112
113 Coverage
114 ^^^^^^^^
115
116 Coverage has been moved to a `GoogleDoc
117 Spreadsheet <https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0>`__
118
119 OF 1.3 Considerations
120 ^^^^^^^^^^^^^^^^^^^^^
121
122 The baseline model is a OF 1.3 model, and the coverage tables primarily
123 deal with OF 1.3. However for OF 1.0, we have a column to indicate
124 either N/A if it doesn’t apply, or whether its been confirmed working.
125
126 OF 1.0 Considerations
127 ^^^^^^^^^^^^^^^^^^^^^
128
129 OF 1.0 is being considered as a switch with: \* 1 Table \* 0 Groups \* 0
130 Meters \* 1 Instruction (Apply Actions) \* and a limited vocabulary of
131 matches and actions.
132
133 Tutorial / How-To
134 -----------------
135
136 .. _ofp-running-new-plugin:
137
138 Running the controller with the new OpenFlow Plugin
139 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140
141 **How to start**
142
143 There are all helium features (from features-openflowplugin) duplicated
144 into features-openflowplugin-li. The duplicates got suffix *-li* and
145 provide Lithium codebase functionality.
146
147 These are most used:
148
149 -  odl-openflowplugin-app-lldp-speaker-li
150
151 -  odl-openflowplugin-flow-services-rest-li
152
153 -  odl-openflowplugin-drop-test-li
154
155 In case topology is required then the first one should be installed.
156
157 ::
158
159     feature:install odl-openflowplugin-app-lldp-speaker-li
160
161 The Li-southbound currently provides:
162
163 -  flow management
164
165 -  group management
166
167 -  meter management
168
169 -  statistics polling
170
171 **What to log**
172
173 In order to see really low level messages enter these in karaf console:
174
175 ::
176
177     log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
178     log:set TRACE org.opendaylight.openflowplugin.impl
179
180 **How enable topology**
181
182 In order for topology to work (fill dataStore/operational with links)
183 there must be LLDP responses delivered back to controller. This requires
184 table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
185 priority, empty match and one output action = send to controller. Having
186 this flow installed on every node will enable for gathering and
187 exporting links between nodes into dataStore/operational. This is done
188 if you use for example l2 switch application.
189
190 .. code:: xml
191
192     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
193     <flow xmlns="urn:opendaylight:flow:inventory">
194        <barrier>false</barrier>
195        <cookie>54</cookie>
196        <flags>SEND_FLOW_REM</flags>
197        <flow-name>FooXf54</flow-name>
198        <hard-timeout>0</hard-timeout>
199        <id>4242</id>
200        <idle-timeout>0</idle-timeout>
201        <installHw>false</installHw>
202        <instructions>
203            <instruction>
204                <apply-actions>
205                    <action>
206                        <output-action>
207                            <max-length>65535</max-length>
208                            <output-node-connector>CONTROLLER</output-node-connector>
209                        </output-action>
210                        <order>0</order>
211                    </action>
212                </apply-actions>
213                <order>0</order>
214            </instruction>
215        </instructions>
216        <match/>
217        <priority>0</priority>
218        <strict>false</strict>
219        <table_id>0</table_id>
220     </flow>
221
222 **Enable RESTCONF and Controller GUI**
223
224 If you want to use RESTCONF with openflowplugin project, you have to
225 install *odl-restconf* feature to enable that. To install *odl-restconf*
226 feature run the following command
227
228 ::
229
230     karaf#>feature:install odl-restconf
231
232 OpenFlow 1.3 Enabled Software Switches / Environment
233 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234
235 Getting Mininet with OF 1.3
236 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
237
238 `Download Mininet VM Upgraded to OF
239 1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
240 (or the `newer mininet-2.1.0 with
241 OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
242 that works with VMware Player. For using this on VirtualBox, import this
243 to VMware Player and then export the .vmdk ) or you could build one
244 yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
245 setting up Mininet with OF 1.3].
246
247 Installing under VirtualBox
248 '''''''''''''''''''''''''''
249
250 .. figure:: ./images/openflowplugin/host-only-vbox.png
251    :alt: configuring a host-only adapter
252
253    configuring a host-only adapter
254
255 For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
256 don’t actually seem to allow for connections from the host to the VM.
257 Instead, you need to configure a host-only network and set it up. Do
258 this by:
259
260 -  Go to the VM’s settings in VirtualBox then to network and add a
261    second adapter attached to "Host-only Adapter" (see the screenshot to
262    the right)
263
264 -  Edit the /etc/network/interfaces file to configure the adapter
265    properly by adding these two lines
266
267 ::
268
269     auto eth1
270     iface eth1 inet dhcp
271
272 -  Reboot the VM
273
274 At this point you should have two interfaces one which gives you NATed
275 access to the internet and another that gives you access between your
276 mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
277 address and the the host-only interface gets a 192.168.56.x address.
278
279 Your simplest choice: Use Vagrant
280 '''''''''''''''''''''''''''''''''
281
282 `Download Virtual Box <https://www.virtualbox.org/>`__ and install it
283 `Download Vagrant <http://www.vagrantup.com/>`__ and install it
284
285 ::
286
287     cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
288     vagrant up
289     vagrant ssh
290
291 This will leave you sshed into a fully provisioned Ubuntu Trusty box
292 with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
293
294 Setup CPqD Openflow 1.3 Soft Switch
295 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
296
297 Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
298 1.3 features, e.g group multipart statistics request. Alternate options
299 is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
300 features.
301
302 -  You can setup the switch as per the instructions given on the
303    following URL
304
305 `https://github.com/CPqD/ofsoftswitch13 <https://github.com/CPqD/ofsoftswitch13>`__
306
307 -  Fire following command to start the switch
308
309 Start the datapath :
310
311 ::
312
313     $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
314      e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
315
316 ethX should not be associated with ip address and ipv6 should be
317 disabled on it. If you are installing the switch on your local machine,
318 you can use following command (for Ubuntu) to create virtual interface.
319
320 ::
321
322     ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
323
324 ethX - Any existing interface.
325
326 Or if you are using mininet VM for installing this switch, you can
327 simply add one more adaptor to your VM.
328
329 Start Openflow protocol agent:
330
331 ::
332
333     $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
334      e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
335
336 Commands to add entries to various tables of the switch
337 '''''''''''''''''''''''''''''''''''''''''''''''''''''''
338
339 -  Add meter
340
341 ::
342
343     $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
344
345 -  Add Groups
346
347 ::
348
349     $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
350
351 ::
352
353     $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
354
355 -  Create queue
356
357 ::
358
359     $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
360       e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
361
362 "dpctl" --help is not very intuitive, so please keep adding any new
363 command you figured out while your experiment with the switch.
364
365 Using the built-in Wireshark
366 ''''''''''''''''''''''''''''
367
368 Mininet comes with pre-installed Wireshark, but for some reason it does
369 not include the Openflow protocol dissector. You may want to get and
370 install it in the */.wireshark/plugins/* directory.
371
372 First login to your mininet VM
373
374 ::
375
376      ssh mininet@<your mininet vm ip> -X
377
378 The -X option in ssh will enable x-session over ssh so that the
379 wireshark window can be shown on your host machine’s display. when
380 prompted, enter the password (mininet).
381
382 From the mininet vm shell, set the wireshark capture privileges
383 (http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
384
385 ::
386
387     sudo chgrp mininet /usr/bin/dumpcap
388     sudo chmod 754 /usr/bin/dumpcap
389     sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
390
391 Finally, start wireshark:
392
393 ::
394
395      wireshark
396
397 The wireshark window should show up.
398
399 To see only Openflow packets, you may want to apply the following filter
400 in the Filter window:
401
402 ::
403
404      tcp.port == 6633 and tcp.flags.push == 1
405
406 Start the capture on *any* port.
407
408 Running Mininet with OF 1.3
409 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
410
411 From within the Mininet VM, run:
412
413 ::
414
415      sudo mn --topo single,3  --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
416
417 .. _ofp-e2e-inv:
418
419 End to End Inventory
420 ~~~~~~~~~~~~~~~~~~~~
421
422 Introduction
423 ^^^^^^^^^^^^
424
425 The purpose of this page is to walk you through how to see the Inventory
426 Manager working end to end with the openflowplugin using OpenFlow 1.3.
427
428 Basically, you will learn how to:
429
430 1. Run the Base/Virtualization/Service provider Edition with the new
431    openflowplugin:
432    OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
433    the controller with the new OpenFlow Plugin]
434
435 2. Start mininet to use OF 1.3:
436    OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
437    Enabled Software Switches / Environment]
438
439 3. Use RESTCONF to see the nodes appear in inventory.
440
441 Restconf for Inventory
442 ^^^^^^^^^^^^^^^^^^^^^^
443
444 The REST url for listing all the nodes is:
445
446 ::
447
448     http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
449
450 You will need to set the Accept header:
451
452 ::
453
454     Accept: application/xml
455
456 You will also need to use HTTP Basic Auth with username: admin password:
457 admin.
458
459 Alternately, if you have a node’s id you can address it as
460
461 ::
462
463     http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
464
465 for example
466
467 ::
468
469     http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
470
471 How to hit RestConf with Postman
472 ''''''''''''''''''''''''''''''''
473
474 `Install Postman for
475 Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
476
477 In the chrome browser bar enter
478
479 ::
480
481     chrome://apps/
482
483 And click on Postman.
484
485 Enter the URL. Click on the Headers button on the far right. Enter the
486 Accept: header. Click on the Basic Auth Tab at the top and setup the
487 username and password. Send.
488
489 Known Bug
490 ^^^^^^^^^
491
492 If you have not had any switches come up, and though no children for
493 http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
494 and exception will be thrown. I’m pretty sure I know how to fix this
495 bug, just need to get to it :)
496
497 End to End Flows
498 ~~~~~~~~~~~~~~~~
499
500 Instructions
501 ^^^^^^^^^^^^
502
503 Learn End to End for Inventory
504 ''''''''''''''''''''''''''''''
505
506 See :ref:`ofp-e2e-inv`
507
508 Check inventory
509 '''''''''''''''
510
511 -  Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
512
513 -  Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
514
515 Flow Strategy
516 '''''''''''''
517
518 Current way to flush a flow to switch looks like this:
519
520 1. Create MD-SAL modeled flow and commit it into dataStore using two
521    phase commit `MD-SAL
522    FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
523
524 2. FRM gets notified and invokes corresponding rpc (addFlow) on
525    particular service provider (if suitable provider for given node
526    registered)
527
528 3. The provider (plugin in this case) transforms MD-SAL modeled flow
529    into OF-API modeled flow
530
531 4. OF-API modeled flow is then flushed into OFLibrary
532
533 5. OFLibrary encodes flow into particular version of wire protocol and
534    sends it to particular switch
535
536 6. Check on mininet side if flow is set
537
538 Push your flow
539 ''''''''''''''
540
541 -  With PostMan:
542
543    -  Set headers:
544
545       -  Content-Type: application/xml
546
547       -  Accept: application/xml
548
549       -  Authentication
550
551    -  Use URL: "http://<controller
552       IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
553
554    -  PUT
555
556    -  Use Body:
557
558 .. code:: xml
559
560     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
561     <flow xmlns="urn:opendaylight:flow:inventory">
562         <priority>2</priority>
563         <flow-name>Foo</flow-name>
564         <match>
565             <ethernet-match>
566                 <ethernet-type>
567                     <type>2048</type>
568                 </ethernet-type>
569             </ethernet-match>
570             <ipv4-destination>10.0.10.2/24</ipv4-destination>
571         </match>
572         <id>1</id>
573         <table_id>0</table_id>
574         <instructions>
575             <instruction>
576                 <order>0</order>
577                 <apply-actions>
578                     <action>
579                        <order>0</order>
580                        <dec-nw-ttl/>
581                     </action>
582                 </apply-actions>
583             </instruction>
584         </instructions>
585     </flow>
586
587 **\*Note**: If you want to try a different flow id or a different table,
588 make sure the URL and the body stay in sync. For example, if you wanted
589 to try: table 2 flow 20 you’d change the URL to:
590
591 "http://<controller
592 IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
593
594 but you would also need to update the 20 and 2 in the body of the XML.
595
596 Other caveat, we have a known bug with updates, so please only write to
597 a given flow id and table id on a given node once at this time until we
598 resolve it. Or you can use the DELETE method with the same URL in
599 PostMan to delete the flow information on switch and controller cache.
600
601 Check for your flow on the switch
602 '''''''''''''''''''''''''''''''''
603
604 -  See your flow on your mininet:
605
606 ::
607
608     mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
609     OFPST_FLOW reply (OF1.3) (xid=0x2):
610     cookie=0x0, duration=7.325s, table=0, n_packets=0, n_bytes=0, idle_timeout=300, hard_timeout=600, send_flow_rem priority=2,ip,nw_dst=10.0.10.0/24 actions=dec_ttl
611
612 If you want to see the above information from the mininet prompt - use
613 "sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
614 s1".
615
616 Check for your flow in the controller config via RESTCONF
617 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
618
619 -  See your configured flow in POSTMAN with
620
621    -  URL http://<controller IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
622
623    -  GET
624
625    -  You no longer need to set Accept header
626
627 Return Response:
628
629 .. code:: json
630
631     {
632       "flow-node-inventory:table": [
633         {
634           "flow-node-inventory:id": 0,
635           "flow-node-inventory:flow": [
636             {
637               "flow-node-inventory:priority": 1,
638               "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
639               "flow-node-inventory:table_id": 0,
640               "flow-node-inventory:hard-timeout": 0,
641               "flow-node-inventory:idle-timeout": 0,
642               "flow-node-inventory:instructions": {
643                 "flow-node-inventory:instruction": [
644                   {
645                     "flow-node-inventory:apply-actions": {
646                       "flow-node-inventory:action": [
647                         {
648                           "flow-node-inventory:output-action": {
649                             "flow-node-inventory:output-node-connector": "openflow:1:1"
650                           },
651                           "flow-node-inventory:order": 0
652                         }
653                       ]
654                     },
655                     "flow-node-inventory:order": 0
656                   }
657                 ]
658               },
659               "flow-node-inventory:match": {
660                 "flow-node-inventory:ethernet-match": {
661                   "flow-node-inventory:ethernet-type": {
662                     "flow-node-inventory:type": 2048
663                   }
664                 },
665                 "flow-node-inventory:ipv4-destination": "10.0.0.2"
666               },
667               "flow-node-inventory:cookie": 0
668             },
669             {
670               "flow-node-inventory:priority": 1,
671               "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
672               "flow-node-inventory:table_id": 0,
673               "flow-node-inventory:hard-timeout": 0,
674               "flow-node-inventory:idle-timeout": 0,
675               "flow-node-inventory:instructions": {
676                 "flow-node-inventory:instruction": [
677                   {
678                     "flow-node-inventory:apply-actions": {
679                       "flow-node-inventory:action": [
680                         {
681                           "flow-node-inventory:output-action": {
682                             "flow-node-inventory:output-node-connector": "openflow:1:1"
683                           },
684                           "flow-node-inventory:order": 0
685                         }
686                       ]
687                     },
688                     "flow-node-inventory:order": 0
689                   }
690                 ]
691               },
692               "flow-node-inventory:match": {
693                 "flow-node-inventory:ethernet-match": {
694                   "flow-node-inventory:ethernet-type": {
695                     "flow-node-inventory:type": 2048
696                   }
697                 },
698                 "flow-node-inventory:ipv4-destination": "10.0.0.1"
699               },
700               "flow-node-inventory:cookie": 0
701             },
702             {
703               "flow-node-inventory:priority": 1,
704               "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
705               "flow-node-inventory:table_id": 0,
706               "flow-node-inventory:hard-timeout": 0,
707               "flow-node-inventory:idle-timeout": 0,
708               "flow-node-inventory:instructions": {
709                 "flow-node-inventory:instruction": [
710                   {
711                     "flow-node-inventory:apply-actions": {
712                       "flow-node-inventory:action": [
713                         {
714                           "flow-node-inventory:output-action": {
715                             "flow-node-inventory:output-node-connector": "openflow:1:1"
716                           },
717                           "flow-node-inventory:order": 0
718                         }
719                       ]
720                     },
721                     "flow-node-inventory:order": 0
722                   }
723                 ]
724               },
725               "flow-node-inventory:match": {
726                 "flow-node-inventory:ethernet-match": {
727                   "flow-node-inventory:ethernet-type": {
728                     "flow-node-inventory:type": 2048
729                   }
730                 },
731                 "flow-node-inventory:ipv4-destination": "10.0.0.3"
732               },
733               "flow-node-inventory:cookie": 0
734             },
735             {
736               "flow-node-inventory:priority": 1,
737               "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
738               "flow-node-inventory:table_id": 0,
739               "flow-node-inventory:hard-timeout": 0,
740               "flow-node-inventory:idle-timeout": 0,
741               "flow-node-inventory:instructions": {
742                 "flow-node-inventory:instruction": [
743                   {
744                     "flow-node-inventory:apply-actions": {
745                       "flow-node-inventory:action": [
746                         {
747                           "flow-node-inventory:output-action": {
748                             "flow-node-inventory:output-node-connector": "openflow:1:1"
749                           },
750                           "flow-node-inventory:order": 0
751                         }
752                       ]
753                     },
754                     "flow-node-inventory:order": 0
755                   }
756                 ]
757               },
758               "flow-node-inventory:match": {
759                 "flow-node-inventory:ethernet-match": {
760                   "flow-node-inventory:ethernet-type": {
761                     "flow-node-inventory:type": 2048
762                   }
763                 },
764                 "flow-node-inventory:ipv4-destination": "10.0.0.4"
765               },
766               "flow-node-inventory:cookie": 0
767             },
768             {
769               "flow-node-inventory:priority": 1,
770               "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
771               "flow-node-inventory:table_id": 0,
772               "flow-node-inventory:hard-timeout": 0,
773               "flow-node-inventory:idle-timeout": 0,
774               "flow-node-inventory:instructions": {
775                 "flow-node-inventory:instruction": [
776                   {
777                     "flow-node-inventory:apply-actions": {
778                       "flow-node-inventory:action": [
779                         {
780                           "flow-node-inventory:output-action": {
781                             "flow-node-inventory:output-node-connector": "openflow:1:2"
782                           },
783                           "flow-node-inventory:order": 0
784                         }
785                       ]
786                     },
787                     "flow-node-inventory:order": 0
788                   }
789                 ]
790               },
791               "flow-node-inventory:match": {
792                 "flow-node-inventory:ethernet-match": {
793                   "flow-node-inventory:ethernet-type": {
794                     "flow-node-inventory:type": 2048
795                   }
796                 },
797                 "flow-node-inventory:ipv4-destination": "10.0.0.5"
798               },
799               "flow-node-inventory:cookie": 0
800             },
801             {
802               "flow-node-inventory:priority": 1,
803               "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
804               "flow-node-inventory:table_id": 0,
805               "flow-node-inventory:hard-timeout": 0,
806               "flow-node-inventory:idle-timeout": 0,
807               "flow-node-inventory:instructions": {
808                 "flow-node-inventory:instruction": [
809                   {
810                     "flow-node-inventory:apply-actions": {
811                       "flow-node-inventory:action": [
812                         {
813                           "flow-node-inventory:output-action": {
814                             "flow-node-inventory:output-node-connector": "openflow:1:2"
815                           },
816                           "flow-node-inventory:order": 0
817                         }
818                       ]
819                     },
820                     "flow-node-inventory:order": 0
821                   }
822                 ]
823               },
824               "flow-node-inventory:match": {
825                 "flow-node-inventory:ethernet-match": {
826                   "flow-node-inventory:ethernet-type": {
827                     "flow-node-inventory:type": 2048
828                   }
829                 },
830                 "flow-node-inventory:ipv4-destination": "10.0.0.8"
831               },
832               "flow-node-inventory:cookie": 0
833             },
834             {
835               "flow-node-inventory:priority": 1,
836               "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
837               "flow-node-inventory:table_id": 0,
838               "flow-node-inventory:hard-timeout": 0,
839               "flow-node-inventory:idle-timeout": 0,
840               "flow-node-inventory:instructions": {
841                 "flow-node-inventory:instruction": [
842                   {
843                     "flow-node-inventory:apply-actions": {
844                       "flow-node-inventory:action": [
845                         {
846                           "flow-node-inventory:output-action": {
847                             "flow-node-inventory:output-node-connector": "openflow:1:2"
848                           },
849                           "flow-node-inventory:order": 0
850                         }
851                       ]
852                     },
853                     "flow-node-inventory:order": 0
854                   }
855                 ]
856               },
857               "flow-node-inventory:match": {
858                 "flow-node-inventory:ethernet-match": {
859                   "flow-node-inventory:ethernet-type": {
860                     "flow-node-inventory:type": 2048
861                   }
862                 },
863                 "flow-node-inventory:ipv4-destination": "10.0.0.6"
864               },
865               "flow-node-inventory:cookie": 0
866             },
867             {
868               "flow-node-inventory:priority": 1,
869               "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
870               "flow-node-inventory:table_id": 0,
871               "flow-node-inventory:hard-timeout": 0,
872               "flow-node-inventory:idle-timeout": 0,
873               "flow-node-inventory:instructions": {
874                 "flow-node-inventory:instruction": [
875                   {
876                     "flow-node-inventory:apply-actions": {
877                       "flow-node-inventory:action": [
878                         {
879                           "flow-node-inventory:output-action": {
880                             "flow-node-inventory:output-node-connector": "openflow:1:2"
881                           },
882                           "flow-node-inventory:order": 0
883                         }
884                       ]
885                     },
886                     "flow-node-inventory:order": 0
887                   }
888                 ]
889               },
890               "flow-node-inventory:match": {
891                 "flow-node-inventory:ethernet-match": {
892                   "flow-node-inventory:ethernet-type": {
893                     "flow-node-inventory:type": 2048
894                   }
895                 },
896                 "flow-node-inventory:ipv4-destination": "10.0.0.7"
897               },
898               "flow-node-inventory:cookie": 0
899             }
900           ]
901         }
902       ]
903     }
904
905 Look for your flow stats in the controller operational data via
906 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
907
908 RESTCONF
909
910 -  See your operational flow stats in POSTMAN with
911
912    -  URL "http://<controller
913       IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
914
915    -  GET
916
917 Return Response:
918
919 .. code:: json
920
921     {
922       "flow-node-inventory:table": [
923         {
924           "flow-node-inventory:id": 0,
925           "flow-node-inventory:flow": [
926             {
927               "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
928               "opendaylight-flow-statistics:flow-statistics": {
929                 "opendaylight-flow-statistics:cookie": 0,
930                 "opendaylight-flow-statistics:duration": {
931                   "opendaylight-flow-statistics:nanosecond": 886000000,
932                   "opendaylight-flow-statistics:second": 2707
933                 },
934                 "opendaylight-flow-statistics:hard-timeout": 0,
935                 "opendaylight-flow-statistics:byte-count": 784,
936                 "opendaylight-flow-statistics:match": {
937                   "opendaylight-flow-statistics:ethernet-match": {
938                     "opendaylight-flow-statistics:ethernet-type": {
939                       "opendaylight-flow-statistics:type": 2048
940                     }
941                   },
942                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
943                 },
944                 "opendaylight-flow-statistics:priority": 1,
945                 "opendaylight-flow-statistics:packet-count": 8,
946                 "opendaylight-flow-statistics:table_id": 0,
947                 "opendaylight-flow-statistics:idle-timeout": 0,
948                 "opendaylight-flow-statistics:instructions": {
949                   "opendaylight-flow-statistics:instruction": [
950                     {
951                       "opendaylight-flow-statistics:order": 0,
952                       "opendaylight-flow-statistics:apply-actions": {
953                         "opendaylight-flow-statistics:action": [
954                           {
955                             "opendaylight-flow-statistics:order": 0,
956                             "opendaylight-flow-statistics:output-action": {
957                               "opendaylight-flow-statistics:output-node-connector": "1",
958                               "opendaylight-flow-statistics:max-length": 0
959                             }
960                           }
961                         ]
962                       }
963                     }
964                   ]
965                 }
966               }
967             },
968             {
969               "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
970               "opendaylight-flow-statistics:flow-statistics": {
971                 "opendaylight-flow-statistics:cookie": 0,
972                 "opendaylight-flow-statistics:duration": {
973                   "opendaylight-flow-statistics:nanosecond": 826000000,
974                   "opendaylight-flow-statistics:second": 2711
975                 },
976                 "opendaylight-flow-statistics:hard-timeout": 0,
977                 "opendaylight-flow-statistics:byte-count": 1568,
978                 "opendaylight-flow-statistics:match": {
979                   "opendaylight-flow-statistics:ethernet-match": {
980                     "opendaylight-flow-statistics:ethernet-type": {
981                       "opendaylight-flow-statistics:type": 2048
982                     }
983                   },
984                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
985                 },
986                 "opendaylight-flow-statistics:priority": 1,
987                 "opendaylight-flow-statistics:packet-count": 16,
988                 "opendaylight-flow-statistics:table_id": 0,
989                 "opendaylight-flow-statistics:idle-timeout": 0,
990                 "opendaylight-flow-statistics:instructions": {
991                   "opendaylight-flow-statistics:instruction": [
992                     {
993                       "opendaylight-flow-statistics:order": 0,
994                       "opendaylight-flow-statistics:apply-actions": {
995                         "opendaylight-flow-statistics:action": [
996                           {
997                             "opendaylight-flow-statistics:order": 0,
998                             "opendaylight-flow-statistics:output-action": {
999                               "opendaylight-flow-statistics:output-node-connector": "1",
1000                               "opendaylight-flow-statistics:max-length": 0
1001                             }
1002                           }
1003                         ]
1004                       }
1005                     }
1006                   ]
1007                 }
1008               }
1009             },
1010             {
1011               "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
1012               "opendaylight-flow-statistics:flow-statistics": {
1013                 "opendaylight-flow-statistics:cookie": 0,
1014                 "opendaylight-flow-statistics:duration": {
1015                   "opendaylight-flow-statistics:nanosecond": 548000000,
1016                   "opendaylight-flow-statistics:second": 2708
1017                 },
1018                 "opendaylight-flow-statistics:hard-timeout": 0,
1019                 "opendaylight-flow-statistics:byte-count": 784,
1020                 "opendaylight-flow-statistics:match": {
1021                   "opendaylight-flow-statistics:ethernet-match": {
1022                     "opendaylight-flow-statistics:ethernet-type": {
1023                       "opendaylight-flow-statistics:type": 2048
1024                     }
1025                   },
1026                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
1027                 },
1028                 "opendaylight-flow-statistics:priority": 1,
1029                 "opendaylight-flow-statistics:packet-count": 8,
1030                 "opendaylight-flow-statistics:table_id": 0,
1031                 "opendaylight-flow-statistics:idle-timeout": 0,
1032                 "opendaylight-flow-statistics:instructions": {
1033                   "opendaylight-flow-statistics:instruction": [
1034                     {
1035                       "opendaylight-flow-statistics:order": 0,
1036                       "opendaylight-flow-statistics:apply-actions": {
1037                         "opendaylight-flow-statistics:action": [
1038                           {
1039                             "opendaylight-flow-statistics:order": 0,
1040                             "opendaylight-flow-statistics:output-action": {
1041                               "opendaylight-flow-statistics:output-node-connector": "1",
1042                               "opendaylight-flow-statistics:max-length": 0
1043                             }
1044                           }
1045                         ]
1046                       }
1047                     }
1048                   ]
1049                 }
1050               }
1051             },
1052             {
1053               "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
1054               "opendaylight-flow-statistics:flow-statistics": {
1055                 "opendaylight-flow-statistics:cookie": 0,
1056                 "opendaylight-flow-statistics:duration": {
1057                   "opendaylight-flow-statistics:nanosecond": 296000000,
1058                   "opendaylight-flow-statistics:second": 2710
1059                 },
1060                 "opendaylight-flow-statistics:hard-timeout": 0,
1061                 "opendaylight-flow-statistics:byte-count": 1274,
1062                 "opendaylight-flow-statistics:match": {
1063                   "opendaylight-flow-statistics:ethernet-match": {
1064                     "opendaylight-flow-statistics:ethernet-type": {
1065                       "opendaylight-flow-statistics:type": 2048
1066                     }
1067                   },
1068                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
1069                 },
1070                 "opendaylight-flow-statistics:priority": 1,
1071                 "opendaylight-flow-statistics:packet-count": 13,
1072                 "opendaylight-flow-statistics:table_id": 0,
1073                 "opendaylight-flow-statistics:idle-timeout": 0,
1074                 "opendaylight-flow-statistics:instructions": {
1075                   "opendaylight-flow-statistics:instruction": [
1076                     {
1077                       "opendaylight-flow-statistics:order": 0,
1078                       "opendaylight-flow-statistics:apply-actions": {
1079                         "opendaylight-flow-statistics:action": [
1080                           {
1081                             "opendaylight-flow-statistics:order": 0,
1082                             "opendaylight-flow-statistics:output-action": {
1083                               "opendaylight-flow-statistics:output-node-connector": "1",
1084                               "opendaylight-flow-statistics:max-length": 0
1085                             }
1086                           }
1087                         ]
1088                       }
1089                     }
1090                   ]
1091                 }
1092               }
1093             },
1094             {
1095               "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
1096               "opendaylight-flow-statistics:flow-statistics": {
1097                 "opendaylight-flow-statistics:cookie": 0,
1098                 "opendaylight-flow-statistics:duration": {
1099                   "opendaylight-flow-statistics:nanosecond": 392000000,
1100                   "opendaylight-flow-statistics:second": 2711
1101                 },
1102                 "opendaylight-flow-statistics:hard-timeout": 0,
1103                 "opendaylight-flow-statistics:byte-count": 1470,
1104                 "opendaylight-flow-statistics:match": {
1105                   "opendaylight-flow-statistics:ethernet-match": {
1106                     "opendaylight-flow-statistics:ethernet-type": {
1107                       "opendaylight-flow-statistics:type": 2048
1108                     }
1109                   },
1110                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
1111                 },
1112                 "opendaylight-flow-statistics:priority": 1,
1113                 "opendaylight-flow-statistics:packet-count": 15,
1114                 "opendaylight-flow-statistics:table_id": 0,
1115                 "opendaylight-flow-statistics:idle-timeout": 0,
1116                 "opendaylight-flow-statistics:instructions": {
1117                   "opendaylight-flow-statistics:instruction": [
1118                     {
1119                       "opendaylight-flow-statistics:order": 0,
1120                       "opendaylight-flow-statistics:apply-actions": {
1121                         "opendaylight-flow-statistics:action": [
1122                           {
1123                             "opendaylight-flow-statistics:order": 0,
1124                             "opendaylight-flow-statistics:output-action": {
1125                               "opendaylight-flow-statistics:output-node-connector": "2",
1126                               "opendaylight-flow-statistics:max-length": 0
1127                             }
1128                           }
1129                         ]
1130                       }
1131                     }
1132                   ]
1133                 }
1134               }
1135             },
1136             {
1137               "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
1138               "opendaylight-flow-statistics:flow-statistics": {
1139                 "opendaylight-flow-statistics:cookie": 0,
1140                 "opendaylight-flow-statistics:duration": {
1141                   "opendaylight-flow-statistics:nanosecond": 344000000,
1142                   "opendaylight-flow-statistics:second": 2707
1143                 },
1144                 "opendaylight-flow-statistics:hard-timeout": 0,
1145                 "opendaylight-flow-statistics:byte-count": 784,
1146                 "opendaylight-flow-statistics:match": {
1147                   "opendaylight-flow-statistics:ethernet-match": {
1148                     "opendaylight-flow-statistics:ethernet-type": {
1149                       "opendaylight-flow-statistics:type": 2048
1150                     }
1151                   },
1152                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
1153                 },
1154                 "opendaylight-flow-statistics:priority": 1,
1155                 "opendaylight-flow-statistics:packet-count": 8,
1156                 "opendaylight-flow-statistics:table_id": 0,
1157                 "opendaylight-flow-statistics:idle-timeout": 0,
1158                 "opendaylight-flow-statistics:instructions": {
1159                   "opendaylight-flow-statistics:instruction": [
1160                     {
1161                       "opendaylight-flow-statistics:order": 0,
1162                       "opendaylight-flow-statistics:apply-actions": {
1163                         "opendaylight-flow-statistics:action": [
1164                           {
1165                             "opendaylight-flow-statistics:order": 0,
1166                             "opendaylight-flow-statistics:output-action": {
1167                               "opendaylight-flow-statistics:output-node-connector": "2",
1168                               "opendaylight-flow-statistics:max-length": 0
1169                             }
1170                           }
1171                         ]
1172                       }
1173                     }
1174                   ]
1175                 }
1176               }
1177             },
1178             {
1179               "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
1180               "opendaylight-flow-statistics:flow-statistics": {
1181                 "opendaylight-flow-statistics:cookie": 0,
1182                 "opendaylight-flow-statistics:duration": {
1183                   "opendaylight-flow-statistics:nanosecond": 577000000,
1184                   "opendaylight-flow-statistics:second": 2706
1185                 },
1186                 "opendaylight-flow-statistics:hard-timeout": 0,
1187                 "opendaylight-flow-statistics:byte-count": 784,
1188                 "opendaylight-flow-statistics:match": {
1189                   "opendaylight-flow-statistics:ethernet-match": {
1190                     "opendaylight-flow-statistics:ethernet-type": {
1191                       "opendaylight-flow-statistics:type": 2048
1192                     }
1193                   },
1194                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
1195                 },
1196                 "opendaylight-flow-statistics:priority": 1,
1197                 "opendaylight-flow-statistics:packet-count": 8,
1198                 "opendaylight-flow-statistics:table_id": 0,
1199                 "opendaylight-flow-statistics:idle-timeout": 0,
1200                 "opendaylight-flow-statistics:instructions": {
1201                   "opendaylight-flow-statistics:instruction": [
1202                     {
1203                       "opendaylight-flow-statistics:order": 0,
1204                       "opendaylight-flow-statistics:apply-actions": {
1205                         "opendaylight-flow-statistics:action": [
1206                           {
1207                             "opendaylight-flow-statistics:order": 0,
1208                             "opendaylight-flow-statistics:output-action": {
1209                               "opendaylight-flow-statistics:output-node-connector": "2",
1210                               "opendaylight-flow-statistics:max-length": 0
1211                             }
1212                           }
1213                         ]
1214                       }
1215                     }
1216                   ]
1217                 }
1218               }
1219             },
1220             {
1221               "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
1222               "opendaylight-flow-statistics:flow-statistics": {
1223                 "opendaylight-flow-statistics:cookie": 0,
1224                 "opendaylight-flow-statistics:duration": {
1225                   "opendaylight-flow-statistics:nanosecond": 659000000,
1226                   "opendaylight-flow-statistics:second": 2705
1227                 },
1228                 "opendaylight-flow-statistics:hard-timeout": 0,
1229                 "opendaylight-flow-statistics:byte-count": 784,
1230                 "opendaylight-flow-statistics:match": {
1231                   "opendaylight-flow-statistics:ethernet-match": {
1232                     "opendaylight-flow-statistics:ethernet-type": {
1233                       "opendaylight-flow-statistics:type": 2048
1234                     }
1235                   },
1236                   "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
1237                 },
1238                 "opendaylight-flow-statistics:priority": 1,
1239                 "opendaylight-flow-statistics:packet-count": 8,
1240                 "opendaylight-flow-statistics:table_id": 0,
1241                 "opendaylight-flow-statistics:idle-timeout": 0,
1242                 "opendaylight-flow-statistics:instructions": {
1243                   "opendaylight-flow-statistics:instruction": [
1244                     {
1245                       "opendaylight-flow-statistics:order": 0,
1246                       "opendaylight-flow-statistics:apply-actions": {
1247                         "opendaylight-flow-statistics:action": [
1248                           {
1249                             "opendaylight-flow-statistics:order": 0,
1250                             "opendaylight-flow-statistics:output-action": {
1251                               "opendaylight-flow-statistics:output-node-connector": "2",
1252                               "opendaylight-flow-statistics:max-length": 0
1253                             }
1254                           }
1255                         ]
1256                       }
1257                     }
1258                   ]
1259                 }
1260               }
1261             }
1262           ],
1263           "opendaylight-flow-table-statistics:flow-table-statistics": {
1264             "opendaylight-flow-table-statistics:active-flows": 8,
1265             "opendaylight-flow-table-statistics:packets-matched": 97683,
1266             "opendaylight-flow-table-statistics:packets-looked-up": 101772
1267           }
1268         }
1269       ]
1270     }
1271
1272 Discovering and testing new Flow Types
1273 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1274
1275 Currently, the openflowplugin has a test-provider that allows you to
1276 push various flows through the system from the OSGI command line. Once
1277 those flows have been pushed through, you can see them as examples and
1278 then use them to see in the config what a particular flow example looks
1279 like.
1280
1281 Using addMDFlow
1282 '''''''''''''''
1283
1284 From the
1285
1286 ::
1287
1288     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1289     ./run.sh
1290
1291 Point your mininet at the controller as described above.
1292
1293 once you can see your node (probably openflow:1 if you’ve been following
1294 along) in the inventory, at the OSGI command line try running:
1295
1296 ::
1297
1298     addMDFlow openflow:1 f#
1299
1300 Where # is a number between 1 and 80. This will create one of 80
1301 possible flows. You can go confirm they were created on the switch.
1302
1303 Once you’ve done that, use
1304
1305 -  GET
1306
1307 -  Accept: application/xml
1308
1309 -  URL:
1310    "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
1311
1312 To see a full listing of the flows in table 2 (where they will be put).
1313 If you want to see a particular flow, look at
1314
1315 -  URL:
1316    "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
1317
1318 Where # is 123 + the f# you used. So for example, for f22, your url
1319 would be
1320
1321 -  URL:
1322    "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
1323
1324 Note: You may have to trim out some of the sections like that contain
1325 bitfields and binary types that are not correctly modeled.
1326
1327 Note: Before attempting to PUT a flow you have created via addMDFlow,
1328 please change its URL and body to, for example, use table 1 instead of
1329 table 2 or another Flow Id, so you don’t collide.
1330
1331 Note: There are several test command providers and the one handling
1332 flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
1333 use as **commands in OSGI-console** have prefix *\_*.
1334
1335 Example Flows
1336 ^^^^^^^^^^^^^
1337
1338 Examples for XML for various flow matches, instructions & actions can be
1339 found in following section :ref:`here <ofp-example-flows>`.
1340
1341 End to End Topology
1342 ~~~~~~~~~~~~~~~~~~~
1343
1344 Introduction
1345 ^^^^^^^^^^^^
1346
1347 The purpose of this page is to walk you through how to see the Topology
1348 Manager working end to end with the openflowplugin using OpenFlow 1.3.
1349
1350 Basically, you will learn how to:
1351
1352 1. Run the Base/Virtualization/Service provider Edition with the new
1353    openflowplugin: :ref:`Running the controller with the new OpenFlow
1354    Plugin <ofp-running-new-plugin>`
1355
1356 2. Start mininet to use OF 1.3: :ref:`OpenFlow 1.3 Enabled Software Switches
1357    / Environment <ofp-test-environment>`
1358
1359 3. Use RESTCONF to see the topology information.
1360
1361 Restconf for Topology
1362 ^^^^^^^^^^^^^^^^^^^^^
1363
1364 The REST url for listing all the nodes is:
1365
1366 ::
1367
1368     http://localhost:8080/restconf/operational/network-topology:network-topology/
1369
1370 You will need to set the Accept header:
1371
1372 ::
1373
1374     Accept: application/xml
1375
1376 You will also need to use HTTP Basic Auth with username: admin password:
1377 admin.
1378
1379 Alternately, if you have a node’s id you can address it as
1380
1381 ::
1382
1383     http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
1384
1385 for example
1386
1387 ::
1388
1389     http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
1390
1391 How to hit RestConf with Postman
1392 ''''''''''''''''''''''''''''''''
1393
1394 Install
1395 `postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
1396 for Chrome
1397
1398 In the chrome browser bar enter
1399
1400 ::
1401
1402     chrome://apps/
1403
1404 And click on Postman.
1405
1406 Enter the URL. Click on the Headers button on the far right. Enter the
1407 Accept: header. Click on the Basic Auth Tab at the top and setup the
1408 username and password. Send.
1409
1410 End to End Groups
1411 ~~~~~~~~~~~~~~~~~
1412
1413 NOTE
1414 ^^^^
1415
1416 Groups are NOT SUPPORTED in current (2.0.0) version of
1417 `openvswitch <http://www.openvswitch.org/download>`__. See
1418
1419 -  http://openvswitch.org/releases/NEWS-2.0.0
1420
1421 -  http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
1422
1423 For testing group feature please use for example
1424 CPQD virtual switch in the :ref:`ofp-e2e-inv` section.
1425
1426 Instructions
1427 ^^^^^^^^^^^^
1428
1429 Learn End to End for Inventory
1430 ''''''''''''''''''''''''''''''
1431
1432 :ref:`ofp-e2e-inv`
1433
1434 Check inventory
1435 '''''''''''''''
1436
1437 Run CPqD with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1438
1439 Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1440
1441 Group Strategy
1442 ''''''''''''''
1443
1444 Current way to flush a group to switch looks like this:
1445
1446 1. create MD-SAL modeled group and commit it into dataStore using two
1447    phase commit
1448
1449 2. FRM gets notified and invokes corresponding rpc (addGroup) on
1450    particular service provider (if suitable provider for given node
1451    registered)
1452
1453 3. the provider (plugin in this case) transforms MD-SAL modeled group
1454    into OF-API modeled group
1455
1456 4. OF-API modeled group is then flushed into OFLibrary
1457
1458 5. OFLibrary encodes group into particular version of wire protocol and
1459    sends it to particular switch
1460
1461 6. check on CPqD if group is installed
1462
1463 Push your Group
1464 '''''''''''''''
1465
1466 -  With PostMan:
1467
1468    -  Set
1469
1470       -  Content-Type: application/xml
1471
1472       -  Accept: application/xml
1473
1474    -  Use URL:
1475       "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1476
1477    -  PUT
1478
1479    -  Use Body:
1480
1481 .. code:: xml
1482
1483     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1484     <group xmlns="urn:opendaylight:flow:inventory">
1485         <group-type>group-all</group-type>
1486         <buckets>
1487             <bucket>
1488                 <action>
1489                     <pop-vlan-action/>
1490                     <order>0</order>
1491                 </action>
1492                 <bucket-id>12</bucket-id>
1493                 <watch_group>14</watch_group>
1494                 <watch_port>1234</watch_port>
1495             </bucket>
1496             <bucket>
1497                 <action>
1498                     <set-field>
1499                         <ipv4-source>100.1.1.1</ipv4-source>
1500                     </set-field>
1501                     <order>0</order>
1502                 </action>
1503                 <action>
1504                     <set-field>
1505                         <ipv4-destination>200.71.9.5210</ipv4-destination>
1506                     </set-field>
1507                     <order>1</order>
1508                 </action>
1509                 <bucket-id>13</bucket-id>
1510                 <watch_group>14</watch_group>
1511                 <watch_port>1234</watch_port>
1512             </bucket>
1513         </buckets>
1514         <barrier>false</barrier>
1515         <group-name>Foo</group-name>
1516         <group-id>1</group-id>
1517     </group>
1518
1519 .. note::
1520
1521     If you want to try a different group id, make sure the URL and the
1522     body stay in sync. For example, if you wanted to try: group-id 20
1523     you’d change the URL to
1524     "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
1525     but you would also need to update the <group-id>20</group-id> in the
1526     body to match.
1527
1528 .. note::
1529
1530     <ip-address> :Provide the IP Address of the machine on which the
1531     controller is running.
1532
1533 Check for your group on the switch
1534 ''''''''''''''''''''''''''''''''''
1535
1536 -  See your group on your cpqd switch:
1537
1538 ::
1539
1540     COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
1541
1542     SENDING:
1543     stat_req{type="grp", flags="0x0", group="all"}
1544
1545
1546     RECEIVED:
1547     stat_repl{type="grp", flags="0x0", stats=[
1548     {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
1549
1550 Check for your group in the controller config via RESTCONF
1551 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1552
1553 -  See your configured group in POSTMAN with
1554
1555    -  URL
1556       http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
1557
1558    -  GET
1559
1560    -  You should no longer need to set Accept
1561
1562    -  Note: <ip-address> :Provide the IP Address of the machine on which
1563       the controller is running.
1564
1565 Look for your group stats in the controller operational data via RESTCONF
1566 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1567
1568 -  See your operational group stats in POSTMAN with
1569
1570    -  URL
1571       http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
1572
1573    -  GET
1574
1575    -  Note: <ip-address> :Provide the IP Address of the machine on which
1576       the controller is running.
1577
1578 Discovering and testing Group Types
1579 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1580
1581 Currently, the openflowplugin has a test-provider that allows you to
1582 push various groups through the system from the OSGI command line. Once
1583 those groups have been pushed through, you can see them as examples and
1584 then use them to see in the config what a particular group example looks
1585 like.
1586
1587 Using addGroup
1588 ^^^^^^^^^^^^^^
1589
1590 From the
1591
1592 ::
1593
1594     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1595     ./run.sh
1596
1597 Point your CPqD at the controller as described above.
1598
1599 once you can see your node (probably openflow:1 if you’ve been following
1600 along) in the inventory, at the OSGI command line try running:
1601
1602 ::
1603
1604     addGroup openflow:1
1605
1606 This will install a group in the switch. You can check whether the group
1607 is installed or not.
1608
1609 Once you’ve done that, use
1610
1611 -  GET
1612
1613 -  Accept: application/xml
1614
1615 -  URL:
1616    "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
1617
1618    -  Note: <ip-address> :Provide the IP Address of the machine on which
1619       the controller is running.
1620
1621 .. note::
1622
1623     Before attempting to PUT a group you have created via addGroup,
1624     please change its URL and body to, for example, use group 1 instead
1625     of group 2 or another Group Id, so that they don’t collide.
1626
1627 .. note::
1628
1629     There are several test command providers and the one handling groups
1630     is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
1631     as commands in OSGI-console have prefix *\_*.
1632
1633 Example Group
1634 ^^^^^^^^^^^^^
1635
1636 Examples for XML for various Group Types can be found in the
1637 test-scripts bundle of the plugin code with names g1.xml, g2.xml and
1638 g3.xml.
1639
1640 End to End Meters
1641 ~~~~~~~~~~~~~~~~~
1642
1643 Instructions
1644 ^^^^^^^^^^^^
1645
1646 Learn End to End for Inventory
1647 ''''''''''''''''''''''''''''''
1648
1649 -  :ref:`ofp-e2e-inv`
1650
1651 Check inventory
1652 '''''''''''''''
1653
1654 -  Run mininet with support for OF 1.3 as described in :ref:`ofp-e2e-inv`
1655
1656 -  Make sure you see the openflow:1 node come up as described in :ref:`ofp-e2e-inv`
1657
1658 Meter Strategy
1659 ''''''''''''''
1660
1661 Current way to flush a meter to switch looks like this:
1662
1663 1. create MD-SAL modeled flow and commit it into dataStore using two
1664    phase commit
1665
1666 2. FRM gets notified and invokes corresponding rpc (addMeter) on
1667    particular service provider (if suitable provider for given node
1668    registered)
1669
1670 3. the provider (plugin in this case) transforms MD-SAL modeled meter
1671    into OF-API modeled meter
1672
1673 4. OF-API modeled meter is then flushed into OFLibrary
1674
1675 5. OFLibrary encodes meter into particular version of wire protocol and
1676    sends it to particular switch
1677
1678 6. check on mininet side if meter is installed
1679
1680 Push your Meter
1681 '''''''''''''''
1682
1683 -  Using PostMan:
1684
1685    -  Set Request Headers
1686
1687       -  Content-Type: application/xml
1688
1689       -  Accept: application/xml
1690
1691    -  Use URL:
1692       "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1693
1694    -  Method:PUT
1695
1696    -  Request Body:
1697
1698 .. code:: xml
1699
1700     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1701     <meter xmlns="urn:opendaylight:flow:inventory">
1702         <container-name>abcd</container-name>
1703         <flags>meter-burst</flags>
1704         <meter-band-headers>
1705             <meter-band-header>
1706                 <band-burst-size>444</band-burst-size>
1707                 <band-id>0</band-id>
1708                 <band-rate>234</band-rate>
1709                 <dscp-remark-burst-size>5</dscp-remark-burst-size>
1710                 <dscp-remark-rate>12</dscp-remark-rate>
1711                 <prec_level>1</prec_level>
1712                 <meter-band-types>
1713                     <flags>ofpmbt-dscp-remark</flags>
1714                 </meter-band-types>
1715             </meter-band-header>
1716         </meter-band-headers>
1717         <meter-id>1</meter-id>
1718         <meter-name>Foo</meter-name>
1719     </meter>
1720
1721 .. note::
1722
1723     If you want to try a different meter id, make sure the URL and the
1724     body stay in sync. For example, if you wanted to try: meter-id 20
1725     you’d change the URL to
1726     "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
1727     but you would also need to update the 20 in the body to match.
1728
1729 .. note::
1730
1731     :Provide the IP Address of the machine on which the controller is
1732     running.
1733
1734 Check for your meter on the switch
1735 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1736
1737 -  See your meter on your CPqD switch:
1738
1739 ::
1740
1741     COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
1742
1743     SENDING:
1744     stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
1745
1746
1747     RECEIVED:
1748     stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
1749
1750 Check for your meter in the controller config via RESTCONF
1751 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1752
1753 -  See your configured flow in POSTMAN with
1754
1755    -  URL
1756       "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1757
1758    -  Method: GET
1759
1760    -  You should no longer need to set Request Headers for Accept
1761
1762    -  Note: :Provide the IP Address of the machine on which the
1763       controller is running.
1764
1765 Look for your meter stats in the controller operational data via RESTCONF
1766 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1767
1768 -  See your operational meter stats in POSTMAN with
1769
1770    -  URL
1771       "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
1772
1773    -  Method: GET
1774
1775    -  Note: :Provide the IP Address of the machine on which the
1776       controller is running.
1777
1778 Discovering and testing Meter Types
1779 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1780
1781 Currently, the openflowplugin has a test-provider that allows you to
1782 push various meters through the system from the OSGI command line. Once
1783 those meters have been pushed through, you can see them as examples and
1784 then use them to see in the config what a particular meter example looks
1785 like.
1786
1787 Using addMeter
1788 ''''''''''''''
1789
1790 From the
1791
1792 ::
1793
1794     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
1795     ./run.sh
1796
1797 Point your CPqD at the controller as described above.
1798
1799 Once you can see your CPqD connected to the controller, at the OSGI
1800 command line try running:
1801
1802 ::
1803
1804     addMeter openflow:1
1805
1806 Once you’ve done that, use
1807
1808 -  GET
1809
1810 -  Accept: application/xml
1811
1812 -  URL:
1813    "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
1814
1815    -  Note: :Provide the IP Address of the machine on which the
1816       controller is running.
1817
1818 .. note::
1819
1820     Before attempting to PUT a meter you have created via addMeter,
1821     please change its URL and body to, for example, use meter 1 instead
1822     of meter 2 or another Meter Id, so you don’t collide.
1823
1824 .. note::
1825
1826     There are several test command providers and the one handling Meter
1827     is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
1828     used as **commands in OSGI-console** have prefix *\_*. Examples:
1829     addMeter, modifyMeter and removeMeter.
1830
1831 Example Meter
1832 ^^^^^^^^^^^^^
1833
1834 Examples for XML for various Meter Types can be found in the
1835 test-scripts bundle of the plugin code with names m1.xml, m2.xml and
1836 m3.xml.
1837
1838 Statistics
1839 ~~~~~~~~~~
1840
1841 Overview
1842 ^^^^^^^^
1843
1844 This page contains high level detail about the statistics collection
1845 mechanism in new OpenFlow plugin.
1846
1847 Statistics collection in new OpenFlow plugin
1848 ''''''''''''''''''''''''''''''''''''''''''''
1849
1850 New OpenFlow plugin collects following statistics from OpenFlow enabled
1851 node(switch):
1852
1853 1.  Individual Flow Statistics
1854
1855 2.  Aggregate Flow Statistics
1856
1857 3.  Flow Table Statistics
1858
1859 4.  Port Statistics
1860
1861 5.  Group Description
1862
1863 6.  Group Statistics
1864
1865 7.  Meter Configuration
1866
1867 8.  Meter Statistics
1868
1869 9.  Queue Statistics
1870
1871 10. Node Description
1872
1873 11. Flow Table Features
1874
1875 12. Port Description
1876
1877 13. Group Features
1878
1879 14. Meter Features
1880
1881 At a high level statistics collection mechanism is divided into
1882 following three parts
1883
1884 1. Statistics related `YANG models, service APIs and notification
1885    interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
1886    are defined in the MD-SAL.
1887
1888 2. Service APIs (RPCs) defined in yang models are implemented by
1889    OpenFlow plugin. Notification interfaces are wired up by OpenFlow
1890    plugin to MD-SAL.
1891
1892 3. Statistics Manager Module: This module use service APIs implemented
1893    by OpenFlow plugin to send statistics requests to all the connected
1894    OpenFlow enabled nodes. Module also implements notification
1895    interfaces to receive statistics response from nodes. Once it
1896    receives statistics response, it augment all the statistics data to
1897    the relevant element of the node (like node-connector, flow,
1898    table,group, meter) and store it in MD-SAL operational data store.
1899
1900 Details of statistics collection
1901 ''''''''''''''''''''''''''''''''
1902
1903 -  Current implementation collects above mentioned statistics (except
1904    10-14) at a periodic interval of 15 seconds.
1905
1906 -  Statistics mentioned in 10 to 14 are only fetched when any node
1907    connects to the controller because these statistics are just static
1908    details about the respective elements.
1909
1910 -  Whenever any new element is added to node (like flow, group, meter,
1911    queue) it sends statistics request immediately to fetch the latest
1912    statistics and store it in the operational data store.
1913
1914 -  Whenever any element is deleted from the node, it immediately remove
1915    the relevant statistics from operational data store.
1916
1917 -  Statistics data are augmented to their respective element stored in
1918    the configuration data store. E.g Controller installed flows are
1919    stored in configuration data store. Whenever Statistics Manager
1920    receive statistics data related to these flow, it search the
1921    corresponding flow in the configuration data store and augment
1922    statistics in the corresponding location in operational data store.
1923    Similar approach is used for other elements of the node.
1924
1925 -  Statistics Manager stores flow statistics as an unaccounted flow
1926    statistics in operational data store if there is no corresponding
1927    flow exist in configuration data store. ID format of unaccounted flow
1928    statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
1929    #UF$TABLE\*2\*1].
1930
1931 -  All the unaccounted flows will be cleaned up periodically after every
1932    two cycle of flow statistics collection, given that there is no
1933    update for these flows in the last two cycles.
1934
1935 -  Statistics Manager only entertains statistics response for the
1936    request sent by itself. User can write its own statistics collector
1937    using the statistics service APIs and notification defined in yang
1938    models, it won’t effect the functioning of Statistics Manager.
1939
1940 -  OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
1941    Manager don’t send any group & meter related statistics request to
1942    OpenFlow 1.0 enabled switch.
1943
1944 RESTCONF Uris to access statistics of various node elements
1945 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1946
1947 -  Aggregate Flow Statistics & Flow Table Statistics
1948
1949 ::
1950
1951     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
1952
1953 -  Individual Flow Statistics from specific table
1954
1955 ::
1956
1957     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
1958
1959 -  Group Features & Meter Features Statistics
1960
1961 ::
1962
1963     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
1964
1965 -  Group Description & Group Statistics
1966
1967 ::
1968
1969     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
1970
1971 -  Meter Configuration & Meter Statistics
1972
1973 ::
1974
1975     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
1976
1977 -  Node Connector Statistics
1978
1979 ::
1980
1981     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
1982
1983 -  Queue Statistics
1984
1985 ::
1986
1987     GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
1988
1989 Bugs
1990 ''''
1991
1992 For more details and queuries, please send mail to
1993 openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
1994 want to report any bug in statistics collection, please use
1995 `bugzilla <https://bugs.opendaylight.org>`__.
1996
1997 Web / Graphical Interface
1998 -------------------------
1999
2000 In the Hydrogen & Helium release, the current Web UI does not support
2001 the new OpenFlow 1.3 constructs such as groups, meters, new fields in
2002 the flows, multiple flow tables, etc.
2003
2004 Command Line Interface
2005 ----------------------
2006
2007 The following is not exactly CLI - just a set of test commands which can
2008 be executed on the OSGI console testing various features in OpenFlow 1.3
2009 spec.
2010
2011 -  :ref:`OSGI Console Test Provider Commands:
2012    Flows <ofp-test-provider-flows>`
2013
2014 -  :ref:`OSGI Console Test Provider Commands:
2015    Groups <ofp-test-provider-groups>`
2016
2017 -  :ref:`OSGI Console Test Provider Commands:
2018    Meters <ofp-test-provider-meters>`
2019
2020 -  :ref:`OSGI Console Test Provider Commands: Topology
2021    Events <ofp-test-provider-topology>`
2022
2023 .. _ofp-test-provider-flows:
2024
2025 Flows : Test Provider
2026 ~~~~~~~~~~~~~~~~~~~~~
2027
2028 Currently, the openflowplugin has a test-provider that allows you to
2029 push various flows through the system from the OSGI command line. Once
2030 those flows have been pushed through, you can see them as examples and
2031 then use them to see in the config what a particular flow example looks
2032 like.
2033
2034 AddFlow : addMDFlow
2035 ^^^^^^^^^^^^^^^^^^^
2036
2037 Run the controller by executing:
2038
2039 ::
2040
2041     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2042     ./run.sh
2043
2044 Point your mininet to the controller by giving the parameters
2045 --controller=remote,ip=.
2046
2047 Once you see your node (probably openflow:1 if you’ve been following
2048 along) in the inventory, at the OSGI command line try running:
2049
2050 ::
2051
2052     addMDFlow openflow:1 f#
2053
2054 Where # is a number between 1 and 80 and openflow:1 is the of the
2055 switch. This will create one of 80 possible flows. You can confirm that
2056 they were created on the switch.
2057
2058 RemoveFlow : removeMDFlow
2059 ^^^^^^^^^^^^^^^^^^^^^^^^^
2060
2061 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2062 is connected to the controller, try running:
2063
2064 ::
2065
2066     removeMDFlow openflow:1 f#
2067
2068 where # is a number between 1 and 80 and openflow:1 is the of the
2069 switch. The flow to be deleted should have same flowid and Nodeid as
2070 used for flow add.
2071
2072 ModifyFlow : modifyMDFlow
2073 ^^^^^^^^^^^^^^^^^^^^^^^^^
2074
2075 Similar to addMDFlow, from the controller OSGi prompt, while your switch
2076 is connected to the controller, try running:
2077
2078 ::
2079
2080     modifyMDFlow openflow:1 f#
2081
2082 where # is a number between 1 and 80 and openflow:1 is the of the
2083 switch. The flow to be deleted should have same flowid and Nodeid as
2084 used for flow add.
2085
2086 .. _ofp-test-provider-groups:
2087
2088 Group : Test Provider
2089 ~~~~~~~~~~~~~~~~~~~~~
2090
2091 Currently, the openflowplugin has a test-provider that allows you to
2092 push various flows through the system from the OSGI command line. Once
2093 those flows have been pushed through, you can see them as examples and
2094 then use them to see in the config what a particular flow example looks
2095 like.
2096
2097 AddGroup : addGroup
2098 ^^^^^^^^^^^^^^^^^^^
2099
2100 Run the controller by executing:
2101
2102 ::
2103
2104     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2105     ./run.sh
2106
2107 Point your mininet to the controller by giving the parameters
2108 --controller=remote,ip=.
2109
2110 Once you see your node (probably openflow:1 if you’ve been following
2111 along) in the inventory, at the OSGI command line try running:
2112
2113 ::
2114
2115     addGroup openflow:1 a# g#
2116
2117 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2118 actiontype(a#). You can confirm that they were created on the switch.
2119
2120 RemoveGroup : removeGroup
2121 ^^^^^^^^^^^^^^^^^^^^^^^^^
2122
2123 Run the controller by executing:
2124
2125 ::
2126
2127     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2128     ./run.sh
2129
2130 Point your mininet at the controller as described above.
2131
2132 Once you see your node (probably openflow:1 if you’ve been following
2133 along) in the inventory, at the OSGI command line try running:
2134
2135 ::
2136
2137     removeGroup openflow:1 a# g#
2138
2139 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2140 actiontype(a#). GroupId should be same as that used for adding the flow.
2141 You can confirm that it was removed from the switch.
2142
2143 ModifyGroup : modifyGroup
2144 ^^^^^^^^^^^^^^^^^^^^^^^^^
2145
2146 Run the controller by executing:
2147
2148 ::
2149
2150     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2151     ./run.sh
2152
2153 Point your mininet at the controller as described above.
2154
2155 Once you see your node (probably openflow:1 if you’ve been following
2156 along) in the inventory, at the OSGI command line try running:
2157
2158 ::
2159
2160     modifyGroup openflow:1 a# g#
2161
2162 Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
2163 actiontype(a#). GroupId should be same as that used for adding the flow.
2164 You can confirm that it was modified on the switch.
2165
2166 .. _ofp-test-provider-meters:
2167
2168 Meters : Test Provider
2169 ~~~~~~~~~~~~~~~~~~~~~~
2170
2171 Currently, the openflowplugin has a test-provider that allows you to
2172 push various flows through the system from the OSGI command line. Once
2173 those flows have been pushed through, you can see them as examples and
2174 then use them to see in the config what a particular flow example looks
2175 like.
2176
2177 AddMeter : addMeter
2178 ^^^^^^^^^^^^^^^^^^^
2179
2180 Run the controller by executing:
2181
2182 ::
2183
2184     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2185     ./run.sh
2186
2187 Point your mininet to the controller by giving the parameters
2188 --controller=remote,ip=.
2189
2190 Once you see your node (probably openflow:1 if you’ve been following
2191 along) in the inventory, at the OSGI command line try running:
2192
2193 ::
2194
2195     addMeter openflow:1
2196
2197 You can now confirm that meter has been created on the switch.
2198
2199 RemoveMeter : removeMeter
2200 ^^^^^^^^^^^^^^^^^^^^^^^^^
2201
2202 Run the controller by executing:
2203
2204 ::
2205
2206     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2207     ./run.sh
2208
2209 Point your mininet to the controller by giving the parameters
2210 --controller=remote,ip=.
2211
2212 Once you see your node (probably openflow:1 if you’ve been following
2213 along) in the inventory, at the OSGI command line try running:
2214
2215 ::
2216
2217     removeMeter openflow:1
2218
2219 The CLI takes care of using the same meterId and nodeId as used for
2220 meter add. You can confirm that it was removed from the switch.
2221
2222 ModifyMeter : modifyMeter
2223 ^^^^^^^^^^^^^^^^^^^^^^^^^
2224
2225 Run the controller by executing:
2226
2227 ::
2228
2229     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2230     ./run.sh
2231
2232 Point your mininet to the controller by giving the parameters
2233 --controller=remote,ip=.
2234
2235 Once you see your node (probably openflow:1 if you’ve been following
2236 along) in the inventory, at the OSGI command line try running:
2237
2238 ::
2239
2240     modifyMeter openflow:1
2241
2242 The CLI takes care of using the same meterId and nodeId as used for
2243 meter add. You can confirm that it was modified on the switch.
2244
2245 .. _ofp-test-provider-topology:
2246
2247 Topology : Notification
2248 ~~~~~~~~~~~~~~~~~~~~~~~
2249
2250 Currently, the openflowplugin has a test-provider that allows you to get
2251 notifications for the topology related events like Link-Discovered ,
2252 Link-Removed events.
2253
2254 Link Discovered Event : Testing
2255 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2256
2257 Run the controller by executing:
2258
2259 ::
2260
2261     cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
2262     ./run.sh
2263
2264 Point your mininet to the controller by giving the parameters
2265 --controller=remote,ip=. Once the controller is connected to the switch,
2266 Link-Discovered event can be tested by initially configuring the
2267 specific flows on the switch. For Link Discovered event either
2268 table-miss flow or LLDP ether-type flow can be configured.
2269
2270 Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
2271
2272 ::
2273
2274     addMDFlow Openflow:1 fTM
2275
2276 as per this
2277 OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
2278 *fTM* is the table-miss scenario here.
2279
2280 Once the table-miss flow is configured through above command, we can see
2281 the Link-Discovered event in the debug logs on the controller console.
2282
2283 Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
2284
2285 ::
2286
2287     addMDFlow Openflow:1 0(table-id) f81
2288
2289 You can confirm that they were created on the switch.
2290
2291 Once the LLDP ether-type flow is configured through above command, we
2292 can see the Link-Discovered event in the debug logs on the controller
2293 console.
2294
2295 Link Removed Event : Testing
2296 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2297
2298 Having configured either table-miss or lldp ether-type flow on switch,
2299 once the switch is disconnected we see the Link-Removed event
2300
2301 Programmatic Interface
2302 ----------------------
2303
2304 The API is documented in the model documentation under the section
2305 OpenFlow Services at:
2306
2307 -  `Models Documentation (OpenFlow Services
2308    Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
2309
2310 .. _ofp-example-flows:
2311
2312 Example flows
2313 -------------
2314
2315 Overview
2316 ~~~~~~~~
2317
2318 The flow examples on this page are tested to work with OVS.
2319
2320 Use, for example, POSTMAN with the following parameters:
2321
2322 ::
2323
2324     PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
2325
2326     - Accept: application/xml
2327     - Content-Type: application/xml
2328
2329 For example:
2330
2331 ::
2332
2333     PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
2334
2335 Make sure that the Table-# and Flow-# in the URL and in the XML match.
2336
2337 The format of the flow-programming XML is determined by by the grouping
2338 *flow* in the opendaylight-flow-types yang model: MISSING LINK.
2339
2340 Match Examples
2341 ~~~~~~~~~~~~~~
2342
2343 The format of the XML that describes OpenFlow matches is determined by
2344 the opendaylight-match-types yang model: .
2345
2346 IPv4 Dest Address
2347 ^^^^^^^^^^^^^^^^^
2348
2349 -  Flow=124, Table=2, Priority=2,
2350    Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
2351    match=\\{ipv4\_destination\_address=10.0.1.1/24}
2352
2353 -  Note that ethernet-type MUST be 2048 (0x800)
2354
2355 .. code:: xml
2356
2357     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2358     <flow xmlns="urn:opendaylight:flow:inventory">
2359         <strict>false</strict>
2360         <instructions>
2361             <instruction>
2362                 <order>0</order>
2363                 <apply-actions>
2364                     <action>
2365                         <order>0</order>
2366                         <dec-nw-ttl/>
2367                     </action>
2368                 </apply-actions>
2369             </instruction>
2370         </instructions>
2371         <table_id>2</table_id>
2372         <id>124</id>
2373         <cookie_mask>255</cookie_mask>
2374         <installHw>false</installHw>
2375         <match>
2376             <ethernet-match>
2377                 <ethernet-type>
2378                     <type>2048</type>
2379                 </ethernet-type>
2380             </ethernet-match>
2381             <ipv4-destination>10.0.1.1/24</ipv4-destination>
2382         </match>
2383         <hard-timeout>12</hard-timeout>
2384         <cookie>1</cookie>
2385         <idle-timeout>34</idle-timeout>
2386         <flow-name>FooXf1</flow-name>
2387         <priority>2</priority>
2388         <barrier>false</barrier>
2389     </flow>
2390
2391 Ethernet Src Address
2392 ^^^^^^^^^^^^^^^^^^^^
2393
2394 -  Flow=126, Table=2, Priority=2,
2395    Instructions=\\{Apply\_Actions={drop}},
2396    match=\\{ethernet-source=00:00:00:00:00:01}
2397
2398 .. code:: xml
2399
2400     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2401     <flow xmlns="urn:opendaylight:flow:inventory">
2402         <strict>false</strict>
2403         <instructions>
2404             <instruction>
2405                 <order>0</order>
2406                 <apply-actions>
2407                     <action>
2408                         <order>0</order>
2409                         <drop-action/>
2410                     </action>
2411                 </apply-actions>
2412             </instruction>
2413         </instructions>
2414         <table_id>2</table_id>
2415         <id>126</id>
2416         <cookie_mask>255</cookie_mask>
2417         <installHw>false</installHw>
2418         <match>
2419             <ethernet-match>
2420                 <ethernet-source>
2421                     <address>00:00:00:00:00:01</address>
2422                 </ethernet-source>
2423             </ethernet-match>
2424         </match>
2425         <hard-timeout>12</hard-timeout>
2426         <cookie>3</cookie>
2427         <idle-timeout>34</idle-timeout>
2428         <flow-name>FooXf3</flow-name>
2429         <priority>2</priority>
2430         <barrier>false</barrier>
2431     </flow>
2432
2433 Ethernet Src & Dest Addresses, Ethernet Type
2434 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2435
2436 -  Flow=127, Table=2, Priority=2,
2437    Instructions=\\{Apply\_Actions={drop}},
2438    match=\\{ethernet-source=00:00:00:00:23:ae,
2439    ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
2440
2441 .. code:: xml
2442
2443     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2444     <flow xmlns="urn:opendaylight:flow:inventory">
2445         <strict>false</strict>
2446         <instructions>
2447             <instruction>
2448                 <order>0</order>
2449                 <apply-actions>
2450                     <action>
2451                         <order>0</order>
2452                         <dec-mpls-ttl/>
2453                     </action>
2454                 </apply-actions>
2455             </instruction>
2456         </instructions>
2457         <table_id>2</table_id>
2458         <id>127</id>
2459         <cookie_mask>255</cookie_mask>
2460         <installHw>false</installHw>
2461         <match>
2462             <ethernet-match>
2463                 <ethernet-type>
2464                     <type>45</type>
2465                 </ethernet-type>
2466                 <ethernet-destination>
2467                     <address>ff:ff:ff:ff:ff:ff</address>
2468                 </ethernet-destination>
2469                 <ethernet-source>
2470                     <address>00:00:00:00:23:ae</address>
2471                 </ethernet-source>
2472             </ethernet-match>
2473         </match>
2474         <hard-timeout>12</hard-timeout>
2475         <cookie>4</cookie>
2476         <idle-timeout>34</idle-timeout>
2477         <flow-name>FooXf4</flow-name>
2478         <priority>2</priority>
2479         <barrier>false</barrier>
2480     </flow>
2481
2482 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
2483 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2484
2485 -  Note that ethernet-type MUST be 34887 (0x8847)
2486
2487 .. code:: xml
2488
2489     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2490     <flow xmlns="urn:opendaylight:flow:inventory">
2491         <strict>false</strict>
2492         <instructions>
2493             <instruction>
2494                 <order>0</order>
2495                 <apply-actions>
2496                     <action>
2497                         <order>0</order>
2498                         <dec-mpls-ttl/>
2499                     </action>
2500                 </apply-actions>
2501             </instruction>
2502         </instructions>
2503         <table_id>2</table_id>
2504         <id>128</id>
2505         <cookie_mask>255</cookie_mask>
2506         <match>
2507             <ethernet-match>
2508                 <ethernet-type>
2509                     <type>34887</type>
2510                 </ethernet-type>
2511                 <ethernet-destination>
2512                     <address>ff:ff:ff:ff:ff:ff</address>
2513                 </ethernet-destination>
2514                 <ethernet-source>
2515                     <address>00:00:00:00:23:ae</address>
2516                 </ethernet-source>
2517             </ethernet-match>
2518             <ipv4-source>10.1.2.3/24</ipv4-source>
2519             <ipv4-destination>20.4.5.6/16</ipv4-destination>
2520             <in-port>0</in-port>
2521         </match>
2522         <hard-timeout>12</hard-timeout>
2523         <cookie>5</cookie>
2524         <idle-timeout>34</idle-timeout>
2525         <flow-name>FooXf5</flow-name>
2526         <priority>2</priority>
2527         <barrier>false</barrier>
2528     </flow>
2529
2530 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
2531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2532
2533 Protocol #, IP DSCP, IP ECN, Input Port
2534
2535 -  Note that ethernet-type MUST be 2048 (0x800)
2536
2537 .. code:: xml
2538
2539     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2540     <flow xmlns="urn:opendaylight:flow:inventory">
2541         <strict>false</strict>
2542         <instructions>
2543             <instruction>
2544                 <order>0</order>
2545                 <apply-actions>
2546                     <action>
2547                         <order>0</order>
2548                         <dec-nw-ttl/>
2549                     </action>
2550                 </apply-actions>
2551             </instruction>
2552         </instructions>
2553         <table_id>2</table_id>
2554         <id>130</id>
2555         <cookie_mask>255</cookie_mask>
2556         <match>
2557             <ethernet-match>
2558                 <ethernet-type>
2559                     <type>2048</type>
2560                 </ethernet-type>
2561                 <ethernet-destination>
2562                     <address>ff:ff:ff:ff:ff:aa</address>
2563                 </ethernet-destination>
2564                 <ethernet-source>
2565                     <address>00:00:00:11:23:ae</address>
2566                 </ethernet-source>
2567             </ethernet-match>
2568             <ipv4-source>10.1.2.3/24</ipv4-source>
2569             <ipv4-destination>20.4.5.6/16</ipv4-destination>
2570             <ip-match>
2571                 <ip-protocol>56</ip-protocol>
2572                 <ip-dscp>15</ip-dscp>
2573                 <ip-ecn>1</ip-ecn>
2574             </ip-match>
2575             <in-port>0</in-port>
2576         </match>
2577         <hard-timeout>12000</hard-timeout>
2578         <cookie>7</cookie>
2579         <idle-timeout>12000</idle-timeout>
2580         <flow-name>FooXf7</flow-name>
2581         <priority>2</priority>
2582         <barrier>false</barrier>
2583     </flow>
2584
2585 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
2586 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2587
2588 Dest Ports, IP DSCP, IP ECN, Input Port
2589
2590 -  Note that ethernet-type MUST be 2048 (0x800)
2591
2592 -  Note that IP Protocol Type MUST be 6
2593
2594 .. code:: xml
2595
2596     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2597     <flow xmlns="urn:opendaylight:flow:inventory">
2598         <strict>false</strict>
2599         <instructions>
2600             <instruction>
2601                 <order>0</order>
2602                 <apply-actions>
2603                     <action>
2604                         <order>0</order>
2605                         <dec-nw-ttl/>
2606                     </action>
2607                 </apply-actions>
2608             </instruction>
2609         </instructions>
2610         <table_id>2</table_id>
2611         <id>131</id>
2612         <cookie_mask>255</cookie_mask>
2613         <match>
2614             <ethernet-match>
2615                 <ethernet-type>
2616                     <type>2048</type>
2617                 </ethernet-type>
2618                 <ethernet-destination>
2619                     <address>ff:ff:29:01:19:61</address>
2620                 </ethernet-destination>
2621                 <ethernet-source>
2622                     <address>00:00:00:11:23:ae</address>
2623                 </ethernet-source>
2624             </ethernet-match>
2625             <ipv4-source>17.1.2.3/8</ipv4-source>
2626             <ipv4-destination>172.168.5.6/16</ipv4-destination>
2627             <ip-match>
2628                 <ip-protocol>6</ip-protocol>
2629                 <ip-dscp>2</ip-dscp>
2630                 <ip-ecn>2</ip-ecn>
2631             </ip-match>
2632             <tcp-source-port>25364</tcp-source-port>
2633             <tcp-destination-port>8080</tcp-destination-port>
2634             <in-port>0</in-port>
2635         </match>
2636         <hard-timeout>1200</hard-timeout>
2637         <cookie>8</cookie>
2638         <idle-timeout>3400</idle-timeout>
2639         <flow-name>FooXf8</flow-name>
2640         <priority>2</priority>
2641         <barrier>false</barrier>
2642     </flow>
2643
2644 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
2645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2646
2647 Dest Ports, IP DSCP, IP ECN, Input Port
2648
2649 -  Note that ethernet-type MUST be 2048 (0x800)
2650
2651 -  Note that IP Protocol Type MUST be 17
2652
2653 .. code:: xml
2654
2655     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2656     <flow xmlns="urn:opendaylight:flow:inventory">
2657         <strict>false</strict>
2658         <instructions>
2659             <instruction>
2660                 <order>0</order>
2661                 <apply-actions>
2662                     <action>
2663                         <order>0</order>
2664                         <dec-nw-ttl/>
2665                     </action>
2666                 </apply-actions>
2667             </instruction>
2668         </instructions>
2669         <table_id>2</table_id>
2670         <id>132</id>
2671         <cookie_mask>255</cookie_mask>
2672         <match>
2673             <ethernet-match>
2674                 <ethernet-type>
2675                     <type>2048</type>
2676                 </ethernet-type>
2677                 <ethernet-destination>
2678                     <address>20:14:29:01:19:61</address>
2679                 </ethernet-destination>
2680                 <ethernet-source>
2681                     <address>00:00:00:11:23:ae</address>
2682                 </ethernet-source>
2683             </ethernet-match>
2684             <ipv4-source>19.1.2.3/10</ipv4-source>
2685             <ipv4-destination>172.168.5.6/18</ipv4-destination>
2686             <ip-match>
2687                 <ip-protocol>17</ip-protocol>
2688                 <ip-dscp>8</ip-dscp>
2689                 <ip-ecn>3</ip-ecn>
2690             </ip-match>
2691             <udp-source-port>25364</udp-source-port>
2692             <udp-destination-port>8080</udp-destination-port>
2693             <in-port>0</in-port>
2694         </match>
2695         <hard-timeout>1200</hard-timeout>
2696         <cookie>9</cookie>
2697         <idle-timeout>3400</idle-timeout>
2698         <flow-name>FooXf9</flow-name>
2699         <priority>2</priority>
2700         <barrier>false</barrier>
2701
2702 Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
2703 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2704
2705 Type & Code, IP DSCP, IP ECN, Input Port
2706
2707 -  Note that ethernet-type MUST be 2048 (0x800)
2708
2709 -  Note that IP Protocol Type MUST be 1
2710
2711 .. code:: xml
2712
2713     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2714     <flow xmlns="urn:opendaylight:flow:inventory">
2715         <strict>false</strict>
2716         <instructions>
2717             <instruction>
2718                 <order>0</order>
2719                 <apply-actions>
2720                     <action>
2721                         <order>0</order>
2722                         <dec-nw-ttl/>
2723                     </action>
2724                 </apply-actions>
2725             </instruction>
2726         </instructions>
2727         <table_id>2</table_id>
2728         <id>134</id>
2729         <cookie_mask>255</cookie_mask>
2730         <match>
2731             <ethernet-match>
2732                 <ethernet-type>
2733                     <type>2048</type>
2734                 </ethernet-type>
2735                 <ethernet-destination>
2736                     <address>ff:ff:29:01:19:61</address>
2737                 </ethernet-destination>
2738                 <ethernet-source>
2739                     <address>00:00:00:11:23:ae</address>
2740                 </ethernet-source>
2741             </ethernet-match>
2742             <ipv4-source>17.1.2.3/8</ipv4-source>
2743             <ipv4-destination>172.168.5.6/16</ipv4-destination>
2744             <ip-match>
2745                 <ip-protocol>1</ip-protocol>
2746                 <ip-dscp>27</ip-dscp>
2747                 <ip-ecn>3</ip-ecn>
2748             </ip-match>
2749             <icmpv4-match>
2750                 <icmpv4-type>6</icmpv4-type>
2751                 <icmpv4-code>3</icmpv4-code>
2752             </icmpv4-match>
2753             <in-port>0</in-port>
2754         </match>
2755         <hard-timeout>1200</hard-timeout>
2756         <cookie>11</cookie>
2757         <idle-timeout>3400</idle-timeout>
2758         <flow-name>FooXf11</flow-name>
2759         <priority>2</priority>
2760     </flow>
2761
2762 Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
2763 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2764
2765 Transport Addresses, ARP Src & Target Hw Addresses
2766
2767 -  Note that ethernet-type MUST be 2054 (0x806)
2768
2769 .. code:: xml
2770
2771     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2772     <flow xmlns="urn:opendaylight:flow:inventory">
2773         <strict>false</strict>
2774         <instructions>
2775             <instruction>
2776                 <order>0</order>
2777                 <apply-actions>
2778                     <action>
2779                         <order>0</order>
2780                         <dec-nw-ttl/>
2781                     </action>
2782                     <action>
2783                         <order>1</order>
2784                         <dec-mpls-ttl/>
2785                     </action>
2786                 </apply-actions>
2787             </instruction>
2788         </instructions>
2789         <table_id>2</table_id>
2790         <id>137</id>
2791         <cookie_mask>255</cookie_mask>
2792         <match>
2793             <ethernet-match>
2794                 <ethernet-type>
2795                     <type>2054</type>
2796                 </ethernet-type>
2797                 <ethernet-destination>
2798                     <address>ff:ff:ff:ff:FF:ff</address>
2799                 </ethernet-destination>
2800                 <ethernet-source>
2801                     <address>00:00:FC:01:23:ae</address>
2802                 </ethernet-source>
2803             </ethernet-match>
2804             <arp-op>1</arp-op>
2805             <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
2806             <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
2807             <arp-source-hardware-address>
2808                 <address>12:34:56:78:98:AB</address>
2809             </arp-source-hardware-address>
2810             <arp-target-hardware-address>
2811                 <address>FE:DC:BA:98:76:54</address>
2812             </arp-target-hardware-address>
2813         </match>
2814         <hard-timeout>12</hard-timeout>
2815         <cookie>14</cookie>
2816         <idle-timeout>34</idle-timeout>
2817         <flow-name>FooXf14</flow-name>
2818         <priority>2</priority>
2819         <barrier>false</barrier>
2820
2821 Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
2822 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2823
2824 .. code:: xml
2825
2826     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2827     <flow xmlns="urn:opendaylight:flow:inventory">
2828         <strict>false</strict>
2829         <instructions>
2830             <instruction>
2831                 <order>0</order>
2832                 <apply-actions>
2833                     <action>
2834                         <order>0</order>
2835                         <dec-nw-ttl/>
2836                     </action>
2837                 </apply-actions>
2838             </instruction>
2839         </instructions>
2840         <table_id>2</table_id>
2841         <id>138</id>
2842         <cookie_mask>255</cookie_mask>
2843         <match>
2844             <ethernet-match>
2845                 <ethernet-type>
2846                     <type>2048</type>
2847                 </ethernet-type>
2848                 <ethernet-destination>
2849                     <address>ff:ff:29:01:19:61</address>
2850                 </ethernet-destination>
2851                 <ethernet-source>
2852                     <address>00:00:00:11:23:ae</address>
2853                 </ethernet-source>
2854             </ethernet-match>
2855             <vlan-match>
2856                 <vlan-id>
2857                     <vlan-id>78</vlan-id>
2858                     <vlan-id-present>true</vlan-id-present>
2859                 </vlan-id>
2860                 <vlan-pcp>3</vlan-pcp>
2861           </vlan-match>
2862         </match>
2863         <hard-timeout>1200</hard-timeout>
2864         <cookie>15</cookie>
2865         <idle-timeout>3400</idle-timeout>
2866         <flow-name>FooXf15</flow-name>
2867         <priority>2</priority>
2868         <barrier>false</barrier>
2869     </flow>
2870
2871 Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
2872 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2873
2874 .. code:: xml
2875
2876     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2877     <flow xmlns="urn:opendaylight:flow:inventory">
2878         <flow-name>FooXf17</flow-name>
2879         <id>140</id>
2880         <cookie_mask>255</cookie_mask>
2881         <cookie>17</cookie>
2882         <hard-timeout>1200</hard-timeout>
2883         <idle-timeout>3400</idle-timeout>
2884         <priority>2</priority>
2885         <table_id>2</table_id>
2886         <strict>false</strict>
2887         <instructions>
2888             <instruction>
2889                 <order>0</order>
2890                 <apply-actions>
2891                     <action>
2892                         <order>0</order>
2893                         <dec-nw-ttl/>
2894                     </action>
2895                 </apply-actions>
2896             </instruction>
2897         </instructions>
2898         <match>
2899             <ethernet-match>
2900                 <ethernet-type>
2901                     <type>34887</type>
2902                 </ethernet-type>
2903                 <ethernet-destination>
2904                     <address>ff:ff:29:01:19:61</address>
2905                 </ethernet-destination>
2906                 <ethernet-source>
2907                     <address>00:00:00:11:23:ae</address>
2908                 </ethernet-source>
2909             </ethernet-match>
2910             <protocol-match-fields>
2911                 <mpls-label>567</mpls-label>
2912                 <mpls-tc>3</mpls-tc>
2913                 <mpls-bos>1</mpls-bos>
2914             </protocol-match-fields>
2915         </match>
2916     </flow>
2917
2918 IPv6 Src & Dest Addresses
2919 ^^^^^^^^^^^^^^^^^^^^^^^^^
2920
2921 -  Note that ethernet-type MUST be 34525
2922
2923 .. code:: xml
2924
2925     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2926     <flow xmlns="urn:opendaylight:flow:inventory">
2927         <strict>false</strict>
2928         <flow-name>FooXf18</flow-name>
2929         <id>141</id>
2930         <cookie_mask>255</cookie_mask>
2931         <cookie>18</cookie>
2932         <table_id>2</table_id>
2933         <priority>2</priority>
2934         <hard-timeout>1200</hard-timeout>
2935         <idle-timeout>3400</idle-timeout>
2936         <installHw>false</installHw>
2937         <instructions>
2938             <instruction>
2939                 <order>0</order>
2940                 <apply-actions>
2941                     <action>
2942                         <order>0</order>
2943                         <dec-nw-ttl/>
2944                     </action>
2945                 </apply-actions>
2946             </instruction>
2947         </instructions>
2948         <match>
2949             <ethernet-match>
2950                 <ethernet-type>
2951                     <type>34525</type>
2952                 </ethernet-type>
2953             </ethernet-match>
2954             <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
2955             <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
2956         </match>
2957     </flow>
2958
2959 Metadata
2960 ^^^^^^^^
2961
2962 .. code:: xml
2963
2964     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2965     <flow xmlns="urn:opendaylight:flow:inventory">
2966         <strict>false</strict>
2967         <flow-name>FooXf19</flow-name>
2968         <id>142</id>
2969         <cookie_mask>255</cookie_mask>
2970         <cookie>19</cookie>
2971         <table_id>2</table_id>
2972         <priority>1</priority>
2973         <hard-timeout>1200</hard-timeout>
2974         <idle-timeout>3400</idle-timeout>
2975         <installHw>false</installHw>
2976         <instructions>
2977             <instruction>
2978                 <order>0</order>
2979                 <apply-actions>
2980                     <action>
2981                         <order>0</order>
2982                         <dec-nw-ttl/>
2983                     </action>
2984                 </apply-actions>
2985             </instruction>
2986         </instructions>
2987         <match>
2988             <metadata>
2989                 <metadata>12345</metadata>
2990             </metadata>
2991         </match>
2992     </flow>
2993
2994 Metadata, Metadata Mask
2995 ^^^^^^^^^^^^^^^^^^^^^^^
2996
2997 .. code:: xml
2998
2999     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3000     <flow xmlns="urn:opendaylight:flow:inventory">
3001         <strict>false</strict>
3002         <flow-name>FooXf20</flow-name>
3003         <id>143</id>
3004         <cookie_mask>255</cookie_mask>
3005         <cookie>20</cookie>
3006         <table_id>2</table_id>
3007         <priority>2</priority>
3008         <hard-timeout>1200</hard-timeout>
3009         <idle-timeout>3400</idle-timeout>
3010         <installHw>false</installHw>
3011         <instructions>
3012             <instruction>
3013                 <order>0</order>
3014                 <apply-actions>
3015                     <action>
3016                         <order>0</order>
3017                         <dec-nw-ttl/>
3018                     </action>
3019                 </apply-actions>
3020             </instruction>
3021         </instructions>
3022         <match>
3023             <metadata>
3024                 <metadata>12345</metadata>
3025                 <metadata-mask>//FF</metadata-mask>
3026             </metadata>
3027         </match>
3028     </flow>
3029
3030 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
3031 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3032
3033 -  Note that ethernet-type MUST be 34525
3034
3035 .. code:: xml
3036
3037     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3038     <flow xmlns="urn:opendaylight:flow:inventory">
3039         <strict>false</strict>
3040         <flow-name>FooXf21</flow-name>
3041         <id>144</id>
3042         <cookie_mask>255</cookie_mask>
3043         <cookie>21</cookie>
3044         <table_id>2</table_id>
3045         <priority>2</priority>
3046         <hard-timeout>1200</hard-timeout>
3047         <idle-timeout>3400</idle-timeout>
3048         <installHw>false</installHw>
3049         <instructions>
3050             <instruction>
3051                 <order>0</order>
3052                 <apply-actions>
3053                     <action>
3054                         <order>0</order>
3055                         <dec-nw-ttl/>
3056                     </action>
3057                 </apply-actions>
3058             </instruction>
3059         </instructions>
3060         <match>
3061             <ethernet-match>
3062                 <ethernet-type>
3063                     <type>34525</type>
3064                 </ethernet-type>
3065             </ethernet-match>
3066             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3067             <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
3068             <metadata>
3069                 <metadata>12345</metadata>
3070             </metadata>
3071             <ip-match>
3072                 <ip-protocol>17</ip-protocol>
3073                 <ip-dscp>8</ip-dscp>
3074                 <ip-ecn>3</ip-ecn>
3075             </ip-match>
3076             <udp-source-port>25364</udp-source-port>
3077             <udp-destination-port>8080</udp-destination-port>
3078         </match>
3079     </flow>
3080
3081 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
3082 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3083
3084 -  Note that ethernet-type MUST be 34525
3085
3086 -  Note that IP Protocol MUST be 6
3087
3088 .. code:: xml
3089
3090     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3091     <flow xmlns="urn:opendaylight:flow:inventory">
3092         <strict>false</strict>
3093         <flow-name>FooXf22</flow-name>
3094         <id>145</id>
3095         <cookie_mask>255</cookie_mask>
3096         <cookie>22</cookie>
3097         <table_id>2</table_id>
3098         <priority>2</priority>
3099         <hard-timeout>1200</hard-timeout>
3100         <idle-timeout>3400</idle-timeout>
3101         <installHw>false</installHw>
3102         <instructions>
3103             <instruction>
3104                 <order>0</order>
3105                 <apply-actions>
3106                     <action>
3107                         <order>0</order>
3108                         <dec-nw-ttl/>
3109                     </action>
3110                 </apply-actions>
3111             </instruction>
3112         </instructions>
3113         <match>
3114             <ethernet-match>
3115                 <ethernet-type>
3116                     <type>34525</type>
3117                 </ethernet-type>
3118             </ethernet-match>
3119             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3120             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3121             <metadata>
3122                 <metadata>12345</metadata>
3123             </metadata>
3124             <ip-match>
3125                 <ip-protocol>6</ip-protocol>
3126                 <ip-dscp>60</ip-dscp>
3127                 <ip-ecn>3</ip-ecn>
3128             </ip-match>
3129             <tcp-source-port>183</tcp-source-port>
3130             <tcp-destination-port>8080</tcp-destination-port>
3131         </match>
3132     </flow>
3133
3134 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
3135 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3136
3137 -  Note that ethernet-type MUST be 34525
3138
3139 -  Note that IP Protocol MUST be 6
3140
3141 .. code:: xml
3142
3143     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3144     <flow xmlns="urn:opendaylight:flow:inventory">
3145         <strict>false</strict>
3146         <flow-name>FooXf23</flow-name>
3147         <id>146</id>
3148         <cookie_mask>255</cookie_mask>
3149         <cookie>23</cookie>
3150         <table_id>2</table_id>
3151         <priority>2</priority>
3152         <hard-timeout>1200</hard-timeout>
3153         <idle-timeout>3400</idle-timeout>
3154         <installHw>false</installHw>
3155         <instructions>
3156             <instruction>
3157                 <order>0</order>
3158                 <apply-actions>
3159                     <action>
3160                         <order>0</order>
3161                         <dec-nw-ttl/>
3162                     </action>
3163                 </apply-actions>
3164             </instruction>
3165         </instructions>
3166         <match>
3167             <ethernet-match>
3168                 <ethernet-type>
3169                     <type>34525</type>
3170                 </ethernet-type>
3171             </ethernet-match>
3172             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3173             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3174             <metadata>
3175                 <metadata>12345</metadata>
3176             </metadata>
3177             <ipv6-label>
3178                 <ipv6-flabel>33</ipv6-flabel>
3179             </ipv6-label>
3180             <ip-match>
3181                 <ip-protocol>6</ip-protocol>
3182                 <ip-dscp>60</ip-dscp>
3183                 <ip-ecn>3</ip-ecn>
3184             </ip-match>
3185             <tcp-source-port>183</tcp-source-port>
3186             <tcp-destination-port>8080</tcp-destination-port>
3187         </match>
3188     </flow>
3189
3190 Tunnel ID
3191 ^^^^^^^^^
3192
3193 .. code:: xml
3194
3195     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3196     <flow xmlns="urn:opendaylight:flow:inventory">
3197         <strict>false</strict>
3198         <flow-name>FooXf24</flow-name>
3199         <id>147</id>
3200         <cookie_mask>255</cookie_mask>
3201         <cookie>24</cookie>
3202         <table_id>2</table_id>
3203         <priority>2</priority>
3204         <hard-timeout>1200</hard-timeout>
3205         <idle-timeout>3400</idle-timeout>
3206         <installHw>false</installHw>
3207         <instructions>
3208             <instruction>
3209                 <order>0</order>
3210                 <apply-actions>
3211                     <action>
3212                         <order>0</order>
3213                         <dec-nw-ttl/>
3214                     </action>
3215                 </apply-actions>
3216             </instruction>
3217         </instructions>
3218         <match>
3219             <tunnel>
3220                 <tunnel-id>2591</tunnel-id>
3221             </tunnel>
3222         </match>
3223     </flow>
3224
3225 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
3226 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3227
3228 -  Note that ethernet-type MUST be 34525
3229
3230 -  Note that IP Protocol MUST be 58
3231
3232 .. code:: xml
3233
3234     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3235     <flow xmlns="urn:opendaylight:flow:inventory">
3236         <strict>false</strict>
3237         <flow-name>FooXf25</flow-name>
3238         <id>148</id>
3239         <cookie_mask>255</cookie_mask>
3240         <cookie>25</cookie>
3241         <table_id>2</table_id>
3242         <priority>2</priority>
3243         <hard-timeout>1200</hard-timeout>
3244         <idle-timeout>3400</idle-timeout>
3245         <installHw>false</installHw>
3246         <instructions>
3247             <instruction>
3248                 <order>0</order>
3249                 <apply-actions>
3250                     <action>
3251                         <order>0</order>
3252                         <dec-nw-ttl/>
3253                     </action>
3254                 </apply-actions>
3255             </instruction>
3256         </instructions>
3257         <match>
3258             <ethernet-match>
3259                 <ethernet-type>
3260                     <type>34525</type>
3261                 </ethernet-type>
3262             </ethernet-match>
3263             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3264             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3265             <metadata>
3266                 <metadata>12345</metadata>
3267             </metadata>
3268             <ipv6-label>
3269                 <ipv6-flabel>33</ipv6-flabel>
3270             </ipv6-label>
3271             <ip-match>
3272                 <ip-protocol>58</ip-protocol>
3273                 <ip-dscp>60</ip-dscp>
3274                 <ip-ecn>3</ip-ecn>
3275             </ip-match>
3276             <icmpv6-match>
3277                 <icmpv6-type>6</icmpv6-type>
3278                 <icmpv6-code>3</icmpv6-code>
3279             </icmpv6-match>
3280         </match>
3281     </flow>
3282
3283 IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
3284 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3285
3286 -  Note that ethernet-type MUST be 34525
3287
3288 -  Note that IP Protocol MUST be 58
3289
3290 .. code:: xml
3291
3292     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3293     <flow xmlns="urn:opendaylight:flow:inventory">
3294         <strict>false</strict>
3295         <flow-name>FooXf27</flow-name>
3296         <id>150</id>
3297         <cookie_mask>255</cookie_mask>
3298         <cookie>27</cookie>
3299         <table_id>2</table_id>
3300         <priority>2</priority>
3301         <hard-timeout>1200</hard-timeout>
3302         <idle-timeout>3400</idle-timeout>
3303         <installHw>false</installHw>
3304         <instructions>
3305             <instruction>
3306                 <order>0</order>
3307                 <apply-actions>
3308                     <action>
3309                         <order>0</order>
3310                         <dec-nw-ttl/>
3311                     </action>
3312                 </apply-actions>
3313             </instruction>
3314         </instructions>
3315         <match>
3316             <ethernet-match>
3317                 <ethernet-type>
3318                     <type>34525</type>
3319                 </ethernet-type>
3320             </ethernet-match>
3321             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3322             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3323             <metadata>
3324                 <metadata>12345</metadata>
3325             </metadata>
3326             <ipv6-label>
3327                 <ipv6-flabel>33</ipv6-flabel>
3328             </ipv6-label>
3329             <ipv6-ext-header>
3330                 <ipv6-exthdr>0</ipv6-exthdr>
3331             </ipv6-ext-header>
3332             <ip-match>
3333                 <ip-protocol>6</ip-protocol>
3334                 <ip-dscp>60</ip-dscp>
3335                 <ip-ecn>3</ip-ecn>
3336             </ip-match>
3337             <tcp-source-port>183</tcp-source-port>
3338             <tcp-destination-port>8080</tcp-destination-port>
3339         </match>
3340     </flow>
3341
3342 Actions
3343 ~~~~~~~
3344
3345 The format of the XML that describes OpenFlow actions is determined by
3346 the opendaylight-action-types yang model: .
3347
3348 Apply Actions
3349 ^^^^^^^^^^^^^
3350
3351 Output to TABLE
3352 '''''''''''''''
3353
3354 .. code:: xml
3355
3356     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3357     <flow xmlns="urn:opendaylight:flow:inventory">
3358         <strict>false</strict>
3359         <flow-name>FooXf101</flow-name>
3360         <id>256</id>
3361         <cookie_mask>255</cookie_mask>
3362         <cookie>101</cookie>
3363         <table_id>2</table_id>
3364         <priority>2</priority>
3365         <hard-timeout>1200</hard-timeout>
3366         <idle-timeout>3400</idle-timeout>
3367         <installHw>false</installHw>
3368         <instructions>
3369             <instruction>
3370                 <order>0</order>
3371                 <apply-actions>
3372                     <action>
3373                         <order>0</order>
3374                         <output-action>
3375                             <output-node-connector>TABLE</output-node-connector>
3376                             <max-length>60</max-length>
3377                         </output-action>
3378                     </action>
3379                 </apply-actions>
3380             </instruction>
3381         </instructions>
3382         <match>
3383             <ethernet-match>
3384                 <ethernet-type>
3385                     <type>34525</type>
3386                 </ethernet-type>
3387             </ethernet-match>
3388             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3389             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3390             <metadata>
3391                 <metadata>12345</metadata>
3392             </metadata>
3393             <ip-match>
3394                 <ip-protocol>6</ip-protocol>
3395                 <ip-dscp>60</ip-dscp>
3396                 <ip-ecn>3</ip-ecn>
3397             </ip-match>
3398             <tcp-source-port>183</tcp-source-port>
3399             <tcp-destination-port>8080</tcp-destination-port>
3400         </match>
3401     </flow>
3402
3403 Output to INPORT
3404 ''''''''''''''''
3405
3406 .. code:: xml
3407
3408     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3409     <flow xmlns="urn:opendaylight:flow:inventory">
3410         <strict>false</strict>
3411         <flow-name>FooXf102</flow-name>
3412         <id>257</id>
3413         <cookie_mask>255</cookie_mask>
3414         <cookie>102</cookie>
3415         <table_id>2</table_id>
3416         <priority>2</priority>
3417         <hard-timeout>1200</hard-timeout>
3418         <idle-timeout>3400</idle-timeout>
3419         <installHw>false</installHw>
3420         <instructions>
3421             <instruction>
3422                 <order>0</order>
3423                 <apply-actions>
3424                     <action>
3425                         <order>0</order>
3426                         <output-action>
3427                             <output-node-connector>INPORT</output-node-connector>
3428                             <max-length>60</max-length>
3429                         </output-action>
3430                     </action>
3431     7            </apply-actions>
3432             </instruction>
3433         </instructions>
3434         <match>
3435             <ethernet-match>
3436                 <ethernet-type>
3437                     <type>2048</type>
3438                 </ethernet-type>
3439                 <ethernet-destination>
3440                     <address>ff:ff:29:01:19:61</address>
3441                 </ethernet-destination>
3442                 <ethernet-source>
3443                     <address>00:00:00:11:23:ae</address>
3444                 </ethernet-source>
3445             </ethernet-match>
3446             <ipv4-source>17.1.2.3/8</ipv4-source>
3447             <ipv4-destination>172.168.5.6/16</ipv4-destination>
3448             <ip-match>
3449                 <ip-protocol>6</ip-protocol>
3450                 <ip-dscp>2</ip-dscp>
3451                 <ip-ecn>2</ip-ecn>
3452             </ip-match>
3453             <tcp-source-port>25364</tcp-source-port>
3454             <tcp-destination-port>8080</tcp-destination-port>
3455         </match>
3456     </flow>
3457
3458 Output to Physical Port
3459 '''''''''''''''''''''''
3460
3461 .. code:: xml
3462
3463     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3464     <flow xmlns="urn:opendaylight:flow:inventory">
3465         <strict>false</strict>
3466         <flow-name>FooXf103</flow-name>
3467         <id>258</id>
3468         <cookie_mask>255</cookie_mask>
3469         <cookie>103</cookie>
3470         <table_id>2</table_id>
3471         <priority>2</priority>
3472         <hard-timeout>1200</hard-timeout>
3473         <idle-timeout>3400</idle-timeout>
3474         <installHw>false</installHw>
3475         <instructions>
3476             <instruction>
3477                 <order>0</order>
3478                 <apply-actions>
3479                     <action>
3480                         <order>0</order>
3481                         <output-action>
3482                             <output-node-connector>1</output-node-connector>
3483                             <max-length>60</max-length>
3484                         </output-action>
3485                     </action>
3486                 </apply-actions>
3487             </instruction>
3488         </instructions>
3489         <match>
3490             <ethernet-match>
3491                 <ethernet-type>
3492                     <type>2048</type>
3493                 </ethernet-type>
3494                 <ethernet-destination>
3495                     <address>ff:ff:29:01:19:61</address>
3496                 </ethernet-destination>
3497                 <ethernet-source>
3498                     <address>00:00:00:11:23:ae</address>
3499                 </ethernet-source>
3500             </ethernet-match>
3501             <ipv4-source>17.1.2.3/8</ipv4-source>
3502             <ipv4-destination>172.168.5.6/16</ipv4-destination>
3503             <ip-match>
3504                 <ip-protocol>6</ip-protocol>
3505                 <ip-dscp>2</ip-dscp>
3506                 <ip-ecn>2</ip-ecn>
3507             </ip-match>
3508             <tcp-source-port>25364</tcp-source-port>
3509             <tcp-destination-port>8080</tcp-destination-port>
3510         </match>
3511     </flow>
3512
3513 Output to LOCAL
3514 '''''''''''''''
3515
3516 .. code:: xml
3517
3518     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3519     <flow xmlns="urn:opendaylight:flow:inventory">
3520         <strict>false</strict>
3521         <flow-name>FooXf104</flow-name>
3522         <id>259</id>
3523         <cookie_mask>255</cookie_mask>
3524         <cookie>104</cookie>
3525         <table_id>2</table_id>
3526         <priority>2</priority>
3527         <hard-timeout>1200</hard-timeout>
3528         <idle-timeout>3400</idle-timeout>
3529         <installHw>false</installHw>
3530         <instructions>
3531             <instruction>
3532                 <order>0</order>
3533                 <apply-actions>
3534                     <action>
3535                         <order>0</order>
3536                         <output-action>
3537                             <output-node-connector>LOCAL</output-node-connector>
3538                             <max-length>60</max-length>
3539                         </output-action>
3540                     </action>
3541                 </apply-actions>
3542             </instruction>
3543         </instructions>
3544         <match>
3545             <ethernet-match>
3546                 <ethernet-type>
3547                     <type>34525</type>
3548                 </ethernet-type>
3549             </ethernet-match>
3550             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
3551             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
3552             <metadata>
3553                 <metadata>12345</metadata>
3554             </metadata>
3555             <ip-match>
3556                 <ip-protocol>6</ip-protocol>
3557                 <ip-dscp>60</ip-dscp>
3558                 <ip-ecn>3</ip-ecn>
3559             </ip-match>
3560             <tcp-source-port>183</tcp-source-port>
3561             <tcp-destination-port>8080</tcp-destination-port>
3562         </match>
3563     </flow>
3564
3565 Output to NORMAL
3566 ''''''''''''''''
3567
3568 .. code:: xml
3569
3570     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3571     <flow xmlns="urn:opendaylight:flow:inventory">
3572         <strict>false</strict>
3573         <flow-name>FooXf105</flow-name>
3574         <id>260</id>
3575         <cookie_mask>255</cookie_mask>
3576         <cookie>105</cookie>
3577         <table_id>2</table_id>
3578         <priority>2</priority>
3579         <hard-timeout>1200</hard-timeout>
3580         <idle-timeout>3400</idle-timeout>
3581         <installHw>false</installHw>
3582         <instructions>
3583             <instruction>
3584                 <order>0</order>
3585                 <apply-actions>
3586                     <action>
3587                         <order>0</order>
3588                         <output-action>
3589                             <output-node-connector>NORMAL</output-node-connector>
3590                             <max-length>60</max-length>
3591                         </output-action>
3592                     </action>
3593                 </apply-actions>
3594             </instruction>
3595         </instructions>
3596         <match>
3597             <ethernet-match>
3598                 <ethernet-type>
3599                     <type>34525</type>
3600                 </ethernet-type>
3601             </ethernet-match>
3602             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
3603             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
3604             <metadata>
3605                 <metadata>12345</metadata>
3606             </metadata>
3607             <ip-match>
3608                 <ip-protocol>6</ip-protocol>
3609                 <ip-dscp>45</ip-dscp>
3610                 <ip-ecn>2</ip-ecn>
3611             </ip-match>
3612             <tcp-source-port>20345</tcp-source-port>
3613             <tcp-destination-port>80</tcp-destination-port>
3614         </match>
3615     </flow>
3616
3617 Output to FLOOD
3618 '''''''''''''''
3619
3620 .. code:: xml
3621
3622     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3623     <flow xmlns="urn:opendaylight:flow:inventory">
3624         <strict>false</strict>
3625         <flow-name>FooXf106</flow-name>
3626         <id>261</id>
3627         <cookie_mask>255</cookie_mask>
3628         <cookie>106</cookie>
3629         <table_id>2</table_id>
3630         <priority>2</priority>
3631         <hard-timeout>1200</hard-timeout>
3632         <idle-timeout>3400</idle-timeout>
3633         <installHw>false</installHw>
3634         <instructions>
3635             <instruction>
3636                 <order>0</order>
3637                 <apply-actions>
3638                     <action>
3639                         <order>0</order>
3640                         <output-action>
3641                             <output-node-connector>FLOOD</output-node-connector>
3642                             <max-length>60</max-length>
3643                         </output-action>
3644                     </action>
3645                 </apply-actions>
3646             </instruction>
3647         </instructions>
3648         <match>
3649             <ethernet-match>
3650                 <ethernet-type>
3651                     <type>34525</type>
3652                 </ethernet-type>
3653             </ethernet-match>
3654             <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
3655             <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
3656             <metadata>
3657                 <metadata>12345</metadata>
3658             </metadata>
3659             <ip-match>
3660                 <ip-protocol>6</ip-protocol>
3661                 <ip-dscp>45</ip-dscp>
3662                 <ip-ecn>2</ip-ecn>
3663             </ip-match>
3664             <tcp-source-port>20345</tcp-source-port>
3665             <tcp-destination-port>80</tcp-destination-port>
3666         </match>
3667     </flow>
3668
3669 Output to ALL
3670 '''''''''''''
3671
3672 .. code:: xml
3673
3674     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3675     <flow xmlns="urn:opendaylight:flow:inventory">
3676         <strict>false</strict>
3677         <flow-name>FooXf107</flow-name>
3678         <id>262</id>
3679         <cookie_mask>255</cookie_mask>
3680         <cookie>107</cookie>
3681         <table_id>2</table_id>
3682         <priority>2</priority>
3683         <hard-timeout>1200</hard-timeout>
3684         <idle-timeout>3400</idle-timeout>
3685         <installHw>false</installHw>
3686         <instructions>
3687             <instruction>
3688                 <order>0</order>
3689                 <apply-actions>
3690                     <action>
3691                         <order>0</order>
3692                         <output-action>
3693                             <output-node-connector>ALL</output-node-connector>
3694                             <max-length>60</max-length>
3695                         </output-action>
3696                     </action>
3697                 </apply-actions>
3698             </instruction>
3699         </instructions>
3700         <match>
3701             <ethernet-match>
3702                 <ethernet-type>
3703                     <type>2048</type>
3704                 </ethernet-type>
3705                 <ethernet-destination>
3706                     <address>20:14:29:01:19:61</address>
3707                 </ethernet-destination>
3708                 <ethernet-source>
3709                     <address>00:00:00:11:23:ae</address>
3710                 </ethernet-source>
3711             </ethernet-match>
3712             <ipv4-source>19.1.2.3/10</ipv4-source>
3713             <ipv4-destination>172.168.5.6/18</ipv4-destination>
3714             <ip-match>
3715                 <ip-protocol>17</ip-protocol>
3716                 <ip-dscp>8</ip-dscp>
3717                 <ip-ecn>3</ip-ecn>
3718             </ip-match>
3719             <udp-source-port>25364</udp-source-port>
3720             <udp-destination-port>8080</udp-destination-port>
3721             <in-port>0</in-port>
3722         </match>
3723     </flow>
3724
3725 Output to CONTROLLER
3726 ''''''''''''''''''''
3727
3728 .. code:: xml
3729
3730     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3731     <flow xmlns="urn:opendaylight:flow:inventory">
3732         <strict>false</strict>
3733         <flow-name>FooXf108</flow-name>
3734         <id>263</id>
3735         <cookie_mask>255</cookie_mask>
3736         <cookie>108</cookie>
3737         <table_id>2</table_id>
3738         <priority>2</priority>
3739         <hard-timeout>1200</hard-timeout>
3740         <idle-timeout>3400</idle-timeout>
3741         <installHw>false</installHw>
3742         <instructions>
3743             <instruction>
3744                 <order>0</order>
3745                 <apply-actions>
3746                     <action>
3747                         <order>0</order>
3748                         <output-action>
3749                             <output-node-connector>CONTROLLER</output-node-connector>
3750                             <max-length>60</max-length>
3751                         </output-action>
3752                     </action>
3753                 </apply-actions>
3754             </instruction>
3755         </instructions>
3756         <match>
3757             <ethernet-match>
3758                 <ethernet-type>
3759                     <type>2048</type>
3760                 </ethernet-type>
3761                 <ethernet-destination>
3762                     <address>20:14:29:01:19:61</address>
3763                 </ethernet-destination>
3764                 <ethernet-source>
3765                     <address>00:00:00:11:23:ae</address>
3766                 </ethernet-source>
3767             </ethernet-match>
3768             <ipv4-source>19.1.2.3/10</ipv4-source>
3769             <ipv4-destination>172.168.5.6/18</ipv4-destination>
3770             <ip-match>
3771                 <ip-protocol>17</ip-protocol>
3772                 <ip-dscp>8</ip-dscp>
3773                 <ip-ecn>3</ip-ecn>
3774             </ip-match>
3775             <udp-source-port>25364</udp-source-port>
3776             <udp-destination-port>8080</udp-destination-port>
3777             <in-port>0</in-port>
3778         </match>
3779     </flow>
3780
3781 Output to ANY
3782 '''''''''''''
3783
3784 .. code:: xml
3785
3786     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3787     <flow xmlns="urn:opendaylight:flow:inventory">
3788         <strict>false</strict>
3789         <flow-name>FooXf109</flow-name>
3790         <id>264</id>
3791         <cookie_mask>255</cookie_mask>
3792         <cookie>109</cookie>
3793         <table_id>2</table_id>
3794         <priority>2</priority>
3795         <hard-timeout>1200</hard-timeout>
3796         <idle-timeout>3400</idle-timeout>
3797         <installHw>false</installHw>
3798         <instructions>
3799             <instruction>
3800                 <order>0</order>
3801                 <apply-actions>
3802                     <action>
3803                         <order>0</order>
3804                         <output-action>
3805                             <output-node-connector>ANY</output-node-connector>
3806                             <max-length>60</max-length>
3807                         </output-action>
3808                     </action>
3809                 </apply-actions>
3810             </instruction>
3811         </instructions>
3812         <match>
3813             <ethernet-match>
3814                 <ethernet-type>
3815                     <type>2048</type>
3816                 </ethernet-type>
3817                 <ethernet-destination>
3818                     <address>20:14:29:01:19:61</address>
3819                 </ethernet-destination>
3820                 <ethernet-source>
3821                     <address>00:00:00:11:23:ae</address>
3822                 </ethernet-source>
3823             </ethernet-match>
3824             <ipv4-source>19.1.2.3/10</ipv4-source>
3825             <ipv4-destination>172.168.5.6/18</ipv4-destination>
3826             <ip-match>
3827                 <ip-protocol>17</ip-protocol>
3828                 <ip-dscp>8</ip-dscp>
3829                 <ip-ecn>3</ip-ecn>
3830             </ip-match>
3831             <udp-source-port>25364</udp-source-port>
3832             <udp-destination-port>8080</udp-destination-port>
3833             <in-port>0</in-port>
3834         </match>
3835     </flow>
3836
3837 Push VLAN
3838 '''''''''
3839
3840 .. code:: xml
3841
3842     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3843     <flow xmlns="urn:opendaylight:flow:inventory">
3844        <strict>false</strict>
3845        <instructions>
3846            <instruction>
3847                <order>0</order>
3848                <apply-actions>
3849                   <action>
3850                      <push-vlan-action>
3851                          <ethernet-type>33024</ethernet-type>
3852                      </push-vlan-action>
3853                      <order>0</order>
3854                   </action>
3855                    <action>
3856                        <set-field>
3857                            <vlan-match>
3858                                 <vlan-id>
3859                                     <vlan-id>79</vlan-id>
3860                                     <vlan-id-present>true</vlan-id-present>
3861                                 </vlan-id>
3862                            </vlan-match>
3863                        </set-field>
3864                        <order>1</order>
3865                    </action>
3866                    <action>
3867                        <output-action>
3868                            <output-node-connector>5</output-node-connector>
3869                        </output-action>
3870                        <order>2</order>
3871                    </action>
3872                </apply-actions>
3873            </instruction>
3874        </instructions>
3875        <table_id>0</table_id>
3876        <id>31</id>
3877        <match>
3878            <ethernet-match>
3879                <ethernet-type>
3880                    <type>2048</type>
3881                </ethernet-type>
3882                <ethernet-destination>
3883                    <address>FF:FF:29:01:19:61</address>
3884                </ethernet-destination>
3885                <ethernet-source>
3886                    <address>00:00:00:11:23:AE</address>
3887                </ethernet-source>
3888            </ethernet-match>
3889          <in-port>1</in-port>
3890        </match>
3891        <flow-name>vlan_flow</flow-name>
3892        <priority>2</priority>
3893     </flow>
3894
3895 Push MPLS
3896 '''''''''
3897
3898 .. code:: xml
3899
3900     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3901     <flow
3902         xmlns="urn:opendaylight:flow:inventory">
3903         <flow-name>push-mpls-action</flow-name>
3904         <instructions>
3905             <instruction>
3906                 <order>3</order>
3907                 <apply-actions>
3908                     <action>
3909                         <push-mpls-action>
3910                             <ethernet-type>34887</ethernet-type>
3911                         </push-mpls-action>
3912                         <order>0</order>
3913                     </action>
3914                     <action>
3915                         <set-field>
3916                             <protocol-match-fields>
3917                                 <mpls-label>27</mpls-label>
3918                             </protocol-match-fields>
3919                         </set-field>
3920                         <order>1</order>
3921                     </action>
3922                     <action>
3923                         <output-action>
3924                             <output-node-connector>2</output-node-connector>
3925                         </output-action>
3926                         <order>2</order>
3927                     </action>
3928                 </apply-actions>
3929             </instruction>
3930         </instructions>
3931         <strict>false</strict>
3932         <id>100</id>
3933         <match>
3934             <ethernet-match>
3935                 <ethernet-type>
3936                     <type>2048</type>
3937                 </ethernet-type>
3938             </ethernet-match>
3939             <in-port>1</in-port>
3940             <ipv4-destination>10.0.0.4/32</ipv4-destination>
3941         </match>
3942         <idle-timeout>0</idle-timeout>
3943         <cookie_mask>255</cookie_mask>
3944         <cookie>401</cookie>
3945         <priority>8</priority>
3946         <hard-timeout>0</hard-timeout>
3947         <installHw>false</installHw>
3948         <table_id>0</table_id>
3949     </flow>
3950
3951 Swap MPLS
3952 '''''''''
3953
3954 -  Note that ethernet-type MUST be 34887
3955
3956 .. code:: xml
3957
3958     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
3959     <flow
3960         xmlns="urn:opendaylight:flow:inventory">
3961         <flow-name>push-mpls-action</flow-name>
3962         <instructions>
3963             <instruction>
3964                 <order>2</order>
3965                 <apply-actions>
3966                     <action>
3967                         <set-field>
3968                             <protocol-match-fields>
3969                                 <mpls-label>37</mpls-label>
3970                             </protocol-match-fields>
3971                         </set-field>
3972                         <order>1</order>
3973                     </action>
3974                     <action>
3975                         <output-action>
3976                             <output-node-connector>2</output-node-connector>
3977                         </output-action>
3978                         <order>2</order>
3979                     </action>
3980                 </apply-actions>
3981             </instruction>
3982         </instructions>
3983         <strict>false</strict>
3984         <id>101</id>
3985         <match>
3986             <ethernet-match>
3987                 <ethernet-type>
3988                     <type>34887</type>
3989                 </ethernet-type>
3990             </ethernet-match>
3991             <in-port>1</in-port>
3992             <protocol-match-fields>
3993                 <mpls-label>27</mpls-label>
3994             </protocol-match-fields>
3995         </match>
3996         <idle-timeout>0</idle-timeout>
3997         <cookie_mask>255</cookie_mask>
3998         <cookie>401</cookie>
3999         <priority>8</priority>
4000         <hard-timeout>0</hard-timeout>
4001         <installHw>false</installHw>
4002         <table_id>0</table_id>
4003     </flow>
4004
4005 Pop MPLS
4006 ''''''''
4007
4008 -  Note that ethernet-type MUST be 34887
4009
4010 -  Issue with OVS 2.1 `OVS
4011    fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
4012
4013 .. code:: xml
4014
4015     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
4016     <flow
4017         xmlns="urn:opendaylight:flow:inventory">
4018         <flow-name>FooXf10</flow-name>
4019         <instructions>
4020             <instruction>
4021                 <order>0</order>
4022                 <apply-actions>
4023                     <action>
4024                         <pop-mpls-action>
4025                             <ethernet-type>2048</ethernet-type>
4026                         </pop-mpls-action>
4027                         <order>1</order>
4028                     </action>
4029                     <action>
4030                         <output-action>
4031                             <output-node-connector>2</output-node-connector>
4032                             <max-length>60</max-length>
4033                         </output-action>
4034                         <order>2</order>
4035                     </action>
4036                 </apply-actions>
4037             </instruction>
4038         </instructions>
4039         <id>11</id>
4040         <strict>false</strict>
4041         <match>
4042             <ethernet-match>
4043                 <ethernet-type>
4044                     <type>34887</type>
4045                 </ethernet-type>
4046             </ethernet-match>
4047             <in-port>1</in-port>
4048             <protocol-match-fields>
4049                 <mpls-label>37</mpls-label>
4050             </protocol-match-fields>
4051         </match>
4052         <idle-timeout>0</idle-timeout>
4053         <cookie>889</cookie>
4054         <cookie_mask>255</cookie_mask>
4055         <installHw>false</installHw>
4056         <hard-timeout>0</hard-timeout>
4057         <priority>10</priority>
4058         <table_id>0</table_id>
4059     </flow>
4060
4061 Learn
4062 '''''
4063
4064 -  Nicira extension defined in
4065    https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
4066
4067 -  Example section is -
4068    https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
4069
4070 .. code:: xml
4071
4072     <flow>
4073       <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
4074       <hard-timeout>0</hard-timeout>
4075       <idle-timeout>0</idle-timeout>
4076       <match>
4077         <ethernet-match>
4078           <ethernet-type>
4079             <type>2048</type>
4080           </ethernet-type>
4081         </ethernet-match>
4082         <metadata>
4083           <metadata>2199023255552</metadata>
4084           <metadata-mask>2305841909702066176</metadata-mask>
4085         </metadata>
4086         <ip-match>
4087           <ip-protocol>1</ip-protocol>
4088         </ip-match>
4089       </match>
4090       <cookie>110100480</cookie>
4091       <instructions>
4092         <instruction>
4093           <order>0</order>
4094           <apply-actions>
4095             <action>
4096               <order>1</order>
4097               <nx-resubmit
4098                 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4099                 <table>220</table>
4100               </nx-resubmit>
4101             </action>
4102             <action>
4103               <order>0</order>
4104               <nx-learn
4105                 xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
4106                 <idle-timeout>60</idle-timeout>
4107                 <fin-idle-timeout>0</fin-idle-timeout>
4108                 <hard-timeout>60</hard-timeout>
4109                 <flags>0</flags>
4110                 <table-id>41</table-id>
4111                 <priority>61010</priority>
4112                 <fin-hard-timeout>0</fin-hard-timeout>
4113                 <flow-mods>
4114                   <flow-mod-add-match-from-value>
4115                     <src-ofs>0</src-ofs>
4116                     <value>2048</value>
4117                     <src-field>1538</src-field>
4118                     <flow-mod-num-bits>16</flow-mod-num-bits>
4119                   </flow-mod-add-match-from-value>
4120                 </flow-mods>
4121                 <flow-mods>
4122                   <flow-mod-add-match-from-field>
4123                     <src-ofs>0</src-ofs>
4124                     <dst-ofs>0</dst-ofs>
4125                     <dst-field>4100</dst-field>
4126                     <src-field>3588</src-field>
4127                     <flow-mod-num-bits>32</flow-mod-num-bits>
4128                   </flow-mod-add-match-from-field>
4129                 </flow-mods>
4130                 <flow-mods>
4131                   <flow-mod-add-match-from-field>
4132                     <src-ofs>0</src-ofs>
4133                     <dst-ofs>0</dst-ofs>
4134                     <dst-field>518</dst-field>
4135                     <src-field>1030</src-field>
4136                     <flow-mod-num-bits>48</flow-mod-num-bits>
4137                   </flow-mod-add-match-from-field>
4138                 </flow-mods>
4139                 <flow-mods>
4140                   <flow-mod-add-match-from-field>
4141                     <src-ofs>0</src-ofs>
4142                     <dst-ofs>0</dst-ofs>
4143                     <dst-field>3073</dst-field>
4144                     <src-field>3073</src-field>
4145                     <flow-mod-num-bits>8</flow-mod-num-bits>
4146                   </flow-mod-add-match-from-field>
4147                 </flow-mods>
4148                 <flow-mods>
4149                   <flow-mod-copy-value-into-field>
4150                     <dst-ofs>0</dst-ofs>
4151                     <value>1</value>
4152                     <dst-field>65540</dst-field>
4153                     <flow-mod-num-bits>8</flow-mod-num-bits>
4154                   </flow-mod-copy-value-into-field>
4155                 </flow-mods>
4156                 <cookie>110100480</cookie>
4157               </nx-learn>
4158             </action>
4159           </apply-actions>
4160         </instruction>
4161       </instructions>
4162       <installHw>true</installHw>
4163       <barrier>false</barrier>
4164       <strict>false</strict>
4165       <priority>61010</priority>
4166       <table_id>253</table_id>
4167       <flow-name>ACL</flow-name>
4168     </flow>
4169
4170 Opendaylight OpenFlow Plugin: Troubleshooting
4171 ---------------------------------------------
4172
4173 empty section
4174