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