Merge "Migrate NatApp dev docs to rst"
authorColin Dixon <colin@colindixon.com>
Fri, 9 Sep 2016 04:27:19 +0000 (04:27 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 9 Sep 2016 04:27:19 +0000 (04:27 +0000)
59 files changed:
docs/developer-guide/images/openflowplugin/odl-ofp-add-flow.png [new file with mode: 0644]
docs/developer-guide/images/openflowplugin/odl-ofp-feature-tree.png [new file with mode: 0644]
docs/developer-guide/images/openflowplugin/odl-ofp-handshake.png [new file with mode: 0644]
docs/developer-guide/images/openflowplugin/odl-ofp-ofplugin-debug-stats.png [new file with mode: 0644]
docs/developer-guide/images/openflowplugin/odl-ofp-session-establishment.jpg [new file with mode: 0644]
docs/developer-guide/index.rst
docs/developer-guide/next-developer-guide.rst [new file with mode: 0644]
docs/developer-guide/openflow-plugin-project-developer-guide.rst [new file with mode: 0644]
docs/developer-guide/usecplugin-aaa-developer-guide.rst [new file with mode: 0644]
docs/developer-guide/usecplugin-openflow-developer-guide.rst [new file with mode: 0644]
docs/developer-guide/virtual-tenant-network-(vtn).rst
docs/getting-started-guide/project-specific-guides/vtn.rst
docs/opendaylight-with-openstack/openstack-with-vtn.rst
docs/submodules/integration/test
docs/submodules/netconf
docs/submodules/releng/builder
docs/user-guide/images/openflowplugin/host-only-vbox.png [new file with mode: 0644]
docs/user-guide/images/openflowplugin/plugin_design.jpg [new file with mode: 0644]
docs/user-guide/index.rst
docs/user-guide/natapp-user-guide.rst [new file with mode: 0644]
docs/user-guide/openflow-plugin-project-user-guide.rst [new file with mode: 0644]
docs/user-guide/usecplugin-aaa-user-guide.rst [new file with mode: 0644]
docs/user-guide/usecplugin-openflow-user-guide.rst [new file with mode: 0644]
docs/user-guide/virtual-tenant-network-(vtn).rst
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-config-subsystem.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-developer-guide.adoc
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-feature-tree.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-forwardingrules-sync.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-message-spy.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-sequence-diagram.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-singleton-cluster-aproach.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-wiring-up-notifications.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-yang-models.adoc [deleted file]
manuals/developer-guide/src/main/asciidoc/sdninterfaceapp/odl-sdninterfaceapp-all-dev.adoc
manuals/developer-guide/src/main/asciidoc/usecplugin/odl-usecplugin-aaa-dev.adoc
manuals/developer-guide/src/main/asciidoc/usecplugin/odl-usecplugin-openflow-dev.adoc
manuals/user-guide/src/main/asciidoc/natapp/odl-natapp-user.adoc
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-coverage.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-flows.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-groups.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-inventory.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-meters.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-topology.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-example-flows.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-openflowplugin-user.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-and-architecture.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-architecture.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-restconf-postman.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-running-controller-with-the-new-of-plugin.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-statistics.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-environment.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-flows.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-groups.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-meters.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-topology.adoc [deleted file]
manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-user-guide.adoc
manuals/user-guide/src/main/asciidoc/sdninterfaceapp/odl-sdninterfaceapp-all-user.adoc
manuals/user-guide/src/main/asciidoc/usecplugin/odl-usecplugin-aaa-user.adoc
manuals/user-guide/src/main/asciidoc/usecplugin/odl-usecplugin-openflow-user.adoc

diff --git a/docs/developer-guide/images/openflowplugin/odl-ofp-add-flow.png b/docs/developer-guide/images/openflowplugin/odl-ofp-add-flow.png
new file mode 100644 (file)
index 0000000..ffc50c2
Binary files /dev/null and b/docs/developer-guide/images/openflowplugin/odl-ofp-add-flow.png differ
diff --git a/docs/developer-guide/images/openflowplugin/odl-ofp-feature-tree.png b/docs/developer-guide/images/openflowplugin/odl-ofp-feature-tree.png
new file mode 100644 (file)
index 0000000..b5ec05c
Binary files /dev/null and b/docs/developer-guide/images/openflowplugin/odl-ofp-feature-tree.png differ
diff --git a/docs/developer-guide/images/openflowplugin/odl-ofp-handshake.png b/docs/developer-guide/images/openflowplugin/odl-ofp-handshake.png
new file mode 100644 (file)
index 0000000..998e44c
Binary files /dev/null and b/docs/developer-guide/images/openflowplugin/odl-ofp-handshake.png differ
diff --git a/docs/developer-guide/images/openflowplugin/odl-ofp-ofplugin-debug-stats.png b/docs/developer-guide/images/openflowplugin/odl-ofp-ofplugin-debug-stats.png
new file mode 100644 (file)
index 0000000..ec2ecd7
Binary files /dev/null and b/docs/developer-guide/images/openflowplugin/odl-ofp-ofplugin-debug-stats.png differ
diff --git a/docs/developer-guide/images/openflowplugin/odl-ofp-session-establishment.jpg b/docs/developer-guide/images/openflowplugin/odl-ofp-session-establishment.jpg
new file mode 100644 (file)
index 0000000..13b797e
Binary files /dev/null and b/docs/developer-guide/images/openflowplugin/odl-ofp-session-establishment.jpg differ
index 52b42125bba06c87a3690567c5b477df4131ee61..a4eef09f59f59dcd1eafa257a5012a21e17668e1 100644 (file)
@@ -38,6 +38,7 @@ Project-specific Developer Guides
    netide-developer-guide
    neutron-service-developer-guide
    neutron-northbound
+   next-developer-guide
    odl-parent-developer-guide
    ocp-plugin-developer-guide
    odl-sdni-developer-guide
@@ -59,6 +60,8 @@ Project-specific Developer Guides
    ttp-cli-tools-developer-guide
    uni-manager-plug-in-developer-guide
    unified-secure-channel
+   usecplugin-aaa-developer-guide
+   usecplugin-openflow-developer-guide
    virtual-tenant-network-(vtn)
    yang-tools
    yang-push-developer-guide
diff --git a/docs/developer-guide/next-developer-guide.rst b/docs/developer-guide/next-developer-guide.rst
new file mode 100644 (file)
index 0000000..4c52855
--- /dev/null
@@ -0,0 +1,5 @@
+NeXt Developer Guide
+====================
+
+Please see the NeXt documentation and tutorials here: https://github.com/NeXt-UI/next-tutorials
+
diff --git a/docs/developer-guide/openflow-plugin-project-developer-guide.rst b/docs/developer-guide/openflow-plugin-project-developer-guide.rst
new file mode 100644 (file)
index 0000000..fd89f2e
--- /dev/null
@@ -0,0 +1,1468 @@
+OpenFlow Plugin Project Developer Guide
+=======================================
+
+This section covers topics which are developer specific and which have
+not been covered in the user guide. Please see the OpenFlow
+plugin user guide first.
+
+It can be found on `the OpenDaylight software download
+page <https://www.opendaylight.org/downloads>`__.
+
+Event Sequences
+---------------
+
+Session Establishment
+~~~~~~~~~~~~~~~~~~~~~
+
+The `OpenFlow Protocol
+Library <#_openflow_protocol_library_developer_guide>`__ provides
+interface **SwitchConnectionHandler** which contains method
+*onSwitchConnected* (step 1). This event is raised in the OpenFlow
+Protocol Library when an OpenFlow device connects to OpenDaylight and
+caught in the **ConnectionManagerImpl** class in the OpenFlow plugin.
+
+There the plugin creates a new instance of the **ConnectionContextImpl**
+class (step 1.1) and also instances of **HandshakeManagerImpl** (which
+uses **HandshakeListenerImpl**) and **ConnectionReadyListenerImpl**.
+**ConnectionReadyListenerImpl** contains method *onConnectionReady()*
+which is called when connection is prepared. This method starts the
+handshake with the OpenFlow device (switch) from the OpenFlow plugin
+side. Then handshake can be also started from device side. In this case
+method *shake()* from **HandshakeManagerImpl** is called (steps 1.1.1
+and 2).
+
+The handshake consists of an exchange of HELLO messages in addition to
+an exchange of device features (steps 2.1. and 3). The handshake is
+completed by **HandshakeManagerImpl**. After receiving device features,
+the **HandshakeListenerImpl** is notifed via the
+*onHanshakeSuccessfull()* method. After this, the device features, node
+id and connection state are stored in a **ConnectionContext** and the
+method *deviceConnected()* of **DeviceManagerImpl** is called.
+
+When *deviceConnected()* is called, it does the following:
+
+1. creates a new transaction chain (step 4.1)
+
+2. creates a new instance of **DeviceContext** (step 4.2.2)
+
+3. initializes the device context: the static context of device is
+   populated by calling *createDeviceFeaturesForOF<version>()* to
+   populate table, group, meter features and port descriptions (step
+   4.2.1 and 4.2.1.1)
+
+4. creates an instance of **RequestContext** for each type of feature
+
+When the OpenFlow device responds to these requests (step 4.2.1.1) with
+multipart replies (step 5) they are processed and stored to MD-SAL
+operational datastore. The *createDeviceFeaturesForOF<version>()* method
+returns a **Future** which is processed in the callback (step 5.1) (part
+of *initializeDeviceContext()* in the *deviceConnected()* method) by
+calling the method *onDeviceCtxLevelUp()* from **StatisticsManager**
+(step 5.1.1).
+
+The call to *createDeviceFeaturesForOF<version>()*: . creates a new
+instance of **StatisticsContextImpl** (step 5.1.1.1).
+
+1. calls *gatherDynamicStatistics()* on that instance which returns a
+   **Future** which will produce a value when done
+
+   a. this method calls methods to get dynamic data (flows, tables,
+      groups) from the device (step 5.1.1.2, 5.1.1.2.1, 5.1.1.2.1.1)
+
+   b. if everything works, this data is also stored in the MD-SAL
+      operational datastore
+
+If the **Future** is successful, it is processed (step 6.1.1) in a
+callback in **StatisticsManagerImpl** which:
+
+1. schedules the next time to poll the device for statistics
+
+2. sets the device state to synchronized (step 6.1.1.2)
+
+3. calls *onDeviceContextLevelUp()* in **RpcManagerImpl**
+
+The *onDeviceContextLevelUp()* call:
+
+1. creates a new instance of **RequestContextImpl**
+
+2. registers implementation for supported services
+
+3. calls *onDeviceContextLevelUp()* in **DeviceManagerImpl** (step
+   6.1.1.2.1.2) which causes the information about the new device be be
+   written to the MD-SAL operational datastore (step 6.1.1.2.2)
+
+.. figure:: ./images/openflowplugin/odl-ofp-session-establishment.jpg
+   :alt: Session establishment
+
+   Session establishment
+
+Handshake
+~~~~~~~~~
+
+The first thing that happens when an OpenFlow device connects to
+OpenDaylight is that the OpenFlow plugin gathers basic information about
+the device and establishes agreement on key facts like the version of
+OpenFlow which will be used. This process is called the handshake.
+
+The handshake starts with HELLO message which can be sent either by the
+OpenFlow device or the OpenFlow plugin. After this, there are several
+scenarios which can happen:
+
+1. if the first HELLO message contains a *version bitmap*, it is
+   possible to determine if there is a common version of OpenFlow or
+   not:
+
+   a. if there is a single common version use it and the **VERSION IS
+      SETTLED**
+
+   b. if there are more than one common versions, use the highest
+      (newest) protocol and the **VERSION IS SETTLED**
+
+   c. if there are no common versions, the device is **DISCONNECTED**
+
+2. if the first HELLO message does not contain a *version bitmap*, then
+   STEB-BY-STEP negotiation is used
+
+3. if second (or more) HELLO message is received, then STEP-BY-STEP
+   negotiation is used
+
+STEP-BY-STEP negotiation:
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  if last version proposed by the OpenFlow plugin is the same as the
+   version received from the OpenFlow device, then the **VERSION IS
+   SETTLED**
+
+-  if the version received in the current HELLO message from the device
+   is the same as from previous then negotiation has failed and the
+   device is **DISCONNECTED**
+
+-  if the last version from the device is greater than the last version
+   proposed from the plugin, wait for the next HELLO message in the hope
+   that it will advertise support for a lower version
+
+-  if the last version from the device is is less than the last version
+   proposed from the plugin:
+
+   -  propose the highest version the plugin supports that is less than
+      or equal to the version received from the device and wait for the
+      next HELLO message
+
+   -  if if the plugin doesn’t support a lower version, the device is
+      **DISCONNECTED**
+
+After selecting of version we can say that the **VERSION IS SETTLED**
+and the OpenFlow plugin can ask device for its features. At this point
+handshake ends.
+
+.. figure:: ./images/openflowplugin/odl-ofp-handshake.png
+   :alt: Handshake process
+
+   Handshake process
+
+Adding a Flow
+~~~~~~~~~~~~~
+
+There are two ways to add a flow in in the OpenFlow plugin: adding it to
+the MD-SAL config datastore or calling an RPC. Both of these can either
+be done using the native MD-SAL interfaces or using RESTCONF. This
+discussion focuses on calling the RPC.
+
+If user send flow via REST interface (step 1) it will cause that
+*invokeRpc()* is called on **RpcBroker**. The **RpcBroker** then looks
+for an appropriate implementation of the interface. In the case of the
+OpenFlow plugin, this is the *addFlow()* method of
+**SalFlowServiceImpl** (step 1.1). The same thing happens if the RPC is
+called directly from the native MD-SAL interfaces.
+
+The *addFlow()* method then
+
+1. calls the *commitEntry()* method (step 2) from the OpenFlow Protocol
+   Library which is responsible for sending the flow to the device
+
+2. creates a new **RequestContext** by calling *createRequestContext()*
+   (step 3)
+
+3. creates a callback to handle any events that happen because of
+   sending the flow to the device
+
+The callback method is triggered when a barrier reply message (step 2.1)
+is received from the device indicating that the flow was either
+installed or an appropriate error message was sent. If the flow was
+successfully sent to the device, the RPC result is set to success (step
+5). // **SalFlowService** contains inside method *addFlow()* other
+callback which caught notification from callback for barrier message.
+
+At this point, no information pertaining to the flow has been added to
+the MD-SAL operational datastore. That is accomplished by the periodic
+gathering of statistics from OpenFlow devices.
+
+The **StatisticsContext** for each given OpenFlow device periodically
+polls it using *gatherStatistics()* of **StatisticsGatheringUtil** which
+issues an OpenFlow OFPT\_MULTIPART\_REQUEST - OFPMP\_FLOW. The response
+to this request (step 7) is processed in **StatisticsGatheringUtil**
+class where flow data is written to the MD-SAL operational datastore via
+the *writeToTransaction()* method of **DeviceContext**.
+
+.. figure:: ./images/openflowplugin/odl-ofp-add-flow.png
+   :alt: Add flow
+
+   Add flow
+
+Description of OpenFlow Plugin Modules
+--------------------------------------
+
+The OpenFlow plugin project contains a variety of OpenDaylight modules,
+which are loaded using the configuration subsystem. This section
+describes the YANG files used to model each module.
+
+**General model (interfaces)** - openflow-plugin-cfg.yang.
+
+-  the provided module is defined (``identity openflow-provider``)
+
+-  and target implementation is assigned (``...OpenflowPluginProvider``)
+
+.. code:: yang
+
+    module openflow-provider {
+       yang-version 1;
+       namespace "urn:opendaylight:params:xml:ns:yang:openflow:common:config[urn:opendaylight:params:xml:ns:yang:openflow:common:config]";
+       prefix "ofplugin-cfg";
+
+       import config {prefix config; revision-date 2013-04-05; }
+       description
+           "openflow-plugin-custom-config";
+       revision "2014-03-26" {
+           description
+               "Initial revision";
+       }
+       identity openflow-provider{
+           base config:service-type;
+           config:java-class "org.opendaylight.openflowplugin.openflow.md.core.sal.OpenflowPluginProvider";
+       }
+    }
+
+**Implementation model** - openflow-plugin-cfg-impl.yang
+
+-  the implementation of module is defined
+   (``identity openflow-provider-impl``)
+
+   -  class name of generated implementation is defined
+      (ConfigurableOpenFlowProvider)
+
+-  via augmentation the configuration of module is defined:
+
+   -  this module requires instance of binding-aware-broker
+      (``container binding-aware-broker``)
+
+   -  and list of openflow-switch-connection-provider (those are
+      provided by openflowjava, one plugin instance will orchestrate
+      multiple openflowjava modules)
+
+.. code:: yang
+
+    module openflow-provider-impl {
+       yang-version 1;
+       namespace "urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl[urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl]";
+       prefix "ofplugin-cfg-impl";
+
+       import config {prefix config; revision-date 2013-04-05;}
+       import openflow-provider {prefix openflow-provider;}
+       import openflow-switch-connection-provider {prefix openflow-switch-connection-provider;revision-date 2014-03-28;}
+       import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+
+
+       description
+           "openflow-plugin-custom-config-impl";
+
+       revision "2014-03-26" {
+           description
+               "Initial revision";
+       }
+
+       identity openflow-provider-impl {
+           base config:module-type;
+           config:provided-service openflow-provider:openflow-provider;
+           config:java-name-prefix ConfigurableOpenFlowProvider;
+       }
+
+       augment "/config:modules/config:module/config:configuration" {
+           case openflow-provider-impl {
+               when "/config:modules/config:module/config:type = 'openflow-provider-impl'";
+
+               container binding-aware-broker {
+                   uses config:service-ref {
+                       refine type {
+                           mandatory true;
+                           config:required-identity md-sal-binding:binding-broker-osgi-registry;
+                       }
+                   }
+               }
+               list openflow-switch-connection-provider {
+                   uses config:service-ref {
+                       refine type {
+                           mandatory true;
+                           config:required-identity openflow-switch-connection-provider:openflow-switch-connection-provider;
+                       }
+                   }
+               }
+           }
+       }
+    }
+
+Generating config and sal classes out of yangs
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In order to involve suitable code generators, this is needed in pom:
+
+.. code:: xml
+
+    <build> ...
+      <plugins>
+        <plugin>
+          <groupId>org.opendaylight.yangtools</groupId>
+          <artifactId>yang-maven-plugin</artifactId>
+          <executions>
+            <execution>
+              <goals>
+                <goal>generate-sources</goal>
+              </goals>
+              <configuration>
+                <codeGenerators>
+                  <generator>
+                    <codeGeneratorClass>
+                      org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+                    </codeGeneratorClass>
+                    <outputBaseDir>${project.build.directory}/generated-sources/config</outputBaseDir>
+                    <additionalConfiguration>
+                      <namespaceToPackage1>
+                        urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang
+                      </namespaceToPackage1>
+                    </additionalConfiguration>
+                  </generator>
+                  <generator>
+                    <codeGeneratorClass>
+                      org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl
+                    </codeGeneratorClass>
+                    <outputBaseDir>${project.build.directory}/generated-sources/sal</outputBaseDir>
+                  </generator>
+                  <generator>
+                    <codeGeneratorClass>org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl</codeGeneratorClass>
+                    <outputBaseDir>${project.build.directory}/site/models</outputBaseDir>
+                  </generator>
+                </codeGenerators>
+                <inspectDependencies>true</inspectDependencies>
+              </configuration>
+            </execution>
+          </executions>
+          <dependencies>
+            <dependency>
+              <groupId>org.opendaylight.controller</groupId>
+              <artifactId>yang-jmx-generator-plugin</artifactId>
+              <version>0.2.5-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+              <groupId>org.opendaylight.yangtools</groupId>
+              <artifactId>maven-sal-api-gen-plugin</artifactId>
+              <version>${yangtools.version}</version>
+              <type>jar</type>
+            </dependency>
+          </dependencies>
+        </plugin>
+        ...
+
+-  JMX generator (target/generated-sources/config)
+
+-  sal CodeGeneratorImpl (target/generated-sources/sal)
+
+-  documentation generator (target/site/models):
+   `openflow-provider.html <https://jenkins.opendaylight.org/openflowplugin/job/openflowplugin-merge/ws/openflowplugin/target/site/models/openflow-provider.html>`__,
+   `openflow-provider-impl.html <https://jenkins.opendaylight.org/openflowplugin/job/openflowplugin-merge/ws/openflowplugin/target/site/models/openflow-provider-impl.html>`__
+
+Altering generated files
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Those files were generated under src/main/java in package as referred in
+yangs (if exist, generator will not overwrite them):
+
+-  ConfigurableOpenFlowProviderModuleFactory
+
+       here the **instantiateModule** methods are extended in order to
+       capture and inject osgi BundleContext into module, so it can be
+       injected into final implementation - **OpenflowPluginProvider** +
+       ``module.setBundleContext(bundleContext);``
+
+-  ConfigurableOpenFlowProviderModule
+
+       here the **createInstance** method is extended in order to inject
+       osgi BundleContext into module implementation +
+       ``pluginProvider.setContext(bundleContext);``
+
+Configuration xml file
+~~~~~~~~~~~~~~~~~~~~~~
+
+Configuration file contains
+
+-  required capabilities
+
+   -  modules definitions from openflowjava
+
+   -  modules definitions from openflowplugin
+
+-  modules definition
+
+   -  openflow:switch:connection:provider:impl (listening on port 6633,
+      name=openflow-switch-connection-provider-legacy-impl)
+
+   -  openflow:switch:connection:provider:impl (listening on port 6653,
+      name=openflow-switch-connection-provider-default-impl)
+
+   -  openflow:common:config:impl (having 2 services (wrapping those 2
+      previous modules) and binding-broker-osgi-registry injected)
+
+-  provided services
+
+   -  openflow-switch-connection-provider-default
+
+   -  openflow-switch-connection-provider-legacy
+
+   -  openflow-provider
+
+.. code:: xml
+
+    <snapshot>
+     <required-capabilities>
+       <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl?module=openflow-switch-connection-provider-impl&revision=2014-03-28</capability>
+       <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?module=openflow-switch-connection-provider&revision=2014-03-28</capability>
+       <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?module=openflow-provider-impl&revision=2014-03-26</capability>
+       <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&revision=2014-03-26</capability>
+     </required-capabilities>
+
+     <configuration>
+
+
+         <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+           <module>
+             <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
+             <name>openflow-switch-connection-provider-default-impl</name>
+             <port>6633</port>
+             <switch-idle-timeout>15000</switch-idle-timeout>
+           </module>
+           <module>
+             <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
+             <name>openflow-switch-connection-provider-legacy-impl</name>
+             <port>6653</port>
+             <switch-idle-timeout>15000</switch-idle-timeout>
+           </module>
+
+
+           <module>
+             <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl">prefix:openflow-provider-impl</type>
+             <name>openflow-provider-impl</name>
+
+             <openflow-switch-connection-provider>
+               <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
+               <name>openflow-switch-connection-provider-default</name>
+             </openflow-switch-connection-provider>
+             <openflow-switch-connection-provider>
+               <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
+               <name>openflow-switch-connection-provider-legacy</name>
+             </openflow-switch-connection-provider>
+
+
+             <binding-aware-broker>
+               <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
+               <name>binding-osgi-broker</name>
+             </binding-aware-broker>
+           </module>
+         </modules>
+
+         <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+           <service>
+             <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">prefix:openflow-switch-connection-provider</type>
+             <instance>
+               <name>openflow-switch-connection-provider-default</name>
+               <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-default-impl']</provider>
+             </instance>
+             <instance>
+               <name>openflow-switch-connection-provider-legacy</name>
+               <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-legacy-impl']</provider>
+             </instance>
+           </service>
+
+           <service>
+             <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config">prefix:openflow-provider</type>
+             <instance>
+               <name>openflow-provider</name>
+               <provider>/modules/module[type='openflow-provider-impl'][name='openflow-provider-impl']</provider>
+             </instance>
+           </service>
+         </services>
+
+
+     </configuration>
+    </snapshot>
+
+API changes
+~~~~~~~~~~~
+
+In order to provide multiple instances of modules from openflowjava
+there is an API change. Previously OFPlugin got access to
+SwitchConnectionProvider exposed by OFJava and injected collection of
+configurations so that for each configuration new instance of tcp
+listening server was created. Now those configurations are provided by
+configSubsystem and configured modules (wrapping the original
+SwitchConnectionProvider) are injected into OFPlugin (wrapping
+SwitchConnectionHandler).
+
+Providing config file (IT, local distribution/base, integration/distributions/base)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+openflowplugin-it
+^^^^^^^^^^^^^^^^^
+
+Here the whole configuration is contained in one file (controller.xml).
+Required entries needed in order to startup and wire OEPlugin + OFJava
+are simply added there.
+
+OFPlugin/distribution/base
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Here new config file has been added
+(src/main/resources/configuration/initial/42-openflow-protocol-impl.xml)
+and is being copied to config/initial subfolder of build.
+
+integration/distributions/build
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In order to push the actual config into config/initial subfolder of
+distributions/base in integration project there was a new artifact in
+OFPlugin created - **openflowplugin-controller-config**, containing only
+the config xml file under src/main/resources. Another change was
+committed into integration project. During build this config xml is
+being extracted and copied to the final folder in order to be accessible
+during controller run.
+
+Internal message statistics API
+-------------------------------
+
+To aid in testing and diagnosis, the OpenFlow plugin provides
+information about the number and rate of different internal events.
+
+The implementation does two things: collects event counts and exposes
+counts. Event counts are grouped by message type, e.g.,
+**PacketInMessage**, and checkpoint, e.g.,
+*TO\_SWITCH\_ENQUEUED\_SUCCESS*. Once gathered, the results are logged
+as well as being exposed using OSGi command line (deprecated) and JMX.
+
+Collect
+~~~~~~~
+
+Each message is counted as it passes through various processing
+checkpoints. The following checkpoints are defined as a Java enum and
+tracked:
+
+.. code:: java
+
+      /**
+        * statistic groups overall in OFPlugin
+        */
+      enum STATISTIC_GROUP {
+           /** message from switch, enqueued for processing */
+           FROM_SWITCH_ENQUEUED,
+           /** message from switch translated successfully - source */
+           FROM_SWITCH_TRANSLATE_IN_SUCCESS,
+           /** message from switch translated successfully - target */
+           FROM_SWITCH_TRANSLATE_OUT_SUCCESS,
+           /** message from switch where translation failed - source */
+           FROM_SWITCH_TRANSLATE_SRC_FAILURE,
+           /** message from switch finally published into MD-SAL */
+           FROM_SWITCH_PUBLISHED_SUCCESS,
+           /** message from switch - publishing into MD-SAL failed */
+           FROM_SWITCH_PUBLISHED_FAILURE,
+
+           /** message from MD-SAL to switch via RPC enqueued */
+           TO_SWITCH_ENQUEUED_SUCCESS,
+           /** message from MD-SAL to switch via RPC NOT enqueued */
+           TO_SWITCH_ENQUEUED_FAILED,
+           /** message from MD-SAL to switch - sent to OFJava successfully */
+           TO_SWITCH_SUBMITTED_SUCCESS,
+           /** message from MD-SAL to switch - sent to OFJava but failed*/
+           TO_SWITCH_SUBMITTED_FAILURE
+      }
+
+When a message passes through any of those checkpoints then counter
+assigned to corresponding checkpoint and message is incremented by 1.
+
+Expose statistics
+~~~~~~~~~~~~~~~~~
+
+As described above, there are three ways to access the statistics:
+
+-  OSGi command line (this is considered deprecated)
+
+       ``osgi> dumpMsgCount``
+
+-  OpenDaylight logging console (statistics are logged here every 10
+   seconds)
+
+       required logback settings :
+       ``<logger name="org.opendaylight.openflowplugin.openflow.md.queue.MessageSpyCounterImpl" level="DEBUG"\/>``
+
+-  JMX (via JConsole)
+
+       start OpenFlow plugin with the ``-jmx`` parameter
+
+       start JConsole by running ``jconsole``
+
+       the JConsole MBeans tab should contain
+       org.opendaylight.controller
+
+       RuntimeBean has a msg-spy-service-impl
+
+       Operations provides makeMsgStatistics report functionality
+
+Example results
+^^^^^^^^^^^^^^^
+
+.. figure:: ./images/openflowplugin/odl-ofp-ofplugin-debug-stats.png
+   :alt: OFplugin Debug stats.png
+
+   OFplugin Debug stats.png
+
+::
+
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PortStatusMessage] -> +0 | 1
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[MultipartReplyMessage] -> +24 | 81
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PacketInMessage] -> +8 | 111
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PortStatusMessage] -> +0 | 1
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[MultipartReplyMessage] -> +24 | 81
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PacketInMessage] -> +8 | 111
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[PacketReceived] -> +8 | 111
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_SRC_FAILURE: no activity detected
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[PacketReceived] -> +8 | 111
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
+    DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_FAILURE: no activity detected
+    DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
+    DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_FAILED: no activity detected
+    DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
+    DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_FAILURE: no activity detected
+
+Application: Forwarding Rules Synchronizer
+------------------------------------------
+
+Basics
+~~~~~~
+
+Description
+^^^^^^^^^^^
+
+Forwarding Rules Synchronizer (FRS) is a newer version of Forwarding
+Rules Manager (FRM). It was created to solve most shortcomings of FRM.
+FRS solving errors with retry mechanism. Sending barrier if needed.
+Using one service for flows, groups and meters. And it has less changes
+requests send to device since calculating difference and using
+compression queue.
+
+It is located in the Java package:
+
+.. code:: java
+
+    package org.opendaylight.openflowplugin.applications.frsync;
+
+Listeners
+^^^^^^^^^
+
+-  1x config - FlowCapableNode
+
+-  1x operational - Node
+
+System of work
+^^^^^^^^^^^^^^
+
+-  one listener in config datastore waiting for changes
+
+   -  update cache
+
+   -  skip event if operational not present for node
+
+   -  send syncup entry to reactor for synchronization
+
+      -  node added: after part of modification and whole operational
+         snapshot
+
+      -  node updated: after and before part of modification
+
+      -  node deleted: null and before part of modification
+
+-  one listener in operational datastore waiting for changes
+
+   -  update cache
+
+   -  on device connected
+
+      -  register for cluster services
+
+   -  on device disconnected remove from cache
+
+      -  remove from cache
+
+      -  unregister for cluster services
+
+   -  if registered for reconciliation
+
+      -  do reconciliation through syncup (only when config present)
+
+-  reactor *(provides syncup w/decorators assembled in this order)*
+
+   -  Cluster decorator - skip action if not master for device
+
+   -  FutureZip decorator (FutureZip extends Future decorator)
+
+      -  Future - run delegate syncup in future - submit task to
+         executor service
+
+      -  FutureZip - provides state compression - compress optimized
+         config delta if waiting for execution with new one
+
+   -  Guard decorator - per device level locking
+
+   -  Retry decorator - register for reconciliation if syncup failed
+
+   -  Reactor impl - calculate diff from after/before parts of syncup
+      entry and execute
+
+Strategy
+^^^^^^^^
+
+In the *old* FRM uses an incremental strategy with all changes made one
+by one, where FRS uses a flat batch system with changes made in bulk. It
+uses one service SalFlatBatchService instead of three (flow, group,
+meter).
+
+Boron release
+^^^^^^^^^^^^^
+
+FRS is used in Boron as separate feature and it is not loaded by any
+other feature. It has to be run separately.
+
+::
+
+    odl-openflowplugin-app-forwardingrules-sync
+
+FRS additions
+~~~~~~~~~~~~~
+
+Retry mechanism
+^^^^^^^^^^^^^^^
+
+-  is started when change request to device return as failed (register
+   for reconcile)
+
+-  wait for next consistent operational and do reconciliation with
+   actual config (not only diff)
+
+ZipQueue
+^^^^^^^^
+
+-  only the diff (before/after) between last config changes is sent to
+   device
+
+-  when there are more config changes for device in a row waiting to be
+   processed they are compressed into one entry (after is still replaced
+   with the latest)
+
+Cluster-aware
+^^^^^^^^^^^^^
+
+-  FRS is cluster aware using ClusteringSingletonServiceProvider from
+   the MD-SAL
+
+-  on mastership change reconciliation is done (register for reconcile)
+
+SalFlatBatchService
+^^^^^^^^^^^^^^^^^^^
+
+FRS uses service with implemented barrier waiting logic between
+dependent objects
+
+SalFlatBatchService for FRS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SalFlatBatchService was created along forwardingrules-sync application
+as the service that should application used by default. This service
+uses only one input with bag of flow/group/meter objects and their
+common add/update/remove action. So you practically send only one input
+(of specific bags) to this service.
+
+Workflow
+^^^^^^^^
+
+-  prepare plan of actions
+
+   -  mark actions where the barrier is needed before continue
+
+-  run appropriate service calls
+
+   -  start all actions that can be run simultaneously
+
+   -  if there is barrier-needed mark, wait for all fired jobs and only
+      then continue with the next action
+
+error handling:
+
+-  there is flag to stop process on the first error (default set to
+   false)
+
+Cluster singleton approach in plugin
+------------------------------------
+
+Basics
+~~~~~~
+
+Description
+^^^^^^^^^^^
+
+The existing OpenDaylight service deployment model assumes symmetric
+clusters, where all services are activated on all nodes in the cluster.
+However, many services require that there is a single active service
+instance per cluster. We call such services *singleton services*. The
+Entity Ownership Service (EOS) represents the base Leadership choice for
+one Entity instance. Every Cluster Singleton service **type** must have
+its own Entity and every Cluster Singleton service **instance** must
+have its own Entity Candidate. Every registered Entity Candidate should
+be notified about its actual role. All this "work" is done by MD-SAL so
+the Openflowplugin need "only" to register as service in
+**SingletonClusteringServiceProvider** given by MD-SAL.
+
+Change against using EOS service listener
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In this new clustering singleton approach plugin uses API from the
+MD-SAL project: SingletonClusteringService which comes with three
+methods.
+
+::
+
+    instantiateServiceInstance()
+    closeServiceInstance()
+    getIdentifier()
+
+This service has to be registered to a
+SingletonClusteringServiceProvider from MD-SAL which take care if
+mastership is changed in cluster environment.
+
+First method in SingletonClusteringService is being called when the
+cluster node becomes a MASTER. Second is being called when status
+changes to SLAVE or device is disconnected from cluster. Last method
+plugins returns NodeId as ServiceGroupIdentifier Startup after device is
+connected
+
+On the start up the plugin we need to initialize first four managers for
+each working area providing information and services
+
+-  Device manager
+
+-  RPC manager
+
+-  Role manager
+
+-  Statistics manager
+
+After connection the device the listener Device manager get the event
+and start up to creating the context for this connection. Startup after
+device connection
+
+Services are managed by SinlgetonClusteringServiceProvider from MD-SAL
+project. So in startup we simply create a instance of LifecycleService
+and register all contexts into it.
+
+Role change
+~~~~~~~~~~~
+
+Plugin is no longer registered as Entity Ownership Service (EOS)
+listener therefore does not need to and cannot respond on EOS ownership
+changes.
+
+Service start
+^^^^^^^^^^^^^
+
+Services start asynchronously but the start is managed by
+LifecycleService. If something goes wrong LifecycleService stop starting
+services in context and this speeds up the reconnect process. But the
+services haven’t changed and plugin need to start all this:
+
+-  Activating transaction chain manager
+
+-  Initial gathering of device statistics
+
+-  Initial submit to DS
+
+-  Sending role MASTER to device
+
+-  RPC services registration
+
+-  Statistics gathering start
+
+Service stop
+^^^^^^^^^^^^
+
+If closeServiceInstance occurred plugin just simply try to store all
+unsubmitted transactions and close the transaction chain manager, stop
+RPC services, stop Statistics gathering and after that all unregister
+txEntity from EOS.
+
+Yang models and API
+-------------------
+
++--------------------------------------------------------+-------------------+
+| Model                                                  | DOC               |
++========================================================+===================+
+| ***Openflow basic types***                             |
++--------------------------------------------------------+-------------------+
+| `opendaylight-table-types.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-base/src/main/yang/opendaylight-table-types.yan | ight.org/releng/v |
+| g;a=blob;hb=refs/heads/stable/boron>`__                | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-tab |
+|                                                        | le-types.html>`__ |
++--------------------------------------------------------+-------------------+
+| `opendaylight-action-types.yang <https://git.opendayli | `YangDOC <https:/ |
+| ght.org/gerrit/gitweb?p=openflowplugin.git;f=model/mod | /jenkins.opendayl |
+| el-flow-base/src/main/yang/opendaylight-action-types.y | ight.org/releng/v |
+| ang;a=blob;hb=refs/heads/stable/boron>`__              | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-act |
+|                                                        | ion-types.html>`_ |
+|                                                        | _                 |
++--------------------------------------------------------+-------------------+
+| `opendaylight-flow-types.yan <https://git.opendaylight | `YangDOC <https:/ |
+| .org/gerrit/gitweb?p=openflowplugin.git;f=model/model- | /jenkins.opendayl |
+| flow-base/src/main/yang/opendaylight-flow-types.yang;a | ight.org/releng/v |
+| =blob;hb=refs/heads/stable/boron>`__                   | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-flo |
+|                                                        | w-types.html>`__  |
++--------------------------------------------------------+-------------------+
+| `opendaylight-meter-types.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-base/src/main/yang/opendaylight-meter-types.yan | ight.org/releng/v |
+| g;a=blob;hb=refs/heads/stable/boron>`__                | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-met |
+|                                                        | er-types.html>`__ |
++--------------------------------------------------------+-------------------+
+| `opendaylight-group-types.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-base/src/main/yang/opendaylight-group-types.yan | ight.org/releng/v |
+| g;a=blob;hb=refs/heads/stable/boron>`__                | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-gro |
+|                                                        | up-types.html>`__ |
++--------------------------------------------------------+-------------------+
+| `opendaylight-match-types.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-base/src/main/yang/opendaylight-match-types.yan | ight.org/releng/v |
+| g;a=blob;hb=refs/heads/stable/boron>`__                | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-mat |
+|                                                        | ch-types.html>`__ |
++--------------------------------------------------------+-------------------+
+| `opendaylight-port-types.yang <https://git.opendayligh | `YangDOC <https:/ |
+| t.org/gerrit/gitweb?p=openflowplugin.git;f=model/model | /jenkins.opendayl |
+| -flow-base/src/main/yang/opendaylight-port-types.yang; | ight.org/releng/v |
+| a=blob;hb=refs/heads/stable/boron>`__                  | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-por |
+|                                                        | t-types.html>`__  |
++--------------------------------------------------------+-------------------+
+| `opendaylight-queue-types.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-base/src/main/yang/opendaylight-queue-types.yan | ight.org/releng/v |
+| g;a=blob;hb=refs/heads/stable/boron>`__                | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-base/t |
+|                                                        | arget/site/models |
+|                                                        | /opendaylight-que |
+|                                                        | ue-types.html>`__ |
++--------------------------------------------------------+-------------------+
+| ***Openflow services***                                |
++--------------------------------------------------------+-------------------+
+| `sal-table.yang <https://git.opendaylight.org/gerrit/g | `YangDOC <https:/ |
+| itweb?p=openflowplugin.git;f=model/model-flow-service/ | /jenkins.opendayl |
+| src/main/yang/sal-table.yang;a=blob;hb=refs/heads/stab | ight.org/releng/v |
+| le/boron>`__                                           | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-table.htm |
+|                                                        | l>`__             |
++--------------------------------------------------------+-------------------+
+| `sal-group.yang <https://git.opendaylight.org/gerrit/g | `YangDOC <https:/ |
+| itweb?p=openflowplugin.git;f=model/model-flow-service/ | /jenkins.opendayl |
+| src/main/yang/sal-group.yang;a=blob;hb=refs/heads/stab | ight.org/releng/v |
+| le/boron>`__                                           | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-group.htm |
+|                                                        | l>`__             |
++--------------------------------------------------------+-------------------+
+| `sal-queue.yang <https://git.opendaylight.org/gerrit/g | `YangDOC <https:/ |
+| itweb?p=openflowplugin.git;f=model/model-flow-service/ | /jenkins.opendayl |
+| src/main/yang/sal-queue.yang;a=blob;hb=refs/heads/stab | ight.org/releng/v |
+| le/boron>`__                                           | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-queue.htm |
+|                                                        | l>`__             |
++--------------------------------------------------------+-------------------+
+| `flow-errors.yang <https://git.opendaylight.org/gerrit | `YangDOC <https:/ |
+| /gitweb?p=openflowplugin.git;f=model/model-flow-servic | /jenkins.opendayl |
+| e/src/main/yang/flow-errors.yang;a=blob;hb=refs/heads/ | ight.org/releng/v |
+| stable/boron>`__                                       | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/flow-errors.h |
+|                                                        | tml>`__           |
++--------------------------------------------------------+-------------------+
+| `flow-capable-transaction.yang <https://git.opendaylig | `YangDOC <https:/ |
+| ht.org/gerrit/gitweb?p=openflowplugin.git;f=model/mode | /jenkins.opendayl |
+| l-flow-service/src/main/yang/flow-capable-transaction. | ight.org/releng/v |
+| yang;a=blob;hb=refs/heads/stable/boron>`__             | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/flow-capable- |
+|                                                        | transaction.html> |
+|                                                        | `__               |
++--------------------------------------------------------+-------------------+
+| `sal-flow.yang <https://git.opendaylight.org/gerrit/gi | `YangDOC <https:/ |
+| tweb?p=openflowplugin.git;f=model/model-flow-service/s | /jenkins.opendayl |
+| rc/main/yang/sal-flow.yang;a=blob;hb=refs/heads/stable | ight.org/releng/v |
+| /boron>`__                                             | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-flow.html |
+|                                                        | >`__              |
++--------------------------------------------------------+-------------------+
+| `sal-meter.yang <https://git.opendaylight.org/gerrit/g | `YangDOC <https:/ |
+| itweb?p=openflowplugin.git;f=model/model-flow-service/ | /jenkins.opendayl |
+| src/main/yang/sal-meter.yang;a=blob;hb=refs/heads/stab | ight.org/releng/v |
+| le/boron>`__                                           | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-meter.htm |
+|                                                        | l>`__             |
++--------------------------------------------------------+-------------------+
+| `flow-topology-discovery.yang <https://git.opendayligh | `YangDOC <https:/ |
+| t.org/gerrit/gitweb?p=openflowplugin.git;f=model/model | /jenkins.opendayl |
+| -flow-service/src/main/yang/flow-topology-discovery.ya | ight.org/releng/v |
+| ng;a=blob;hb=refs/heads/stable/boron>`__               | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/flow-topology |
+|                                                        | -discovery.html>` |
+|                                                        | __                |
++--------------------------------------------------------+-------------------+
+| `node-errors.yang <https://git.opendaylight.org/gerrit | `YangDOC <https:/ |
+| /gitweb?p=openflowplugin.git;f=model/model-flow-servic | /jenkins.opendayl |
+| e/src/main/yang/node-errors.yang;a=blob;hb=refs/heads/ | ight.org/releng/v |
+| stable/boron>`__                                       | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/node-errors.h |
+|                                                        | tml>`__           |
++--------------------------------------------------------+-------------------+
+| `node-config.yang <https://git.opendaylight.org/gerrit | `YangDOC <https:/ |
+| /gitweb?p=openflowplugin.git;f=model/model-flow-servic | /jenkins.opendayl |
+| e/src/main/yang/node-config.yang;a=blob;hb=refs/heads/ | ight.org/releng/v |
+| stable/boron>`__                                       | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/node-config.h |
+|                                                        | tml>`__           |
++--------------------------------------------------------+-------------------+
+| `sal-echo.yang <https://git.opendaylight.org/gerrit/gi | `YangDOC <https:/ |
+| tweb?p=openflowplugin.git;f=model/model-flow-service/s | /jenkins.opendayl |
+| rc/main/yang/sal-echo.yang;a=blob;hb=refs/heads/stable | ight.org/releng/v |
+| /boron>`__                                             | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-echo.html |
+|                                                        | >`__              |
++--------------------------------------------------------+-------------------+
+| `sal-port.yang <https://git.opendaylight.org/gerrit/gi | `YangDOC <https:/ |
+| tweb?p=openflowplugin.git;f=model/model-flow-service/s | /jenkins.opendayl |
+| rc/main/yang/sal-port.yang;a=blob;hb=refs/heads/stable | ight.org/releng/v |
+| /boron>`__                                             | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/sal-port.html |
+|                                                        | >`__              |
++--------------------------------------------------------+-------------------+
+| `packet-processing.yang <https://git.opendaylight.org/ | `YangDOC <https:/ |
+| gerrit/gitweb?p=openflowplugin.git;f=model/model-flow- | /jenkins.opendayl |
+| service/src/main/yang/packet-processing.yang;a=blob;hb | ight.org/releng/v |
+| =refs/heads/stable/boron>`__                           | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/packet-proces |
+|                                                        | sing.html>`__     |
++--------------------------------------------------------+-------------------+
+| `flow-node-inventory.yang <https://git.opendaylight.or | `YangDOC <https:/ |
+| g/gerrit/gitweb?p=openflowplugin.git;f=model/model-flo | /jenkins.opendayl |
+| w-service/src/main/yang/flow-node-inventory.yang;a=blo | ight.org/releng/v |
+| b;hb=refs/heads/stable/boron>`__                       | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-servic |
+|                                                        | e/target/site/mod |
+|                                                        | els/flow-node-inv |
+|                                                        | entory.html>`__   |
++--------------------------------------------------------+-------------------+
+| ***Openflow statistics***                              |
++--------------------------------------------------------+-------------------+
+| `opendaylight-queue-statistics.yang <https://git.opend | `YangDOC <https:/ |
+| aylight.org/gerrit/gitweb?p=openflowplugin.git;f=model | /jenkins.opendayl |
+| /model-flow-statistics/src/main/yang/opendaylight-queu | ight.org/releng/v |
+| e-statistics.yang;a=blob;hb=refs/heads/stable/boron>`_ | iew/openflowplugi |
+| _                                                      | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-queue-statisti |
+|                                                        | cs.html>`__       |
++--------------------------------------------------------+-------------------+
+| `opendaylight-flow-table-statistics.yang <https://git. | `YangDOC <https:/ |
+| opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f= | /jenkins.opendayl |
+| model/model-flow-statistics/src/main/yang/opendaylight | ight.org/releng/v |
+| -flow-table-statistics.yang;a=blob;hb=refs/heads/stabl | iew/openflowplugi |
+| e/boron>`__                                            | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-flow-table-sta |
+|                                                        | tistics.html>`__  |
++--------------------------------------------------------+-------------------+
+| `opendaylight-port-statistics.yang <https://git.openda | `YangDOC <https:/ |
+| ylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/ | /jenkins.opendayl |
+| model-flow-statistics/src/main/yang/opendaylight-port- | ight.org/releng/v |
+| statistics.yang;a=blob;hb=refs/heads/stable/boron>`__  | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-port-statistic |
+|                                                        | s.html>`__        |
++--------------------------------------------------------+-------------------+
+| `opendaylight-statistics-types.yang <https://git.opend | `YangDOC <https:/ |
+| aylight.org/gerrit/gitweb?p=openflowplugin.git;f=model | /jenkins.opendayl |
+| /model-flow-statistics/src/main/yang/opendaylight-stat | ight.org/releng/v |
+| istics-types.yang;a=blob;hb=refs/heads/stable/boron>`_ | iew/openflowplugi |
+| _                                                      | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-statistics-typ |
+|                                                        | es.html>`__       |
++--------------------------------------------------------+-------------------+
+| `opendaylight-group-statistics.yang <https://git.opend | `YangDOC <https:/ |
+| aylight.org/gerrit/gitweb?p=openflowplugin.git;f=model | /jenkins.opendayl |
+| /model-flow-statistics/src/main/yang/opendaylight-grou | ight.org/releng/v |
+| p-statistics.yang;a=blob;hb=refs/heads/stable/boron>`_ | iew/openflowplugi |
+| _                                                      | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-group-statisti |
+|                                                        | cs.html>`__       |
++--------------------------------------------------------+-------------------+
+| `opendaylight-flow-statistics.yang <https://git.openda | `YangDOC <https:/ |
+| ylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/ | /jenkins.opendayl |
+| model-flow-statistics/src/main/yang/opendaylight-flow- | ight.org/releng/v |
+| statistics.yang;a=blob;hb=refs/heads/stable/boron>`__  | iew/openflowplugi |
+|                                                        | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-flow-statistic |
+|                                                        | s.html>`__        |
++--------------------------------------------------------+-------------------+
+| `opendaylight-meter-statistics.yang <https://git.opend | `YangDOC <https:/ |
+| aylight.org/gerrit/gitweb?p=openflowplugin.git;f=model | /jenkins.opendayl |
+| /model-flow-statistics/src/main/yang/opendaylight-mete | ight.org/releng/v |
+| r-statistics.yang;a=blob;hb=refs/heads/stable/boron>`_ | iew/openflowplugi |
+| _                                                      | n/job/openflowplu |
+|                                                        | gin-merge-boron/l |
+|                                                        | astSuccessfulBuil |
+|                                                        | d/artifact/model/ |
+|                                                        | model-flow-statis |
+|                                                        | tics/target/site/ |
+|                                                        | models/opendaylig |
+|                                                        | ht-meter-statisti |
+|                                                        | cs.html>`__       |
++--------------------------------------------------------+-------------------+
+
+Karaf feature tree
+------------------
+
+.. figure:: ./images/openflowplugin/odl-ofp-feature-tree.png
+   :alt: Openflow plugin karaf feature tree
+
+   Openflow plugin karaf feature tree
+
+Short
+`HOWTO <https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:FeatureTreeHowto>`__
+create such a tree.
+
+Wiring up notifications
+-----------------------
+
+Introduction
+~~~~~~~~~~~~
+
+We need to translate OpenFlow messages coming up from the `OpenFlow
+Protocol Library <#_openflow_protocol_library_developer_guide>`__ into
+MD-SAL Notification objects and then publish them to the MD-SAL.
+
+Mechanics
+~~~~~~~~~
+
+1. Create a Translator class
+
+2. Register the Translator
+
+3. Register the notificationPopListener to handle your Notification
+   Objects
+
+Create a Translator class
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can see an example in
+`PacketInTranslator.java <https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;a=blob;f=openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PacketInTranslator.java;hb=refs/heads/stable/boron>`__.
+
+First, simply create the class
+
+::
+
+    public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
+
+Then implement the translate function:
+
+::
+
+    public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
+
+        protected static final Logger LOG = LoggerFactory
+                .getLogger(PacketInTranslator.class);
+        @Override
+        public PacketReceived translate(SwitchConnectionDistinguisher cookie,
+                SessionContext sc, OfHeader msg) {
+                ...
+        }
+
+Make sure to check that you are dealing with the expected type and cast
+it:
+
+::
+
+    if(msg instanceof PacketInMessage) {
+        PacketInMessage message = (PacketInMessage)msg;
+        List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
+
+Do your transation work and return
+
+::
+
+    PacketReceived pktInEvent = pktInBuilder.build();
+    list.add(pktInEvent);
+    return list;
+
+Register your Translator Class
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Next you need to go to
+`MDController.java <https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;a=blob;f=openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java;hb=refs/heads/stable/boron>`__
+and in init() add register your Translator:
+
+::
+
+    public void init() {
+            LOG.debug("Initializing!");
+            messageTranslators = new ConcurrentHashMap<>();
+            popListeners = new ConcurrentHashMap<>();
+            //TODO: move registration to factory
+            addMessageTranslator(ErrorMessage.class, OF10, new ErrorTranslator());
+            addMessageTranslator(ErrorMessage.class, OF13, new ErrorTranslator());
+            addMessageTranslator(PacketInMessage.class,OF10, new PacketInTranslator());
+            addMessageTranslator(PacketInMessage.class,OF13, new PacketInTranslator());
+
+Notice that there is a separate registration for each of OpenFlow 1.0
+and OpenFlow 1.3. Basically, you indicate the type of OpenFlow Protocol
+Library message you wish to translate for, the OpenFlow version, and an
+instance of your Translator.
+
+Register your MD-SAL Message for Notification to the MD-SAL
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Now, also in MDController.init() register to have the
+notificationPopListener handle your MD-SAL Message:
+
+::
+
+    addMessagePopListener(PacketReceived.class, new NotificationPopListener<DataObject>());
+
+You are done
+^^^^^^^^^^^^
+
+That’s all there is to it. Now when a message comes up from the OpenFlow
+Protocol Library, it will be translated and published to the MD-SAL.
+
+Message Order Preservation
+--------------------------
+
+While the Helium release of OpenFlow Plugin relied on queues to ensure
+messages were delivered in order, subsequent releases instead ensure
+that all the messages from a given device are delivered using the same
+thread and thus message order is guaranteed without queues. The OpenFlow
+plugin allocates a number of threads equal to twice the number of
+processor cores on machine it is run, e.g., 8 threads if the machine has
+4 cores.
+
+.. note::
+
+    While each device is assigned to one thread, multiple devices can be
+    assigned to the same thread.
+
diff --git a/docs/developer-guide/usecplugin-aaa-developer-guide.rst b/docs/developer-guide/usecplugin-aaa-developer-guide.rst
new file mode 100644 (file)
index 0000000..d9080b8
--- /dev/null
@@ -0,0 +1,62 @@
+Usecplugin-AAA Developer Guide
+==============================
+
+Overview
+--------
+
+Usecplugin-AAA provides security related information for the AAA
+northbound interface.
+
+Usecplugin-AAA Architecture
+---------------------------
+
+AAA plugin creates log messages about successful and failed login
+attempts to OpenDaylight. Usecplugin-AAA continuously reads this log
+file and checks for either successful and failed attempt information.
+Whenever Usecpluin-AAA identifies a new attempt entry in the log file it
+is stored in YANG Data Store and its own log file.
+
+Usecplugin-AAA is implemented with the help of a few java classes.
+
+UsecpluginAAAProvider
+    Provider class for Usecplugin-AAA feature implementation.
+
+UsecpluginAAANotifImpl
+    Logs notification information which can be seen by log:display at
+    the Karaf terminal
+
+UsecpluginAAARPCImpl
+    Implements Usecplugin RPCs
+
+UsecpluginAAAParsingLog
+    Parses OpenDaylight log information for identifying login attempts.
+
+UsecpluginAAAPublishNotif
+    Publishes failed login attempt notification.
+
+UsecpluginAAAStore
+    Creates login information at the YANG Data Store.
+
+Key APIs and Interfaces
+-----------------------
+
+-  RPC APIs
+
+   Login Attempt from IP
+       Returns Time and Type of Attempts (Success or Failure)
+
+   Login Attempt at Time
+       Returns Attempter IP Address and Type of Attempts (Success or
+       Failure)
+
+-  Notification APIs
+
+   On Invalid Login Attempt
+       Notification generated on Invalid Login Attempt
+
+-  YANG Data Store APIs
+
+   Get Login Attempts
+       Returns Source IP address of Attempter with Time of Attempts and
+       Type of Attempts (Success or Failure)
+
diff --git a/docs/developer-guide/usecplugin-openflow-developer-guide.rst b/docs/developer-guide/usecplugin-openflow-developer-guide.rst
new file mode 100644 (file)
index 0000000..09584d7
--- /dev/null
@@ -0,0 +1,68 @@
+Usecplugin-OpenFlow Developer Guide
+===================================
+
+Overview
+--------
+
+Usecplugin-OpenFlow provides security related information for the
+OpenFlow southbound interface.
+
+Usecplugin-OpenFlow Architecture
+--------------------------------
+
+Usecplugin-OpenFlow listens on OpenFlow southbound interface for
+Packet\_In messages. The application parses the message for header
+information. Usecplugin-OpenFlow has PacketHandler class that implements
+the PacketProcessing interface to override the OnPacketReceived
+notification by which the application is notified of Packet\_In
+messages.
+
+Usecplugin-OpenFlow is implemented with the help of a few java classes.
+
+UsecpluginProvider
+    Provider class for Usecplugin-OpenFlow feature implementation.
+
+PacketHandler
+    Receives Packet\_In messages coming to the controller and process
+    them appropriately
+
+PacketParsing
+    Decodes Packet\_In messages for packet header information (L2, L3 &
+    L4 information)
+
+InventoryUtility
+    Decodes Packet\_In messages for OpenFlow Switch and Port information
+
+UsecpluginNotifImpl
+    Logs notification information which can be seen by log:display at
+    the Karaf terminal
+
+UsecpluginRPCImpl
+    Implements Usecplugin RPCs
+
+UsecpluginStore
+    Stores attack information into YANG Data Store and log file.
+
+Key APIs and Interfaces
+-----------------------
+
+-  RPC APIs
+
+   Attacks from DPID
+       Number of OpenFlow Packet\_In Attacks from Switch with DeviceID
+
+   Attacks from Host
+       Number of OpenFlow Packet\_In Attacks from SrcIP Address
+
+   Attacks to Server
+       Number of OpenFlow Packet\_In Attacks to DstIP Address
+
+   Attacks at Time of Day
+       Number of OpenFlow Packet\_In Attacks at a Particular Time with a
+       variable Window Time
+
+-  Notification APIs
+
+   On Low Water Mark Breached
+       Notification generated on breaching Low Water Mark
+
index e509c3bd47ddfdfd56e9414611f700e3aa7812cc..57765755d4f9a37c3dfa091e427b953c4259a7d2 100644 (file)
@@ -106,11 +106,12 @@ There are three features
 -  **odl-vtn-manager-neutron** provides the integration with Neutron
    interface.
 
-REST API documentation for VTN Manager, please refer to:
-https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/
+REST Conf documentation for VTN Manager, please refer to:
+https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/apidocs/index.html
+
 
 For VTN Java API documentation, please refer to:
-https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/target/apidocs/index.html
+https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/apidocs/index.html
 
 Once the Karaf distribution is up, install dlux and apidocs.
 
@@ -141,7 +142,7 @@ To Log in to DLUX, after installing the application:
 -  In the right hand side frame, click "Yang UI".
 
 YANG documentation for VTN Manager, please refer to:
-https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/
+https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/apidocs/index.html
 
 VTN Coordinator
 ~~~~~~~~~~~~~~~
index 690650919ad37dbee13394f24e1781381c26e241..5d6bf5bd969798faea5c7620de7577a7dd0e9a57 100644 (file)
@@ -70,13 +70,13 @@ Install Feature::
 VTN Coordinator
 ^^^^^^^^^^^^^^^
 
-* Enter into the externalapps directory in the top directory of Beryllium::
+* To get the Boron distribution for VTN coordinator download the latest "tar.bz2" file from the below link::
 
-     cd distribution-karaf-0.4.0-Beryllium/externalapps
+     https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/vtn/distribution.vtn-coordinator/6.3.0-Boron/
 
-* Run the below command to extract VTN Coordinator from the tar.bz2 file in the externalapps directory::
+* Run the below command to extract VTN Coordinator from the tar.bz2 file::
 
-     tar â€“C/ -jxvf distribution.vtn-coordinator-6.2.0-Beryllium-bin.tar.bz2
+     tar â€“C/ -jxvf distribution.vtn-coordinator-6.3.0-Boron-bin.tar.bz2
 
 This will install VTN Coordinator to /usr/local/vtn directory.
 The name of the tar.bz2 file name varies depending on the version. Please give the same tar.bz2 file name which is there in your directory.
index 2522e1b666051d3f6304807d4483962e3b45d336..303a0e08069062723b82919fd19f6170d93299e8 100644 (file)
@@ -56,18 +56,18 @@ Steps to install OpenStack PackStack in CentOS 7.1
 Steps to install and deploy OpenDaylight in CentOS 7.1
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-* Download the latest Lithium distribution code in the below link,
+* Download the latest Boron distribution code in the below link,
 
 .. code-block:: bash
 
-    wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.3.4-Lithium-SR4/distribution-karaf-0.3.4-Lithium-SR4.zip
+    wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.5.0-Boron/distribution-karaf-0.5.0-Boron.zip
 
 
-* Unzip the lithium distribution code by using the below command,
+* Unzip the Boron distribution code by using the below command,
 
 .. code-block:: bash
 
-    unzip distribution-karaf-0.3.4-Lithium-SR4.zip
+    unzip distribution-karaf-0.5.0-Boron.zip
 
 * Please do the below steps in the OpenDaylight to change jetty port,
 
index ee4496fb804ee8ce90ce0a5796ba9484e52bf37a..71a12831f083ee88ccb7e72bedf7d3cc7e15feaf 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ee4496fb804ee8ce90ce0a5796ba9484e52bf37a
+Subproject commit 71a12831f083ee88ccb7e72bedf7d3cc7e15feaf
index ea39ae2c0e86efa9e42b5244cdf0ab0e69208a01..f2ab612bc44f622486fa566dacb02b6a895221d7 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ea39ae2c0e86efa9e42b5244cdf0ab0e69208a01
+Subproject commit f2ab612bc44f622486fa566dacb02b6a895221d7
index 5217ce324adc436ffa0d92fe656550e81160ae23..db844c7d71d20fed09af4f4bc9db3a8500a91bad 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 5217ce324adc436ffa0d92fe656550e81160ae23
+Subproject commit db844c7d71d20fed09af4f4bc9db3a8500a91bad
diff --git a/docs/user-guide/images/openflowplugin/host-only-vbox.png b/docs/user-guide/images/openflowplugin/host-only-vbox.png
new file mode 100644 (file)
index 0000000..646c15b
Binary files /dev/null and b/docs/user-guide/images/openflowplugin/host-only-vbox.png differ
diff --git a/docs/user-guide/images/openflowplugin/plugin_design.jpg b/docs/user-guide/images/openflowplugin/plugin_design.jpg
new file mode 100644 (file)
index 0000000..6a42d0d
Binary files /dev/null and b/docs/user-guide/images/openflowplugin/plugin_design.jpg differ
index 49bbdde18bcaa4df7a8ad18f9e3d675135a6fe8e..ce5bfbef8e8f4f04e1cf8ec9f54f6120cc711dc5 100644 (file)
@@ -37,6 +37,7 @@ Project-specific User Guides
    l3vpn-service_-user-guide
    link-aggregation-control-protocol-user-guide
    lisp-flow-mapping-user-guide
+   natapp-user-guide
    nemo-user-guide
    netconf-user-guide
    netide-user-guide
@@ -59,6 +60,8 @@ Project-specific User Guides
    ttp-cli-tools-user-guide
    uni-manager-plug-in-project
    unified-secure-channel
+   usecplugin-aaa-user-guide
+   usecplugin-openflow-user-guide
    virtual-tenant-network-(vtn)
    yang-ide-user-guide
    yang-push
diff --git a/docs/user-guide/natapp-user-guide.rst b/docs/user-guide/natapp-user-guide.rst
new file mode 100644 (file)
index 0000000..298e19f
--- /dev/null
@@ -0,0 +1,134 @@
+NATApp User Guide
+=================
+
+The NATApp User Guide contains information about configuration,
+administration, management, using and troubleshooting the feature.
+
+Overview
+--------
+
+NATApp provides network different types of address translation
+functionality for OpenDaylight. After installing this feature, network
+administrators can select the type of NAT functionality they want to
+enable by sending a REST API command. Subsequently, the user may enter
+the gloabl IP addresses to the YANG Data Store through REST APIs. When
+an OpenDaylight managed enterprise network with local IPs tries to
+connect to external networks such as Internet, NATApp comes into play
+and installs appropriate flow rules at the OpenFlow switch for
+bidirectional NAT translation.
+
+NATApp Architecture
+-------------------
+
+NATApp listens on OpenFlow southbound interface for Packet\_In messages.
+The application parses the message for header information. If the
+received message has a local IP address the application installs rules
+on the OpenFlow switch for network address translation from local to
+global IP addresses. NATApp has NATPacketHandler class that implements
+the PacketProcessing interface to override the OnPacketReceived
+notification by which the application is notified of Packet\_In
+messages.
+
+Configuring NATApp
+------------------
+
+REST APIs are available at the following URI:
+http://localhost:8181/apidoc/explorer/index.html#!/natapp(2016-01-25)
+
+Mininet Topology
+~~~~~~~~~~~~~~~~
+
+::
+
+    sudo mn --mac --topo=single,10 --controller=remote,ip=127.0.0.1,port=6653
+
+Install a flow to flood the ARP packets.
+
+::
+
+    sh ovs-ofctl add-flow s1 dl_type=0x0806,actions=FLOOD
+
+Check the flow for ARP Flooding
+
+::
+
+    sh ovs-ofctl dump-flows s1
+
+Administering or Managing NATApp
+--------------------------------
+
+Static NAT and Dynamic NAT
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+First user has to select the type of NAT he wants by using the following
+URI:
+
+POST URI
+    http://localhost:8181/restconf/operations/natapp:nat-type
+
+Sample Input
+    {"natapp:input": { "type:static":""}}
+
+Sample Input
+    {"natapp:input": { "type:dynamic":""}}
+
+Then user can inject the Global IPs using the following URI
+
+PUT URI
+    http://localhost:8181/restconf/config/natapp:staticNat/
+
+Sample Input
+    {"natapp:staticNat": {"globalIP":["172.0.0.1/32","172.0.0.2/32",
+    "172.0.0.3/32", "172.0.0.4/32", "172.0.0.5/32", "172.0.0.6/32",
+    "172.0.0.7/32", "172.0.0.8/32", "172.0.0.9/32", "172.0.0.10/32"] }}
+
+From mininet verify any pair of hosts can ping each other. The NATApp
+modifies the destination IP address of the ICMP Echo request with the
+global IP address. Check the mininet flows for this modification.
+
+::
+
+    sh ovs-ofctl dump-flows s1
+
+Port Address Translation (PAT)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+User can select PAT by using the following URI.
+
+POST URI
+    http://localhost:8181/restconf/operations/natapp:nat-type
+
+Sample Input
+    {"natapp:input": { "type:pat":""}}
+
+Then user can inject the Global IPs using the following URI
+
+PUT URI
+    http://localhost:8181/restconf/config/natapp:patNat/
+
+Sample Input
+    {"natapp:patNat": {"globalIP":"172.0.0.1/32"}}
+
+From Mininet use the command as xterm h1 h5. At h5 give the following
+commands
+
+::
+
+    $ ip r add 172.0.0.1/32 dev h5-eth0
+    $ arp -s 172.0.0.1 00:00:00:00:00:01
+    $ nc -l 5000
+
+At h1, Give the following command
+
+::
+
+    $ echo "TCS" | nc -p 8000 10.0.0.5 5000
+
+::
+
+    mininet> sh ovs-ofctl dump-flows s1
+    NXST_FLOW reply (xid=0x4):
+     cookie=0x0, duration=811.272s, table=0, n_packets=5, n_bytes=342, idle_age=13, priority=210,tcp,in_port=1,tp_src=8000 actions=mod_nw_src:172.0.0.1,mod_tp_src:2000,output:5
+     cookie=0x0, duration=499.843s, table=0, n_packets=2, n_bytes=84, idle_age=13, arp actions=FLOOD
+     cookie=0x0, duration=811.203s, table=0, n_packets=3, n_bytes=206, idle_age=13, priority=209,tcp,in_port=5,tp_dst=2000 actions=mod_nw_dst:10.0.0.1,mod_tp_dst:8000,output:1
+
diff --git a/docs/user-guide/openflow-plugin-project-user-guide.rst b/docs/user-guide/openflow-plugin-project-user-guide.rst
new file mode 100644 (file)
index 0000000..93a9b86
--- /dev/null
@@ -0,0 +1,4289 @@
+OpenFlow Plugin Project User Guide
+==================================
+
+Overview and Architecture
+-------------------------
+
+Overview and Architecture
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Overview
+^^^^^^^^
+
+OpenFlow is a vendor-neutral standard communications interface defined
+to enable interaction between the control and forwarding layers of an
+SDN architecture. The OpenFlow plugin project intends to develop a
+plugin to support implementations of the OpenFlow specification as it
+develops and evolves. Specifically the project has developed a plugin
+aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
+support for subsequent OpenFlow specifications. The plugin is based on
+the Model Driven Service Abstraction Layer (MD-SAL) architecture
+(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
+This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
+OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
+architecture.
+
+Scope
+^^^^^
+
+-  Southbound plugin and integration of OpenFlow 1.0/1.3.x library
+   project
+
+-  Ongoing support and integration of the OpenFlow specification
+
+-  The plugin should be implemented in an easily extensibile manner
+
+-  Protocol verification activities will be performed on supported
+   OpenFlow specifications
+
+Architecture and Design
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Functionality
+'''''''''''''
+
+OpenFlow 1.3 Plugin will support the following functionality
+
+-  Connection Handling
+
+-  Session Management
+
+-  State Management.
+
+-  Error Handling.
+
+-  Mapping function(Infrastructure to OF structures).
+
+-  Connection establishment will be handled by OpenFlow library using
+   opensource netty.io library.
+
+-  Message handling(Ex: Packet in).
+
+-  Event handling and propagation to upper layers.
+
+-  Plugin will support both MD-SAL and Hard SAL.
+
+-  Will be backward compatible with OF 1.0.
+
+**Activities in OF plugin module**
+
+-  New OF plugin bundle will support both OF 1.0 and OF 1.3.
+
+-  Integration with OpenFlow library.
+
+-  Integration with corresponding MD-SAL infrastructure.
+
+-  Hard SAL will be supported as adapter on top of MD-SAL plugin.
+
+-  OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
+
+Design
+''''''
+
+**Overall Architecture**
+
+.. figure:: ./images/openflowplugin/plugin_design.jpg
+   :alt: overal architecture
+
+   overal architecture
+
+Coverage
+~~~~~~~~
+
+Intro
+^^^^^
+
+This page is to catalog the things that have been tested and confirmed
+to work:
+
+Coverage
+^^^^^^^^
+
+Coverage has been moved to a `GoogleDoc
+Spreadshee <https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0>`__
+
+OF 1.3 Considerations
+^^^^^^^^^^^^^^^^^^^^^
+
+The baseline model is a OF 1.3 model, and the coverage tables primarily
+deal with OF 1.3. However for OF 1.0, we have a column to indicate
+either N/A if it doesn’t apply, or whether its been confirmed working.
+
+OF 1.0 Considerations
+^^^^^^^^^^^^^^^^^^^^^
+
+OF 1.0 is being considered as a switch with: \* 1 Table \* 0 Groups \* 0
+Meters \* 1 Instruction (Apply Actions) \* and a limited vocabulary of
+matches and actions.
+
+Tutorial / How-To
+-----------------
+
+Running the controller with the new OpenFlow Plugin
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Opendaylight Controller Plugin Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Run OpenDaylight controller with the new OpenFlow 1.0/1.3 plugin
+
+There are 2 ways. In integration project the plugin version is
+controlled by startup parameter. Or there is distribution build
+available directly in openflowplugin project.
+
+1. use **integration** project
+
+   -  download and unzip latest build from
+      https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.2.2-SNAPSHOT/
+
+      ::
+
+          cd <extracted directory>/bin
+          ./karaf
+
+   -  or clone and build **integration** project:
+
+      ::
+
+          git clone https://git.opendaylight.org/gerrit/p/integration.git
+          cd integration/distributions/extra/karaf
+          mvn clean install
+          cd ./target/assembly/bin
+
+   -  and finally run
+
+      ::
+
+          ./karaf
+
+2. use **openflowplugin** project
+
+   -  download and unzip latest build from
+      https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/openflowplugin/openflowplugin-karaf/0.1.0-SNAPSHOT/
+
+      ::
+
+          cd <extracted directory>/bin
+          ./karaf
+
+   -  or clone and build **openflowplugin** project:
+
+      ::
+
+          git clone https://git.opendaylight.org/gerrit/p/openflowplugin.git
+          cd openflowplugin
+          mvn clean install
+          cd ./distribution/karaf/target/assembly/bin/
+
+   -  or build whole distribution localy from folder distribution/karaf
+
+      ::
+
+          mvn clean install -DskipTests
+
+   -  and run
+
+      ::
+
+          ./karaf
+
+**How to start**
+
+There are all helium features (from features-openflowplugin) duplicated
+into features-openflowplugin-li. The duplicates got suffix *-li* and
+provide Lithium codebase functionality.
+
+These are most used:
+
+-  odl-openflowplugin-app-lldp-speaker-li
+
+-  odl-openflowplugin-flow-services-rest-li
+
+-  odl-openflowplugin-drop-test-li
+
+In case topology is required then the first one should be installed.
+
+::
+
+    feature:install odl-openflowplugin-app-lldp-speaker-li
+
+The Li-southbound currently provides:
+
+-  flow management
+
+-  group management
+
+-  meter management
+
+-  statistics polling
+
+**What to log**
+
+In order to see really low level messages enter these in karaf console:
+
+::
+
+    log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
+    log:set TRACE org.opendaylight.openflowplugin.impl
+
+**How enable topology**
+
+In order for topology to work (fill dataStore/operational with links)
+there must be LLDP responses delivered back to controller. This requires
+table-miss-entries. Table-miss-entry is a flow in table.id=0 with low
+priority, empty match and one output action = send to controller. Having
+this flow installed on every node will enable for gathering and
+exporting links between nodes into dataStore/operational. This is done
+if you use for example l2 switch application.
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+       <barrier>false</barrier>
+       <cookie>54</cookie>
+       <flags>SEND_FLOW_REM</flags>
+       <flow-name>FooXf54</flow-name>
+       <hard-timeout>0</hard-timeout>
+       <id>4242</id>
+       <idle-timeout>0</idle-timeout>
+       <installHw>false</installHw>
+       <instructions>
+           <instruction>
+               <apply-actions>
+                   <action>
+                       <output-action>
+                           <max-length>65535</max-length>
+                           <output-node-connector>CONTROLLER</output-node-connector>
+                       </output-action>
+                       <order>0</order>
+                   </action>
+               </apply-actions>
+               <order>0</order>
+           </instruction>
+       </instructions>
+       <match/>
+       <priority>0</priority>
+       <strict>false</strict>
+       <table_id>0</table_id>
+    </flow>
+
+**Enable RESTCONF and Controller GUI**
+
+If you want to use RESTCONF with openflowplugin project, you have to
+install *odl-restconf* feature to enable that. To install *odl-restconf*
+feature run the following command
+
+::
+
+    karaf#>feature:install odl-restconf
+
+If you want to access the Controller GUI, you have to install
+*odl-dlux-core* feature to enable that. Run following command to install
+it
+
+::
+
+    karaf#>feature:install odl-dlux-core
+
+Once you enable the feature, access the Controller GUI using following
+URL
+
+::
+
+    http://<controller-ip>:8181/dlux/index.html
+
+**Run OpenDaylight controller with the old OpenFlow 1.0-only (old)
+plugin**
+
+There are 2 ways. In integration project the plugin version is
+controlled by startup parameter. Or there is distribution build
+available directly in controller project.
+
+1. use **integration/distributions/base** project
+
+   -  use the instructions from
+      OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin#To\_run\_the\_OpenDaylight\_controller\_with\_the\_new\_OpenFlow\_1.0/1.3\_(new)\_plugin[
+      1.0/1.3 plugin], but skip the plugin version parameter:
+
+      ::
+
+          ./run.sh
+
+2. use **controller/distribution/opendaylight** project
+
+   -  download and unzip latest build from
+      https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight/
+
+      ::
+
+          cd opendaylight
+
+   -  or clone and build **controller** project:
+
+      ::
+
+          git clone https://git.opendaylight.org/gerrit/p/controller.git
+          cd controller/opendaylight/distribution/opendaylight
+          mvn clean install
+          cd target/distribution.opendaylight-osgipackage/opendaylight
+
+   -  and finally run (there is no version specific option, because the
+
+      1.0/1.3 (new) plugin is not available here at all)
+
+**Give it a minute to come up :)**
+
+OpenFlow 1.3 Enabled Software Switches / Environment
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Getting Mininet with OF 1.3
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+`Download Mininet VM Upgraded to OF
+1.3 <https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip>`__
+(or the `newer mininet-2.1.0 with
+OVS-2.0 <https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip>`__
+that works with VMware Player. For using this on VirtualBox, import this
+to VMware Player and then export the .vmdk ) or you could build one
+yourself Openflow Protocol Library:OpenVirtualSwitch[Instructions for
+setting up Mininet with OF 1.3].
+
+Installing under VirtualBox
+'''''''''''''''''''''''''''
+
+.. figure:: ./images/openflowplugin/host-only-vbox.png
+   :alt: configuring a host-only adapter
+
+   configuring a host-only adapter
+
+For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
+don’t actually seem to allow for connections from the host to the VM.
+Instead, you need to configure a host-only network and set it up. Do
+this by:
+
+-  Go to the VM’s settings in VirtualBox then to network and add a
+   second adapter attached to "Host-only Adapter" (see the screenshot to
+   the right)
+
+-  Edit the /etc/network/interfaces file to configure the adapter
+   properly by adding these two lines
+
+::
+
+    auto eth1
+    iface eth1 inet dhcp
+
+-  Reboot the VM
+
+At this point you should have two interfaces one which gives you NATed
+access to the internet and another that gives you access between your
+mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
+address and the the host-only interface gets a 192.168.56.x address.
+
+Your simplest choice: Use Vagrant
+'''''''''''''''''''''''''''''''''
+
+`Download Virtual Box <https://www.virtualbox.org/>`__ and install it
+`Download Vagrant <http://www.vagrantup.com/>`__ and install it
+
+::
+
+    cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
+    vagrant up
+    vagrant ssh
+
+This will leave you sshed into a fully provisioned Ubuntu Trusty box
+with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
+
+Setup CPqD Openflow 1.3 Soft Switch
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Latest version of Openvswitch (v2.0.0) doesn’t support all the openflow
+1.3 features, e.g group multipart statistics request. Alternate options
+is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
+features.
+
+-  You can setup the switch as per the instructions given on the
+   following URL
+
+```https://github.com/CPqD/ofsoftswitch13`` <https://github.com/CPqD/ofsoftswitch13>`__
+
+-  Fire following command to start the switch
+
+Start the datapath :
+
+::
+
+    $ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
+     e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
+
+ethX should not be associated with ip address and ipv6 should be
+disabled on it. If you are installing the switch on your local machine,
+you can use following command (for Ubuntu) to create virtual interface.
+
+::
+
+    ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
+
+ethX - Any existing interface.
+
+Or if you are using mininet VM for installing this switch, you can
+simply add one more adaptor to your VM.
+
+Start Openflow protocol agent:
+
+::
+
+    $secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
+     e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
+
+Commands to add entries to various tables of the switch
+'''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+-  Add meter
+
+::
+
+    $utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
+
+-  Add Groups
+
+::
+
+    $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
+
+::
+
+    $utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
+
+-  Create queue
+
+::
+
+    $utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
+      e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
+
+"dpctl" --help is not very intuitive, so please keep adding any new
+command you figured out while your experiment with the switch.
+
+Using the built-in Wireshark
+''''''''''''''''''''''''''''
+
+Mininet comes with pre-installed Wireshark, but for some reason it does
+not include the Openflow protocol dissector. You may want to get and
+install it in the */.wireshark/plugins/* directory.
+
+First login to your mininet VM
+
+::
+
+     ssh mininet@<your mininet vm ip> -X
+
+The -X option in ssh will enable x-session over ssh so that the
+wireshark window can be shown on your host machine’s display. when
+prompted, enter the password (mininet).
+
+From the mininet vm shell, set the wireshark capture privileges
+(http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
+
+::
+
+    sudo chgrp mininet /usr/bin/dumpcap
+    sudo chmod 754 /usr/bin/dumpcap
+    sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
+
+Finally, start wireshark:
+
+::
+
+     wireshark
+
+The wireshark window should show up.
+
+To see only Openflow packets, you may want to apply the following filter
+in the Filter window:
+
+::
+
+     tcp.port == 6633 and tcp.flags.push == 1
+
+Start the capture on *any* port.
+
+Running Mininet with OF 1.3
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+From within the Mininet VM, run:
+
+::
+
+     sudo mn --topo single,3  --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
+
+End to End Inventory
+~~~~~~~~~~~~~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+The purpose of this page is to walk you through how to see the Inventory
+Manager working end to end with the openflowplugin using OpenFlow 1.3.
+
+Basically, you will learn how to:
+
+1. Run the Base/Virtualization/Service provider Edition with the new
+   openflowplugin:
+   OpenDaylight\_OpenFlow\_Plugin::Running\_controller\_with\_the\_new\_OF\_plugin[Running
+   the controller with the new OpenFlow Plugin]
+
+2. Start mininet to use OF 1.3:
+   OpenDaylight\_OpenFlow\_Plugin::Test\_Environment[OpenFlow 1.3
+   Enabled Software Switches / Environment]
+
+3. Use RESTCONF to see the nodes appear in inventory.
+
+Restconf for Inventory
+^^^^^^^^^^^^^^^^^^^^^^
+
+The REST url for listing all the nodes is:
+
+::
+
+    http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
+
+You will need to set the Accept header:
+
+::
+
+    Accept: application/xml
+
+You will also need to use HTTP Basic Auth with username: admin password:
+admin.
+
+Alternately, if you have a node’s id you can address it as
+
+::
+
+    http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
+
+for example
+
+::
+
+    http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
+
+How to hit RestConf with Postman
+''''''''''''''''''''''''''''''''
+
+`Install Postman for
+Chrome <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
+
+In the chrome browser bar enter
+
+::
+
+    chrome://apps/
+
+And click on Postman.
+
+Enter the URL. Click on the Headers button on the far right. Enter the
+Accept: header. Click on the Basic Auth Tab at the top and setup the
+username and password. Send.
+
+Known Bug
+^^^^^^^^^
+
+If you have not had any switches come up, and though no children for
+http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
+and exception will be thrown. I’m pretty sure I know how to fix this
+bug, just need to get to it :)
+
+End to End Flows
+~~~~~~~~~~~~~~~~
+
+Instructions
+^^^^^^^^^^^^
+
+Learn End to End for Inventory
+''''''''''''''''''''''''''''''
+
+`End to End
+Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Check inventory
+'''''''''''''''
+
+-  Run mininet with support for OF 1.3 as described in `End to End
+   Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+-  Make sure you see the openflow:1 node come up as described in `End to
+   End
+   Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Flow Strategy
+'''''''''''''
+
+Current way to flush a flow to switch looks like this:
+
+1. Create MD-SAL modeled flow and commit it into dataStore using two
+   phase commit `MD-SAL
+   FAQ <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ>`__
+
+2. FRM gets notified and invokes corresponding rpc (addFlow) on
+   particular service provider (if suitable provider for given node
+   registered)
+
+3. The provider (plugin in this case) transforms MD-SAL modeled flow
+   into OF-API modeled flow
+
+4. OF-API modeled flow is then flushed into OFLibrary
+
+5. OFLibrary encodes flow into particular version of wire protocol and
+   sends it to particular switch
+
+6. Check on mininet side if flow is set
+
+Push your flow
+''''''''''''''
+
+-  With PostMan:
+
+   -  Set headers:
+
+      -  Content-Type: application/xml
+
+      -  Accept: application/xml
+
+      -  Authentication
+
+   -  Use URL: "http://<controller
+      IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
+
+   -  PUT
+
+   -  Use Body:
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <priority>2</priority>
+        <flow-name>Foo</flow-name>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv4-destination>10.0.10.2/24</ipv4-destination>
+        </match>
+        <id>1</id>
+        <table_id>0</table_id>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                       <order>0</order>
+                       <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+    </flow>
+
+**\*Note**: If you want to try a different flow id or a different table,
+make sure the URL and the body stay in sync. For example, if you wanted
+to try: table 2 flow 20 you’d change the URL to:
+
+"http://<controller
+IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
+
+but you would also need to update the 20 and 2 in the body of the XML.
+
+Other caveat, we have a known bug with updates, so please only write to
+a given flow id and table id on a given node once at this time until we
+resolve it. Or you can use the DELETE method with the same URL in
+PostMan to delete the flow information on switch and controller cache.
+
+Check for your flow on the switch
+'''''''''''''''''''''''''''''''''
+
+-  See your flow on your mininet:
+
+::
+
+    mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
+    OFPST_FLOW reply (OF1.3) (xid=0x2):
+    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
+
+If you want to see the above information from the mininet prompt - use
+"sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
+s1".
+
+Check for your flow in the controller config via RESTCONF
+'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+-  See your configured flow in POSTMAN with
+
+   -  URL `http://<controller <http://<controller>`__
+      IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
+
+   -  GET
+
+   -  You no longer need to set Accept header
+
+Return Response:
+
+.. code:: json
+
+    {
+      "flow-node-inventory:table": [
+        {
+          "flow-node-inventory:id": 0,
+          "flow-node-inventory:flow": [
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:1"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.2"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:1"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.1"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:1"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.3"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:1"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.4"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:2"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.5"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:2"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.8"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:2"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.6"
+              },
+              "flow-node-inventory:cookie": 0
+            },
+            {
+              "flow-node-inventory:priority": 1,
+              "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
+              "flow-node-inventory:table_id": 0,
+              "flow-node-inventory:hard-timeout": 0,
+              "flow-node-inventory:idle-timeout": 0,
+              "flow-node-inventory:instructions": {
+                "flow-node-inventory:instruction": [
+                  {
+                    "flow-node-inventory:apply-actions": {
+                      "flow-node-inventory:action": [
+                        {
+                          "flow-node-inventory:output-action": {
+                            "flow-node-inventory:output-node-connector": "openflow:1:2"
+                          },
+                          "flow-node-inventory:order": 0
+                        }
+                      ]
+                    },
+                    "flow-node-inventory:order": 0
+                  }
+                ]
+              },
+              "flow-node-inventory:match": {
+                "flow-node-inventory:ethernet-match": {
+                  "flow-node-inventory:ethernet-type": {
+                    "flow-node-inventory:type": 2048
+                  }
+                },
+                "flow-node-inventory:ipv4-destination": "10.0.0.7"
+              },
+              "flow-node-inventory:cookie": 0
+            }
+          ]
+        }
+      ]
+    }
+
+Look for your flow stats in the controller operational data via
+'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+RESTCONF
+
+-  See your operational flow stats in POSTMAN with
+
+   -  URL "http://<controller
+      IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
+
+   -  GET
+
+Return Response:
+
+.. code:: json
+
+    {
+      "flow-node-inventory:table": [
+        {
+          "flow-node-inventory:id": 0,
+          "flow-node-inventory:flow": [
+            {
+              "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 886000000,
+                  "opendaylight-flow-statistics:second": 2707
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 784,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 8,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "1",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 826000000,
+                  "opendaylight-flow-statistics:second": 2711
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 1568,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 16,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "1",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 548000000,
+                  "opendaylight-flow-statistics:second": 2708
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 784,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 8,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "1",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 296000000,
+                  "opendaylight-flow-statistics:second": 2710
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 1274,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 13,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "1",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 392000000,
+                  "opendaylight-flow-statistics:second": 2711
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 1470,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 15,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "2",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 344000000,
+                  "opendaylight-flow-statistics:second": 2707
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 784,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 8,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "2",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 577000000,
+                  "opendaylight-flow-statistics:second": 2706
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 784,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 8,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "2",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            },
+            {
+              "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
+              "opendaylight-flow-statistics:flow-statistics": {
+                "opendaylight-flow-statistics:cookie": 0,
+                "opendaylight-flow-statistics:duration": {
+                  "opendaylight-flow-statistics:nanosecond": 659000000,
+                  "opendaylight-flow-statistics:second": 2705
+                },
+                "opendaylight-flow-statistics:hard-timeout": 0,
+                "opendaylight-flow-statistics:byte-count": 784,
+                "opendaylight-flow-statistics:match": {
+                  "opendaylight-flow-statistics:ethernet-match": {
+                    "opendaylight-flow-statistics:ethernet-type": {
+                      "opendaylight-flow-statistics:type": 2048
+                    }
+                  },
+                  "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
+                },
+                "opendaylight-flow-statistics:priority": 1,
+                "opendaylight-flow-statistics:packet-count": 8,
+                "opendaylight-flow-statistics:table_id": 0,
+                "opendaylight-flow-statistics:idle-timeout": 0,
+                "opendaylight-flow-statistics:instructions": {
+                  "opendaylight-flow-statistics:instruction": [
+                    {
+                      "opendaylight-flow-statistics:order": 0,
+                      "opendaylight-flow-statistics:apply-actions": {
+                        "opendaylight-flow-statistics:action": [
+                          {
+                            "opendaylight-flow-statistics:order": 0,
+                            "opendaylight-flow-statistics:output-action": {
+                              "opendaylight-flow-statistics:output-node-connector": "2",
+                              "opendaylight-flow-statistics:max-length": 0
+                            }
+                          }
+                        ]
+                      }
+                    }
+                  ]
+                }
+              }
+            }
+          ],
+          "opendaylight-flow-table-statistics:flow-table-statistics": {
+            "opendaylight-flow-table-statistics:active-flows": 8,
+            "opendaylight-flow-table-statistics:packets-matched": 97683,
+            "opendaylight-flow-table-statistics:packets-looked-up": 101772
+          }
+        }
+      ]
+    }
+
+Discovering and testing new Flow Types
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various flows through the system from the OSGI command line. Once
+those flows have been pushed through, you can see them as examples and
+then use them to see in the config what a particular flow example looks
+like.
+
+Using addMDFlow
+'''''''''''''''
+
+From the
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet at the controller as described above.
+
+once you can see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    addMDFlow openflow:1 f#
+
+Where # is a number between 1 and 80. This will create one of 80
+possible flows. You can go confirm they were created on the switch.
+
+Once you’ve done that, use
+
+-  GET
+
+-  Accept: application/xml
+
+-  URL:
+   "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
+
+To see a full listing of the flows in table 2 (where they will be put).
+If you want to see a particular flow, look at
+
+-  URL:
+   "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
+
+Where # is 123 + the f# you used. So for example, for f22, your url
+would be
+
+-  URL:
+   "http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
+
+Note: You may have to trim out some of the sections like that contain
+bitfields and binary types that are not correctly modeled.
+
+Note: Before attempting to PUT a flow you have created via addMDFlow,
+please change its URL and body to, for example, use table 1 instead of
+table 2 or another Flow Id, so you don’t collide.
+
+Note: There are several test command providers and the one handling
+flows is **OpenflowpluginTestCommandProvider**. Methods, which can be
+use as **commands in OSGI-console** have prefix *\_*.
+
+Example Flows
+^^^^^^^^^^^^^
+
+Examples for XML for various flow matches, instructions & actions can be
+found in following section `here <#odl-ofp-example-flows_overview>`__
+
+End to End Topology
+~~~~~~~~~~~~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+The purpose of this page is to walk you through how to see the Topology
+Manager working end to end with the openflowplugin using OpenFlow 1.3.
+
+Basically, you will learn how to:
+
+1. Run the Base/Virtualization/Service provider Edition with the new
+   openflowplugin: `Running the controller with the new OpenFlow
+   Plugin <#odl-ofp-running-controller-with-the-new-of-plugin_top>`__
+
+2. Start mininet to use OF 1.3: `OpenFlow 1.3 Enabled Software Switches
+   / Environment <#odl-ofp-test-environment_top>`__
+
+3. Use RESTCONF to see the topology information.
+
+Restconf for Topology
+^^^^^^^^^^^^^^^^^^^^^
+
+The REST url for listing all the nodes is:
+
+::
+
+    http://localhost:8080/restconf/operational/network-topology:network-topology/
+
+You will need to set the Accept header:
+
+::
+
+    Accept: application/xml
+
+You will also need to use HTTP Basic Auth with username: admin password:
+admin.
+
+Alternately, if you have a node’s id you can address it as
+
+::
+
+    http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
+
+for example
+
+::
+
+    http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
+
+How to hit RestConf with Postman
+''''''''''''''''''''''''''''''''
+
+Install
+`postman <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en>`__
+for Chrome
+
+In the chrome browser bar enter
+
+::
+
+    chrome://apps/
+
+And click on Postman.
+
+Enter the URL. Click on the Headers button on the far right. Enter the
+Accept: header. Click on the Basic Auth Tab at the top and setup the
+username and password. Send.
+
+End to End Groups
+~~~~~~~~~~~~~~~~~
+
+NOTE
+^^^^
+
+Groups are NOT SUPPORTED in current (2.0.0) version of
+`openvswitch <http://www.openvswitch.org/download>`__. See
+
+-  http://openvswitch.org/releases/NEWS-2.0.0
+
+-  http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
+
+For testing group feature please use for example
+`CPQD <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+virtual switch.
+
+Instructions
+^^^^^^^^^^^^
+
+Learn End to End for Inventory
+''''''''''''''''''''''''''''''
+
+`End to End
+Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Check inventory
+'''''''''''''''
+
+Run CPqD with support for OF 1.3 as described in `End to End
+Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Make sure you see the openflow:1 node come up as described in `End to
+End
+Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Group Strategy
+''''''''''''''
+
+Current way to flush a group to switch looks like this:
+
+1. create MD-SAL modeled group and commit it into dataStore using two
+   phase commit
+
+2. FRM gets notified and invokes corresponding rpc (addGroup) on
+   particular service provider (if suitable provider for given node
+   registered)
+
+3. the provider (plugin in this case) transforms MD-SAL modeled group
+   into OF-API modeled group
+
+4. OF-API modeled group is then flushed into OFLibrary
+
+5. OFLibrary encodes group into particular version of wire protocol and
+   sends it to particular switch
+
+6. check on CPqD if group is installed
+
+Push your Group
+'''''''''''''''
+
+-  With PostMan:
+
+   -  Set
+
+      -  Content-Type: application/xml
+
+      -  Accept: application/xml
+
+   -  Use URL:
+      "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
+
+   -  PUT
+
+   -  Use Body:
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <group xmlns="urn:opendaylight:flow:inventory">
+        <group-type>group-all</group-type>
+        <buckets>
+            <bucket>
+                <action>
+                    <pop-vlan-action/>
+                    <order>0</order>
+                </action>
+                <bucket-id>12</bucket-id>
+                <watch_group>14</watch_group>
+                <watch_port>1234</watch_port>
+            </bucket>
+            <bucket>
+                <action>
+                    <set-field>
+                        <ipv4-source>100.1.1.1</ipv4-source>
+                    </set-field>
+                    <order>0</order>
+                </action>
+                <action>
+                    <set-field>
+                        <ipv4-destination>200.71.9.5210</ipv4-destination>
+                    </set-field>
+                    <order>1</order>
+                </action>
+                <bucket-id>13</bucket-id>
+                <watch_group>14</watch_group>
+                <watch_port>1234</watch_port>
+            </bucket>
+        </buckets>
+        <barrier>false</barrier>
+        <group-name>Foo</group-name>
+        <group-id>1</group-id>
+    </group>
+
+.. note::
+
+    If you want to try a different group id, make sure the URL and the
+    body stay in sync. For example, if you wanted to try: group-id 20
+    you’d change the URL to
+    "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20"
+    but you would also need to update the <group-id>20</group-id> in the
+    body to match.
+
+.. note::
+
+    <ip-address> :Provide the IP Address of the machine on which the
+    controller is running.
+
+Check for your group on the switch
+''''''''''''''''''''''''''''''''''
+
+-  See your group on your cpqd switch:
+
+::
+
+    COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
+
+    SENDING:
+    stat_req{type="grp", flags="0x0", group="all"}
+
+
+    RECEIVED:
+    stat_repl{type="grp", flags="0x0", stats=[
+    {group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
+
+Check for your group in the controller config via RESTCONF
+''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+-  See your configured group in POSTMAN with
+
+   -  URL
+      `http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1 <http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1>`__
+
+   -  GET
+
+   -  You should no longer need to set Accept
+
+   -  Note: <ip-address> :Provide the IP Address of the machine on which
+      the controller is running.
+
+Look for your group stats in the controller operational data via RESTCONF
+'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+-  See your operational group stats in POSTMAN with
+
+   -  URL
+      `http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1 <http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1>`__
+
+   -  GET
+
+   -  Note: <ip-address> :Provide the IP Address of the machine on which
+      the controller is running.
+
+Discovering and testing Group Types
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various groups through the system from the OSGI command line. Once
+those groups have been pushed through, you can see them as examples and
+then use them to see in the config what a particular group example looks
+like.
+
+Using addGroup
+^^^^^^^^^^^^^^
+
+From the
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your CPqD at the controller as described above.
+
+once you can see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    addGroup openflow:1
+
+This will install a group in the switch. You can check whether the group
+is installed or not.
+
+Once you’ve done that, use
+
+-  GET
+
+-  Accept: application/xml
+
+-  URL:
+   "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
+
+   -  Note: <ip-address> :Provide the IP Address of the machine on which
+      the controller is running.
+
+.. note::
+
+    Before attempting to PUT a group you have created via addGroup,
+    please change its URL and body to, for example, use group 1 instead
+    of group 2 or another Group Id, so that they don’t collide.
+
+.. note::
+
+    There are several test command providers and the one handling groups
+    is OpenflowpluginGroupTestCommandProvider. Methods, which can be use
+    as commands in OSGI-console have prefix *\_*.
+
+Example Group
+^^^^^^^^^^^^^
+
+Examples for XML for various Group Types can be found in the
+test-scripts bundle of the plugin code with names g1.xml, g2.xml and
+g3.xml.
+
+End to End Meters
+~~~~~~~~~~~~~~~~~
+
+Instructions
+^^^^^^^^^^^^
+
+Learn End to End for Inventory
+''''''''''''''''''''''''''''''
+
+-  `End to End
+   Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Check inventory
+'''''''''''''''
+
+-  Run mininet with support for OF 1.3 as described in `End to End
+   Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+-  Make sure you see the openflow:1 node come up as described in `End to
+   End
+   Inventory <#odl-ofp-end-to-end-inventory_introduction-introduction>`__
+
+Meter Strategy
+''''''''''''''
+
+Current way to flush a meter to switch looks like this:
+
+1. create MD-SAL modeled flow and commit it into dataStore using two
+   phase commit
+
+2. FRM gets notified and invokes corresponding rpc (addMeter) on
+   particular service provider (if suitable provider for given node
+   registered)
+
+3. the provider (plugin in this case) transforms MD-SAL modeled meter
+   into OF-API modeled meter
+
+4. OF-API modeled meter is then flushed into OFLibrary
+
+5. OFLibrary encodes meter into particular version of wire protocol and
+   sends it to particular switch
+
+6. check on mininet side if meter is installed
+
+Push your Meter
+'''''''''''''''
+
+-  Using PostMan:
+
+   -  Set Request Headers
+
+      -  Content-Type: application/xml
+
+      -  Accept: application/xml
+
+   -  Use URL:
+      "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
+
+   -  Method:PUT
+
+   -  Request Body:
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <meter xmlns="urn:opendaylight:flow:inventory">
+        <container-name>abcd</container-name>
+        <flags>meter-burst</flags>
+        <meter-band-headers>
+            <meter-band-header>
+                <band-burst-size>444</band-burst-size>
+                <band-id>0</band-id>
+                <band-rate>234</band-rate>
+                <dscp-remark-burst-size>5</dscp-remark-burst-size>
+                <dscp-remark-rate>12</dscp-remark-rate>
+                <prec_level>1</prec_level>
+                <meter-band-types>
+                    <flags>ofpmbt-dscp-remark</flags>
+                </meter-band-types>
+            </meter-band-header>
+        </meter-band-headers>
+        <meter-id>1</meter-id>
+        <meter-name>Foo</meter-name>
+    </meter>
+
+.. note::
+
+    If you want to try a different meter id, make sure the URL and the
+    body stay in sync. For example, if you wanted to try: meter-id 20
+    you’d change the URL to
+    "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20"
+    but you would also need to update the 20 in the body to match.
+
+.. note::
+
+    :Provide the IP Address of the machine on which the controller is
+    running.
+
+Check for your meter on the switch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+-  See your meter on your CPqD switch:
+
+::
+
+    COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
+
+    SENDING:
+    stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
+
+
+    RECEIVED:
+    stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
+
+Check for your meter in the controller config via RESTCONF
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  See your configured flow in POSTMAN with
+
+   -  URL
+      "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
+
+   -  Method: GET
+
+   -  You should no longer need to set Request Headers for Accept
+
+   -  Note: :Provide the IP Address of the machine on which the
+      controller is running.
+
+Look for your meter stats in the controller operational data via RESTCONF
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  See your operational meter stats in POSTMAN with
+
+   -  URL
+      "http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
+
+   -  Method: GET
+
+   -  Note: :Provide the IP Address of the machine on which the
+      controller is running.
+
+Discovering and testing Meter Types
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various meters through the system from the OSGI command line. Once
+those meters have been pushed through, you can see them as examples and
+then use them to see in the config what a particular meter example looks
+like.
+
+Using addMeter
+''''''''''''''
+
+From the
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your CPqD at the controller as described above.
+
+Once you can see your CPqD connected to the controller, at the OSGI
+command line try running:
+
+::
+
+    addMeter openflow:1
+
+Once you’ve done that, use
+
+-  GET
+
+-  Accept: application/xml
+
+-  URL:
+   "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
+
+   -  Note: :Provide the IP Address of the machine on which the
+      controller is running.
+
+.. note::
+
+    Before attempting to PUT a meter you have created via addMeter,
+    please change its URL and body to, for example, use meter 1 instead
+    of meter 2 or another Meter Id, so you don’t collide.
+
+.. note::
+
+    There are several test command providers and the one handling Meter
+    is **OpenflowpluginMeterTestCommandProvider**. Methods, which can be
+    used as **commands in OSGI-console** have prefix *\_*. Examples:
+    addMeter, modifyMeter and removeMeter.
+
+Example Meter
+^^^^^^^^^^^^^
+
+Examples for XML for various Meter Types can be found in the
+test-scripts bundle of the plugin code with names m1.xml, m2.xml and
+m3.xml.
+
+Statistics
+~~~~~~~~~~
+
+Overview
+^^^^^^^^
+
+This page contains high level detail about the statistics collection
+mechanism in new OpenFlow plugin.
+
+Statistics collection in new OpenFlow plugin
+''''''''''''''''''''''''''''''''''''''''''''
+
+New OpenFlow plugin collects following statistics from OpenFlow enabled
+node(switch):
+
+1.  Individual Flow Statistics
+
+2.  Aggregate Flow Statistics
+
+3.  Flow Table Statistics
+
+4.  Port Statistics
+
+5.  Group Description
+
+6.  Group Statistics
+
+7.  Meter Configuration
+
+8.  Meter Statistics
+
+9.  Queue Statistics
+
+10. Node Description
+
+11. Flow Table Features
+
+12. Port Description
+
+13. Group Features
+
+14. Meter Features
+
+At a high level statistics collection mechanism is divided into
+following three parts
+
+1. Statistics related `YANG models, service APIs and notification
+   interfaces <https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD>`__
+   are defined in the MD-SAL.
+
+2. Service APIs (RPCs) defined in yang models are implemented by
+   OpenFlow plugin. Notification interfaces are wired up by OpenFlow
+   plugin to MD-SAL.
+
+3. Statistics Manager Module: This module use service APIs implemented
+   by OpenFlow plugin to send statistics requests to all the connected
+   OpenFlow enabled nodes. Module also implements notification
+   interfaces to receive statistics response from nodes. Once it
+   receives statistics response, it augment all the statistics data to
+   the relevant element of the node (like node-connector, flow,
+   table,group, meter) and store it in MD-SAL operational data store.
+
+Details of statistics collection
+''''''''''''''''''''''''''''''''
+
+-  Current implementation collects above mentioned statistics (except
+   10-14) at a periodic interval of 15 seconds.
+
+-  Statistics mentioned in 10 to 14 are only fetched when any node
+   connects to the controller because these statistics are just static
+   details about the respective elements.
+
+-  Whenever any new element is added to node (like flow, group, meter,
+   queue) it sends statistics request immediately to fetch the latest
+   statistics and store it in the operational data store.
+
+-  Whenever any element is deleted from the node, it immediately remove
+   the relevant statistics from operational data store.
+
+-  Statistics data are augmented to their respective element stored in
+   the configuration data store. E.g Controller installed flows are
+   stored in configuration data store. Whenever Statistics Manager
+   receive statistics data related to these flow, it search the
+   corresponding flow in the configuration data store and augment
+   statistics in the corresponding location in operational data store.
+   Similar approach is used for other elements of the node.
+
+-  Statistics Manager stores flow statistics as an unaccounted flow
+   statistics in operational data store if there is no corresponding
+   flow exist in configuration data store. ID format of unaccounted flow
+   statistics is as follows - [#UF$TABLE\*\*Unaccounted-flow-count - e.g
+   #UF$TABLE\*2\*1].
+
+-  All the unaccounted flows will be cleaned up periodically after every
+   two cycle of flow statistics collection, given that there is no
+   update for these flows in the last two cycles.
+
+-  Statistics Manager only entertains statistics response for the
+   request sent by itself. User can write its own statistics collector
+   using the statistics service APIs and notification defined in yang
+   models, it won’t effect the functioning of Statistics Manager.
+
+-  OpenFlow 1.0 don’t have concept of Meter and Group, so Statistics
+   Manager don’t send any group & meter related statistics request to
+   OpenFlow 1.0 enabled switch.
+
+RESTCONF Uris to access statistics of various node elements
+'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+-  Aggregate Flow Statistics & Flow Table Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
+
+-  Individual Flow Statistics from specific table
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
+
+-  Group Features & Meter Features Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
+
+-  Group Description & Group Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
+
+-  Meter Configuration & Meter Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
+
+-  Node Connector Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
+
+-  Queue Statistics
+
+::
+
+    GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
+
+Bugs
+''''
+
+For more details and queuries, please send mail to
+openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you
+want to report any bug in statistics collection, please use
+`bugzilla <https://bugs.opendaylight.org>`__.
+
+Web / Graphical Interface
+-------------------------
+
+In the Hydrogen & Helium release, the current Web UI does not support
+the new OpenFlow 1.3 constructs such as groups, meters, new fields in
+the flows, multiple flow tables, etc.
+
+Command Line Interface
+----------------------
+
+The following is not exactly CLI - just a set of test commands which can
+be executed on the OSGI console testing various features in OpenFlow 1.3
+spec.
+
+-  `OSGI Console Test Provider Commands:
+   Flows <#odl-ofp-test-provider-flows_test-provider>`__
+
+-  `OSGI Console Test Provider Commands:
+   Groups <#odl-ofp-test-provider-groups_test-provider>`__
+
+-  `OSGI Console Test Provider Commands:
+   Meters <#odl-ofp-test-provider-meters_test-provider>`__
+
+-  `OSGI Console Test Provider Commands: Topology
+   Events <#odl-ofp-test-provider-topoogy_test-provider>`__
+
+Flows : Test Provider
+~~~~~~~~~~~~~~~~~~~~~
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various flows through the system from the OSGI command line. Once
+those flows have been pushed through, you can see them as examples and
+then use them to see in the config what a particular flow example looks
+like.
+
+AddFlow : addMDFlow
+^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    addMDFlow openflow:1 f#
+
+Where # is a number between 1 and 80 and openflow:1 is the of the
+switch. This will create one of 80 possible flows. You can confirm that
+they were created on the switch.
+
+RemoveFlow : removeMDFlow
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Similar to addMDFlow, from the controller OSGi prompt, while your switch
+is connected to the controller, try running:
+
+::
+
+    removeMDFlow openflow:1 f#
+
+where # is a number between 1 and 80 and openflow:1 is the of the
+switch. The flow to be deleted should have same flowid and Nodeid as
+used for flow add.
+
+ModifyFlow : modifyMDFlow
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Similar to addMDFlow, from the controller OSGi prompt, while your switch
+is connected to the controller, try running:
+
+::
+
+    modifyMDFlow openflow:1 f#
+
+where # is a number between 1 and 80 and openflow:1 is the of the
+switch. The flow to be deleted should have same flowid and Nodeid as
+used for flow add.
+
+Group : Test Provider
+~~~~~~~~~~~~~~~~~~~~~
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various flows through the system from the OSGI command line. Once
+those flows have been pushed through, you can see them as examples and
+then use them to see in the config what a particular flow example looks
+like.
+
+AddGroup : addGroup
+^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    addGroup openflow:1 a# g#
+
+Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
+actiontype(a#). You can confirm that they were created on the switch.
+
+RemoveGroup : removeGroup
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet at the controller as described above.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    removeGroup openflow:1 a# g#
+
+Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
+actiontype(a#). GroupId should be same as that used for adding the flow.
+You can confirm that it was removed from the switch.
+
+ModifyGroup : modifyGroup
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet at the controller as described above.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    modifyGroup openflow:1 a# g#
+
+Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
+actiontype(a#). GroupId should be same as that used for adding the flow.
+You can confirm that it was modified on the switch.
+
+Meters : Test Provider
+~~~~~~~~~~~~~~~~~~~~~~
+
+Currently, the openflowplugin has a test-provider that allows you to
+push various flows through the system from the OSGI command line. Once
+those flows have been pushed through, you can see them as examples and
+then use them to see in the config what a particular flow example looks
+like.
+
+AddMeter : addMeter
+^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    addMeter openflow:1
+
+You can now confirm that meter has been created on the switch.
+
+RemoveMeter : removeMeter
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    removeMeter openflow:1
+
+The CLI takes care of using the same meterId and nodeId as used for
+meter add. You can confirm that it was removed from the switch.
+
+ModifyMeter : modifyMeter
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=.
+
+Once you see your node (probably openflow:1 if you’ve been following
+along) in the inventory, at the OSGI command line try running:
+
+::
+
+    modifyMeter openflow:1
+
+The CLI takes care of using the same meterId and nodeId as used for
+meter add. You can confirm that it was modified on the switch.
+
+Topology : Notification
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Currently, the openflowplugin has a test-provider that allows you to get
+notifications for the topology related events like Link-Discovered ,
+Link-Removed events.
+
+Link Discovered Event : Testing
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Run the controller by executing:
+
+::
+
+    cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
+    ./run.sh
+
+Point your mininet to the controller by giving the parameters
+--controller=remote,ip=. Once the controller is connected to the switch,
+Link-Discovered event can be tested by initially configuring the
+specific flows on the switch. For Link Discovered event either
+table-miss flow or LLDP ether-type flow can be configured.
+
+Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
+
+::
+
+    addMDFlow Openflow:1 fTM
+
+as per this
+OpenDaylight\_OpenFlow\_Plugin:Test\_Provider#Flows\_:\_Test\_Provider[link].
+*fTM* is the table-miss scenario here.
+
+Once the table-miss flow is configured through above command, we can see
+the Link-Discovered event in the debug logs on the controller console.
+
+Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
+
+::
+
+    addMDFlow Openflow:1 0(table-id) f81
+
+You can confirm that they were created on the switch.
+
+Once the LLDP ether-type flow is configured through above command, we
+can see the Link-Discovered event in the debug logs on the controller
+console.
+
+Link Removed Event : Testing
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Having configured either table-miss or lldp ether-type flow on switch,
+once the switch is disconnected we see the Link-Removed event
+
+Programmatic Interface
+----------------------
+
+The API is documented in the model documentation under the section
+OpenFlow Services at:
+
+-  `Models Documentation (OpenFlow Services
+   Section) <https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference>`__
+
+Example flows
+-------------
+
+Overview
+~~~~~~~~
+
+The flow examples on this page are tested to work with OVS.
+
+Use, for example, POSTMAN with the following parameters:
+
+::
+
+    PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
+
+    - Accept: application/xml
+    - Content-Type: application/xml
+
+For example:
+
+::
+
+    PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
+
+Make sure that the Table-# and Flow-# in the URL and in the XML match.
+
+The format of the flow-programming XML is determined by by the grouping
+*flow* in the opendaylight-flow-types yang model: MISSING LINK.
+
+Match Examples
+~~~~~~~~~~~~~~
+
+The format of the XML that describes OpenFlow matches is determined by
+the opendaylight-match-types yang model: .
+
+The RESTCONF documentation for the match-types yang model can be found
+at
+`opendaylight-match-types.html <https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-match-types.html>`__
+
+IPv4 Dest Address
+^^^^^^^^^^^^^^^^^
+
+-  Flow=124, Table=2, Priority=2,
+   Instructions=\\{Apply\_Actions={dec\_nw\_ttl}},
+   match=\\{ipv4\_destination\_address=10.0.1.1/24}
+
+-  Note that ethernet-type MUST be 2048 (0x800)
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>124</id>
+        <cookie_mask>255</cookie_mask>
+        <installHw>false</installHw>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv4-destination>10.0.1.1/24</ipv4-destination>
+        </match>
+        <hard-timeout>12</hard-timeout>
+        <cookie>1</cookie>
+        <idle-timeout>34</idle-timeout>
+        <flow-name>FooXf1</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src Address
+^^^^^^^^^^^^^^^^^^^^
+
+-  Flow=126, Table=2, Priority=2,
+   Instructions=\\{Apply\_Actions={drop}},
+   match=\\{ethernet-source=00:00:00:00:00:01}
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <drop-action/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>126</id>
+        <cookie_mask>255</cookie_mask>
+        <installHw>false</installHw>
+        <match>
+            <ethernet-match>
+                <ethernet-source>
+                    <address>00:00:00:00:00:01</address>
+                </ethernet-source>
+            </ethernet-match>
+        </match>
+        <hard-timeout>12</hard-timeout>
+        <cookie>3</cookie>
+        <idle-timeout>34</idle-timeout>
+        <flow-name>FooXf3</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, Ethernet Type
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Flow=127, Table=2, Priority=2,
+   Instructions=\\{Apply\_Actions={drop}},
+   match=\\{ethernet-source=00:00:00:00:23:ae,
+   ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-mpls-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>127</id>
+        <cookie_mask>255</cookie_mask>
+        <installHw>false</installHw>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>45</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:ff:ff:ff:ff</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:00:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+        </match>
+        <hard-timeout>12</hard-timeout>
+        <cookie>4</cookie>
+        <idle-timeout>34</idle-timeout>
+        <flow-name>FooXf4</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34887 (0x8847)
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-mpls-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>128</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34887</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:ff:ff:ff:ff</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:00:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>10.1.2.3/24</ipv4-source>
+            <ipv4-destination>20.4.5.6/16</ipv4-destination>
+            <in-port>0</in-port>
+        </match>
+        <hard-timeout>12</hard-timeout>
+        <cookie>5</cookie>
+        <idle-timeout>34</idle-timeout>
+        <flow-name>FooXf5</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Protocol #, IP DSCP, IP ECN, Input Port
+
+-  Note that ethernet-type MUST be 2048 (0x800)
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>130</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:ff:ff:ff:aa</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>10.1.2.3/24</ipv4-source>
+            <ipv4-destination>20.4.5.6/16</ipv4-destination>
+            <ip-match>
+                <ip-protocol>56</ip-protocol>
+                <ip-dscp>15</ip-dscp>
+                <ip-ecn>1</ip-ecn>
+            </ip-match>
+            <in-port>0</in-port>
+        </match>
+        <hard-timeout>12000</hard-timeout>
+        <cookie>7</cookie>
+        <idle-timeout>12000</idle-timeout>
+        <flow-name>FooXf7</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Dest Ports, IP DSCP, IP ECN, Input Port
+
+-  Note that ethernet-type MUST be 2048 (0x800)
+
+-  Note that IP Protocol Type MUST be 6
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>131</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>17.1.2.3/8</ipv4-source>
+            <ipv4-destination>172.168.5.6/16</ipv4-destination>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>2</ip-dscp>
+                <ip-ecn>2</ip-ecn>
+            </ip-match>
+            <tcp-source-port>25364</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+            <in-port>0</in-port>
+        </match>
+        <hard-timeout>1200</hard-timeout>
+        <cookie>8</cookie>
+        <idle-timeout>3400</idle-timeout>
+        <flow-name>FooXf8</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Dest Ports, IP DSCP, IP ECN, Input Port
+
+-  Note that ethernet-type MUST be 2048 (0x800)
+
+-  Note that IP Protocol Type MUST be 17
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>132</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>20:14:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>19.1.2.3/10</ipv4-source>
+            <ipv4-destination>172.168.5.6/18</ipv4-destination>
+            <ip-match>
+                <ip-protocol>17</ip-protocol>
+                <ip-dscp>8</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <udp-source-port>25364</udp-source-port>
+            <udp-destination-port>8080</udp-destination-port>
+            <in-port>0</in-port>
+        </match>
+        <hard-timeout>1200</hard-timeout>
+        <cookie>9</cookie>
+        <idle-timeout>3400</idle-timeout>
+        <flow-name>FooXf9</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+
+Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Type & Code, IP DSCP, IP ECN, Input Port
+
+-  Note that ethernet-type MUST be 2048 (0x800)
+
+-  Note that IP Protocol Type MUST be 1
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>134</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>17.1.2.3/8</ipv4-source>
+            <ipv4-destination>172.168.5.6/16</ipv4-destination>
+            <ip-match>
+                <ip-protocol>1</ip-protocol>
+                <ip-dscp>27</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <icmpv4-match>
+                <icmpv4-type>6</icmpv4-type>
+                <icmpv4-code>3</icmpv4-code>
+            </icmpv4-match>
+            <in-port>0</in-port>
+        </match>
+        <hard-timeout>1200</hard-timeout>
+        <cookie>11</cookie>
+        <idle-timeout>3400</idle-timeout>
+        <flow-name>FooXf11</flow-name>
+        <priority>2</priority>
+    </flow>
+
+Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Transport Addresses, ARP Src & Target Hw Addresses
+
+-  Note that ethernet-type MUST be 2054 (0x806)
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                    <action>
+                        <order>1</order>
+                        <dec-mpls-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>137</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2054</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:ff:ff:FF:ff</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:FC:01:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <arp-op>1</arp-op>
+            <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
+            <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
+            <arp-source-hardware-address>
+                <address>12:34:56:78:98:AB</address>
+            </arp-source-hardware-address>
+            <arp-target-hardware-address>
+                <address>FE:DC:BA:98:76:54</address>
+            </arp-target-hardware-address>
+        </match>
+        <hard-timeout>12</hard-timeout>
+        <cookie>14</cookie>
+        <idle-timeout>34</idle-timeout>
+        <flow-name>FooXf14</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+
+Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <table_id>2</table_id>
+        <id>138</id>
+        <cookie_mask>255</cookie_mask>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <vlan-match>
+                <vlan-id>
+                    <vlan-id>78</vlan-id>
+                    <vlan-id-present>true</vlan-id-present>
+                </vlan-id>
+                <vlan-pcp>3</vlan-pcp>
+          </vlan-match>
+        </match>
+        <hard-timeout>1200</hard-timeout>
+        <cookie>15</cookie>
+        <idle-timeout>3400</idle-timeout>
+        <flow-name>FooXf15</flow-name>
+        <priority>2</priority>
+        <barrier>false</barrier>
+    </flow>
+
+Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <flow-name>FooXf17</flow-name>
+        <id>140</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>17</cookie>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <priority>2</priority>
+        <table_id>2</table_id>
+        <strict>false</strict>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34887</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <protocol-match-fields>
+                <mpls-label>567</mpls-label>
+                <mpls-tc>3</mpls-tc>
+                <mpls-bos>1</mpls-bos>
+            </protocol-match-fields>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf18</flow-name>
+        <id>141</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>18</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
+            <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
+        </match>
+    </flow>
+
+Metadata
+^^^^^^^^
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf19</flow-name>
+        <id>142</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>19</cookie>
+        <table_id>2</table_id>
+        <priority>1</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+        </match>
+    </flow>
+
+Metadata, Metadata Mask
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf20</flow-name>
+        <id>143</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>20</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <metadata>
+                <metadata>12345</metadata>
+                <metadata-mask>//FF</metadata-mask>
+            </metadata>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf21</flow-name>
+        <id>144</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>21</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>17</ip-protocol>
+                <ip-dscp>8</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <udp-source-port>25364</udp-source-port>
+            <udp-destination-port>8080</udp-destination-port>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+-  Note that IP Protocol MUST be 6
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf22</flow-name>
+        <id>145</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>22</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <tcp-source-port>183</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+-  Note that IP Protocol MUST be 6
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf23</flow-name>
+        <id>146</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>23</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ipv6-label>
+                <ipv6-flabel>33</ipv6-flabel>
+            </ipv6-label>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <tcp-source-port>183</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Tunnel ID
+^^^^^^^^^
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf24</flow-name>
+        <id>147</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>24</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <tunnel>
+                <tunnel-id>2591</tunnel-id>
+            </tunnel>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+-  Note that IP Protocol MUST be 58
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf25</flow-name>
+        <id>148</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>25</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ipv6-label>
+                <ipv6-flabel>33</ipv6-flabel>
+            </ipv6-label>
+            <ip-match>
+                <ip-protocol>58</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <icmpv6-match>
+                <icmpv6-type>6</icmpv6-type>
+                <icmpv6-code>3</icmpv6-code>
+            </icmpv6-match>
+        </match>
+    </flow>
+
+IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-  Note that ethernet-type MUST be 34525
+
+-  Note that IP Protocol MUST be 58
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf27</flow-name>
+        <id>150</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>27</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <dec-nw-ttl/>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ipv6-label>
+                <ipv6-flabel>33</ipv6-flabel>
+            </ipv6-label>
+            <ipv6-ext-header>
+                <ipv6-exthdr>0</ipv6-exthdr>
+            </ipv6-ext-header>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <tcp-source-port>183</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Actions
+~~~~~~~
+
+The format of the XML that describes OpenFlow actions is determined by
+the opendaylight-action-types yang model: .
+
+The RESTCONF documentation for the match-types yang model can be found
+at
+`opendaylight-action-types.html <https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-action-types.html>`__
+
+Apply Actions
+^^^^^^^^^^^^^
+
+Output to TABLE
+'''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf101</flow-name>
+        <id>256</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>101</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>TABLE</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <tcp-source-port>183</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to INPORT
+''''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf102</flow-name>
+        <id>257</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>102</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>INPORT</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+    7            </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>17.1.2.3/8</ipv4-source>
+            <ipv4-destination>172.168.5.6/16</ipv4-destination>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>2</ip-dscp>
+                <ip-ecn>2</ip-ecn>
+            </ip-match>
+            <tcp-source-port>25364</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to Physical Port
+'''''''''''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf103</flow-name>
+        <id>258</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>103</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>1</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>ff:ff:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>17.1.2.3/8</ipv4-source>
+            <ipv4-destination>172.168.5.6/16</ipv4-destination>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>2</ip-dscp>
+                <ip-ecn>2</ip-ecn>
+            </ip-match>
+            <tcp-source-port>25364</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to LOCAL
+'''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf104</flow-name>
+        <id>259</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>104</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>LOCAL</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>60</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <tcp-source-port>183</tcp-source-port>
+            <tcp-destination-port>8080</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to NORMAL
+''''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf105</flow-name>
+        <id>260</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>105</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>NORMAL</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>45</ip-dscp>
+                <ip-ecn>2</ip-ecn>
+            </ip-match>
+            <tcp-source-port>20345</tcp-source-port>
+            <tcp-destination-port>80</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to FLOOD
+'''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf106</flow-name>
+        <id>261</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>106</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>FLOOD</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34525</type>
+                </ethernet-type>
+            </ethernet-match>
+            <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
+            <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
+            <metadata>
+                <metadata>12345</metadata>
+            </metadata>
+            <ip-match>
+                <ip-protocol>6</ip-protocol>
+                <ip-dscp>45</ip-dscp>
+                <ip-ecn>2</ip-ecn>
+            </ip-match>
+            <tcp-source-port>20345</tcp-source-port>
+            <tcp-destination-port>80</tcp-destination-port>
+        </match>
+    </flow>
+
+Output to ALL
+'''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf107</flow-name>
+        <id>262</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>107</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>ALL</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>20:14:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>19.1.2.3/10</ipv4-source>
+            <ipv4-destination>172.168.5.6/18</ipv4-destination>
+            <ip-match>
+                <ip-protocol>17</ip-protocol>
+                <ip-dscp>8</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <udp-source-port>25364</udp-source-port>
+            <udp-destination-port>8080</udp-destination-port>
+            <in-port>0</in-port>
+        </match>
+    </flow>
+
+Output to CONTROLLER
+''''''''''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf108</flow-name>
+        <id>263</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>108</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>CONTROLLER</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>20:14:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>19.1.2.3/10</ipv4-source>
+            <ipv4-destination>172.168.5.6/18</ipv4-destination>
+            <ip-match>
+                <ip-protocol>17</ip-protocol>
+                <ip-dscp>8</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <udp-source-port>25364</udp-source-port>
+            <udp-destination-port>8080</udp-destination-port>
+            <in-port>0</in-port>
+        </match>
+    </flow>
+
+Output to ANY
+'''''''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+        <strict>false</strict>
+        <flow-name>FooXf109</flow-name>
+        <id>264</id>
+        <cookie_mask>255</cookie_mask>
+        <cookie>109</cookie>
+        <table_id>2</table_id>
+        <priority>2</priority>
+        <hard-timeout>1200</hard-timeout>
+        <idle-timeout>3400</idle-timeout>
+        <installHw>false</installHw>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <order>0</order>
+                        <output-action>
+                            <output-node-connector>ANY</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+                <ethernet-destination>
+                    <address>20:14:29:01:19:61</address>
+                </ethernet-destination>
+                <ethernet-source>
+                    <address>00:00:00:11:23:ae</address>
+                </ethernet-source>
+            </ethernet-match>
+            <ipv4-source>19.1.2.3/10</ipv4-source>
+            <ipv4-destination>172.168.5.6/18</ipv4-destination>
+            <ip-match>
+                <ip-protocol>17</ip-protocol>
+                <ip-dscp>8</ip-dscp>
+                <ip-ecn>3</ip-ecn>
+            </ip-match>
+            <udp-source-port>25364</udp-source-port>
+            <udp-destination-port>8080</udp-destination-port>
+            <in-port>0</in-port>
+        </match>
+    </flow>
+
+Push VLAN
+'''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow xmlns="urn:opendaylight:flow:inventory">
+       <strict>false</strict>
+       <instructions>
+           <instruction>
+               <order>0</order>
+               <apply-actions>
+                  <action>
+                     <push-vlan-action>
+                         <ethernet-type>33024</ethernet-type>
+                     </push-vlan-action>
+                     <order>0</order>
+                  </action>
+                   <action>
+                       <set-field>
+                           <vlan-match>
+                                <vlan-id>
+                                    <vlan-id>79</vlan-id>
+                                    <vlan-id-present>true</vlan-id-present>
+                                </vlan-id>
+                           </vlan-match>
+                       </set-field>
+                       <order>1</order>
+                   </action>
+                   <action>
+                       <output-action>
+                           <output-node-connector>5</output-node-connector>
+                       </output-action>
+                       <order>2</order>
+                   </action>
+               </apply-actions>
+           </instruction>
+       </instructions>
+       <table_id>0</table_id>
+       <id>31</id>
+       <match>
+           <ethernet-match>
+               <ethernet-type>
+                   <type>2048</type>
+               </ethernet-type>
+               <ethernet-destination>
+                   <address>FF:FF:29:01:19:61</address>
+               </ethernet-destination>
+               <ethernet-source>
+                   <address>00:00:00:11:23:AE</address>
+               </ethernet-source>
+           </ethernet-match>
+         <in-port>1</in-port>
+       </match>
+       <flow-name>vlan_flow</flow-name>
+       <priority>2</priority>
+    </flow>
+
+Push MPLS
+'''''''''
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow
+        xmlns="urn:opendaylight:flow:inventory">
+        <flow-name>push-mpls-action</flow-name>
+        <instructions>
+            <instruction>
+                <order>3</order>
+                <apply-actions>
+                    <action>
+                        <push-mpls-action>
+                            <ethernet-type>34887</ethernet-type>
+                        </push-mpls-action>
+                        <order>0</order>
+                    </action>
+                    <action>
+                        <set-field>
+                            <protocol-match-fields>
+                                <mpls-label>27</mpls-label>
+                            </protocol-match-fields>
+                        </set-field>
+                        <order>1</order>
+                    </action>
+                    <action>
+                        <output-action>
+                            <output-node-connector>2</output-node-connector>
+                        </output-action>
+                        <order>2</order>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <strict>false</strict>
+        <id>100</id>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>2048</type>
+                </ethernet-type>
+            </ethernet-match>
+            <in-port>1</in-port>
+            <ipv4-destination>10.0.0.4/32</ipv4-destination>
+        </match>
+        <idle-timeout>0</idle-timeout>
+        <cookie_mask>255</cookie_mask>
+        <cookie>401</cookie>
+        <priority>8</priority>
+        <hard-timeout>0</hard-timeout>
+        <installHw>false</installHw>
+        <table_id>0</table_id>
+    </flow>
+
+Swap MPLS
+'''''''''
+
+-  Note that ethernet-type MUST be 34887
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow
+        xmlns="urn:opendaylight:flow:inventory">
+        <flow-name>push-mpls-action</flow-name>
+        <instructions>
+            <instruction>
+                <order>2</order>
+                <apply-actions>
+                    <action>
+                        <set-field>
+                            <protocol-match-fields>
+                                <mpls-label>37</mpls-label>
+                            </protocol-match-fields>
+                        </set-field>
+                        <order>1</order>
+                    </action>
+                    <action>
+                        <output-action>
+                            <output-node-connector>2</output-node-connector>
+                        </output-action>
+                        <order>2</order>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <strict>false</strict>
+        <id>101</id>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34887</type>
+                </ethernet-type>
+            </ethernet-match>
+            <in-port>1</in-port>
+            <protocol-match-fields>
+                <mpls-label>27</mpls-label>
+            </protocol-match-fields>
+        </match>
+        <idle-timeout>0</idle-timeout>
+        <cookie_mask>255</cookie_mask>
+        <cookie>401</cookie>
+        <priority>8</priority>
+        <hard-timeout>0</hard-timeout>
+        <installHw>false</installHw>
+        <table_id>0</table_id>
+    </flow>
+
+Pop MPLS
+''''''''
+
+-  Note that ethernet-type MUST be 34887
+
+-  Issue with OVS 2.1 `OVS
+   fix <http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f>`__
+
+.. code:: xml
+
+    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+    <flow
+        xmlns="urn:opendaylight:flow:inventory">
+        <flow-name>FooXf10</flow-name>
+        <instructions>
+            <instruction>
+                <order>0</order>
+                <apply-actions>
+                    <action>
+                        <pop-mpls-action>
+                            <ethernet-type>2048</ethernet-type>
+                        </pop-mpls-action>
+                        <order>1</order>
+                    </action>
+                    <action>
+                        <output-action>
+                            <output-node-connector>2</output-node-connector>
+                            <max-length>60</max-length>
+                        </output-action>
+                        <order>2</order>
+                    </action>
+                </apply-actions>
+            </instruction>
+        </instructions>
+        <id>11</id>
+        <strict>false</strict>
+        <match>
+            <ethernet-match>
+                <ethernet-type>
+                    <type>34887</type>
+                </ethernet-type>
+            </ethernet-match>
+            <in-port>1</in-port>
+            <protocol-match-fields>
+                <mpls-label>37</mpls-label>
+            </protocol-match-fields>
+        </match>
+        <idle-timeout>0</idle-timeout>
+        <cookie>889</cookie>
+        <cookie_mask>255</cookie_mask>
+        <installHw>false</installHw>
+        <hard-timeout>0</hard-timeout>
+        <priority>10</priority>
+        <table_id>0</table_id>
+    </flow>
+
+Learn
+'''''
+
+-  Nicira extension defined in
+   https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h
+
+-  Example section is -
+   https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
+
+.. code:: xml
+
+    <flow>
+      <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
+      <hard-timeout>0</hard-timeout>
+      <idle-timeout>0</idle-timeout>
+      <match>
+        <ethernet-match>
+          <ethernet-type>
+            <type>2048</type>
+          </ethernet-type>
+        </ethernet-match>
+        <metadata>
+          <metadata>2199023255552</metadata>
+          <metadata-mask>2305841909702066176</metadata-mask>
+        </metadata>
+        <ip-match>
+          <ip-protocol>1</ip-protocol>
+        </ip-match>
+      </match>
+      <cookie>110100480</cookie>
+      <instructions>
+        <instruction>
+          <order>0</order>
+          <apply-actions>
+            <action>
+              <order>1</order>
+              <nx-resubmit
+                xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
+                <table>220</table>
+              </nx-resubmit>
+            </action>
+            <action>
+              <order>0</order>
+              <nx-learn
+                xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
+                <idle-timeout>60</idle-timeout>
+                <fin-idle-timeout>0</fin-idle-timeout>
+                <hard-timeout>60</hard-timeout>
+                <flags>0</flags>
+                <table-id>41</table-id>
+                <priority>61010</priority>
+                <fin-hard-timeout>0</fin-hard-timeout>
+                <flow-mods>
+                  <flow-mod-add-match-from-value>
+                    <src-ofs>0</src-ofs>
+                    <value>2048</value>
+                    <src-field>1538</src-field>
+                    <flow-mod-num-bits>16</flow-mod-num-bits>
+                  </flow-mod-add-match-from-value>
+                </flow-mods>
+                <flow-mods>
+                  <flow-mod-add-match-from-field>
+                    <src-ofs>0</src-ofs>
+                    <dst-ofs>0</dst-ofs>
+                    <dst-field>4100</dst-field>
+                    <src-field>3588</src-field>
+                    <flow-mod-num-bits>32</flow-mod-num-bits>
+                  </flow-mod-add-match-from-field>
+                </flow-mods>
+                <flow-mods>
+                  <flow-mod-add-match-from-field>
+                    <src-ofs>0</src-ofs>
+                    <dst-ofs>0</dst-ofs>
+                    <dst-field>518</dst-field>
+                    <src-field>1030</src-field>
+                    <flow-mod-num-bits>48</flow-mod-num-bits>
+                  </flow-mod-add-match-from-field>
+                </flow-mods>
+                <flow-mods>
+                  <flow-mod-add-match-from-field>
+                    <src-ofs>0</src-ofs>
+                    <dst-ofs>0</dst-ofs>
+                    <dst-field>3073</dst-field>
+                    <src-field>3073</src-field>
+                    <flow-mod-num-bits>8</flow-mod-num-bits>
+                  </flow-mod-add-match-from-field>
+                </flow-mods>
+                <flow-mods>
+                  <flow-mod-copy-value-into-field>
+                    <dst-ofs>0</dst-ofs>
+                    <value>1</value>
+                    <dst-field>65540</dst-field>
+                    <flow-mod-num-bits>8</flow-mod-num-bits>
+                  </flow-mod-copy-value-into-field>
+                </flow-mods>
+                <cookie>110100480</cookie>
+              </nx-learn>
+            </action>
+          </apply-actions>
+        </instruction>
+      </instructions>
+      <installHw>true</installHw>
+      <barrier>false</barrier>
+      <strict>false</strict>
+      <priority>61010</priority>
+      <table_id>253</table_id>
+      <flow-name>ACL</flow-name>
+    </flow>
+
+Opendaylight OpenFlow Plugin: Troubleshooting
+---------------------------------------------
+
+empty section
+
diff --git a/docs/user-guide/usecplugin-aaa-user-guide.rst b/docs/user-guide/usecplugin-aaa-user-guide.rst
new file mode 100644 (file)
index 0000000..75d11bf
--- /dev/null
@@ -0,0 +1,47 @@
+Usecplugin-AAA User Guide
+=========================
+
+The Usecplugin User Guide contains information about configuration,
+administration, management, using and troubleshooting the feature.
+
+Overview
+--------
+
+AAA plugin provides authorization, authentication and accounting
+services to OpenDaylight. A user logs in to OpenDaylight through the
+username and password provided by AAA plugin. Usecplugin-AAA collects
+and stores information about both successful and failed login attempts
+to OpenDaylight.
+
+Usecplugin-AAA Architecture
+---------------------------
+
+AAA plugin creates log messages about successful and failed login
+attempts to OpenDaylight. Usecplugin-AAA continuously reads this log
+file and checks for either successful and failed attempt information.
+Whenever Usecpluin-AAA identifies a new attempt entry in the log file it
+is stored in YANG Data Store and its own log file.
+
+Administering or Managing Usecplugin-AAA
+----------------------------------------
+
+-  Install feature ``odl-usecplugin-aaa``
+
+-  Enable odl-aaa log using command
+   ``log:set DEBUG org.opendaylight.aaa.shiro.filters``
+
+-  Login to the RESTCONF documentation.
+
+-  Check operational datastore for login attempts.
+
+-  POST URI ::
+   http://localhost:8181/restconf/operations/usecpluginaaa:attemptFromIP
+
+   -  Sample Input :: {"usecpluginaaa:input":{"ScrIP":"10.0.0.1"}}
+
+-  POST URI ::
+   http://localhost:8181/restconf/operations/usecpluginaaa:attemptOnDateTime
+
+   -  Sample Input :: {"usecpluginaaa:input":{"dateTime":"2016-07-27
+      14:11:18"}}
+
diff --git a/docs/user-guide/usecplugin-openflow-user-guide.rst b/docs/user-guide/usecplugin-openflow-user-guide.rst
new file mode 100644 (file)
index 0000000..7f31bc0
--- /dev/null
@@ -0,0 +1,90 @@
+Usecplugin-OpenFlow User Guide
+==============================
+
+The Usecplugin-OpenFlow User Guide contains information about
+configuration, administration, management, using and troubleshooting the
+feature.
+
+Overview
+--------
+
+Usecplugin-OpenFlow collects information about potential OpenFlow
+Packet\_In attacks to OpenDaylight. A threshold (water mark) can be set
+for the Packet\_In rate which when breached will trigger Packet\_In
+message information collection.
+
+Usecplugin Architecture
+-----------------------
+
+Usecplugin listens on OpenFlow southbound interface for Packet\_In
+messages. When the rate of Packet\_In breaches the high water mark the
+application parses the message for header information which is
+subsequently stored in YANG Data Store and a log file. Usecplugin has
+PacketHandler class that implements the PacketProcessing interface to
+override the OnPacketReceived notification by which the application is
+notified of Packet\_In messages.
+
+Configuring Usecplugin-OpenFlow
+-------------------------------
+
+Install the Usecplugin-OpenFlow feautre in OpenDaylight with the
+``feature:install odl-usecplugin-openflow`` at the Karaf CLI.
+
+A user can set the low water mark and high water mark for Packet\_In
+rates as well as number of samples for checking the time interval to
+calculate Packet\_In rate.
+
+URI
+    http://localhost:8181/apidoc/explorer/index.html#!/usecplugin(2015-01-05)
+
+High Water Mark Configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+PUT URI
+    http://localhost:8181/restconf/config/usecplugin:sample-data-hwm/
+
+Sample Input
+    ``{"usecplugin:sample-data-hwm": { "samples":"3000","highWaterMark":"3000"}}``
+
+Low Water Mark Configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+PUT URI
+    http://localhost:8181/restconf/config/usecplugin:sample-data-lwm/
+
+Sample Input
+    ``{"usecplugin:sample-data-lwm": { "samples-lwm":"2000","lowWaterMark-lwm":"2000"}}``
+
+Administering or Managing Usecplugin-OpenFlow
+---------------------------------------------
+
+Use RPC POST APIs in the following format for getting the attack related
+information.
+
+attackID
+~~~~~~~~
+
+URI
+    http://localhost:8181/restconf/operations/usecplugin:attackID
+
+Sample Input
+    ``{"usecplugin:input": { "NodeID":"openflow:1"}}``
+
+attacksFromIP
+~~~~~~~~~~~~~
+
+URI
+    http://localhost:8181/restconf/operations/usecplugin:attacksFromIP
+
+Sample Input
+    ``{"usecplugin:input": { "SrcIP":"10.0.0.1"}}``
+
+attacksToIP
+~~~~~~~~~~~
+
+URI
+    http://localhost:8181/restconf/operations/usecplugin:attacksToIP
+
+Sample Input
+    ``{"usecplugin:input": { "DstIP":"10.0.0.2"}}``
+
index 39708cf797c069161f3b463896113890b3b675e0..7e198cf1934e185184d2fb9ed44fe8a7b0eb9f4e 100644 (file)
@@ -83,8 +83,9 @@ command.
      "Content-type: application/json" -X GET \
      http://localhost:8181/restconf/operational/vtn:vtns
 
-REST API documentation for VTN Manager, please refer to:
-https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/
+REST Conf documentation for VTN Manager, please refer to:
+https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/apidocs/index.html
+
 
 VTN Coordinator
 ~~~~~~~~~~~~~~~
@@ -600,13 +601,13 @@ VTN Configuration for OpenStack Integration:
 -  A configuration file "90-vtn-neutron.xml" will be generated
    automatically by following the below steps,
 
--  Download the latest Beryllium karaf distribution from the below link,
+-  Download the latest Boron karaf distribution from the below link,
 
    ::
 
        http://www.opendaylight.org/software/downloads
 
--  cd "distribution-karaf-0.4.0-Beryllium" and run karaf by using the
+-  cd "distribution-karaf-0.5.0-Boron" and run karaf by using the
    following command "./bin/karaf".
 
 -  Install the below feature to generate "90-vtn-neutron.xml"
@@ -617,7 +618,7 @@ VTN Configuration for OpenStack Integration:
 
 -  Logout from the karaf console and Check "90-vtn-neutron.xml" file
    from the following path
-   "distribution-karaf-0.4.0-Beryllium/etc/opendaylight/karaf/".
+   "distribution-karaf-0.5.0-Boron/etc/opendaylight/karaf/".
 
 -  The contents of "90-vtn-neutron.xml" should be as follows:
 
@@ -1028,7 +1029,7 @@ view the graphical representation on the right pane.
     DLUX UI does not provide ability to add topology information. The
     Topology should be created using an open flow plugin. Controller
     stores this information in the database and displays on the DLUX
-    page, when the you connect to the controller using openflow.
+    page, when the you connect to the controller using OpenFlow.
 
 .. figure:: ./images/vtn/Dlux_topology.png
    :alt: Topology
@@ -1060,7 +1061,7 @@ Overview
 ^^^^^^^^
 
 This page explains how to provision virtual L2 network using VTN
-Manager. This page targets Beryllium release, so the procedure described
+Manager. This page targets Boron release, so the procedure described
 here does not work in other releases.
 
 .. figure:: ./images/vtn/How_to_provision_virtual_L2_network.png
@@ -1115,7 +1116,7 @@ execute REST API provided by VTN Manager as follows. It uses curl
 command to call the REST API.
 
 -  Create a virtual tenant named vtn1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -1123,7 +1124,7 @@ command to call the REST API.
 
 -  Create a virtual bridge named vbr1 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -1131,7 +1132,7 @@ command to call the REST API.
 
 -  Create two interfaces into the virtual bridge by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1143,7 +1144,7 @@ command to call the REST API.
 
 -  Configure two mappings on the created interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if1 of the virtual bridge will be mapped to the port
       "s2-eth1" of the switch "openflow:2" of the Mininet.
@@ -1253,7 +1254,7 @@ Cleaning Up
 ^^^^^^^^^^^
 
 -  You can delete the virtual tenant vtn1 by executing `the remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -1266,7 +1267,7 @@ Overview
 ^^^^^^^^
 
 This page explains how to test Vlan-map in a multi host scenario using
-mininet. This page targets Beryllium release, so the procedure described
+mininet. This page targets Boron release, so the procedure described
 here does not work in other releases.
 
 .. figure:: ./images/vtn/vlanmap_using_mininet.png
@@ -1320,7 +1321,7 @@ Configuration
 To test vlan-map, execute REST API provided by VTN Manager as follows.
 
 -  Create a virtual tenant named vtn1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -1328,7 +1329,7 @@ To test vlan-map, execute REST API provided by VTN Manager as follows.
 
 -  Create a virtual bridge named vbr1 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -1336,7 +1337,7 @@ To test vlan-map, execute REST API provided by VTN Manager as follows.
 
 -  Configure a vlan map with vlanid 200 for vBridge vbr1 by executing
    `the add-vlan-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vlan-map.html#add-vlan-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vlan-map.html#add-vlan-map>`__.
 
 ::
 
@@ -1344,7 +1345,7 @@ To test vlan-map, execute REST API provided by VTN Manager as follows.
 
 -  Create a virtual bridge named vbr2 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -1352,7 +1353,7 @@ To test vlan-map, execute REST API provided by VTN Manager as follows.
 
 -  Configure a vlan map with vlanid 300 for vBridge vbr2 by executing
    `the add-vlan-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vlan-map.html#add-vlan-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vlan-map.html#add-vlan-map>`__.
 
 ::
 
@@ -1451,7 +1452,7 @@ Cleaning Up
 ^^^^^^^^^^^
 
 -  You can delete the virtual tenant vtn1 by executing `the remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -1464,7 +1465,7 @@ Overview
 ^^^^^^^^
 
 This page explains how to configure VTN Manager for Service Chaining.
-This page targets Beryllium release, so the procedure described here
+This page targets Boron release, so the procedure described here
 does not work in other releases.
 
 .. figure:: ./images/vtn/Service_Chaining_With_One_Service.png
@@ -1476,7 +1477,7 @@ Requirements
 ^^^^^^^^^^^^
 
 -  Please refer to the `Installation
-   Pages <https://wiki.opendaylight.org/view/VTN:Beryllium:Installation_Guide>`__
+   Pages <https://wiki.opendaylight.org/view/VTN:Boron:Installation_Guide>`__
    to run ODL with VTN Feature enabled.
 
 -  Please ensure Bridge-Utils package is installed in mininet
@@ -1576,7 +1577,7 @@ Please execute the below commands in controller
 .. note::
 
     The below commands are for the difference in behavior of Manager in
-    Beryllium topology. The Link below has the details for this bug:
+    Boron topology. The Link below has the details for this bug:
     https://bugs.opendaylight.org/show_bug.cgi?id=3818.
 
 ::
@@ -1584,7 +1585,7 @@ Please execute the below commands in controller
     curl --user admin:admin -H 'content-type: application/json' -H 'ipaddr:127.0.0.1' -X PUT http://localhost:8181/restconf/config/vtn-static-topology:vtn-static-topology/static-edge-ports -d '{"static-edge-ports": {"static-edge-port": [ {"port": "openflow:3:3"}, {"port": "openflow:3:4"}, {"port": "openflow:4:3"}, {"port": "openflow:4:4"}]}}'
 
 -  Create a virtual tenant named vtn1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -1592,7 +1593,7 @@ Please execute the below commands in controller
 
 -  Create a virtual bridge named vbr1 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -1600,7 +1601,7 @@ Please execute the below commands in controller
 
 -  Create interface if1 into the virtual bridge vbr1 by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1608,7 +1609,7 @@ Please execute the below commands in controller
 
 -  Configure port mapping on the interface by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if1 of the virtual bridge will be mapped to the port
       "s1-eth2" of the switch "openflow:1" of the Mininet.
@@ -1621,7 +1622,7 @@ Please execute the below commands in controller
 
 -  Create interface if2 into the virtual bridge vbr1 by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1629,7 +1630,7 @@ Please execute the below commands in controller
 
 -  Configure port mapping on the interface by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if2 of the virtual bridge will be mapped to the port
       "s2-eth2" of the switch "openflow:2" of the Mininet.
@@ -1642,7 +1643,7 @@ Please execute the below commands in controller
 
 -  Create interface if3 into the virtual bridge vbr1 by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1650,7 +1651,7 @@ Please execute the below commands in controller
 
 -  Configure port mapping on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if3 of the virtual bridge will be mapped to the port
       "s2-eth3" of the switch "openflow:2" of the Mininet.
@@ -1666,7 +1667,7 @@ Traffic filtering
 
 -  Create flowcondition named cond\_1 by executing `the
    set-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#set-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#set-flow-condition>`__.
 
    -  For option source and destination-network, get inet address of
       host h12(src) and h22(dst) from mininet.
@@ -1677,7 +1678,7 @@ Traffic filtering
 
 -  Flow filter demonstration with DROP action-type. Create Flowfilter in
    VBR Interface if1 by executing `the set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
 ::
 
@@ -1700,7 +1701,7 @@ With One Service
 
 -  Create a virtual terminal named vt\_srvc1\_1 in the tenant vtn1 by
    executing `the update-vterminal
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vterminal.html#update-vterminal>`__.
 
 ::
 
@@ -1708,7 +1709,7 @@ With One Service
 
 -  Create interface IF into the virtual terminal vt\_srvc1\_1 by
    executing `the update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1716,7 +1717,7 @@ With One Service
 
 -  Configure port mapping on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface IF of the virtual terminal will be mapped to the
       port "s3-eth3" of the switch "openflow:3" of the Mininet.
@@ -1729,7 +1730,7 @@ With One Service
 
 -  Create a virtual terminal named vt\_srvc1\_2 in the tenant vtn1 by
    executing `the update-vterminal
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vterminal.html#update-vterminal>`__.
 
 ::
 
@@ -1737,7 +1738,7 @@ With One Service
 
 -  Create interface IF into the virtual terminal vt\_srvc1\_2 by
    executing `the update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1745,7 +1746,7 @@ With One Service
 
 -  Configure port mapping on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface IF of the virtual terminal will be mapped to the
       port "s4-eth3" of the switch "openflow:4" of the Mininet.
@@ -1758,7 +1759,7 @@ With One Service
 
 -  Create flowcondition named cond\_1 by executing `the
    set-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#set-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#set-flow-condition>`__.
 
    -  For option source and destination-network, get inet address of
       host h12(src) and h22(dst) from mininet.
@@ -1769,7 +1770,7 @@ With One Service
 
 -  Create flowcondition named cond\_any by executing `the
    set-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#set-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#set-flow-condition>`__.
 
 ::
 
@@ -1778,7 +1779,7 @@ With One Service
 -  Flow filter demonstration with redirect action-type. Create
    Flowfilter in virtual terminal vt\_srvc1\_2 interface IF by executing
    `the set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
    -  Flowfilter redirects vt\_srvc1\_2 to bridge1-IF2
 
@@ -1789,7 +1790,7 @@ With One Service
 -  Flow filter demonstration with redirect action-type. Create
    Flowfilter in vbridge vbr1 interface if1 by executing `the
    set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
    -  Flow filter redirects Bridge1-IF1 to vt\_srvc1\_1
 
@@ -1831,7 +1832,7 @@ With two services
 
 -  Create a virtual terminal named vt\_srvc2\_1 in the tenant vtn1 by
    executing `the update-vterminal
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vterminal.html#update-vterminal>`__.
 
 ::
 
@@ -1839,7 +1840,7 @@ With two services
 
 -  Create interface IF into the virtual terminal vt\_srvc2\_1 by
    executing `the update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1847,7 +1848,7 @@ With two services
 
 -  Configure port mapping on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface IF of the virtual terminal will be mapped to the
       port "s3-eth4" of the switch "openflow:3" of the Mininet.
@@ -1860,7 +1861,7 @@ With two services
 
 -  Create a virtual terminal named vt\_srvc2\_2 in the tenant vtn1 by
    executing `the update-vterminal
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vterminal.html#update-vterminal>`__.
 
 ::
 
@@ -1868,7 +1869,7 @@ With two services
 
 -  Create interfaces IF into the virtual terminal vt\_srvc2\_2 by
    executing `the update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -1876,7 +1877,7 @@ With two services
 
 -  Configure port mapping on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface IF of the virtual terminal will be mapped to the
       port "s4-eth4" of the switch "openflow:4" of the mininet.
@@ -1890,7 +1891,7 @@ With two services
 -  Flow filter demonstration with redirect action-type. Create
    Flowfilter in virtual terminal vt\_srvc2\_2 interface IF by executing
    `the set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
    -  Flow filter redirects vt\_srvc2\_2 to Bridge1-IF2.
 
@@ -1901,7 +1902,7 @@ With two services
 -  Flow filter demonstration with redirect action-type. Create
    Flowfilter in virtual terminal vt\_srvc2\_2 interface IF by executing
    `the set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
    -  Flow filter redirects vt\_srvc1\_2 to vt\_srvc2\_1.
 
@@ -2186,7 +2187,7 @@ Cleaning Up
 -  To clean up both VTN and flowconditions.
 
 -  You can delete the virtual tenant vtn1 by executing `the remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -2194,7 +2195,7 @@ Cleaning Up
 
 -  You can delete the flowcondition cond\_1 and cond\_any by executing
    `the remove-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#remove-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#remove-flow-condition>`__.
 
 ::
 
@@ -2211,11 +2212,11 @@ Overview
 ^^^^^^^^
 
 This page explains how to view Dataflows using VTN Manager. This page
-targets Beryllium release, so the procedure described here does not work
+targets Boron release, so the procedure described here does not work
 in other releases.
 
 Dataflow feature enables retrieval and display of data flows in the
-openflow network. The data flows can be retrieved based on an openflow
+OpenFlow network. The data flows can be retrieved based on an OpenFlow
 switch or a switch port or a L2 source host.
 
 The flow information provided by this feature are
@@ -2270,7 +2271,7 @@ Parallely execute below Restconf command to get data flow information of
 node "openflow:1" and its port "s1-eth1".
 
 -  Get the Dataflows information by executing `the get-data-flow
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow.html#get-data-flow>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow.html#get-data-flow>`__.
 
 ::
 
@@ -2474,7 +2475,7 @@ Overview
    particular host by associating a Vbridge to the hosts and configuring
    Mac Mapping (mac address) to the Vbridge.
 
--  This page targets Beryllium release, so the procedure described here
+-  This page targets Boron release, so the procedure described here
    does not work in other releases.
 
 .. figure:: ./images/vtn/Single_Controller_Mapping.png
@@ -2524,7 +2525,7 @@ To create Mac Map in VTN, execute REST API provided by VTN Manager as
 follows. It uses curl command to call REST API.
 
 -  Create a virtual tenant named Tenant1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -2532,7 +2533,7 @@ follows. It uses curl command to call REST API.
 
 -  Create a virtual bridge named vBridge1 in the tenant Tenant1 by
    executing `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -2541,7 +2542,7 @@ follows. It uses curl command to call REST API.
 -  Configuring Mac Mappings on the vBridge1 by giving the mac address of
    host h12 and host h22 as follows to allow the communication by
    executing `the set-mac-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-mac-map.html#set-mac-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-mac-map.html#set-mac-map>`__.
 
 ::
 
@@ -2660,7 +2661,7 @@ Cleaning Up
 
 -  You can delete the virtual tenant Tenant1 by executing `the
    remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -2673,7 +2674,7 @@ Overview
 ^^^^^^^^
 
 -  This page explains how to provision flowfilter using VTN Manager.
-   This page targets Beryllium release, so the procedure described here
+   This page targets Boron release, so the procedure described here
    does not work in other releases.
 
 -  The flow-filter function discards, permits, or redirects packets of
@@ -2764,7 +2765,7 @@ execute REST API provided by VTN Manager as follows. It uses curl
 command to call the REST API.
 
 -  Create a virtual tenant named vtn1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -2772,7 +2773,7 @@ command to call the REST API.
 
 -  Create a virtual bridge named vbr1 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -2780,7 +2781,7 @@ command to call the REST API.
 
 -  Create two interfaces into the virtual bridge by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -2792,7 +2793,7 @@ command to call the REST API.
 
 -  Configure two mappings on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if1 of the virtual bridge will be mapped to the port
       "s2-eth1" of the switch "openflow:2" of the Mininet.
@@ -2814,7 +2815,7 @@ command to call the REST API.
 
 -  Create flowcondition named cond\_1 by executing `the
    set-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#set-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#set-flow-condition>`__.
 
    -  For option source and destination-network, get inet address of
       host h1 and h3 from mininet.
@@ -2829,7 +2830,7 @@ command to call the REST API.
 
 -  Flow filter demonstration with DROP action-type. Create Flowfilter in
    VBR Interface if1 by executing `the set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
 ::
 
@@ -2851,7 +2852,7 @@ Configuration for pass filter
 
 -  Update the flow filter to pass the packets by executing `the
    set-flow-filter
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-filter.html#set-flow-filter>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-filter.html#set-flow-filter>`__.
 
 ::
 
@@ -2976,7 +2977,7 @@ Cleaning Up
 -  To clean up both VTN and flowcondition.
 
 -  You can delete the virtual tenant vtn1 by executing `the remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -2984,7 +2985,7 @@ Cleaning Up
 
 -  You can delete the flowcondition cond\_1 by executing `the
    remove-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#remove-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#remove-flow-condition>`__.
 
 ::
 
@@ -2997,7 +2998,7 @@ Overview
 ^^^^^^^^
 
 -  This page explains how to create specific VTN Pathmap using VTN
-   Manager. This page targets Beryllium release, so the procedure
+   Manager. This page targets Boron release, so the procedure
    described here does not work in other releases.
 
 .. figure:: ./images/vtn/Pathmap.png
@@ -3080,7 +3081,7 @@ Configuration
    VTN Manager as follows. It uses curl command to call the REST API.
 
 -  Create a virtual tenant named vtn1 by executing `the update-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#update-vtn>`__.
 
 ::
 
@@ -3088,7 +3089,7 @@ Configuration
 
 -  Create a virtual bridge named vbr1 in the tenant vtn1 by executing
    `the update-vbridge
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vbridge.html#update-vbridge>`__.
 
 ::
 
@@ -3096,7 +3097,7 @@ Configuration
 
 -  Create two interfaces into the virtual bridge by executing `the
    update-vinterface
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-vinterface.html#update-vinterface>`__.
 
 ::
 
@@ -3108,7 +3109,7 @@ Configuration
 
 -  Configure two mappings on the interfaces by executing `the
    set-port-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-port-map.html#set-port-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-port-map.html#set-port-map>`__.
 
    -  The interface if1 of the virtual bridge will be mapped to the port
       "s2-eth1" of the switch "openflow:1" of the Mininet.
@@ -3140,7 +3141,7 @@ Configuration
      64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.101 ms
 
 -  Get the Dataflows information by executing `the get-data-flow
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow.html#get-data-flow>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow.html#get-data-flow>`__.
 
 ::
 
@@ -3148,7 +3149,7 @@ Configuration
 
 -  Create flowcondition named cond\_1 by executing `the
    set-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#set-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#set-flow-condition>`__.
 
    -  For option source and destination-network, get inet address of
       host h1 or host h2 from mininet
@@ -3159,14 +3160,14 @@ Configuration
 
 -  Create pathmap with flowcondition cond\_1 by executing `the
    set-path-map
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-path-map.html#set-path-map>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-path-map.html#set-path-map>`__.
 
 ::
 
     curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-path-map:set-path-map -d '{"input":{"tenant-name":"vtn1","path-map-list":[{"condition":"cond_1","policy":"1","index": "1","idle-timeout":"300","hard-timeout":"0"}]}}'
 
 -  Create pathpolicy by executing `the set-path-policy
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-path-policy.html#set-path-policy>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-path-policy.html#set-path-policy>`__.
 
 ::
 
@@ -3317,7 +3318,7 @@ Cleaning Up
 -  To clean up both VTN and flowcondition.
 
 -  You can delete the virtual tenant vtn1 by executing `the remove-vtn
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn.html#remove-vtn>`__.
 
 ::
 
@@ -3325,7 +3326,7 @@ Cleaning Up
 
 -  You can delete the flowcondition cond\_1 by executing `the
    remove-flow-condition
-   RPC <https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow-condition.html#remove-flow-condition>`__.
+   RPC <https://nexus.opendaylight.org/content/sites/site/org.opendaylight.vtn/boron/manager.model/models/vtn-flow-condition.html#remove-flow-condition>`__.
 
 ::
 
@@ -4355,7 +4356,7 @@ failing..**
 
 ::
 
-      Please ensure the firewall settings for port:8181(Beryllium release) or port:8083(Post Beryllium release) and enable the same.
+      Please ensure the firewall settings for port:8181 (Beryllium release) or port:8083 (Post Beryllium release) and enable the same.
 
 **How to debug a REST API returning a failure message?.**
 
@@ -4633,9 +4634,9 @@ Prerequisites to create Network Service in SCVMM machine, Please follow the belo
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 1.  Please go through the below link to download VSEM Provider zip file,
-    https://nexus.opendaylight.org/content/groups/public/org/opendaylight/vtn/application/vtnmanager-vsemprovider/2.0.0-Beryllium/vtnmanager-vsemprovider-2.0.0-Beryllium-bin.zip
+    https://nexus.opendaylight.org/content/groups/public/org/opendaylight/vtn/application/vtnmanager-vsemprovider/1.2.0-Boron/vtnmanager-vsemprovider-1.2.0-Boron-bin.zip
 
-2.  Unzip the vtnmanager-vsemprovider-2.0.0-Beryllium-bin.zip file
+2.  Unzip the vtnmanager-vsemprovider-1.2.0-Boron-bin.zip file
     anywhere in your SCVMM machine.
 
 3.  Stop SCVMM service from **"service manager→tools→servers→select
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-config-subsystem.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-config-subsystem.adoc
deleted file mode 100644 (file)
index 865a15c..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-=== Description of OpenFlow Plugin Modules
-
-The OpenFlow plugin project contains a variety of OpenDaylight modules,
-which are loaded using the configuration subsystem. This section
-describes the YANG files used to model each module.
-
-*General model (interfaces)* - openflow-plugin-cfg.yang.
-
-* the provided module is defined (`identity openflow-provider`)
-* and target implementation is assigned (`...OpenflowPluginProvider`)
-
-[source,yang]
-----
-module openflow-provider {
-   yang-version 1;
-   namespace "urn:opendaylight:params:xml:ns:yang:openflow:common:config[urn:opendaylight:params:xml:ns:yang:openflow:common:config]";
-   prefix "ofplugin-cfg";
-
-   import config {prefix config; revision-date 2013-04-05; }
-   description
-       "openflow-plugin-custom-config";
-   revision "2014-03-26" {
-       description
-           "Initial revision";
-   }
-   identity openflow-provider{
-       base config:service-type;
-       config:java-class "org.opendaylight.openflowplugin.openflow.md.core.sal.OpenflowPluginProvider";
-   }
-}
-----
-
-*Implementation model* - openflow-plugin-cfg-impl.yang
-
-* the implementation of module is defined
-(`identity openflow-provider-impl`)
-** class name of generated implementation is defined
-(ConfigurableOpenFlowProvider)
-* via augmentation the configuration of module is defined:
-** this module requires instance of binding-aware-broker
-(`container binding-aware-broker`)
-** and list of openflow-switch-connection-provider (those are provided
-by openflowjava, one plugin instance will orchestrate multiple
-openflowjava modules)
-
-[source,yang]
-----
-module openflow-provider-impl {
-   yang-version 1;
-   namespace "urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl[urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl]";
-   prefix "ofplugin-cfg-impl";
-
-   import config {prefix config; revision-date 2013-04-05;}
-   import openflow-provider {prefix openflow-provider;}
-   import openflow-switch-connection-provider {prefix openflow-switch-connection-provider;revision-date 2014-03-28;}
-   import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
-
-
-   description
-       "openflow-plugin-custom-config-impl";
-
-   revision "2014-03-26" {
-       description
-           "Initial revision";
-   }
-
-   identity openflow-provider-impl {
-       base config:module-type;
-       config:provided-service openflow-provider:openflow-provider;
-       config:java-name-prefix ConfigurableOpenFlowProvider;
-   }
-
-   augment "/config:modules/config:module/config:configuration" {
-       case openflow-provider-impl {
-           when "/config:modules/config:module/config:type = 'openflow-provider-impl'";
-
-           container binding-aware-broker {
-               uses config:service-ref {
-                   refine type {
-                       mandatory true;
-                       config:required-identity md-sal-binding:binding-broker-osgi-registry;
-                   }
-               }
-           }
-           list openflow-switch-connection-provider {
-               uses config:service-ref {
-                   refine type {
-                       mandatory true;
-                       config:required-identity openflow-switch-connection-provider:openflow-switch-connection-provider;
-                   }
-               }
-           }
-       }
-   }
-}
-----
-
-==== Generating config and sal classes out of yangs
-
-In order to involve suitable code generators, this is needed in pom:
-
-[source,xml]
-----
-<build> ...
-  <plugins>
-    <plugin>
-      <groupId>org.opendaylight.yangtools</groupId>
-      <artifactId>yang-maven-plugin</artifactId>
-      <executions>
-        <execution>
-          <goals>
-            <goal>generate-sources</goal>
-          </goals>
-          <configuration>
-            <codeGenerators>
-              <generator>
-                <codeGeneratorClass>
-                  org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-                </codeGeneratorClass>
-                <outputBaseDir>${project.build.directory}/generated-sources/config</outputBaseDir>
-                <additionalConfiguration>
-                  <namespaceToPackage1>
-                    urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang
-                  </namespaceToPackage1>
-                </additionalConfiguration>
-              </generator>
-              <generator>
-                <codeGeneratorClass>
-                  org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl
-                </codeGeneratorClass>
-                <outputBaseDir>${project.build.directory}/generated-sources/sal</outputBaseDir>
-              </generator>
-              <generator>
-                <codeGeneratorClass>org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl</codeGeneratorClass>
-                <outputBaseDir>${project.build.directory}/site/models</outputBaseDir>
-              </generator>
-            </codeGenerators>
-            <inspectDependencies>true</inspectDependencies>
-          </configuration>
-        </execution>
-      </executions>
-      <dependencies>
-        <dependency>
-          <groupId>org.opendaylight.controller</groupId>
-          <artifactId>yang-jmx-generator-plugin</artifactId>
-          <version>0.2.5-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-          <groupId>org.opendaylight.yangtools</groupId>
-          <artifactId>maven-sal-api-gen-plugin</artifactId>
-          <version>${yangtools.version}</version>
-          <type>jar</type>
-        </dependency>
-      </dependencies>
-    </plugin>
-    ...
-----
-
-* JMX generator (target/generated-sources/config)
-* sal CodeGeneratorImpl (target/generated-sources/sal)
-* documentation generator (target/site/models):
-https://jenkins.opendaylight.org/openflowplugin/job/openflowplugin-merge/ws/openflowplugin/target/site/models/openflow-provider.html[openflow-provider.html],
-https://jenkins.opendaylight.org/openflowplugin/job/openflowplugin-merge/ws/openflowplugin/target/site/models/openflow-provider-impl.html[openflow-provider-impl.html]
-
-==== Altering generated files
-
-Those files were generated under src/main/java in package as referred in
-yangs (if exist, generator will not overwrite them):
-
-* ConfigurableOpenFlowProviderModuleFactory
-+
-::
-  here the *instantiateModule* methods are extended in order to capture
-  and inject osgi BundleContext into module, so it can be injected into
-  final implementation - *OpenflowPluginProvider*
-  +
-  `module.setBundleContext(bundleContext);`
-* ConfigurableOpenFlowProviderModule
-+
-::
-  here the *createInstance* method is extended in order to inject osgi
-  BundleContext into module implementation
-  +
-  `pluginProvider.setContext(bundleContext);`
-
-[[configuration-xml-file]]
-==== Configuration xml file
-
-Configuration file contains
-
-* required capabilities
-** modules definitions from openflowjava
-** modules definitions from openflowplugin
-* modules definition
-** openflow:switch:connection:provider:impl (listening on port 6633,
-name=openflow-switch-connection-provider-legacy-impl)
-** openflow:switch:connection:provider:impl (listening on port 6653,
-name=openflow-switch-connection-provider-default-impl)
-** openflow:common:config:impl (having 2 services (wrapping those 2
-previous modules) and binding-broker-osgi-registry injected)
-* provided services
-** openflow-switch-connection-provider-default
-** openflow-switch-connection-provider-legacy
-** openflow-provider
-
-[source,xml]
-----
-<snapshot>
- <required-capabilities>
-   <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl?module=openflow-switch-connection-provider-impl&revision=2014-03-28</capability>
-   <capability>urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?module=openflow-switch-connection-provider&revision=2014-03-28</capability>
-   <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?module=openflow-provider-impl&revision=2014-03-26</capability>
-   <capability>urn:opendaylight:params:xml:ns:yang:openflow:common:config?module=openflow-provider&revision=2014-03-26</capability>
- </required-capabilities>
-
- <configuration>
-
-
-     <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-       <module>
-         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
-         <name>openflow-switch-connection-provider-default-impl</name>
-         <port>6633</port>
-         <switch-idle-timeout>15000</switch-idle-timeout>
-       </module>
-       <module>
-         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl">prefix:openflow-switch-connection-provider-impl</type>
-         <name>openflow-switch-connection-provider-legacy-impl</name>
-         <port>6653</port>
-         <switch-idle-timeout>15000</switch-idle-timeout>
-       </module>
-
-
-       <module>
-         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl">prefix:openflow-provider-impl</type>
-         <name>openflow-provider-impl</name>
-
-         <openflow-switch-connection-provider>
-           <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
-           <name>openflow-switch-connection-provider-default</name>
-         </openflow-switch-connection-provider>
-         <openflow-switch-connection-provider>
-           <type xmlns:ofSwitch="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">ofSwitch:openflow-switch-connection-provider</type>
-           <name>openflow-switch-connection-provider-legacy</name>
-         </openflow-switch-connection-provider>
-
-
-         <binding-aware-broker>
-           <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
-           <name>binding-osgi-broker</name>
-         </binding-aware-broker>
-       </module>
-     </modules>
-
-     <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-       <service>
-         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider">prefix:openflow-switch-connection-provider</type>
-         <instance>
-           <name>openflow-switch-connection-provider-default</name>
-           <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-default-impl']</provider>
-         </instance>
-         <instance>
-           <name>openflow-switch-connection-provider-legacy</name>
-           <provider>/modules/module[type='openflow-switch-connection-provider-impl'][name='openflow-switch-connection-provider-legacy-impl']</provider>
-         </instance>
-       </service>
-
-       <service>
-         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:openflow:common:config">prefix:openflow-provider</type>
-         <instance>
-           <name>openflow-provider</name>
-           <provider>/modules/module[type='openflow-provider-impl'][name='openflow-provider-impl']</provider>
-         </instance>
-       </service>
-     </services>
-
-
- </configuration>
-</snapshot>
-----
-
-==== API changes
-
-In order to provide multiple instances of modules from openflowjava
-there is an API change. Previously OFPlugin got access to
-SwitchConnectionProvider exposed by OFJava and injected collection of
-configurations so that for each configuration new instance of tcp
-listening server was created. Now those configurations are provided by
-configSubsystem and configured modules (wrapping the original
-SwitchConnectionProvider) are injected into OFPlugin (wrapping
-SwitchConnectionHandler).
-
-==== Providing config file (IT, local distribution/base, integration/distributions/base)
-
-===== openflowplugin-it
-
-Here the whole configuration is contained in one file (controller.xml).
-Required entries needed in order to startup and wire OEPlugin + OFJava
-are simply added there.
-
-===== OFPlugin/distribution/base
-
-Here new config file has been added
-(src/main/resources/configuration/initial/42-openflow-protocol-impl.xml)
-and is being copied to config/initial subfolder of build.
-
-===== integration/distributions/build
-
-In order to push the actual config into config/initial subfolder of
-distributions/base in integration project there was a new artifact in
-OFPlugin created - *openflowplugin-controller-config*, containing only
-the config xml file under src/main/resources. Another change was
-committed into integration project. During build this config xml is
-being extracted and copied to the final folder in order to be accessible
-during controller run.
index a201f435667bdd0d70d0479e279534be855d1da1..52fc8ab3628a9d6968868e8078ad3bb96188b45d 100644 (file)
@@ -1,53 +1,4 @@
 [[openflow-plugin-project-developer-guide]]
 == OpenFlow Plugin Project Developer Guide
 
-This section covers topics which are developer specific and which have not been
-covered in the user guide. Please see the Lithium OpenFlow plugin user
-guide first.
-
-It can be found on https://www.opendaylight.org/downloads[the OpenDaylight software download page].
-
-include::odl-ofp-sequence-diagram.adoc[]
-
-include::odl-ofp-config-subsystem.adoc[]
-
-include::odl-ofp-message-spy.adoc[]
-
-include::odl-ofp-forwardingrules-sync.adoc[]
-
-include::odl-ofp-singleton-cluster-aproach.adoc[]
-
-// * OpenDaylight_OpenFlow_Plugin:Backlog:Extensibility[Extensibility Framework]
-
-include::odl-ofp-yang-models.adoc[]
-
-include::odl-ofp-feature-tree.adoc[]
-
-include::odl-ofp-wiring-up-notifications.adoc[]
-
-=== Message Order Preservation
-
-While the Helium release of OpenFlow Plugin relied on queues to ensure messages were delivered in order, subsequent releases instead ensure that all the messages from a given device are delivered using the same thread and thus message order is guaranteed without queues. The OpenFlow plugin allocates a number of threads equal to twice the number of processor cores on machine it is run, e.g., 8 threads if the machine has 4 cores.
-
-NOTE:
-While each device is assigned to one thread, multiple devices can be assigned to the same thread.
-
-// == Tutorial / How-To
-
-// missing content
-
-// * OpenDaylight_OpenFlow_Plugin::Build_Instructions[Build Instructions]
-
-// * OpenDaylight_OpenFlow_Plugin::MininetFromScratch[Mininet from scratch]
-
-// * OpenDaylight_OpenFlow_Plugin::Mininet with multiple controllers[Mininet with multiple controllers]
-
-// * OpenDaylight_OpenFlow_Plugin:Coding_Hints[Coding hints]
-
-// * OpenDaylight_OpenFlow_Plugin::Wiring up Notifications[Wiring up Notifications]
-
-// * OpenDaylight_OpenFlow_Plugin::Python_test_scripts[Python test-scripts]
-
-// * OpenDaylight_OpenFlow_Plugin:Robot_Framework_Tests[Setup robot testing environment]
-
-// * OpenDaylight_OpenFlow_Plugin::LiProposal_dev_setup[Lithium proposal - dev setup]
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/developer-guide/openflow-plugin-project-developer-guide.html
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-feature-tree.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-feature-tree.adoc
deleted file mode 100644 (file)
index 9fd723c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-=== Karaf feature tree
-
-image::openflowplugin/odl-ofp-feature-tree.png[Karaf feature tree, title="Openflow plugin karaf feature tree", width=600]
-
-Short https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:FeatureTreeHowto[HOWTO] create such a tree.
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-forwardingrules-sync.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-forwardingrules-sync.adoc
deleted file mode 100644 (file)
index faf5376..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-=== Application: Forwarding Rules Synchronizer
-
-==== Basics
-
-===== Description
-
-Forwarding Rules Synchronizer (FRS) is a newer version of Forwarding Rules Manager (FRM). It was created to solve most shortcomings of FRM. FRS solving errors with retry mechanism. Sending barrier if needed. Using one service for flows, groups and meters. And it has less changes requests send to device since calculating difference and using compression queue.
-
-It is located in the Java package:
-
-[source, java]
-----
-package org.opendaylight.openflowplugin.applications.frsync; 
-----
-
-===== Listeners
-
-* 1x config - FlowCapableNode
-* 1x operational - Node
-
-===== System of work
-
-* one listener in config datastore waiting for changes
-
-** update cache
-** skip event if operational not present for node
-** send syncup entry to reactor for synchronization
-*** node added: after part of modification and whole operational snapshot
-*** node updated: after and before part of modification
-*** node deleted: null and before part of modification
-
-
-* one listener in operational datastore waiting for changes
-
-** update cache
-** on device connected
-*** register for cluster services
-** on device disconnected remove from cache
-*** remove from cache
-*** unregister for cluster services
-** if registered for reconciliation
-*** do reconciliation through syncup (only when config present)
-
-
-* reactor
-_(provides syncup w/decorators assembled in this order)_
-
-** Cluster decorator - skip action if not master for device
-** FutureZip decorator (FutureZip extends Future decorator)
-*** Future - run delegate syncup in future - submit task to executor service
-*** FutureZip - provides state compression - compress optimized config delta if waiting for execution with new one
-** Guard decorator - per device level locking
-** Retry decorator - register for reconciliation if syncup failed
-** Reactor impl - calculate diff from after/before parts of syncup entry and execute
-
-===== Strategy
-
-In the _old_ FRM uses an incremental strategy with all changes made one by one, where FRS uses a flat batch system with changes made in bulk. It uses one service SalFlatBatchService instead of three (flow, group, meter).
-
-===== Boron release
-
-FRS is used in Boron as separate feature and it is not loaded by any other feature. It has to be run separately. 
-
-    odl-openflowplugin-app-forwardingrules-sync
-    
-==== FRS additions
-
-===== Retry mechanism
-
-* is started when change request to device return as failed (register for reconcile) 
-* wait for next consistent operational and do reconciliation with actual config (not only diff)
-
-===== ZipQueue
-
-* only the diff (before/after) between last config changes is sent to device
-* when there are more config changes for device in a row waiting to be processed they are compressed into one entry (after is still replaced with the latest)
-
-===== Cluster-aware
-
-* FRS is cluster aware using ClusteringSingletonServiceProvider from the MD-SAL 
-* on mastership change reconciliation is done (register for reconcile)
-
-===== SalFlatBatchService
-
-FRS uses service with implemented barrier waiting logic between dependent objects
-
-==== SalFlatBatchService for FRS
-
-SalFlatBatchService was created along forwardingrules-sync application as the service that should application used by default. This service uses only one input with bag of flow/group/meter objects and their common add/update/remove action. So you practically send only one input (of specific bags) to this service.
-
-===== Workflow
-
-* prepare plan of actions
-** mark actions where the barrier is needed before continue
-* run appropriate service calls
-** start all actions that can be run simultaneously
-** if there is barrier-needed mark, wait for all fired jobs and only then continue with the next action
-
-error handling:
-
-* there is flag to stop process on the first error (default set to false)
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-message-spy.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-message-spy.adoc
deleted file mode 100644 (file)
index 862b670..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-=== Internal message statistics API
-
-To aid in testing and diagnosis, the OpenFlow plugin provides information about the number and rate of different internal events.
-
-The implementation does two things: collects event counts and exposes counts. Event counts are grouped by message type, e.g., *PacketInMessage*, and checkpoint, e.g., _TO_SWITCH_ENQUEUED_SUCCESS_. Once gathered, the results are logged as well as being exposed using OSGi command line (deprecated) and JMX.
-
-[[collect]]
-==== Collect
-
-Each message is counted as it passes through various processing checkpoints. The following checkpoints are defined as a Java enum and tracked:
-
-[source, java]
-----
-  /**
-    * statistic groups overall in OFPlugin
-    */
-  enum STATISTIC_GROUP {
-       /** message from switch, enqueued for processing */
-       FROM_SWITCH_ENQUEUED,
-       /** message from switch translated successfully - source */
-       FROM_SWITCH_TRANSLATE_IN_SUCCESS,
-       /** message from switch translated successfully - target */
-       FROM_SWITCH_TRANSLATE_OUT_SUCCESS,
-       /** message from switch where translation failed - source */
-       FROM_SWITCH_TRANSLATE_SRC_FAILURE,
-       /** message from switch finally published into MD-SAL */
-       FROM_SWITCH_PUBLISHED_SUCCESS,
-       /** message from switch - publishing into MD-SAL failed */
-       FROM_SWITCH_PUBLISHED_FAILURE,
-       
-       /** message from MD-SAL to switch via RPC enqueued */
-       TO_SWITCH_ENQUEUED_SUCCESS,
-       /** message from MD-SAL to switch via RPC NOT enqueued */
-       TO_SWITCH_ENQUEUED_FAILED,
-       /** message from MD-SAL to switch - sent to OFJava successfully */
-       TO_SWITCH_SUBMITTED_SUCCESS,
-       /** message from MD-SAL to switch - sent to OFJava but failed*/
-       TO_SWITCH_SUBMITTED_FAILURE
-  }
-----
-
-When a message passes through any of those checkpoints then counter assigned to
-corresponding checkpoint and message is incremented by 1.
-
-[[expose-results]]
-==== Expose statistics
-
-As described above, there are three ways to access the statistics:
-
-* OSGi command line (this is considered deprecated)
-+
-::
-  `osgi> dumpMsgCount`
-* OpenDaylight logging console (statistics are logged here every 10 seconds)
-+
-::
-  required logback settings :
-  `<logger name="org.opendaylight.openflowplugin.openflow.md.queue.MessageSpyCounterImpl" level="DEBUG"\/>`
-* JMX (via JConsole)
-::
-  start OpenFlow plugin with the +-jmx+ parameter
-::
-  start JConsole by running `jconsole`
-::
-  the JConsole MBeans tab should contain org.opendaylight.controller
-::
-  RuntimeBean has a msg-spy-service-impl
-::
-  Operations provides makeMsgStatistics report functionality
-
-[[example-result]]
-===== Example results
-
-image::openflowplugin/odl-ofp-ofplugin-debug-stats.png[OFplugin Debug stats.png,title="OFplugin Debug stats.png" width="500"]
-
-----
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PortStatusMessage] -> +0 | 1
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[MultipartReplyMessage] -> +24 | 81
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_ENQUEUED: MSG[PacketInMessage] -> +8 | 111
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PortStatusMessage] -> +0 | 1
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[MultipartReplyMessage] -> +24 | 81
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_IN_SUCCESS: MSG[PacketInMessage] -> +8 | 111
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[PacketReceived] -> +8 | 111
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_OUT_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_TRANSLATE_SRC_FAILURE: no activity detected
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[QueueStatisticsUpdate] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorStatisticsUpdate] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupDescStatsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowsStatisticsUpdate] -> +3 | 19
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[PacketReceived] -> +8 | 111
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterFeaturesUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupStatisticsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[GroupFeaturesUpdated] -> +0 | 3
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterConfigStatsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[MeterStatisticsUpdated] -> +3 | 7
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[NodeConnectorUpdated] -> +0 | 12
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_SUCCESS: MSG[FlowTableStatisticsUpdate] -> +3 | 8
-DEBUG o.o.o.s.MessageSpyCounterImpl - FROM_SWITCH_PUBLISHED_FAILURE: no activity detected
-DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
-DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_ENQUEUED_FAILED: no activity detected
-DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_SUCCESS: MSG[AddFlowInput] -> +0 | 12
-DEBUG o.o.o.s.MessageSpyCounterImpl - TO_SWITCH_SUBMITTED_FAILURE: no activity detected
-----
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-sequence-diagram.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-sequence-diagram.adoc
deleted file mode 100644 (file)
index 4c54f56..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-=== Event Sequences
-
-==== Session Establishment
-
-The <<_openflow_protocol_library_developer_guide,OpenFlow Protocol Library>> provides interface *SwitchConnectionHandler* which contains method _onSwitchConnected_ (step 1). This event is raised in the OpenFlow Protocol Library when an OpenFlow device connects to OpenDaylight and caught in the *ConnectionManagerImpl* class in the OpenFlow plugin.
-
-There the plugin creates a new instance of the *ConnectionContextImpl* class (step 1.1) and also instances of *HandshakeManagerImpl* (which uses *HandshakeListenerImpl*) and *ConnectionReadyListenerImpl*. *ConnectionReadyListenerImpl* contains method _onConnectionReady()_ which is called when connection is prepared. This method starts the handshake with the OpenFlow device (switch) from the OpenFlow plugin side. Then handshake can be also started from device side. In this case method _shake()_ from *HandshakeManagerImpl* is called (steps 1.1.1 and 2).
-
-The handshake consists of an exchange of HELLO messages in addition to an exchange of device features (steps 2.1. and 3). The handshake is completed by *HandshakeManagerImpl*. After receiving device features, the *HandshakeListenerImpl* is notifed via the _onHanshakeSuccessfull()_ method. After this, the device features, node id and connection state are stored in a *ConnectionContext* and the method _deviceConnected()_ of *DeviceManagerImpl* is called.
-
-When _deviceConnected()_ is called, it does the following:
-
-. creates a new transaction chain (step 4.1)
-. creates a new instance of *DeviceContext* (step 4.2.2) 
-. initializes the device context: the static context of device is populated by calling _createDeviceFeaturesForOF<version>()_ to populate table, group, meter features and port descriptions (step 4.2.1 and 4.2.1.1)
-. creates an instance of *RequestContext* for each type of feature
-
-When the OpenFlow device responds to these requests (step 4.2.1.1) with multipart replies (step 5) they are processed and stored to MD-SAL operational datastore. The  _createDeviceFeaturesForOF<version>()_ method returns a *Future* which is processed in the callback (step 5.1) (part of _initializeDeviceContext()_ in the _deviceConnected()_ method) by calling the method _onDeviceCtxLevelUp()_ from *StatisticsManager* (step 5.1.1).
-
-The call to _createDeviceFeaturesForOF<version>()_:
-. creates a new instance of *StatisticsContextImpl* (step 5.1.1.1).
-
-. calls _gatherDynamicStatistics()_ on that instance which returns a *Future* which will produce a value when done
-.. this method calls methods to get dynamic data (flows, tables, groups) from the device (step 5.1.1.2, 5.1.1.2.1, 5.1.1.2.1.1)
-.. if everything works, this data is also stored in the MD-SAL operational datastore
-
-If the *Future* is successful, it is processed (step 6.1.1) in a callback in *StatisticsManagerImpl* which:
-
-. schedules the next time to poll the device for statistics
-. sets the device state to synchronized (step 6.1.1.2)
-. calls _onDeviceContextLevelUp()_ in *RpcManagerImpl*
-
-The _onDeviceContextLevelUp()_ call:
-
-. creates a new instance of *RequestContextImpl* 
-. registers implementation for supported services
-. calls _onDeviceContextLevelUp()_ in *DeviceManagerImpl* (step 6.1.1.2.1.2) which causes the information about the new device be be written to the MD-SAL operational datastore (step 6.1.1.2.2)
-
-image::openflowplugin/odl-ofp-session-establishment.jpg[SessionEstablishment,title="Session establishment", width="500"]
-
-// ===== Message Lifecycle Diagram
-
-// image::openflowplugin/odl-ofp-message-lifecycle.jpg[MessageLifecycle,title="MessageLifecycle",width="500"]
-
-==== Handshake
-
-The first thing that happens when an OpenFlow device connects to OpenDaylight is that the OpenFlow plugin gathers basic information about the device and establishes agreement on key facts like the version of OpenFlow which will be used. This process is called the handshake.
-
-The handshake starts with HELLO message which can be sent either by the OpenFlow device or the OpenFlow plugin. After this, there are several scenarios which can happen:
-
-. if the first HELLO message contains a _version bitmap_, it is possible to determine if there is a common version of OpenFlow or not:
-.. if there is a single common version use it and the *VERSION IS SETTLED*
-.. if there are more than one common versions, use the highest (newest) protocol and the *VERSION IS SETTLED*
-.. if there are no common versions, the device is *DISCONNECTED*
-. if the first HELLO message does not contain a _version bitmap_, then STEB-BY-STEP negotiation is used
-. if second (or more) HELLO message is received, then STEP-BY-STEP negotiation is used
-
-===== STEP-BY-STEP negotiation:
-
-* if last version proposed by the OpenFlow plugin is the same as the version received from the OpenFlow device, then the *VERSION IS SETTLED*
-* if the version received in the current HELLO message from the device is the same as from previous then negotiation has failed and the device is *DISCONNECTED*
-* if the last version from the device is greater than the last version proposed from the plugin, wait for the next HELLO message in the hope that it will advertise support for a lower version
-* if the last version from the device is is less than the last version proposed from the plugin:
-** propose the highest version the plugin supports that is less than or equal to the version received from the device and wait for the next HELLO message
-** if if the plugin doesn't support a lower version, the device is *DISCONNECTED*
-
-After selecting of version we can say that the *VERSION IS SETTLED* and the OpenFlow plugin can ask device for its features. At this point handshake ends.
-
-image::openflowplugin/odl-ofp-handshake.png[Handshake process,title="Handshake process",width="500"]
-
-// ====== Sequence Diagram
-
-// image::openflowplugin/odl-ofp-of10-switch-handshake-sequence.png[Core Code,title="Core Code",width="500"]
-
-
-// image::openflowplugin/odl-ofp-message-order-preservation.jpg[MessageOrderPreservation,title="MessageOrderPreservation",width="500"]
-
-
-==== Adding a Flow
-
-There are two ways to add a flow in in the OpenFlow plugin: adding it to the MD-SAL config datastore or calling an RPC. Both of these can either be done using the native MD-SAL interfaces or using RESTCONF. This discussion focuses on calling the RPC.
-
-If user send flow via REST interface (step 1) it will cause that _invokeRpc()_ is called on *RpcBroker*. The *RpcBroker* then looks for an appropriate implementation of the interface. In the case of the OpenFlow plugin, this is the _addFlow()_ method of *SalFlowServiceImpl* (step 1.1). The same thing happens if the RPC is called directly from the native MD-SAL interfaces.
-
-The _addFlow()_ method then
-
-. calls the _commitEntry()_ method (step 2) from the OpenFlow Protocol Library which is responsible for sending the flow to the device
-. creates a new *RequestContext* by calling _createRequestContext()_ (step 3)
-. creates a callback to handle any events that happen because of sending the flow to the device
-
-The callback method is triggered when a barrier reply message (step 2.1) is received from the device indicating that the flow was either installed or an appropriate error message was sent. If the flow was successfully sent to the device, the RPC result is set to success (step 5). // *SalFlowService* contains inside method _addFlow()_ other callback which caught notification from callback for barrier message.
-
-At this point, no information pertaining to the flow has been added to the MD-SAL operational datastore. That is accomplished by the periodic gathering of statistics from OpenFlow devices.
-
-The *StatisticsContext* for each given OpenFlow device periodically polls it using _gatherStatistics()_ of *StatisticsGatheringUtil* which issues an OpenFlow OFPT_MULTIPART_REQUEST - OFPMP_FLOW. The response to this request (step 7) is processed in *StatisticsGatheringUtil* class where flow data is written to the MD-SAL operational datastore via the _writeToTransaction()_ method of *DeviceContext*.
-
-image::openflowplugin/odl-ofp-add-flow.png[Add flow,title="Add flow",width="500"]
-
-// ===== Generic Notification Sequence Diagram
-
-// image::openflowplugin/odl-ofp-generic-notification.png[Generic notification,title="Generic notification",width="500"]
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-singleton-cluster-aproach.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-singleton-cluster-aproach.adoc
deleted file mode 100644 (file)
index e05ab7d..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-=== Cluster singleton approach in plugin
-
-==== Basics
-
-===== Description
-
-The existing OpenDaylight service deployment model assumes symmetric clusters, where all services are activated on all nodes in the cluster. However, many services require that there is a single active service instance per cluster. We call such services 'singleton services'. The Entity Ownership Service (EOS) represents the base Leadership choice for one Entity instance. Every Cluster Singleton service *type* must have its own Entity and every Cluster Singleton service *instance* must have its own Entity Candidate. Every registered Entity Candidate should be notified about its actual role. All this "work" is done by MD-SAL so the Openflowplugin need "only" to register as service in *SingletonClusteringServiceProvider* given by MD-SAL.
-
-===== Change against using EOS service listener
-
-In this new clustering singleton approach plugin uses API from the MD-SAL project: SingletonClusteringService which comes with three methods.
-
-    instantiateServiceInstance()
-    closeServiceInstance()
-    getIdentifier()
-
-This service has to be registered to a SingletonClusteringServiceProvider from MD-SAL which take care if mastership is changed in cluster environment. 
-
-First method in SingletonClusteringService is being called when the cluster node becomes a MASTER. Second is being called when status changes to SLAVE or device is disconnected from cluster. Last method plugins returns NodeId as ServiceGroupIdentifier
-Startup after device is connected
-
-On the start up the plugin we need to initialize first four managers for each working area providing information and services
-
-* Device manager
-* RPC manager
-* Role manager
-* Statistics manager
-
-After connection the device the listener Device manager get the event and start up to creating the context for this connection.
-Startup after device connection
-
-Services are managed by SinlgetonClusteringServiceProvider from MD-SAL project. So in startup we simply create a instance of LifecycleService and register all contexts into it.
-
-==== Role change
-
-Plugin is no longer registered as Entity Ownership Service (EOS) listener therefore does not need to and cannot respond on EOS ownership changes.
-
-===== Service start
-
-Services start asynchronously but the start is managed by LifecycleService. If something goes wrong LifecycleService stop starting services in context and this speeds up the reconnect process. But the services haven't changed and plugin need to start all this:
-
-*    Activating transaction chain manager
-*    Initial gathering of device statistics
-*    Initial submit to DS
-*    Sending role MASTER to device
-*    RPC services registration
-*    Statistics gathering start
-
-===== Service stop
-
-If closeServiceInstance occurred plugin just simply try to store all unsubmitted transactions and close the transaction chain manager, stop RPC services, stop Statistics gathering and after that all unregister txEntity from EOS. 
\ No newline at end of file
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-wiring-up-notifications.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-wiring-up-notifications.adoc
deleted file mode 100644 (file)
index 10d0215..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-=== Wiring up notifications
-
-==== Introduction
-
-We need to translate OpenFlow messages coming up from the
-<<_openflow_protocol_library_developer_guide,OpenFlow Protocol Library>>
-into MD-SAL Notification objects and then publish them to the
-MD-SAL.
-
-[[mechanics]]
-==== Mechanics
-
-.  Create a Translator class
-.  Register the Translator
-.  Register the notificationPopListener to handle your Notification
-Objects
-
-[[create-a-translator-class]]
-===== Create a Translator class
-
-You can see an example in
-https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;a=blob;f=openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PacketInTranslator.java;hb=refs/heads/stable/boron[PacketInTranslator.java].
-
-First, simply create the class
-
----------------------------------------------------------------------------------------------
-public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
----------------------------------------------------------------------------------------------
-
-Then implement the translate function:
-
----------------------------------------------------------------------------------------------
-public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
-
-    protected static final Logger LOG = LoggerFactory
-            .getLogger(PacketInTranslator.class);
-    @Override
-    public PacketReceived translate(SwitchConnectionDistinguisher cookie,
-            SessionContext sc, OfHeader msg) { 
-            ...
-    }
----------------------------------------------------------------------------------------------
-
-Make sure to check that you are dealing with the expected type and cast
-it:
-
----------------------------------------------------------------------------
-if(msg instanceof PacketInMessage) {
-    PacketInMessage message = (PacketInMessage)msg;
-    List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
----------------------------------------------------------------------------
-
-Do your transation work and return
-
--------------------------------------------------------------
-PacketReceived pktInEvent = pktInBuilder.build();
-list.add(pktInEvent);
-return list;
--------------------------------------------------------------
-
-[[register-your-translator-class]]
-===== Register your Translator Class
-
-Next you need to go to
-https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;a=blob;f=openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java;hb=refs/heads/stable/boron[MDController.java]
-and in init() add register your Translator:
-
------------------------------------------------------------------------------------
-public void init() {
-        LOG.debug("Initializing!");
-        messageTranslators = new ConcurrentHashMap<>();
-        popListeners = new ConcurrentHashMap<>();
-        //TODO: move registration to factory
-        addMessageTranslator(ErrorMessage.class, OF10, new ErrorTranslator());
-        addMessageTranslator(ErrorMessage.class, OF13, new ErrorTranslator());
-        addMessageTranslator(PacketInMessage.class,OF10, new PacketInTranslator());
-        addMessageTranslator(PacketInMessage.class,OF13, new PacketInTranslator());
------------------------------------------------------------------------------------
-
-Notice that there is a separate registration for each of OpenFlow 1.0 and OpenFlow 1.3.
-Basically, you indicate the type of OpenFlow Protocol Library message you wish to
-translate for, the OpenFlow version, and an instance of your Translator.
-
-[[register-your-md-sal-message-for-notification-to-the-md-sal]]
-===== Register your MD-SAL Message for Notification to the MD-SAL
-
-Now, also in MDController.init() register to have the
-notificationPopListener handle your MD-SAL Message:
-
----------------------------------------------------------------------------------------
-addMessagePopListener(PacketReceived.class, new NotificationPopListener<DataObject>());
----------------------------------------------------------------------------------------
-
-[[you-are-done]]
-===== You are done
-
-That's all there is to it. Now when a message comes up from the
-OpenFlow Protocol Library, it will be translated and published to the MD-SAL.
diff --git a/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-yang-models.adoc b/manuals/developer-guide/src/main/asciidoc/openflowplugin/odl-ofp-yang-models.adoc
deleted file mode 100644 (file)
index def2246..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-[[yang-models-ans-api]]
-=== Yang models and API
-
-
-
-[cols="3a,a", width="100%",options="header",]
-|=======================
-|Model |DOC
-2+e|*Openflow basic types*
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-table-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-table-types.yang] |link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-table-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-action-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-action-types.yang]|          link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-action-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-flow-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-flow-types.yan]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-flow-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-meter-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-meter-types.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-meter-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-group-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-group-types.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-group-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-match-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-match-types.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-match-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-port-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-port-types.yang]       |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-port-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-base/src/main/yang/opendaylight-queue-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-queue-types.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-base/target/site/models/opendaylight-queue-types.html[YangDOC]
-2+e|*Openflow services*
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-table.yang;a=blob;hb=refs/heads/stable/boron[sal-table.yang]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-table.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-group.yang;a=blob;hb=refs/heads/stable/boron[sal-group.yang]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-group.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-queue.yang;a=blob;hb=refs/heads/stable/boron[sal-queue.yang]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-queue.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/flow-errors.yang;a=blob;hb=refs/heads/stable/boron[flow-errors.yang]    |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/flow-errors.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/flow-capable-transaction.yang;a=blob;hb=refs/heads/stable/boron[flow-capable-transaction.yang]  |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/flow-capable-transaction.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-flow.yang;a=blob;hb=refs/heads/stable/boron[sal-flow.yang]  |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-flow.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-meter.yang;a=blob;hb=refs/heads/stable/boron[sal-meter.yang]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-meter.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/flow-topology-discovery.yang;a=blob;hb=refs/heads/stable/boron[flow-topology-discovery.yang]    |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/flow-topology-discovery.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/node-errors.yang;a=blob;hb=refs/heads/stable/boron[node-errors.yang]    |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/node-errors.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/node-config.yang;a=blob;hb=refs/heads/stable/boron[node-config.yang]    |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/node-config.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-echo.yang;a=blob;hb=refs/heads/stable/boron[sal-echo.yang]  |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-echo.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/sal-port.yang;a=blob;hb=refs/heads/stable/boron[sal-port.yang]  |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/sal-port.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/packet-processing.yang;a=blob;hb=refs/heads/stable/boron[packet-processing.yang]        |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/packet-processing.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-service/src/main/yang/flow-node-inventory.yang;a=blob;hb=refs/heads/stable/boron[flow-node-inventory.yang]    |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-service/target/site/models/flow-node-inventory.html[YangDOC]
-
-2+e|*Openflow statistics*
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-queue-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-queue-statistics.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-queue-statistics.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-flow-table-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-flow-table-statistics.yang]   |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-flow-table-statistics.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-port-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-port-statistics.yang]       |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-port-statistics.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-statistics-types.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-statistics-types.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-statistics-types.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-group-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-group-statistics.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-group-statistics.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-flow-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-flow-statistics.yang]       |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-flow-statistics.html[YangDOC]
-
-|link:https://git.opendaylight.org/gerrit/gitweb?p=openflowplugin.git;f=model/model-flow-statistics/src/main/yang/opendaylight-meter-statistics.yang;a=blob;hb=refs/heads/stable/boron[opendaylight-meter-statistics.yang]     |       link:https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-merge-boron/lastSuccessfulBuild/artifact/model/model-flow-statistics/target/site/models/opendaylight-meter-statistics.html[YangDOC]
-
-|*Openflow basic types*
-|=======================
-
index 1e3475c5097686bcd15de469d017630b712d95b9..10154d7f39c396f96677bdc9fce819f091944494 100755 (executable)
@@ -1,27 +1,25 @@
 == ODL-SDNi Developer Guide
 
 === Overview
