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