-This project aims at enabling inter-SDN controller communication by developing SDNi (Software Defined Networking interface) as an application (ODL-SDNi App). 
+This project aims at enabling inter-SDN controller communication by developing SDNi (Software Defined Networking interface) as an application (ODL-SDNi App).
 
 === ODL-SDNi Architecture
 
 * SDNi Aggregator: Northbound SDNi plugin acts as an aggregator for collecting network information such as topology, stats, host etc. This plugin can be evolving as per needs of network data requested to be shared across federated SDN controllers.
-* SDNi REST API: REST API view autogenerated and accessible through RESTCONF to fetch the aggregated information from the northbound plugin â€“ SDNi aggregator.The RESTCONF protocol operates on a conceptual datastore defined with the YANG data modeling language.
+* SDNi API: API view autogenerated and accessible through RESTCONF to fetch the aggregated information from the northbound plugin â€“ SDNi aggregator.The RESTCONF protocol operates on a conceptual datastore defined with the YANG data modeling language.
 * SDNi Wrapper: SDNi BGP Wrapper will be responsible for the sharing and collecting information to/from federated controllers.
 * SDNi UI:This component displays the SDN controllers connected to each other.
 
 === SDNi Aggregator
 
-* SDNiAggregator connects with the Base Network Service Functions of the controller. Currently it is querying network topology through md-sal for creating SDNi network capability.
-* SDNiAggregator is customized to retrieve the host controller’s details, while running the controller in cluster mode. Rest of the northbound APIs of controller will retrieve the entire topology information of all the connected controllers. 
+* SDNiAggregator connects with the Base Network Service Functions of the controller. Currently it is querying network topology through MD-SAL for creating SDNi network capability.
+* SDNiAggregator is customized to retrieve the host controller’s details, while running the controller in cluster mode. Rest of the northbound APIs of controller will retrieve the entire topology information of all the connected controllers.
 * The SDNiAggregator creates a topology structure.This structure is populated by the various network funtions.
 
-=== SDNi REST API
-ODL-SDNi REST API query SDNiAggregator to get the required information  through RESTCONF. Each request must start with URI /restconf 
+=== SDNi API
+Topology and QoS data is fetched from SDNiAggregator through RESTCONF.
 
-http://${IPADDRESS}:8181/restconf/operations/opendaylight-sdni-topology-msg:getTopology
-
-*Topology Data:* Controller IP Address, Links, Nodes, Link Bandwidths, MAC Address of switches, Latency, Host IP address.
+http://${ControllerIpAddress}:8181/apidoc/explorer/index.html
 
 http://${IPADDRESS}:8181/restconf/operations/opendaylight-sdni-topology-msg:getAllPeerTopology
 
@@ -40,7 +38,7 @@ http://${IPADDRESS}:8181/restconf/operations/opendaylight-sdni-qos-msg:get-all-p
 image::SDNiWrapper.png[]
 
 * SDNiWrapper is an extension of ODL-BGPCEP where SDNi topology data is exchange along with the Update NLRI message. Refer http://tools.ietf.org/html/draft-ietf-idr-ls-distribution-04 for more information on NLRI.
-* SDNiWrapper gets the controller’s network capabilities through SDNi REST API and serialize it in Update NLRI message. This NLRI message will get exchange between the clustered controllers through BGP-UPDATE message. Similarly peer controller’s UPDATE message is received and unpacked then format to SDNi Network capability data, which will be stored for further purpose.
+* SDNiWrapper gets the controller’s network capabilities through SDNi Aggregator and serialize it in Update NLRI message. This NLRI message will get exchange between the clustered controllers through BGP-UPDATE message. Similarly peer controller’s UPDATE message is received and unpacked then format to SDNi Network capability data, which will be stored for further purpose.
 
 === SDNi UI
 This component displays the SDN controllers connected to each other.
@@ -48,5 +46,5 @@ This component displays the SDN controllers connected to each other.
 http://localhost:8181/index.html#/sdniUI/sdnController
 
 === API Reference Documentation
-Go to http://${IPADDRESS}:8181/apidoc/explorer/index.html, sign in, and expand the opendaylight-sdni panel.  From there, users can execute various API calls to test their sdni deployment.
+Go to http://${ControllerIpAddress}:8181/apidoc/explorer/index.html, sign in, and expand the opendaylight-sdni panel.  From there, users can execute various API calls to test their SDNi deployment.
 
index d2f284feb3562501f9ad0cf916b16e56a9d5c282..17ff08ccd20d92a1c21450349c66bf5681f2cb13 100644 (file)
@@ -1,36 +1,3 @@
 == Usecplugin-AAA Developer Guide
 
-=== Overview
-Usecplugin-AAA provides security related information for the AAA northbound interface.
-
-=== Usecplugin-AAA Architecture
-AAA plugin creates log messages about successful and failed login attempts to OpenDaylight.
-Usecplugin-AAA continuously reads this log file and checks for either successful and failed attempt information.
-Whenever Usecpluin-AAA identifies a new attempt entry in the log file it is stored
-in YANG Data Store and its own log file.
-
-Usecplugin-AAA is implemented with the help of a few java classes.
-
-UsecpluginAAAProvider :: Provider class for Usecplugin-AAA feature implementation.
-UsecpluginAAANotifImpl :: Logs notification information which can be seen by log:display at the Karaf terminal 
-UsecpluginAAARPCImpl :: Implements Usecplugin RPCs
-UsecpluginAAAParsingLog :: Parses OpenDaylight log information for identifying login attempts.
-UsecpluginAAAPublishNotif :: Publishes failed login attempt notification.
-UsecpluginAAAStore :: Creates login information at the YANG Data Store.
-
-=== Key APIs and Interfaces
-* RPC APIs
-+
-Login Attempt from IP :: Returns Time and Type of Attempts (Success or Failure)
-Login Attempt at Time :: Returns Attempter IP Address and Type of Attempts (Success or Failure)
-+
-* Notification APIs
-+
-On Invalid Login Attempt :: Notification generated on Invalid Login Attempt
-+
-* YANG Data Store APIs
-+
-Get Login Attempts :: Returns Source IP address of Attempter with Time of Attempts and Type of Attempts (Success or Failure)
-
-// === API Reference Documentation
-// Links to JavaDoc and REST API documentation will be provided later.
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/developer-guide/usecplugin-aaa-developer-guide.html
index c8af60894fb619ad01e4cd74e839221d039d1001..250f87f727edb488a84c67813564a8164d6bac04 100644 (file)
@@ -1,34 +1,3 @@
 == Usecplugin-OpenFlow Developer Guide
 
-=== Overview
-Usecplugin-OpenFlow provides security related information for the OpenFlow southbound interface.
-
-=== Usecplugin-OpenFlow Architecture
-Usecplugin-OpenFlow listens on OpenFlow southbound interface for Packet_In messages. The application parses
-the message for header information. Usecplugin-OpenFlow has PacketHandler class that implements the PacketProcessing interface to override the 
-OnPacketReceived notification by which the application is notified of Packet_In messages.
-
-Usecplugin-OpenFlow is implemented with the help of a few java classes.
-
-UsecpluginProvider :: Provider class for Usecplugin-OpenFlow feature implementation.
-PacketHandler :: Receives Packet_In messages coming to the controller and process them appropriately
-PacketParsing :: Decodes Packet_In messages for packet header information (L2, L3 & L4 information)
-InventoryUtility :: Decodes Packet_In messages for OpenFlow Switch and Port information 
-UsecpluginNotifImpl :: Logs notification information which can be seen by log:display at the Karaf terminal 
-UsecpluginRPCImpl :: Implements Usecplugin RPCs
-UsecpluginStore :: Stores attack information into YANG Data Store and log file.
-
-=== Key APIs and Interfaces
-* RPC APIs
-+
-Attacks from DPID :: Number of OpenFlow Packet_In Attacks from Switch with DeviceID
-Attacks from Host :: Number of OpenFlow Packet_In Attacks from SrcIP Address
-Attacks to Server :: Number of OpenFlow Packet_In Attacks to DstIP Address
-Attacks at Time of Day :: Number of OpenFlow Packet_In Attacks at a Particular Time with a variable Window Time
-+
-* Notification APIs
-+
-On Low Water Mark Breached :: Notification generated on breaching Low Water Mark
-
-// === API Reference Documentation
-// Links to JavaDoc and REST API documentation will be provided later.
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/developer-guide/usecplugin-openflow-developer-guide.html
index 3cecdedde35814a2c997d6b83807a5a2b41235d6..f07acfe70b924dd793a635cbcb9fb1dc2c59d161 100644 (file)
@@ -1,81 +1,3 @@
 == NATApp User Guide
-The NATApp User Guide contains information about configuration, administration,
-management, using and troubleshooting the feature.
 
-=== Overview
-NATApp provides network different types of address translation functionality for OpenDaylight. 
-After installing this feature, network administrators can select the type of NAT functionality
-they want to enable by sending a REST API command. Subsequently, the user may enter the gloabl IP addresses 
-to the YANG Data Store through REST APIs. When an OpenDaylight managed enterprise network
-with local IPs tries to connect to external networks such as Internet, NATApp comes
-into play and installs appropriate flow rules at the OpenFlow switch for bidirectional
-NAT translation. 
-
-=== NATApp Architecture
-NATApp listens on OpenFlow southbound interface for Packet_In messages. The application parses
-the message for header information. If the received message has a local IP address the application
-installs rules on the OpenFlow switch for network address translation from local to global IP addresses.
-NATApp has NATPacketHandler class that implements the PacketProcessing interface to override the 
-OnPacketReceived notification by which the application is notified of Packet_In messages.
-
-=== Configuring NATApp
-
-REST APIs are available at the following URI:
-http://localhost:8181/apidoc/explorer/index.html#!/natapp(2016-01-25)
-
-==== Mininet Topology
-  sudo mn --mac --topo=single,10 --controller=remote,ip=127.0.0.1,port=6653
-
-Install a flow to flood the ARP packets.
-
-  sh ovs-ofctl add-flow s1 dl_type=0x0806,actions=FLOOD
-
-Check the flow for ARP Flooding
-
-  sh ovs-ofctl dump-flows s1
-
-=== Administering or Managing NATApp
-==== Static NAT and Dynamic NAT
-
-First user has to select the type of NAT he wants by using the following URI:
-
-POST URI :: http://localhost:8181/restconf/operations/natapp:nat-type
-Sample Input :: {"natapp:input": { "type:static":""}}
-Sample Input :: {"natapp:input": { "type:dynamic":""}}  
-
-Then user can inject the Global IPs using the following URI
-
-PUT URI :: http://localhost:8181/restconf/config/natapp:staticNat/
-Sample Input :: {"natapp:staticNat": {"globalIP":["172.0.0.1/32","172.0.0.2/32", "172.0.0.3/32", "172.0.0.4/32", "172.0.0.5/32", "172.0.0.6/32", "172.0.0.7/32", "172.0.0.8/32", "172.0.0.9/32", "172.0.0.10/32"] }}
-
-From mininet verify any pair of hosts can ping each other. The NATApp modifies the destination IP address 
-of the ICMP Echo request with the global IP address. Check the mininet flows for this modification.
-
-  sh ovs-ofctl dump-flows s1
-
-==== Port Address Translation (PAT)
-User can select PAT by using the following URI.
-
-POST URI :: http://localhost:8181/restconf/operations/natapp:nat-type
-Sample Input :: {"natapp:input": { "type:pat":""}} 
-
-Then user can inject the Global IPs using the following URI
-
-PUT URI :: http://localhost:8181/restconf/config/natapp:patNat/
-Sample Input :: {"natapp:patNat": {"globalIP":"172.0.0.1/32"}}
-
-From Mininet use the command as xterm h1 h5. At h5 give the following commands
-
-  $ ip r add 172.0.0.1/32 dev h5-eth0
-  $ arp -s 172.0.0.1 00:00:00:00:00:01
-  $ nc -l 5000
-
-At h1, Give the following command
-
-  $ echo "TCS" | nc -p 8000 10.0.0.5 5000
-
-  mininet> sh ovs-ofctl dump-flows s1
-  NXST_FLOW reply (xid=0x4):
-   cookie=0x0, duration=811.272s, table=0, n_packets=5, n_bytes=342, idle_age=13, priority=210,tcp,in_port=1,tp_src=8000 actions=mod_nw_src:172.0.0.1,mod_tp_src:2000,output:5
-   cookie=0x0, duration=499.843s, table=0, n_packets=2, n_bytes=84, idle_age=13, arp actions=FLOOD
-   cookie=0x0, duration=811.203s, table=0, n_packets=3, n_bytes=206, idle_age=13, priority=209,tcp,in_port=5,tp_dst=2000 actions=mod_nw_dst:10.0.0.1,mod_tp_dst:8000,output:1
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/user-guide/natapp-user-guide.html
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-coverage.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-coverage.adoc
deleted file mode 100644 (file)
index bb6fc55..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-===== Intro
-
-This page is to catalog the things that have been tested and confirmed
-to work:
-
-===== Coverage
-Coverage has been moved to a link:https://docs.google.com/spreadsheet/ccc?key=0AtpUuSEP8OyMdHNTZjBoM0VjOE9BcGhHMzk3N19uamc&usp=sharing%23gid=2#gid=0[GoogleDoc Spreadshee]
-
-===== OF 1.3 Considerations
-
-The baseline model is a OF 1.3 model, and the coverage tables primarily
-deal with OF 1.3. However for OF 1.0, we have a column to indicate
-either N/A if it doesn't apply, or whether its been confirmed working.
-
-===== OF 1.0 Considerations
-
-OF 1.0 is being considered as a switch with:
-* 1 Table
-* 0 Groups
-* 0 Meters
-* 1 Instruction (Apply Actions)
-* and a limited vocabulary of matches and actions.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-flows.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-flows.adoc
deleted file mode 100644 (file)
index e33c90c..0000000
+++ /dev/null
@@ -1,827 +0,0 @@
-[[instructions]]
-===== Instructions
-
-[[learn-end-to-end-for-inventory]]
-====== Learn End to End for Inventory
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-[[check-inventory]]
-====== Check inventory
-
-* Run mininet with support for OF 1.3 as described in
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-* Make sure you see the openflow:1 node come up as described in
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-[[flow-strategy]]
-====== Flow Strategy
-
-Current way to flush a flow to switch looks like this:
-
-1.  Create MD-SAL modeled flow and commit it into dataStore using two
-phase commit https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:FAQ[MD-SAL FAQ]
-2.  FRM gets notified and invokes corresponding rpc (addFlow) on
-particular service provider (if suitable provider for given node
-registered)
-3.  The provider (plugin in this case) transforms MD-SAL modeled flow
-into OF-API modeled flow
-4.  OF-API modeled flow is then flushed into OFLibrary
-5.  OFLibrary encodes flow into particular version of wire protocol and
-sends it to particular switch
-6.  Check on mininet side if flow is set
-
-[[push-your-flow]]
-====== Push your flow
-
-* With PostMan:
-** Set headers:
-*** Content-Type: application/xml   
-*** Accept: application/xml
-*** Authentication
-** Use URL: "http://<controller IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/0/flow/1"
-** PUT
-** Use Body:
-
-[source,xml]
----------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <priority>2</priority>
-    <flow-name>Foo</flow-name>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv4-destination>10.0.10.2/24</ipv4-destination>
-    </match>
-    <id>1</id>
-    <table_id>0</table_id>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                   <order>0</order>
-                   <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-</flow>
----------------------------------------------------------
-
-**Note*: If you want to try a different flow id or a different table,
-make sure the URL and the body stay in sync. For example, if you wanted
-to try: table 2 flow 20 you'd change the URL to: 
-
-"http://<controller
-IP>:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/20"
-
-but you would also need to update the 20 and 2 in the body of the XML.
-
-Other caveat, we have a known bug with updates, so please only write to
-a given flow id and table id on a given node once at this time until we
-resolve it. Or you can use the DELETE method with the same URL in
-PostMan to delete the flow information on switch and controller cache.
-
-[[check-for-your-flow-on-the-switch]]
-====== Check for your flow on the switch
-
-* See your flow on your mininet:
-
------------------------------------------------------------------------------------------------------------------------------------------------------------------
-mininet@mininet-vm:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows s1
-OFPST_FLOW reply (OF1.3) (xid=0x2):
-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
------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-If you want to see the above information from the mininet prompt - use
-"sh" instead of "sudo" i.e. use "sh ovs-ofctl -O OpenFlow13 dump-flows
-s1".
-
-[[check-for-your-flow-in-the-controller-config-via-restconf]]
-====== Check for your flow in the controller config via RESTCONF
-
-* See your configured flow in POSTMAN with
-** URL http://<controller
-IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/
-** GET
-** You no longer need to set Accept header
-
-Return Response:
-
-[source,json]
----------------
-{
-  "flow-node-inventory:table": [
-    {
-      "flow-node-inventory:id": 0,
-      "flow-node-inventory:flow": [
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:1"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.2"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:1"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.1"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:1"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.3"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:1"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.4"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:2"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.5"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:2"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.8"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:2"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.6"
-          },
-          "flow-node-inventory:cookie": 0
-        },
-        {
-          "flow-node-inventory:priority": 1,
-          "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
-          "flow-node-inventory:table_id": 0,
-          "flow-node-inventory:hard-timeout": 0,
-          "flow-node-inventory:idle-timeout": 0,
-          "flow-node-inventory:instructions": {
-            "flow-node-inventory:instruction": [
-              {
-                "flow-node-inventory:apply-actions": {
-                  "flow-node-inventory:action": [
-                    {
-                      "flow-node-inventory:output-action": {
-                        "flow-node-inventory:output-node-connector": "openflow:1:2"
-                      },
-                      "flow-node-inventory:order": 0
-                    }
-                  ]
-                },
-                "flow-node-inventory:order": 0
-              }
-            ]
-          },
-          "flow-node-inventory:match": {
-            "flow-node-inventory:ethernet-match": {
-              "flow-node-inventory:ethernet-type": {
-                "flow-node-inventory:type": 2048
-              }
-            },
-            "flow-node-inventory:ipv4-destination": "10.0.0.7"
-          },
-          "flow-node-inventory:cookie": 0
-        }
-      ]
-    }
-  ]
-}
-
-
----------------
-
-[[look-for-your-flow-stats-in-the-controller-operational-data-via-restconf]]
-====== Look for your flow stats in the controller operational data via
-RESTCONF
-
-* See your operational flow stats in POSTMAN with
-** URL "http://<controller
-IP>:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0/"
-** GET
-
-Return Response:
-
-[source,json]
----------------------
-
-{
-  "flow-node-inventory:table": [
-    {
-      "flow-node-inventory:id": 0,
-      "flow-node-inventory:flow": [
-        {
-          "flow-node-inventory:id": "10b1a23c-5299-4f7b-83d6-563bab472754",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 886000000,
-              "opendaylight-flow-statistics:second": 2707
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 784,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.2/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 8,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "1",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "020bf359-1299-4da6-b4f7-368bd83b5841",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 826000000,
-              "opendaylight-flow-statistics:second": 2711
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 1568,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.1/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 16,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "1",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "42172bfc-9142-4a92-9e90-ee62529b1e85",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 548000000,
-              "opendaylight-flow-statistics:second": 2708
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 784,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.3/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 8,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "1",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "99bf566e-89f3-4c6f-ae9e-e26012ceb1e4",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 296000000,
-              "opendaylight-flow-statistics:second": 2710
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 1274,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.4/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 13,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "1",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "019dcc2e-5b4f-44f0-90cc-de490294b862",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 392000000,
-              "opendaylight-flow-statistics:second": 2711
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 1470,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.5/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 15,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "2",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "968cf81e-3f16-42f1-8b16-d01ff719c63c",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 344000000,
-              "opendaylight-flow-statistics:second": 2707
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 784,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.8/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 8,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "2",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "ed9deeb2-be8f-4b84-bcd8-9d12049383d6",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 577000000,
-              "opendaylight-flow-statistics:second": 2706
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 784,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.7/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 8,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "2",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        },
-        {
-          "flow-node-inventory:id": "1c14ea3c-9dcc-4434-b566-7e99033ea252",
-          "opendaylight-flow-statistics:flow-statistics": {
-            "opendaylight-flow-statistics:cookie": 0,
-            "opendaylight-flow-statistics:duration": {
-              "opendaylight-flow-statistics:nanosecond": 659000000,
-              "opendaylight-flow-statistics:second": 2705
-            },
-            "opendaylight-flow-statistics:hard-timeout": 0,
-            "opendaylight-flow-statistics:byte-count": 784,
-            "opendaylight-flow-statistics:match": {
-              "opendaylight-flow-statistics:ethernet-match": {
-                "opendaylight-flow-statistics:ethernet-type": {
-                  "opendaylight-flow-statistics:type": 2048
-                }
-              },
-              "opendaylight-flow-statistics:ipv4-destination": "10.0.0.6/32"
-            },
-            "opendaylight-flow-statistics:priority": 1,
-            "opendaylight-flow-statistics:packet-count": 8,
-            "opendaylight-flow-statistics:table_id": 0,
-            "opendaylight-flow-statistics:idle-timeout": 0,
-            "opendaylight-flow-statistics:instructions": {
-              "opendaylight-flow-statistics:instruction": [
-                {
-                  "opendaylight-flow-statistics:order": 0,
-                  "opendaylight-flow-statistics:apply-actions": {
-                    "opendaylight-flow-statistics:action": [
-                      {
-                        "opendaylight-flow-statistics:order": 0,
-                        "opendaylight-flow-statistics:output-action": {
-                          "opendaylight-flow-statistics:output-node-connector": "2",
-                          "opendaylight-flow-statistics:max-length": 0
-                        }
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          }
-        }
-      ],
-      "opendaylight-flow-table-statistics:flow-table-statistics": {
-        "opendaylight-flow-table-statistics:active-flows": 8,
-        "opendaylight-flow-table-statistics:packets-matched": 97683,
-        "opendaylight-flow-table-statistics:packets-looked-up": 101772
-      }
-    }
-  ]
-}
-
----------------------
-
-[[discovering-and-testing-new-flow-types]]
-===== Discovering and testing new Flow Types
-
-Currently, the openflowplugin has a test-provider that allows you to
-push various flows through the system from the OSGI command line. Once
-those flows have been pushed through, you can see them as examples and
-then use them to see in the config what a particular flow example looks
-like.
-
-[[using-addmdflow]]
-====== Using addMDFlow
-
-From the
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet at the controller as described above.
-
-once you can see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
------------------------
-addMDFlow openflow:1 f#
------------------------
-
-Where # is a number between 1 and 80. This will create one of 80
-possible flows. You can go confirm they were created on the switch.
-
-Once you've done that, use
-
-* GET
-* Accept: application/xml
-* URL:
-"http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/"
-
-To see a full listing of the flows in table 2 (where they will be put).
-If you want to see a particular flow, look at
-
-* URL:
-"http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/#"
-
-Where # is 123 + the f# you used. So for example, for f22, your url
-would be
-
-* URL:
-"http://192.168.195.157:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/145"
-
-Note: You may have to trim out some of the sections like that contain
-bitfields and binary types that are not correctly modeled.
-
-Note: Before attempting to PUT a flow you have created via addMDFlow,
-please change its URL and body to, for example, use table 1 instead of
-table 2 or another Flow Id, so you don't collide.
-
-Note: There are several test command providers and the one handling
-flows is *OpenflowpluginTestCommandProvider*. Methods, which can be use
-as *commands in OSGI-console* have prefix '_'.
-
-[[example-flows]]
-===== Example Flows
-
-Examples for XML for various flow matches, instructions & actions can be
-found in following section
-<<odl-ofp-example-flows_overview,here>>
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-groups.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-groups.adoc
deleted file mode 100644 (file)
index b928b34..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-[[note]]
-===== NOTE
-
-Groups are NOT SUPPORTED in current (2.0.0) version of
-http://www.openvswitch.org/download[openvswitch]. See
-
-* http://openvswitch.org/releases/NEWS-2.0.0
-* http://comments.gmane.org/gmane.linux.network.openvswitch.general/3251
-
-For testing group feature please use for example <<odl-ofp-end-to-end-inventory_introduction-introduction,
-CPQD>> virtual switch.
-
-===== Instructions
-====== Learn End to End for Inventory
-
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-====== Check inventory
-
-Run CPqD with support for OF 1.3 as described in <<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-Make sure you see the openflow:1 node come up as described in <<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-====== Group Strategy
-
-Current way to flush a group to switch looks like this: 
-
-. create MD-SAL modeled group and commit it into dataStore using two phase commit
-. FRM gets notified and invokes corresponding rpc (addGroup) on particular service provider (if suitable provider for given node registered)
-. the provider (plugin in this case) transforms MD-SAL modeled group into OF-API modeled group
-. OF-API modeled group is then flushed into OFLibrary
-. OFLibrary encodes group into particular version of wire protocol and sends it to particular switch
-. check on CPqD if group is installed
-
-====== Push your Group
-
-* With PostMan:
-** Set
-*** Content-Type: application/xml
-*** Accept: application/xml
-** Use URL: "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
-** PUT
-** Use Body:
-
-[source,xml]
------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<group xmlns="urn:opendaylight:flow:inventory">
-    <group-type>group-all</group-type>
-    <buckets>
-        <bucket>
-            <action>
-                <pop-vlan-action/>
-                <order>0</order>
-            </action>
-            <bucket-id>12</bucket-id>
-            <watch_group>14</watch_group>
-            <watch_port>1234</watch_port>
-        </bucket>
-        <bucket>
-            <action>
-                <set-field>
-                    <ipv4-source>100.1.1.1</ipv4-source>
-                </set-field>
-                <order>0</order>
-            </action>
-            <action>
-                <set-field>
-                    <ipv4-destination>200.71.9.5210</ipv4-destination>
-                </set-field>
-                <order>1</order>
-            </action>
-            <bucket-id>13</bucket-id>
-            <watch_group>14</watch_group>
-            <watch_port>1234</watch_port>
-        </bucket>
-    </buckets>
-    <barrier>false</barrier>
-    <group-name>Foo</group-name>
-    <group-id>1</group-id>
-</group>
------
-
-NOTE: If you want to try a different group id, make sure the URL and the body stay in sync. For example, if you wanted to try: group-id 20 you'd change the URL to "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/20" but you would also need to update the <group-id>20</group-id> in the body to match.
-
-NOTE: <ip-address> :Provide the IP Address of the machine on which the controller is running.
-
-
-====== Check for your group on the switch
-
-* See your group on your cpqd switch:
-
-----
-COMMAND: sudo dpctl tcp:127.0.0.1:6000 stats-group
-
-SENDING:
-stat_req{type="grp", flags="0x0", group="all"}
-
-
-RECEIVED:
-stat_repl{type="grp", flags="0x0", stats=[
-{group="1", ref_cnt="0", pkt_cnt="0", byte_cnt="0", cntrs=[{pkt_cnt="0", byte_cnt="0"}, {pkt_cnt="0", byte_cnt="0"}]}]}
-----
-
-====== Check for your group in the controller config via RESTCONF
-
-* See your configured group in POSTMAN with
-** URL http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1
-** GET
-** You should no longer need to set Accept
-** Note: <ip-address> :Provide the IP Address of the machine on which the controller is running.
-
-====== Look for your group stats in the controller operational data via RESTCONF
-
-* See your operational group stats in POSTMAN with
-** URL http://<ip-address>:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/group/1
-** GET
-** Note: <ip-address> :Provide the IP Address of the machine on which the controller is running.
-
-===== Discovering and testing Group Types
-
-Currently, the openflowplugin has a test-provider that allows you to push various groups through the system from the OSGI command line. Once those groups have been pushed through, you can see them as examples and then use them to see in the config what a particular group example looks like.
-
-===== Using addGroup
-
-From the
-
-----
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
-----
-
-Point your CPqD at the controller as described above.
-
-once you can see your node (probably openflow:1 if you've been following along) in the inventory, at the OSGI command line try running:
-
-----
-addGroup openflow:1
-----
-
-This will install a group in the switch. You can check whether the group is installed or not.
-
-Once you've done that, use
-
-* GET
-* Accept: application/xml
-* URL: "http://<ip-address>:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1"
-** Note: <ip-address> :Provide the IP Address of the machine on which the controller is running.
-
-NOTE: Before attempting to PUT a group you have created via addGroup, please change its URL and body to, for example, use group 1 instead of group 2 or another Group Id, so that they don't collide.
-
-NOTE: There are several test command providers and the one handling groups is OpenflowpluginGroupTestCommandProvider. Methods, which can be use as commands in OSGI-console have prefix '_'.
-
-
-===== Example Group
-
-Examples for XML for various Group Types can be found in the test-scripts bundle of the plugin code with names g1.xml, g2.xml and g3.xml. 
\ No newline at end of file
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-inventory.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-inventory.adoc
deleted file mode 100644 (file)
index a5c4303..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-[[odl-ofp-end-to-end-inventory_introduction-introduction]]
-===== Introduction
-
-The purpose of this page is to walk you through how to see the Inventory
-Manager working end to end with the openflowplugin using OpenFlow 1.3.
-
-Basically, you will learn how to:
-
-1.  Run the Base/Virtualization/Service provider Edition with the new
-openflowplugin:
-OpenDaylight_OpenFlow_Plugin::Running_controller_with_the_new_OF_plugin[Running
-the controller with the new OpenFlow Plugin]
-2.  Start mininet to use OF 1.3:
-OpenDaylight_OpenFlow_Plugin::Test_Environment[OpenFlow 1.3 Enabled
-Software Switches / Environment]
-3.  Use RESTCONF to see the nodes appear in inventory.
-
-[[odl-ofp-end-to-end-flows_restconf-for-inventory]]
-===== Restconf for Inventory
-
-The REST url for listing all the nodes is:
-
-------------------------------------------------------------------------
-http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/
-------------------------------------------------------------------------
-
-You will need to set the Accept header:
-
------------------------
-Accept: application/xml
------------------------
-
-You will also need to use HTTP Basic Auth with username: admin password:
-admin.
-
-Alternately, if you have a node's id you can address it as
-
----------------------------------------------------------------------------------
-http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/<id>
----------------------------------------------------------------------------------
-
-for example
-
----------------------------------------------------------------------------------------
-http://localhost:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1
----------------------------------------------------------------------------------------
-
-[[odl-ofp-end-to-end-flows_how-to-hit-restconf-with-postman]]
-====== How to hit RestConf with Postman
-
-https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en[Install
-Postman for Chrome]
-
-In the chrome browser bar enter
-
---------------
-chrome://apps/
---------------
-
-And click on Postman.
-
-Enter the URL. Click on the Headers button on the far right. Enter the
-Accept: header. Click on the Basic Auth Tab at the top and setup the
-username and password. Send.
-
-[[odl-ofp-end-to-end-flows_known-bug]]
-===== Known Bug
-
-If you have not had any switches come up, and though no children for
-http://localhost:8080/restconf/datastore/opendaylight-inventory:nodes/
-and exception will be thrown. I'm pretty sure I know how to fix this
-bug, just need to get to it :)
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-meters.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-meters.adoc
deleted file mode 100644 (file)
index aebdf9b..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-
-===== Instructions
-
-
-====== Learn End to End for Inventory
-
-* <<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-====== Check inventory
-
-* Run mininet with support for OF 1.3 as described in
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-* Make sure you see the openflow:1 node come up as described in
-<<odl-ofp-end-to-end-inventory_introduction-introduction,End to End Inventory>>
-
-[[meter-strategy]]
-====== Meter Strategy
-
-Current way to flush a meter to switch looks like this: 
-
-. create MD-SAL modeled flow and commit it into dataStore using two
-phase commit
-. FRM gets notified and invokes corresponding rpc (addMeter) on
-particular service provider (if suitable provider for given node
-registered)
-. the provider (plugin in this case) transforms MD-SAL modeled meter
-into OF-API modeled meter
-. OF-API modeled meter is then flushed into OFLibrary
-. OFLibrary encodes meter into particular version of wire protocol and
-sends it to particular switch
-. check on mininet side if meter is installed
-
-[[push-your-meter]]
-====== Push your Meter
-
-* Using PostMan:
-** Set Request Headers
-*** Content-Type: application/xml
-*** Accept: application/xml
-** Use URL:
-"http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
-** Method:PUT
-** Request Body:
-
-[source, xml]
---------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<meter xmlns="urn:opendaylight:flow:inventory">
-    <container-name>abcd</container-name>
-    <flags>meter-burst</flags>
-    <meter-band-headers>
-        <meter-band-header>
-            <band-burst-size>444</band-burst-size>
-            <band-id>0</band-id>
-            <band-rate>234</band-rate>
-            <dscp-remark-burst-size>5</dscp-remark-burst-size>
-            <dscp-remark-rate>12</dscp-remark-rate>
-            <prec_level>1</prec_level>
-            <meter-band-types>
-                <flags>ofpmbt-dscp-remark</flags>
-            </meter-band-types>
-        </meter-band-header>
-    </meter-band-headers>
-    <meter-id>1</meter-id>
-    <meter-name>Foo</meter-name>
-</meter>
---------------------------------------------------------------
-
-NOTE: If you want to try a different meter id, make sure the URL
-and the body stay in sync. For example, if you wanted to try: meter-id
-20 you'd change the URL to "http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/20" but you would also need to update the 20 in the body to match.
-
-NOTE: :Provide the IP Address of the machine on which the
-controller is running.
-
-[[check-for-your-meter-on-the-switch]]
-==== Check for your meter on the switch
-
-* See your meter on your CPqD switch:
-
-----------------------------------------------------------------------------------------------------------------------------------------------
-COMMAND: $ sudo dpctl tcp:127.0.0.1:6000 meter-config
-
-SENDING:
-stat_req{type="mconf", flags="0x0"{meter_id= ffffffff"}
-
-
-RECEIVED:
-stat_repl{type="mconf", flags="0x0", stats=[{meter= c"", flags="4", bands=[{type = dscp_remark, rate="12", burst_size="5", prec_level="1"}]}]}
-----------------------------------------------------------------------------------------------------------------------------------------------
-
-[[check-for-your-meter-in-the-controller-config-via-restconf]]
-===== Check for your meter in the controller config via RESTCONF
-
-* See your configured flow in POSTMAN with
-** URL
-"http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/1"
-** Method: GET
-** You should no longer need to set Request Headers for Accept
-** Note: :Provide the IP Address of the machine on which the controller
-is running.
-
-[[look-for-your-meter-stats-in-the-controller-operational-data-via-restconf]]
-===== Look for your meter stats in the controller operational data via RESTCONF
-
-* See your operational meter stats in POSTMAN with
-** URL
-"http://:8080/restconfig/operational/opendaylight-inventory:nodes/node/openflow:1/meter/1"
-** Method: GET
-** Note: :Provide the IP Address of the machine on which the controller
-is running.
-
-[[discovering-and-testing-meter-types]]
-===== Discovering and testing Meter Types
-
-Currently, the openflowplugin has a test-provider that allows you to
-push various meters through the system from the OSGI command line. Once
-those meters have been pushed through, you can see them as examples and
-then use them to see in the config what a particular meter example looks
-like.
-
-[[using-addmeter]]
-====== Using addMeter
-
-From the
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your CPqD at the controller as described above.
-
-Once you can see your CPqD connected to the controller, at the OSGI
-command line try running:
-
--------------------
-addMeter openflow:1
--------------------
-
-Once you've done that, use
-
-* GET
-* Accept: application/xml
-* URL:
-"http://:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/meter/12"
-** Note: :Provide the IP Address of the machine on which the controller
-is running.
-
-NOTE: Before attempting to PUT a meter you have created via addMeter,
-please change its URL and body to, for example, use meter 1 instead of
-meter 2 or another Meter Id, so you don't collide.
-
-NOTE: There are several test command providers and the one handling
-Meter is *OpenflowpluginMeterTestCommandProvider*. Methods, which can be
-used as *commands in OSGI-console* have prefix '_'. Examples: addMeter,
-modifyMeter and removeMeter.
-
-[[example-meter]]
-===== Example Meter
-
-Examples for XML for various Meter Types can be found in the
-test-scripts bundle of the plugin code with names m1.xml, m2.xml and
-m3.xml.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-topology.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-end-to-end-topology.adoc
deleted file mode 100644 (file)
index 4c421a1..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-[[introduction]]
-===== Introduction
-
-The purpose of this page is to walk you through how to see the Topology
-Manager working end to end with the openflowplugin using OpenFlow 1.3.
-
-Basically, you will learn how to:
-
-1.  Run the Base/Virtualization/Service provider Edition with the new
-openflowplugin:
-<<odl-ofp-running-controller-with-the-new-of-plugin_top,Running the controller with the new OpenFlow Plugin>>
-2.  Start mininet to use OF 1.3:
-<<odl-ofp-test-environment_top,OpenFlow 1.3 Enabled Software Switches / Environment>>
-3.  Use RESTCONF to see the topology information.
-
-[[restconf-for-topology]]
-===== Restconf for Topology
-
-The REST url for listing all the nodes is:
-
------------------------------------------------------------------------------
-http://localhost:8080/restconf/operational/network-topology:network-topology/
------------------------------------------------------------------------------
-
-You will need to set the Accept header:
-
------------------------
-Accept: application/xml
------------------------
-
-You will also need to use HTTP Basic Auth with username: admin password:
-admin.
-
-Alternately, if you have a node's id you can address it as
-
-------------------------------------------------------------------------------------------
-http://localhost:8080/restconf/operational/network-topology:network-topology/topology/<id>
-------------------------------------------------------------------------------------------
-
-for example
-
----------------------------------------------------------------------------------------------
-http://localhost:8080/restconf/operational/network-topology:network-topology/topology/flow:1/
----------------------------------------------------------------------------------------------
-
-[[how-to-hit-restconf-with-postman]]
-====== How to hit RestConf with Postman
-
-Install https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en[postman] for Chrome
-
-In the chrome browser bar enter
-
---------------
-chrome://apps/
---------------
-
-And click on Postman.
-
-Enter the URL. Click on the Headers button on the far right. Enter the
-Accept: header. Click on the Basic Auth Tab at the top and setup the
-username and password. Send.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-example-flows.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-example-flows.adoc
deleted file mode 100644 (file)
index 1e4bbb5..0000000
+++ /dev/null
@@ -1,1877 +0,0 @@
-[[odl-ofp-example-flows_overview]]
-==== Overview
-
-The flow examples on this page are tested to work with OVS.
-
-Use, for example, POSTMAN with the following parameters:
-
----------------------------------------------------------------------------------------------------------------------
-PUT http://<ctrl-addr>:8080/restconf/config/opendaylight-inventory:nodes/node/<Node-id>/table/<Table-#>/flow/<Flow-#>
-
-- Accept: application/xml
-- Content-Type: application/xml
----------------------------------------------------------------------------------------------------------------------
-
-For example:
-
--------------------------------------------------------------------------------------------------------
-PUT http://localhost:8080/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/127
--------------------------------------------------------------------------------------------------------
-
-Make sure that the Table-# and Flow-# in the URL and in the XML match.
-
-The format of the flow-programming XML is determined by by the grouping
-'flow' in the opendaylight-flow-types yang model: MISSING LINK.
-
-[[match-examples]]
-==== Match Examples
-
-The format of the XML that describes OpenFlow matches is determined by
-the opendaylight-match-types yang model: .
-
-The RESTCONF documentation for the match-types yang model can be found
-at
-https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-match-types.html[opendaylight-match-types.html]
-
-[[ipv4-dest-address]]
-===== IPv4 Dest Address
-
-* Flow=124, Table=2, Priority=2,
-Instructions=\{Apply_Actions=\{dec_nw_ttl}},
-match=\{ipv4_destination_address=10.0.1.1/24}
-* Note that ethernet-type MUST be 2048 (0x800)
-
-[source,xml]
---------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>124</id>
-    <cookie_mask>255</cookie_mask>
-    <installHw>false</installHw>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv4-destination>10.0.1.1/24</ipv4-destination>
-    </match>
-    <hard-timeout>12</hard-timeout>
-    <cookie>1</cookie>
-    <idle-timeout>34</idle-timeout>
-    <flow-name>FooXf1</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
---------------------------------------------------------
-
-[[ethernet-src-address]]
-===== Ethernet Src Address
-
-* Flow=126, Table=2, Priority=2, Instructions=\{Apply_Actions=\{drop}},
-match=\{ethernet-source=00:00:00:00:00:01}
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <drop-action/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>126</id>
-    <cookie_mask>255</cookie_mask>
-    <installHw>false</installHw>
-    <match>
-        <ethernet-match>
-            <ethernet-source>
-                <address>00:00:00:00:00:01</address>
-            </ethernet-source>
-        </ethernet-match>
-    </match>
-    <hard-timeout>12</hard-timeout>
-    <cookie>3</cookie>
-    <idle-timeout>34</idle-timeout>
-    <flow-name>FooXf3</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
-------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ethernet-type]]
-===== Ethernet Src & Dest Addresses, Ethernet Type
-
-* Flow=127, Table=2, Priority=2, Instructions=\{Apply_Actions=\{drop}},
-match=\{ethernet-source=00:00:00:00:23:ae,
-ethernet-destination=ff:ff:ff:ff:ff:ff, ethernet-type=45}
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-mpls-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>127</id>
-    <cookie_mask>255</cookie_mask>
-    <installHw>false</installHw>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>45</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:ff:ff:ff:ff</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:00:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-    </match>
-    <hard-timeout>12</hard-timeout>
-    <cookie>4</cookie>
-    <idle-timeout>34</idle-timeout>
-    <flow-name>FooXf4</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
-------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ipv4-src-dest-addresses-input-port]]
-===== Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, Input Port
-
-* Note that ethernet-type MUST be 34887 (0x8847)
-
-[source,xml]
---------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-mpls-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>128</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34887</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:ff:ff:ff:ff</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:00:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>10.1.2.3/24</ipv4-source>
-        <ipv4-destination>20.4.5.6/16</ipv4-destination>
-        <in-port>0</in-port>
-    </match>
-    <hard-timeout>12</hard-timeout>
-    <cookie>5</cookie>
-    <idle-timeout>34</idle-timeout>
-    <flow-name>FooXf5</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
---------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ipv4-src-dest-addresses-ip-protocol-ip-dscp-ip-ecn-input-port]]
-===== Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, IP
-Protocol #, IP DSCP, IP ECN, Input Port
-
-* Note that ethernet-type MUST be 2048 (0x800)
-
-[source,xml]
---------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>130</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:ff:ff:ff:aa</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>10.1.2.3/24</ipv4-source>
-        <ipv4-destination>20.4.5.6/16</ipv4-destination>
-        <ip-match>
-            <ip-protocol>56</ip-protocol>
-            <ip-dscp>15</ip-dscp>
-            <ip-ecn>1</ip-ecn>
-        </ip-match>
-        <in-port>0</in-port>
-    </match>
-    <hard-timeout>12000</hard-timeout>
-    <cookie>7</cookie>
-    <idle-timeout>12000</idle-timeout>
-    <flow-name>FooXf7</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
---------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ipv4-src-dest-addresses-tcp-src-dest-ports-ip-dscp-ip-ecn-input-port]]
-===== Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, TCP Src &
-Dest Ports, IP DSCP, IP ECN, Input Port
-
-* Note that ethernet-type MUST be 2048 (0x800)
-* Note that IP Protocol Type MUST be 6
-
-[source,xml]
------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>131</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>17.1.2.3/8</ipv4-source>
-        <ipv4-destination>172.168.5.6/16</ipv4-destination>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>2</ip-dscp>
-            <ip-ecn>2</ip-ecn>
-        </ip-match>
-        <tcp-source-port>25364</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-        <in-port>0</in-port>
-    </match>
-    <hard-timeout>1200</hard-timeout>
-    <cookie>8</cookie>
-    <idle-timeout>3400</idle-timeout>
-    <flow-name>FooXf8</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
------------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ipv4-src-dest-addresses-udp-src-dest-ports-ip-dscp-ip-ecn-input-port]]
-===== Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, UDP Src &
-Dest Ports, IP DSCP, IP ECN, Input Port
-
-* Note that ethernet-type MUST be 2048 (0x800)
-* Note that IP Protocol Type MUST be 17
-
-[source,xml]
------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>132</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>20:14:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>19.1.2.3/10</ipv4-source>
-        <ipv4-destination>172.168.5.6/18</ipv4-destination>
-        <ip-match>
-            <ip-protocol>17</ip-protocol>
-            <ip-dscp>8</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <udp-source-port>25364</udp-source-port>
-        <udp-destination-port>8080</udp-destination-port>
-        <in-port>0</in-port>
-    </match>
-    <hard-timeout>1200</hard-timeout>
-    <cookie>9</cookie>
-    <idle-timeout>3400</idle-timeout>
-    <flow-name>FooXf9</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
------------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ipv4-src-dest-addresses-icmpv4-type-code-ip-dscp-ip-ecn-input-port]]
-===== Ethernet Src & Dest Addresses, IPv4 Src & Dest Addresses, ICMPv4
-Type & Code, IP DSCP, IP ECN, Input Port
-
-* Note that ethernet-type MUST be 2048 (0x800)
-* Note that IP Protocol Type MUST be 1
-
-[source,xml]
------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>134</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>17.1.2.3/8</ipv4-source>
-        <ipv4-destination>172.168.5.6/16</ipv4-destination>
-        <ip-match>
-            <ip-protocol>1</ip-protocol>
-            <ip-dscp>27</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <icmpv4-match>
-            <icmpv4-type>6</icmpv4-type>
-            <icmpv4-code>3</icmpv4-code>
-        </icmpv4-match>
-        <in-port>0</in-port>
-    </match>
-    <hard-timeout>1200</hard-timeout>
-    <cookie>11</cookie>
-    <idle-timeout>3400</idle-timeout>
-    <flow-name>FooXf11</flow-name>
-    <priority>2</priority>
-</flow>
------------------------------------------------------------
-
-[[ethernet-src-dest-addresses-arp-operation-arp-src-target-transport-addresses-arp-src-target-hw-addresses]]
-===== Ethernet Src & Dest Addresses, ARP Operation, ARP Src & Target
-Transport Addresses, ARP Src & Target Hw Addresses
-
-* Note that ethernet-type MUST be 2054 (0x806)
-
-[source,xml]
---------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-                <action>
-                    <order>1</order>
-                    <dec-mpls-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>137</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2054</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:ff:ff:FF:ff</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:FC:01:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <arp-op>1</arp-op>
-        <arp-source-transport-address>192.168.4.1</arp-source-transport-address>
-        <arp-target-transport-address>10.21.22.23</arp-target-transport-address>
-        <arp-source-hardware-address>
-            <address>12:34:56:78:98:AB</address>
-        </arp-source-hardware-address>
-        <arp-target-hardware-address>
-            <address>FE:DC:BA:98:76:54</address>
-        </arp-target-hardware-address>
-    </match>
-    <hard-timeout>12</hard-timeout>
-    <cookie>14</cookie>
-    <idle-timeout>34</idle-timeout>
-    <flow-name>FooXf14</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
---------------------------------------------------------------------------------
-
-[[ethernet-src-dest-addresses-ethernet-type-vlan-id-vlan-pcp]]
-===== Ethernet Src & Dest Addresses, Ethernet Type, VLAN ID, VLAN PCP
-
-[source,xml]
--------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <table_id>2</table_id>
-    <id>138</id>
-    <cookie_mask>255</cookie_mask>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <vlan-match>
-            <vlan-id>
-                <vlan-id>78</vlan-id>
-                <vlan-id-present>true</vlan-id-present>
-            </vlan-id>
-            <vlan-pcp>3</vlan-pcp>
-      </vlan-match>
-    </match>
-    <hard-timeout>1200</hard-timeout>
-    <cookie>15</cookie>
-    <idle-timeout>3400</idle-timeout>
-    <flow-name>FooXf15</flow-name>
-    <priority>2</priority>
-    <barrier>false</barrier>
-</flow>
--------------------------------------------------------
-
-[[ethernet-src-dest-addresses-mpls-label-mpls-tc-mpls-bos]]
-===== Ethernet Src & Dest Addresses, MPLS Label, MPLS TC, MPLS BoS
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <flow-name>FooXf17</flow-name>
-    <id>140</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>17</cookie>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <priority>2</priority>
-    <table_id>2</table_id>
-    <strict>false</strict>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34887</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <protocol-match-fields>
-            <mpls-label>567</mpls-label>
-            <mpls-tc>3</mpls-tc>
-            <mpls-bos>1</mpls-bos>
-        </protocol-match-fields>
-    </match>
-</flow>
-------------------------------------------------------
-
-[[ipv6-src-dest-addresses]]
-===== IPv6 Src & Dest Addresses
-
-* Note that ethernet-type MUST be 34525
-
-[source,xml]
-------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf18</flow-name>
-    <id>141</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>18</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>fe80::2acf:e9ff:fe21:6431/128</ipv6-source>
-        <ipv6-destination>aabb:1234:2acf:e9ff::fe21:6431/64</ipv6-destination>
-    </match>
-</flow>
-------------------------------------------------------------------------------
-
-[[metadata]]
-===== Metadata
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf19</flow-name>
-    <id>142</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>19</cookie>
-    <table_id>2</table_id>
-    <priority>1</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-    </match>
-</flow>
-------------------------------------------------------
-
-[[metadata-metadata-mask]]
-===== Metadata, Metadata Mask
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf20</flow-name>
-    <id>143</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>20</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <metadata>
-            <metadata>12345</metadata>
-            <metadata-mask>//FF</metadata-mask>
-        </metadata>
-    </match>
-</flow>
-------------------------------------------------------
-
-[[ipv6-src-dest-addresses-metadata-ip-dscp-ip-ecn-udp-src-dest-ports]]
-===== IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, UDP Src & Dest Ports
-
-* Note that ethernet-type MUST be 34525
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf21</flow-name>
-    <id>144</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>21</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80::2acf:e9ff:fe21:6431/128</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>17</ip-protocol>
-            <ip-dscp>8</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <udp-source-port>25364</udp-source-port>
-        <udp-destination-port>8080</udp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[ipv6-src-dest-addresses-metadata-ip-dscp-ip-ecn-tcp-src-dest-ports]]
-===== IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports
-
-* Note that ethernet-type MUST be 34525
-* Note that IP Protocol MUST be 6
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf22</flow-name>
-    <id>145</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>22</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <tcp-source-port>183</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[ipv6-src-dest-addresses-metadata-ip-dscp-ip-ecn-tcp-src-dest-ports-ipv6-label]]
-===== IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dest Ports, IPv6 Label
-
-* Note that ethernet-type MUST be 34525
-* Note that IP Protocol MUST be 6
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf23</flow-name>
-    <id>146</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>23</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ipv6-label>
-            <ipv6-flabel>33</ipv6-flabel>
-        </ipv6-label>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <tcp-source-port>183</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[tunnel-id]]
-===== Tunnel ID
-
-[source,xml]
-------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf24</flow-name>
-    <id>147</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>24</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <tunnel>
-            <tunnel-id>2591</tunnel-id>
-        </tunnel>
-    </match>
-</flow>
-------------------------------------------------------
-
-[[ipv6-src-dest-addresses-metadata-ip-dscp-ip-ecn-icmpv6-type-code-ipv6-label]]
-===== IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, ICMPv6 Type & Code, IPv6 Label
-
-* Note that ethernet-type MUST be 34525
-* Note that IP Protocol MUST be 58
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf25</flow-name>
-    <id>148</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>25</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ipv6-label>
-            <ipv6-flabel>33</ipv6-flabel>
-        </ipv6-label>
-        <ip-match>
-            <ip-protocol>58</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <icmpv6-match>
-            <icmpv6-type>6</icmpv6-type>
-            <icmpv6-code>3</icmpv6-code>
-        </icmpv6-match>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[ipv6-src-dest-addresses-metadata-ip-dscp-ip-ecn-tcp-src-dst-ports-ipv6-label-ipv6-ext-header]]
-===== IPv6 Src & Dest Addresses, Metadata, IP DSCP, IP ECN, TCP Src & Dst Ports, IPv6 Label, IPv6 Ext Header
-
-* Note that ethernet-type MUST be 34525
-* Note that IP Protocol MUST be 58
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf27</flow-name>
-    <id>150</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>27</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <dec-nw-ttl/>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ipv6-label>
-            <ipv6-flabel>33</ipv6-flabel>
-        </ipv6-label>
-        <ipv6-ext-header>
-            <ipv6-exthdr>0</ipv6-exthdr>
-        </ipv6-ext-header>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <tcp-source-port>183</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[actions]]
-==== Actions
-
-The format of the XML that describes OpenFlow actions is determined by
-the opendaylight-action-types yang model: .
-
-The RESTCONF documentation for the match-types yang model can be found
-at
-https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/md-sal/model/model-flow-base/target/site/models/opendaylight-action-types.html[opendaylight-action-types.html]
-
-[[apply-actions]]
-===== Apply Actions
-
-[[output-to-table]]
-====== Output to TABLE
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf101</flow-name>
-    <id>256</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>101</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>TABLE</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <tcp-source-port>183</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[output-to-inport]]
-====== Output to INPORT
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf102</flow-name>
-    <id>257</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>102</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>INPORT</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-7            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>17.1.2.3/8</ipv4-source>
-        <ipv4-destination>172.168.5.6/16</ipv4-destination>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>2</ip-dscp>
-            <ip-ecn>2</ip-ecn>
-        </ip-match>
-        <tcp-source-port>25364</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[output-to-physical-port]]
-====== Output to Physical Port
-
-[source,xml]
-------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf103</flow-name>
-    <id>258</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>103</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>1</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>ff:ff:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>17.1.2.3/8</ipv4-source>
-        <ipv4-destination>172.168.5.6/16</ipv4-destination>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>2</ip-dscp>
-            <ip-ecn>2</ip-ecn>
-        </ip-match>
-        <tcp-source-port>25364</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
-------------------------------------------------------------------------
-
-[[output-to-local]]
-====== Output to LOCAL
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf104</flow-name>
-    <id>259</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>104</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>LOCAL</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/94</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>60</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <tcp-source-port>183</tcp-source-port>
-        <tcp-destination-port>8080</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[output-to-normal]]
-====== Output to NORMAL
-
-[source,xml]
------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf105</flow-name>
-    <id>260</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>105</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>NORMAL</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/84</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/90</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>45</ip-dscp>
-            <ip-ecn>2</ip-ecn>
-        </ip-match>
-        <tcp-source-port>20345</tcp-source-port>
-        <tcp-destination-port>80</tcp-destination-port>
-    </match>
-</flow>
------------------------------------------------------------------------------
-
-[[output-to-flood]]
-====== Output to FLOOD
-
-[source,xml]
-------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf106</flow-name>
-    <id>261</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>106</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>FLOOD</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34525</type>
-            </ethernet-type>
-        </ethernet-match>
-        <ipv6-source>1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/100</ipv6-source>
-        <ipv6-destination>fe80:2acf:e9ff:fe21::6431/67</ipv6-destination>
-        <metadata>
-            <metadata>12345</metadata>
-        </metadata>
-        <ip-match>
-            <ip-protocol>6</ip-protocol>
-            <ip-dscp>45</ip-dscp>
-            <ip-ecn>2</ip-ecn>
-        </ip-match>
-        <tcp-source-port>20345</tcp-source-port>
-        <tcp-destination-port>80</tcp-destination-port>
-    </match>
-</flow>
-------------------------------------------------------------------------------
-
-[[output-to-all]]
-====== Output to ALL
-
-[source,xml]
---------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf107</flow-name>
-    <id>262</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>107</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>ALL</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>20:14:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>19.1.2.3/10</ipv4-source>
-        <ipv4-destination>172.168.5.6/18</ipv4-destination>
-        <ip-match>
-            <ip-protocol>17</ip-protocol>
-            <ip-dscp>8</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <udp-source-port>25364</udp-source-port>
-        <udp-destination-port>8080</udp-destination-port>
-        <in-port>0</in-port>
-    </match>
-</flow>
---------------------------------------------------------------------------
-
-[[output-to-controller]]
-====== Output to CONTROLLER
-
-[source,xml]
----------------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf108</flow-name>
-    <id>263</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>108</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>CONTROLLER</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>20:14:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>19.1.2.3/10</ipv4-source>
-        <ipv4-destination>172.168.5.6/18</ipv4-destination>
-        <ip-match>
-            <ip-protocol>17</ip-protocol>
-            <ip-dscp>8</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <udp-source-port>25364</udp-source-port>
-        <udp-destination-port>8080</udp-destination-port>
-        <in-port>0</in-port>
-    </match>
-</flow>
----------------------------------------------------------------------------------
-
-[[output-to-any]]
-====== Output to ANY
-
-[source,xml]
---------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-    <strict>false</strict>
-    <flow-name>FooXf109</flow-name>
-    <id>264</id>
-    <cookie_mask>255</cookie_mask>
-    <cookie>109</cookie>
-    <table_id>2</table_id>
-    <priority>2</priority>
-    <hard-timeout>1200</hard-timeout>
-    <idle-timeout>3400</idle-timeout>
-    <installHw>false</installHw>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <order>0</order>
-                    <output-action>
-                        <output-node-connector>ANY</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-            <ethernet-destination>
-                <address>20:14:29:01:19:61</address>
-            </ethernet-destination>
-            <ethernet-source>
-                <address>00:00:00:11:23:ae</address>
-            </ethernet-source>
-        </ethernet-match>
-        <ipv4-source>19.1.2.3/10</ipv4-source>
-        <ipv4-destination>172.168.5.6/18</ipv4-destination>
-        <ip-match>
-            <ip-protocol>17</ip-protocol>
-            <ip-dscp>8</ip-dscp>
-            <ip-ecn>3</ip-ecn>
-        </ip-match>
-        <udp-source-port>25364</udp-source-port>
-        <udp-destination-port>8080</udp-destination-port>
-        <in-port>0</in-port>
-    </match>
-</flow>
---------------------------------------------------------------------------
-
-[[push-vlan]]
-====== Push VLAN
-
-[source,xml]
------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-   <strict>false</strict>
-   <instructions>
-       <instruction>
-           <order>0</order>
-           <apply-actions>
-              <action>
-                 <push-vlan-action>
-                     <ethernet-type>33024</ethernet-type>
-                 </push-vlan-action>
-                 <order>0</order>
-              </action>
-               <action>
-                   <set-field>
-                       <vlan-match>
-                            <vlan-id>
-                                <vlan-id>79</vlan-id>
-                                <vlan-id-present>true</vlan-id-present>
-                            </vlan-id>
-                       </vlan-match>
-                   </set-field>
-                   <order>1</order>
-               </action>
-               <action>
-                   <output-action>
-                       <output-node-connector>5</output-node-connector>
-                   </output-action>
-                   <order>2</order>
-               </action>
-           </apply-actions>
-       </instruction>
-   </instructions>
-   <table_id>0</table_id>
-   <id>31</id>
-   <match>
-       <ethernet-match>
-           <ethernet-type>
-               <type>2048</type>
-           </ethernet-type>
-           <ethernet-destination>
-               <address>FF:FF:29:01:19:61</address>
-           </ethernet-destination>
-           <ethernet-source>
-               <address>00:00:00:11:23:AE</address>
-           </ethernet-source>
-       </ethernet-match>
-     <in-port>1</in-port>
-   </match>
-   <flow-name>vlan_flow</flow-name>
-   <priority>2</priority>
-</flow>
------
-
-[[push-mpls]]
-====== Push MPLS
-
-[source,xml]
-------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow
-    xmlns="urn:opendaylight:flow:inventory">
-    <flow-name>push-mpls-action</flow-name>
-    <instructions>
-        <instruction>
-            <order>3</order>
-            <apply-actions>
-                <action>
-                    <push-mpls-action>
-                        <ethernet-type>34887</ethernet-type>
-                    </push-mpls-action>
-                    <order>0</order>
-                </action>
-                <action>
-                    <set-field>
-                        <protocol-match-fields>
-                            <mpls-label>27</mpls-label>
-                        </protocol-match-fields>
-                    </set-field>
-                    <order>1</order>
-                </action>
-                <action>
-                    <output-action>
-                        <output-node-connector>2</output-node-connector>
-                    </output-action>
-                    <order>2</order>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <strict>false</strict>
-    <id>100</id>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>2048</type>
-            </ethernet-type>
-        </ethernet-match>
-        <in-port>1</in-port>
-        <ipv4-destination>10.0.0.4/32</ipv4-destination>
-    </match>
-    <idle-timeout>0</idle-timeout>
-    <cookie_mask>255</cookie_mask>
-    <cookie>401</cookie>
-    <priority>8</priority>
-    <hard-timeout>0</hard-timeout>
-    <installHw>false</installHw>
-    <table_id>0</table_id>
-</flow>
-------------------------------------------------------------------------
-
-[[swap-mpls]]
-====== Swap MPLS
-
-* Note that ethernet-type MUST be 34887
-
-[source,xml]
-------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow
-    xmlns="urn:opendaylight:flow:inventory">
-    <flow-name>push-mpls-action</flow-name>
-    <instructions>
-        <instruction>
-            <order>2</order>
-            <apply-actions>
-                <action>
-                    <set-field>
-                        <protocol-match-fields>
-                            <mpls-label>37</mpls-label>
-                        </protocol-match-fields>
-                    </set-field>
-                    <order>1</order>
-                </action>
-                <action>
-                    <output-action>
-                        <output-node-connector>2</output-node-connector>
-                    </output-action>
-                    <order>2</order>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <strict>false</strict>
-    <id>101</id>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34887</type>
-            </ethernet-type>
-        </ethernet-match>
-        <in-port>1</in-port>
-        <protocol-match-fields>
-            <mpls-label>27</mpls-label>
-        </protocol-match-fields>
-    </match>
-    <idle-timeout>0</idle-timeout>
-    <cookie_mask>255</cookie_mask>
-    <cookie>401</cookie>
-    <priority>8</priority>
-    <hard-timeout>0</hard-timeout>
-    <installHw>false</installHw>
-    <table_id>0</table_id>
-</flow>
-------------------------------------------------------------------------
-
-[[pop-mpls]]
-====== Pop MPLS
-
-* Note that ethernet-type MUST be 34887
-* Issue with OVS 2.1
-http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=b3f2fc93e3f357f8d05a92f53ec253339a40887f[OVS
-fix]
-
-[source,xml]
-------------------------------------------------------------------------
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow
-    xmlns="urn:opendaylight:flow:inventory">
-    <flow-name>FooXf10</flow-name>
-    <instructions>
-        <instruction>
-            <order>0</order>
-            <apply-actions>
-                <action>
-                    <pop-mpls-action>
-                        <ethernet-type>2048</ethernet-type>
-                    </pop-mpls-action>
-                    <order>1</order>
-                </action>
-                <action>
-                    <output-action>
-                        <output-node-connector>2</output-node-connector>
-                        <max-length>60</max-length>
-                    </output-action>
-                    <order>2</order>
-                </action>
-            </apply-actions>
-        </instruction>
-    </instructions>
-    <id>11</id>
-    <strict>false</strict>
-    <match>
-        <ethernet-match>
-            <ethernet-type>
-                <type>34887</type>
-            </ethernet-type>
-        </ethernet-match>
-        <in-port>1</in-port>
-        <protocol-match-fields>
-            <mpls-label>37</mpls-label>
-        </protocol-match-fields>
-    </match>
-    <idle-timeout>0</idle-timeout>
-    <cookie>889</cookie>
-    <cookie_mask>255</cookie_mask>
-    <installHw>false</installHw>
-    <hard-timeout>0</hard-timeout>
-    <priority>10</priority>
-    <table_id>0</table_id>
-</flow>
-------------------------------------------------------------------------
-
-[[learn]]
-====== Learn
-* Nicira extension defined in https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h 
-* Example section is - https://github.com/osrg/openvswitch/blob/master/include/openflow/nicira-ext.h#L788
-
-[source,xml]
-------------------------------------------------------------------------
-<flow>
-  <id>ICMP_Ingress258a5a5ad-08a8-4ff7-98f5-ef0b96ca3bb8</id>
-  <hard-timeout>0</hard-timeout>
-  <idle-timeout>0</idle-timeout>
-  <match>
-    <ethernet-match>
-      <ethernet-type>
-        <type>2048</type>
-      </ethernet-type>
-    </ethernet-match>
-    <metadata>
-      <metadata>2199023255552</metadata>
-      <metadata-mask>2305841909702066176</metadata-mask>
-    </metadata>
-    <ip-match>
-      <ip-protocol>1</ip-protocol>
-    </ip-match>
-  </match>
-  <cookie>110100480</cookie>
-  <instructions>
-    <instruction>
-      <order>0</order>
-      <apply-actions>
-        <action>
-          <order>1</order>
-          <nx-resubmit
-            xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
-            <table>220</table>
-          </nx-resubmit>
-        </action>
-        <action>
-          <order>0</order>
-          <nx-learn
-            xmlns="urn:opendaylight:openflowplugin:extension:nicira:action">
-            <idle-timeout>60</idle-timeout>
-            <fin-idle-timeout>0</fin-idle-timeout>
-            <hard-timeout>60</hard-timeout>
-            <flags>0</flags>
-            <table-id>41</table-id>
-            <priority>61010</priority>
-            <fin-hard-timeout>0</fin-hard-timeout>
-            <flow-mods>
-              <flow-mod-add-match-from-value>
-                <src-ofs>0</src-ofs>
-                <value>2048</value>
-                <src-field>1538</src-field>
-                <flow-mod-num-bits>16</flow-mod-num-bits>
-              </flow-mod-add-match-from-value>
-            </flow-mods>
-            <flow-mods>
-              <flow-mod-add-match-from-field>
-                <src-ofs>0</src-ofs>
-                <dst-ofs>0</dst-ofs>
-                <dst-field>4100</dst-field>
-                <src-field>3588</src-field>
-                <flow-mod-num-bits>32</flow-mod-num-bits>
-              </flow-mod-add-match-from-field>
-            </flow-mods>
-            <flow-mods>
-              <flow-mod-add-match-from-field>
-                <src-ofs>0</src-ofs>
-                <dst-ofs>0</dst-ofs>
-                <dst-field>518</dst-field>
-                <src-field>1030</src-field>
-                <flow-mod-num-bits>48</flow-mod-num-bits>
-              </flow-mod-add-match-from-field>
-            </flow-mods>
-            <flow-mods>
-              <flow-mod-add-match-from-field>
-                <src-ofs>0</src-ofs>
-                <dst-ofs>0</dst-ofs>
-                <dst-field>3073</dst-field>
-                <src-field>3073</src-field>
-                <flow-mod-num-bits>8</flow-mod-num-bits>
-              </flow-mod-add-match-from-field>
-            </flow-mods>
-            <flow-mods>
-              <flow-mod-copy-value-into-field>
-                <dst-ofs>0</dst-ofs>
-                <value>1</value>
-                <dst-field>65540</dst-field>
-                <flow-mod-num-bits>8</flow-mod-num-bits>
-              </flow-mod-copy-value-into-field>
-            </flow-mods>
-            <cookie>110100480</cookie>
-          </nx-learn>
-        </action>
-      </apply-actions>
-    </instruction>
-  </instructions>
-  <installHw>true</installHw>
-  <barrier>false</barrier>
-  <strict>false</strict>
-  <priority>61010</priority>
-  <table_id>253</table_id>
-  <flow-name>ACL</flow-name>
-</flow>
-------------------------------------------------------------------------
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-openflowplugin-user.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-openflowplugin-user.adoc
deleted file mode 100644 (file)
index c074fe5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-== OpenFlow Plugin
-
-include::odl-ofp-overview-architecture.adoc[]
-
-include::odl-ofp-coverage.adoc[]
-
-include::odl-ofp-running-controller-with-the-new-of-plugin.adoc[]
-
-include::odl-ofp-test-environment.adoc[]
-
-include::odl-ofp-restconf-postman.adoc[]
-
-include::odl-ofp-end-to-end-inventory.adoc[]
-
-include::odl-ofp-end-to-end-topology.adoc[]
-
-include::odl-ofp-end-to-end-flows.adoc[]
-
-include::odl-ofp-end-to-end-groups.adoc[]
-
-include::odl-ofp-end-to-end-meters.adoc[]
-
-include::odl-ofp-statistics.adoc[]
-
-include::odl-ofp-of13-enabled-wireshark.adoc[]
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-and-architecture.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-and-architecture.adoc
deleted file mode 100644 (file)
index eea58ba..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-===== Overview
-
-OpenFlow is a vendor-neutral standard communications interface defined
-to enable interaction between the control and forwarding layers of an
-SDN architecture. The OpenFlow plugin project intends to develop a
-plugin to support implementations of the OpenFlow specification as it
-develops and evolves. Specifically the project has developed a plugin
-aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
-support for subsequent OpenFlow specifications. The plugin is based on
-the Model Driven Service Abstraction Layer (MD-SAL) architecture
-(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
-This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
-OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
-architecture.
-
-
-===== Scope
-
-* Southbound plugin and integration of OpenFlow 1.0/1.3.x library
-project
-* Ongoing support and integration of the OpenFlow specification
-* The plugin should be implemented in an easily extensibile manner
-* Protocol verification activities will be performed on supported
-OpenFlow specifications
-
-===== Architecture and Design
-
-====== Functionality
-
-OpenFlow 1.3 Plugin will support the following functionality
-
-* Connection Handling
-* Session Management
-* State Management.
-* Error Handling.
-* Mapping function(Infrastructure to OF structures).
-* Connection establishment will be handled by OpenFlow library using
-opensource netty.io library.
-* Message handling(Ex: Packet in).
-* Event handling and propagation to upper layers.
-* Plugin will support both MD-SAL and Hard SAL.
-* Will be backward compatible with OF 1.0.
-
-*Activities in OF plugin module*
-
-* New OF plugin bundle will support both OF 1.0 and OF 1.3.
-* Integration with OpenFlow library.
-* Integration with corresponding MD-SAL infrastructure.
-* Hard SAL will be supported as adapter on top of MD-SAL plugin.
-* OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
-
-
-====== Design
-
-*Overall Architecture*
-
-.overal architecture
-image::openflowplugin/plugin_design.jpg[Overal architecture,389, 289]
-    
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-architecture.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-overview-architecture.adoc
deleted file mode 100644 (file)
index b466698..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-[[overview]]
-=== Overview
-
-OpenFlow is a vendor-neutral standard communications interface defined
-to enable interaction between the control and forwarding layers of an
-SDN architecture. The OpenFlow plugin project intends to develop a
-plugin to support implementations of the OpenFlow specification as it
-develops and evolves. Specifically the project has developed a plugin
-aiming to support OpenFlow 1.0 and 1.3.x. It can be extended to add
-support for subsequent OpenFlow specifications. The plugin is based on
-the Model Driven Service Abstraction Layer (MD-SAL) architecture
-(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL).
-This new OpenFlow 1.0/1.3 MD-SAL based plugin is distinct from the old
-OpenFlow 1.0 plugin which was based on the API driven SAL (AD-SAL)
-architecture.
-
-[[scope]]
-==== Scope
-
-* Southbound plugin and integration of OpenFlow 1.0/1.3.x library
-project
-* Ongoing support and integration of the OpenFlow specification
-* The plugin should be implemented in an easily extensibile manner
-* Protocol verification activities will be performed on supported
-OpenFlow specifications
-
-[[architecture-and-design]]
-==== Architecture and Design
-
-[[functionality]]
-===== Functionality
-
-OpenFlow 1.3 Plugin will support the following functionality
-
-* Connection Handling
-* Session Management
-* State Management.
-* Error Handling.
-* Mapping function(Infrastructure to OF structures).
-* Connection establishment will be handled by OpenFlow library using
-opensource netty.io library.
-* Message handling(Ex: Packet in).
-* Event handling and propagation to upper layers.
-* Plugin will support both MD-SAL and Hard SAL.
-* Will be backward compatible with OF 1.0.
-
-[[activities-in-of-plugin-module]]
-===== Activities in OF plugin module
-
-* OF plugin bundle supports both OF 1.0 and OF 1.3.
-* Integration with OpenFlow library.
-* Integration with corresponding MD-SAL infrastructure.
-* AD-SAL supported as adapter on top of MD-SAL plugin.
-* OF 1.3 and OF 1.0 plugin will be integrated as single bundle.
-
-[[design]]
-==== Design
-
-[[overall-architecture]]
-===== Overall Architecture
-
-image:openflowplugin/Plugin_design.jpg[Plugin Design,title="Plugin Design", width= 500]
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-restconf-postman.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-restconf-postman.adoc
deleted file mode 100644 (file)
index d5bc422..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-[[how-to-hit-restconf-with-postman]]
-=== How to hit RestConf with Postman
-
-Postman is a useful Chrome app which can be used to test REST APIs.
-
-https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en[Install
-Postman for Chrome]
-
-In the chrome browser bar enter
-
---------------
-chrome://apps/
---------------
-
-And click on Postman.
-
-Enter the URL. Click on the Headers button on the far right. Enter the
-Accept: header. Click on the Basic Auth Tab at the top and setup the
-username and password. Send.
-
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-running-controller-with-the-new-of-plugin.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-running-controller-with-the-new-of-plugin.adoc
deleted file mode 100644 (file)
index 8033aeb..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-===== Opendaylight Controller Plugin Options
-
-[[odl-ofp-running-controller-with-the-new-of-plugin_top]]
-* Run OpenDaylight controller with the new OpenFlow 1.0/1.3 plugin
-
-There are 2 ways. In integration project the plugin version is
-controlled by startup parameter. Or there is distribution build
-available directly in openflowplugin project.
-
-1.  use *integration* project
-* download and unzip latest build from
-https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.2.2-SNAPSHOT/
-+
-  cd <extracted directory>/bin
-  ./karaf 
-+
-* or clone and build *integration* project:
-+
- git clone https://git.opendaylight.org/gerrit/p/integration.git
- cd integration/distributions/extra/karaf
- mvn clean install
- cd ./target/assembly/bin
-+
-* and finally run
-+
- ./karaf
-+
-2.  use *openflowplugin* project
-* download and unzip latest build from
-https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/openflowplugin/openflowplugin-karaf/0.1.0-SNAPSHOT/
-+
-  cd <extracted directory>/bin
-  ./karaf
-+
-* or clone and build *openflowplugin* project:
-+
-  git clone https://git.opendaylight.org/gerrit/p/openflowplugin.git
-  cd openflowplugin
-  mvn clean install
-  cd ./distribution/karaf/target/assembly/bin/
-+  
-* or build whole distribution localy from folder distribution/karaf
-
- mvn clean install -DskipTests
-
-
-* and run
-+
-    ./karaf
-+
-
-
-*How to start*
-
-There are all helium features (from features-openflowplugin) duplicated into features-openflowplugin-li. The duplicates got suffix '-li' and provide Lithium codebase functionality.
-
-These are most used:
-
-*    odl-openflowplugin-app-lldp-speaker-li
-*    odl-openflowplugin-flow-services-rest-li
-*    odl-openflowplugin-drop-test-li
-
-In case topology is required then the first one should be installed.
-
- feature:install odl-openflowplugin-app-lldp-speaker-li
-
-The Li-southbound currently provides:
-
-*    flow management
-*    group management
-*    meter management
-*    statistics polling
-
-*What to log*
-
-In order to see really low level messages enter these in karaf console:
-
- log:set TRACE org.opendaylight.openflowplugin.openflow.md.core
- log:set TRACE org.opendaylight.openflowplugin.impl
-
-*How enable topology*
-
-In order for topology to work (fill dataStore/operational with links) there must be LLDP responses delivered back to controller. This requires table-miss-entries. Table-miss-entry is a flow in table.id=0 with low priority, empty match and one output action = send to controller. Having this flow installed on every node will enable for gathering and exporting links between nodes into dataStore/operational. This is done if you use for example l2 switch application.
-
-[source, xml]
-----
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<flow xmlns="urn:opendaylight:flow:inventory">
-   <barrier>false</barrier>
-   <cookie>54</cookie>
-   <flags>SEND_FLOW_REM</flags>
-   <flow-name>FooXf54</flow-name>
-   <hard-timeout>0</hard-timeout>
-   <id>4242</id>
-   <idle-timeout>0</idle-timeout>
-   <installHw>false</installHw>
-   <instructions>
-       <instruction>
-           <apply-actions>
-               <action>
-                   <output-action>
-                       <max-length>65535</max-length>
-                       <output-node-connector>CONTROLLER</output-node-connector>
-                   </output-action>
-                   <order>0</order>
-               </action>
-           </apply-actions>
-           <order>0</order>
-       </instruction>
-   </instructions>
-   <match/>
-   <priority>0</priority>
-   <strict>false</strict>
-   <table_id>0</table_id>
-</flow>
-----
-
-*Enable RESTCONF and Controller GUI*
-
-If you want to use RESTCONF with openflowplugin project, you have to
-install _odl-restconf_ feature to enable that. To install _odl-restconf_
-feature run the following command
-
------------------------------------
-karaf#>feature:install odl-restconf
------------------------------------
-
-If you want to access the Controller GUI, you have to install
-_odl-dlux-core_ feature to enable that. Run following command to install
-it
-
-------------------------------------
-karaf#>feature:install odl-dlux-core
-------------------------------------
-
-Once you enable the feature, access the Controller GUI using following
-URL
-
--------------------------------------------
-http://<controller-ip>:8181/dlux/index.html
--------------------------------------------
-
-
-*Run OpenDaylight controller with the old OpenFlow 1.0-only (old) plugin*
-
-There are 2 ways. In integration project the plugin version is
-controlled by startup parameter. Or there is distribution build
-available directly in controller project.
-
-1.  use *integration/distributions/base* project
-* use the instructions from
-OpenDaylight_OpenFlow_Plugin::Running_controller_with_the_new_OF_plugin#To_run_the_OpenDaylight_controller_with_the_new_OpenFlow_1.0/1.3_(new)_plugin[
-1.0/1.3 plugin], but skip the plugin version parameter:
-+
---------
-./run.sh
---------
-+
-
-2.  use *controller/distribution/opendaylight* project
-* download and unzip latest build from
-https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/distribution.opendaylight/
-
-+
-  cd opendaylight
-+
-* or clone and build *controller* project:
-+
-  git clone https://git.opendaylight.org/gerrit/p/controller.git
-  cd controller/opendaylight/distribution/opendaylight
-  mvn clean install
-  cd target/distribution.opendaylight-osgipackage/opendaylight
-+
-* and finally run (there is no version specific option, because the
-+
-1.0/1.3 (new) plugin is not available here at all)
-+
-
-
-*Give it a minute to come up :)*
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-statistics.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-statistics.adoc
deleted file mode 100644 (file)
index a0c97d8..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-[[overview]]
-===== Overview
-
-This page contains high level detail about the statistics collection
-mechanism in new OpenFlow plugin.
-
-[[statistics-collection-in-new-openflow-plugin]]
-====== Statistics collection in new OpenFlow plugin
-
-New OpenFlow plugin collects following statistics from OpenFlow enabled node(switch): 
-
-. Individual Flow Statistics
-. Aggregate Flow Statistics
-. Flow Table Statistics
-. Port Statistics
-. Group Description
-. Group Statistics
-. Meter Configuration
-. Meter Statistics
-. Queue Statistics
-. Node Description
-. Flow Table Features
-. Port Description
-. Group Features
-. Meter Features
-
-At a high level statistics collection mechanism is divided into
-following three parts
-
-. Statistics related
-https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=tree;f=opendaylight/md-sal/model/model-flow-statistics;h=3488133625ccf18d023bc59aa35c38e922b17d8d;hb=HEAD[YANG
-models, service APIs and notification interfaces] are defined in the
-MD-SAL.
-
-. Service APIs (RPCs) defined in yang models are implemented by
-OpenFlow plugin. Notification interfaces are wired up by OpenFlow plugin
-to MD-SAL.
-
-. Statistics Manager Module: This module use service APIs implemented by OpenFlow
-plugin to send statistics requests to all the connected OpenFlow enabled
-nodes. Module also implements notification interfaces to receive
-statistics response from nodes. Once it receives statistics response, it
-augment all the statistics data to the relevant element of the node
-(like node-connector, flow, table,group, meter) and store it in MD-SAL
-operational data store.
-
-[[details-of-statistics-collection]]
-====== Details of statistics collection
-
-* Current implementation collects above mentioned statistics (except
-10-14) at a periodic interval of 15 seconds.
-* Statistics mentioned in 10 to 14 are only fetched when any node
-connects to the controller because these statistics are just static
-details about the respective elements.
-* Whenever any new element is added to node (like flow, group, meter,
-queue) it sends statistics request immediately to fetch the latest
-statistics and store it in the operational data store.
-* Whenever any element is deleted from the node, it immediately remove
-the relevant statistics from operational data store.
-* Statistics data are augmented to their respective element stored in
-the configuration data store. E.g Controller installed flows are stored
-in configuration data store. Whenever Statistics Manager receive
-statistics data related to these flow, it search the corresponding flow
-in the configuration data store and augment statistics in the
-corresponding location in operational data store. Similar approach is
-used for other elements of the node.
-* Statistics Manager stores flow statistics as an unaccounted flow
-statistics in operational data store if there is no corresponding flow
-exist in configuration data store. ID format of unaccounted flow
-statistics is as follows - [#UF$TABLE**Unaccounted-flow-count - e.g
-#UF$TABLE*2*1].
-* All the unaccounted flows will be cleaned up periodically after every
-two cycle of flow statistics collection, given that there is no update
-for these flows in the last two cycles.
-* Statistics Manager only entertains statistics response for the request
-sent by itself. User can write its own statistics collector using the
-statistics service APIs and notification defined in yang models, it
-won't effect the functioning of Statistics Manager.
-* OpenFlow 1.0 don't have concept of Meter and Group, so Statistics
-Manager don't send any group & meter related statistics request to
-OpenFlow 1.0 enabled switch.
-
-[[restconf-uris-to-access-statistics-of-various-node-elements]]
-====== RESTCONF Uris to access statistics of various node elements
-
-* Aggregate Flow Statistics & Flow Table Statistics
-
-------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}
-------------------------------------------------------------------------------------------------------------------
-
-* Individual Flow Statistics from specific table
-
----------------------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
----------------------------------------------------------------------------------------------------------------------------------
-
-* Group Features & Meter Features Statistics
-
--------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}
--------------------------------------------------------------------------------------------------
-
-* Group Description & Group Statistics
-
-------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/group/{group-id}
-------------------------------------------------------------------------------------------------------------------
-
-* Meter Configuration & Meter Statistics
-
-------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
-------------------------------------------------------------------------------------------------------------------
-
-* Node Connector Statistics
-
-------------------------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}
-------------------------------------------------------------------------------------------------------------------------------------
-
-* Queue Statistics
-
------------------------------------------------------------------------------------------------------------------------------------------------------
-GET  http://<controller-ip>:8080/restconf/operational/opendaylight-inventory:nodes/node/{node-id}/node-connector/{node-connector-id}/queue/{queue-id}
------------------------------------------------------------------------------------------------------------------------------------------------------
-
-[[bugs]]
-====== Bugs
-
-For more details and queuries, please send mail to openflowplugin-dev@lists.opendaylight.org or avishnoi@in.ibm.com If you want to report any bug in statistics collection, please use https://bugs.opendaylight.org[bugzilla].
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-environment.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-environment.adoc
deleted file mode 100644 (file)
index 8d98bcb..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-[[odl-ofp-test-environment_top]]
-===== Getting Mininet with OF 1.3
-
-https://www.dropbox.com/s/dbf9a372elqs1s1/mininet-of-1.3.zip[Download
-Mininet VM Upgraded to OF 1.3] (or the
-https://www.dropbox.com/s/t66vqfqx57a7nhk/mininet-2.1.0-of1.3.zip[newer
-mininet-2.1.0 with OVS-2.0] that works with VMware Player. For using
-this on VirtualBox, import this to VMware Player and then export the
-.vmdk ) or you could build one yourself
-Openflow Protocol Library:OpenVirtualSwitch[Instructions for setting up
-Mininet with OF 1.3].
-
-====== Installing under VirtualBox
-
-.configuring a host-only adapter
-image::openflowplugin/host-only-vbox.png[configuring a host-only adapter,400,335]
-
-For whatever reason, at least on the Mac, NATed interfaces in VirtualBox
-don't actually seem to allow for connections from the host to the VM.
-Instead, you need to configure a host-only network and set it up. Do
-this by:
-
-* Go to the VM's settings in VirtualBox then to network and add a second
-adapter attached to "Host-only Adapter" (see the screenshot to the
-right)
-* Edit the /etc/network/interfaces file to configure the adapter
-properly by adding these two lines
-
---------------------
-auto eth1
-iface eth1 inet dhcp
---------------------
-
-* Reboot the VM
-
-At this point you should have two interfaces one which gives you NATed
-access to the internet and another that gives you access between your
-mac and the VMs. At least for me, the NATed interface gets a 10.0.2.x
-address and the the host-only interface gets a 192.168.56.x address.
-
-====== Your simplest choice: Use Vagrant
-
-https://www.virtualbox.org/[Download Virtual Box] and install it
-http://www.vagrantup.com/[Download Vagrant] and install it
-
------------------------------------------------
-cd openflowplugin/vagrant/mininet-2.1.0-of-1.3/
-vagrant up
-vagrant ssh
------------------------------------------------
-
-This will leave you sshed into a fully provisioned Ubuntu Trusty box
-with mininet-2.1.0 and OVS 2.0 patches to work with OF 1.3.
-
-===== Setup CPqD Openflow 1.3 Soft Switch
-
-Latest version of Openvswitch (v2.0.0) doesn't support all the openflow
-1.3 features, e.g group multipart statistics request. Alternate options
-is CPqD Openflow 1.3 soft switch, It supports most of the openflow 1.3
-features.
-
-* You can setup the switch as per the instructions given on the
-following URL
-
-https://github.com/CPqD/ofsoftswitch13[`https://github.com/CPqD/ofsoftswitch13`]
-
-* Fire following command to start the switch
-
-Start the datapath :
-
----------------------------------------------------------------------------------------
-$ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
- e.g $ sudo udatapath/ofdatapath --datapath-id=000000000001 --interfaces=ethX ptcp:6680
----------------------------------------------------------------------------------------
-
-ethX should not be associated with ip address and ipv6 should be
-disabled on it. If you are installing the switch on your local machine,
-you can use following command (for Ubuntu) to create virtual interface.
-
----------------------------------------------------------------------
-ip link add link ethX address 00:19:d1:29:d2:58 macvlan0 type macvlan
----------------------------------------------------------------------
-
-ethX - Any existing interface.
-
-Or if you are using mininet VM for installing this switch, you can
-simply add one more adaptor to your VM.
-
-Start Openflow protocol agent:
-
--------------------------------------------------------------------------------
-$secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
- e.g $secchan/ofprotocol tcp:127.0.0.1:6680 tcp:127.0.0.1:6653
--------------------------------------------------------------------------------
-
-[[commands-to-add-entries-to-various-tables-of-the-switch]]
-====== Commands to add entries to various tables of the switch
-
-* Add meter
-
-----------------------------------------------------------------------------------------
-$utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50 
-----------------------------------------------------------------------------------------
-
-* Add Groups
-
-----------------------------------------------------------------------
-$utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=all,group=1
-----------------------------------------------------------------------
-
------------------------------------------------------------------------------------------
-$utilities/dpctl tcp:127.0.0.1:6680 group-mod cmd=add,type=sel,group=2 weight=10 output:1
------------------------------------------------------------------------------------------
-
-* Create queue
-
---------------------------------------------------------------------------------------------------
-$utilities/dpctl tcp:<ip>:<switch port> queue-mod <port-number> <queue-number> <minimum-bandwidth>
-  e.g - $utilities/dpctl tcp:127.0.0.1:6680 queue-mod 1 1 23
---------------------------------------------------------------------------------------------------
-
-"dpctl" --help is not very intuitive, so please keep adding any new
-command you figured out while your experiment with the switch.
-
-[[using-the-built-in-wireshark]]
-====== Using the built-in Wireshark
-
-Mininet comes with pre-installed Wireshark, but for some reason it does
-not include the Openflow protocol dissector. You may want to get and
-install it in the _/.wireshark/plugins/_ directory.
-
-First login to your mininet VM
-
--------------------------------------
- ssh mininet@<your mininet vm ip> -X 
--------------------------------------
-
-The -X option in ssh will enable x-session over ssh so that the
-wireshark window can be shown on your host machine's display. when
-prompted, enter the password (mininet).
-
-From the mininet vm shell, set the wireshark capture privileges
-(http://wiki.wireshark.org/CaptureSetup/CapturePrivileges):
-
-----------------------------------------------------------------
-sudo chgrp mininet /usr/bin/dumpcap
-sudo chmod 754 /usr/bin/dumpcap
-sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
-----------------------------------------------------------------
-
-Finally, start wireshark:
-
------------
- wireshark 
------------
-
-The wireshark window should show up.
-
-To see only Openflow packets, you may want to apply the following filter
-in the Filter window:
-
-------------------------------------------
- tcp.port == 6633 and tcp.flags.push == 1 
-------------------------------------------
-
-Start the capture on _any_ port.
-
-[[running-mininet-with-of-1.3]]
-===== Running Mininet with OF 1.3
-
-From within the Mininet VM, run:
-
---------------------------------------------------------------------------------------------------------------------
- sudo mn --topo single,3  --controller 'remote,ip=<your controller ip>,port=6653' --switch ovsk,protocols=OpenFlow13
---------------------------------------------------------------------------------------------------------------------
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-flows.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-flows.adoc
deleted file mode 100644 (file)
index 268b952..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-[[odl-ofp-test-provider-flows_test-provider]]
-==== Flows : Test Provider
-
-Currently, the openflowplugin has a test-provider that allows you to
-push various flows through the system from the OSGI command line. Once
-those flows have been pushed through, you can see them as examples and
-then use them to see in the config what a particular flow example looks
-like.
-
-===== AddFlow : addMDFlow
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
------------------------
-addMDFlow openflow:1 f#
------------------------
-
-Where # is a number between 1 and 80 and openflow:1 is the of the
-switch. This will create one of 80 possible flows. You can confirm that
-they were created on the switch.
-
-===== RemoveFlow : removeMDFlow
-
-Similar to addMDFlow, from the controller OSGi prompt, while your switch
-is connected to the controller, try running:
-
---------------------------
-removeMDFlow openflow:1 f#
---------------------------
-
-where # is a number between 1 and 80 and openflow:1 is the of the
-switch. The flow to be deleted should have same flowid and Nodeid as
-used for flow add.
-
-===== ModifyFlow : modifyMDFlow
-
-Similar to addMDFlow, from the controller OSGi prompt, while your switch
-is connected to the controller, try running:
-
---------------------------
-modifyMDFlow openflow:1 f#
---------------------------
-
-where # is a number between 1 and 80 and openflow:1 is the of the
-switch. The flow to be deleted should have same flowid and Nodeid as
-used for flow add.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-groups.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-groups.adoc
deleted file mode 100644 (file)
index b2ad40d..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-[[odl-ofp-test-provider-groups_test-provider]]
-==== Group : Test Provider
-
-Currently, the openflowplugin has a test-provider that allows you to
-push various flows through the system from the OSGI command line. Once
-those flows have been pushed through, you can see them as examples and
-then use them to see in the config what a particular flow example looks
-like.
-
-[[addgroup-addgroup]]
-===== AddGroup : addGroup
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
--------------------------
-addGroup openflow:1 a# g#
--------------------------
-
-Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
-actiontype(a#). You can confirm that they were created on the switch.
-
-[[removegroup-removegroup]]
-===== RemoveGroup : removeGroup
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet at the controller as described above.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
-----------------------------
-removeGroup openflow:1 a# g#
-----------------------------
-
-Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
-actiontype(a#). GroupId should be same as that used for adding the flow.
-You can confirm that it was removed from the switch.
-
-[[modifygroup-modifygroup]]
-===== ModifyGroup : modifyGroup
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet at the controller as described above.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
-----------------------------
-modifyGroup openflow:1 a# g#
-----------------------------
-
-Where # is a number between 1 and 4 for grouptype(g#) and 1 and 28 for
-actiontype(a#). GroupId should be same as that used for adding the flow.
-You can confirm that it was modified on the switch.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-meters.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-meters.adoc
deleted file mode 100644 (file)
index 01632aa..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-[[odl-ofp-test-provider-meters_test-provider]]
-==== Meters : Test Provider
-
-Currently, the openflowplugin has a test-provider that allows you to
-push various flows through the system from the OSGI command line. Once
-those flows have been pushed through, you can see them as examples and
-then use them to see in the config what a particular flow example looks
-like.
-
-===== AddMeter : addMeter
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
--------------------
-addMeter openflow:1
--------------------
-
-You can now confirm that meter has been created on the switch.
-
-===== RemoveMeter : removeMeter
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
-----------------------
-removeMeter openflow:1
-----------------------
-
-The CLI takes care of using the same meterId and nodeId as used for
-meter add. You can confirm that it was removed from the switch.
-
-===== ModifyMeter : modifyMeter
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=.
-
-Once you see your node (probably openflow:1 if you've been following
-along) in the inventory, at the OSGI command line try running:
-
-----------------------
-modifyMeter openflow:1
-----------------------
-
-The CLI takes care of using the same meterId and nodeId as used for
-meter add. You can confirm that it was modified on the switch.
diff --git a/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-topology.adoc b/manuals/user-guide/src/main/asciidoc/openflowplugin/odl-ofp-test-provider-topology.adoc
deleted file mode 100644 (file)
index 6680946..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-[[odl-ofp-test-provider-topoogy_test-provider]]
-==== Topology : Notification
-
-Currently, the openflowplugin has a test-provider that allows you to get
-notifications for the topology related events like Link-Discovered ,
-Link-Removed events.
-
-===== Link Discovered Event : Testing
-
-Run the controller by executing:
-
---------------------------------------------------------------------------------------------------------------------
-cd openflowplugin/distribution/base/target/distributions-openflowplugin-base-0.0.1-SNAPSHOT-osgipackage/opendaylight
-./run.sh
---------------------------------------------------------------------------------------------------------------------
-
-Point your mininet to the controller by giving the parameters
---controller=remote,ip=. Once the controller is connected to the switch,
-Link-Discovered event can be tested by initially configuring the
-specific flows on the switch. For Link Discovered event either
-table-miss flow or LLDP ether-type flow can be configured.
-
-Configuring Table-Miss flow using OpenflowpluginTestCommandProvider
-
-------------------------
-addMDFlow Openflow:1 fTM
-------------------------
-
-as per this
-OpenDaylight_OpenFlow_Plugin:Test_Provider#Flows_:_Test_Provider[link].
-'fTM' is the table-miss scenario here.
-
-Once the table-miss flow is configured through above command, we can see
-the Link-Discovered event in the debug logs on the controller console.
-
-Configuring LLDP ether-type flow using OpenflowpluginTestCommandProvider
-
-------------------------------------
-addMDFlow Openflow:1 0(table-id) f81
-------------------------------------
-
-You can confirm that they were created on the switch.
-
-Once the LLDP ether-type flow is configured through above command, we
-can see the Link-Discovered event in the debug logs on the controller
-console.
-
-===== Link Removed Event : Testing
-
-Having configured either table-miss or lldp ether-type flow on switch,
-once the switch is disconnected we see the Link-Removed event
index 49ec90602c69d8324a1710d38ae00b9062fc419f..a1fb4930f9fcace3851804201835fba7095249d0 100644 (file)
@@ -1,70 +1,3 @@
 == OpenFlow Plugin Project User Guide
 
-=== Overview and Architecture
-
-==== Overview and Architecture
-include::odl-ofp-overview-and-architecture.adoc[]
-
-==== Coverage
-include::odl-ofp-coverage.adoc[]
-
-=== Tutorial / How-To
-
-==== Running the controller with the new OpenFlow Plugin
-include::odl-ofp-running-controller-with-the-new-of-plugin.adoc[]
-
-==== OpenFlow 1.3 Enabled Software Switches / Environment
-include::odl-ofp-test-environment.adoc[]
-
-==== End to End Inventory
-include::odl-ofp-end-to-end-inventory.adoc[]
-
-==== End to End Flows
-include::odl-ofp-end-to-end-flows.adoc[]
-
-==== End to End Topology
-include::odl-ofp-end-to-end-topology.adoc[]
-
-==== End to End Groups
-include::odl-ofp-end-to-end-groups.adoc[]
-
-==== End to End Meters
-include::odl-ofp-end-to-end-meters.adoc[]
-
-==== Statistics
-include::odl-ofp-statistics.adoc[]
-
-=== Web / Graphical Interface
-In the Hydrogen & Helium release, the current Web UI does not support
-the new OpenFlow 1.3 constructs such as groups, meters, new fields in
-the flows, multiple flow tables, etc.
-
-=== Command Line Interface
-The following is not exactly CLI - just a set of test commands which can
-be executed on the OSGI console testing various features in OpenFlow 1.3
-spec.
-
-* <<odl-ofp-test-provider-flows_test-provider,OSGI Console Test Provider Commands: Flows>>
-* <<odl-ofp-test-provider-groups_test-provider,OSGI Console Test Provider Commands: Groups>>
-* <<odl-ofp-test-provider-meters_test-provider,OSGI Console Test Provider Commands: Meters>>
-* <<odl-ofp-test-provider-topoogy_test-provider,OSGI Console Test Provider Commands: Topology Events>>
-
-include::odl-ofp-test-provider-flows.adoc[]
-include::odl-ofp-test-provider-groups.adoc[]
-include::odl-ofp-test-provider-meters.adoc[]
-include::odl-ofp-test-provider-topology.adoc[]
-
-
-=== Programmatic Interface
-The API is documented in the model documentation under the section
-OpenFlow Services at:
-
-* https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Model_Reference[Models Documentation (OpenFlow Services Section)]
-
-=== Example flows
-include::odl-ofp-example-flows.adoc[]
-
-=== Opendaylight OpenFlow Plugin: Troubleshooting
-empty section
-
-
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/user-guide/openflow-plugin-project-user-guide.html
index 88fe984a0752eddbc1b5c6a60b97f509efac69f8..808626728c7955e9091691c6a5bb50cbec21b46b 100755 (executable)
@@ -1,10 +1,10 @@
 == ODL-SDNi User Guide
 
 === Introduction
-This user guide will help to setup the ODL-SDNi application for boron release and contains the examples configuration using ODL-BGPCEP.
+This user guide will help to setup the ODL-SDNi application.
 
 === Components
-SDNiAggregator(controller), SDNi REST API(controller) and SDNiWrapper(bgpcep) are the three components in ODL-SDNi App  
+SDNiAggregator, SDNi API, SDNiWrapper, and SDNiUI are the four components in ODL-SDNi App:
 
 * SDNiAggregator: Connects with switch, topology, hosttracker managers of controller to get the topology and other related data.
 * SDNi REST API: It is a part of controller northbound, which gives the required information by quering SDNiAggregator through RESTCONF.
@@ -12,8 +12,7 @@ SDNiAggregator(controller), SDNi REST API(controller) and SDNiWrapper(bgpcep) ar
 * SDNiUI:This component displays all the SDN controllers which are connected to each other.
 
 === Troubleshooting
-To work with multiple controllers, change some of the configuration in config.ini file. For example change the listening port of one controller to 6653 and other controller to 6663 in /root/controller/opendaylight/distribution/opendaylight/target/distribution.opendaylight-osgipackage/opendaylight/configuration/config.ini (i.e of.listenPort=6653).
+To work with multiple controllers, change some of the configuration in config.ini file. For example change the listening port of one controller to 6653 and other controller to 6663 in /root/controller/opendaylight/distribution/opendaylight/target/distribution.opendaylight-osgipackage/opendaylight/configuration/config.ini (i.e., of.listenPort=6653).
 
 .OpenFlow related system parameters
 TCP port on which the controller is listening (default 6633) of.listenPort=6653
-
index ba9bb66fdca4bd6221efb8d38db2d26e0fe275c0..df5e47dcd4d6218c4b55c1ebaf274aff40e0cfdd 100644 (file)
@@ -1,25 +1,3 @@
 == Usecplugin-AAA User Guide
-The Usecplugin User Guide contains information about configuration, administration,
-management, using and troubleshooting the feature.
 
-=== Overview
-AAA plugin provides authorization, authentication and accounting services to OpenDaylight. A user logs in to
-OpenDaylight through the username and password provided by AAA plugin.
-Usecplugin-AAA collects and stores information about both successful and failed login attempts to OpenDaylight.
-
-
-=== Usecplugin-AAA Architecture
-AAA plugin creates log messages about successful and failed login attempts to OpenDaylight.
-Usecplugin-AAA continuously reads this log file and checks for either successful and failed attempt information.
-Whenever Usecpluin-AAA identifies a new attempt entry in the log file it is stored
-in YANG Data Store and its own log file.
-
-=== Administering or Managing Usecplugin-AAA
-* Install feature `odl-usecplugin-aaa`
-* Enable odl-aaa log using command `log:set DEBUG org.opendaylight.aaa.shiro.filters`
-* Login to the RESTCONF documentation.
-* Check operational datastore for login attempts.
-* POST URI :: http://localhost:8181/restconf/operations/usecpluginaaa:attemptFromIP
-** Sample Input :: {"usecpluginaaa:input":{"ScrIP":"10.0.0.1"}}
-* POST URI :: http://localhost:8181/restconf/operations/usecpluginaaa:attemptOnDateTime
-** Sample Input :: {"usecpluginaaa:input":{"dateTime":"2016-07-27 14:11:18"}}
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/user-guide/usecplugin-aaa-user-guide.html
index 51b92eca1f36d24b513940dd4ca193710abef45c..a02ee4c4295a55a7b2a2c3a98095d275a735e08e 100644 (file)
@@ -1,45 +1,3 @@
 == Usecplugin-OpenFlow User Guide
-The Usecplugin-OpenFlow User Guide contains information about configuration, administration,
-management, using and troubleshooting the feature.
 
-=== Overview
-Usecplugin-OpenFlow collects information about potential OpenFlow Packet_In attacks to OpenDaylight.
-A threshold (water mark) can be set for the Packet_In rate which when breached will trigger Packet_In message
-information collection. 
-
-=== Usecplugin Architecture
-Usecplugin listens on OpenFlow southbound interface for Packet_In messages. When the rate of Packet_In
-breaches the high water mark the application parses the message for header information which is subsequently
-stored in YANG Data Store and a log file. Usecplugin has PacketHandler class that implements the PacketProcessing
-interface to override the OnPacketReceived notification by which the application is notified of Packet_In messages.
-
-=== Configuring Usecplugin-OpenFlow
-
-Install the Usecplugin-OpenFlow feautre in OpenDaylight with the `feature:install odl-usecplugin-openflow` at the Karaf CLI.
-
-A user can set the low water mark and high water mark for Packet_In rates as well as number of samples for checking the time interval to calculate Packet_In rate. 
-
-URI :: http://localhost:8181/apidoc/explorer/index.html#!/usecplugin(2015-01-05)
-
-==== High Water Mark Configuration 
-PUT URI :: http://localhost:8181/restconf/config/usecplugin:sample-data-hwm/
-Sample Input :: `{"usecplugin:sample-data-hwm": { "samples":"3000","highWaterMark":"3000"}}`
-
-==== Low Water Mark Configuration 
-PUT URI :: http://localhost:8181/restconf/config/usecplugin:sample-data-lwm/
-Sample Input :: `{"usecplugin:sample-data-lwm": { "samples-lwm":"2000","lowWaterMark-lwm":"2000"}}`
-
-=== Administering or Managing Usecplugin-OpenFlow
-Use RPC POST APIs in the following format for getting the attack related information.
-
-==== attackID
-URI :: http://localhost:8181/restconf/operations/usecplugin:attackID
-Sample Input :: `{"usecplugin:input": { "NodeID":"openflow:1"}}`
-
-==== attacksFromIP 
-URI :: http://localhost:8181/restconf/operations/usecplugin:attacksFromIP
-Sample Input :: `{"usecplugin:input": { "SrcIP":"10.0.0.1"}}`
-
-==== attacksToIP
-URI :: http://localhost:8181/restconf/operations/usecplugin:attacksToIP
-Sample Input :: `{"usecplugin:input": { "DstIP":"10.0.0.2"}}`
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/user-guide/usecplugin-openflow-user-guide.html