Merge "VTN Beryllium - Adoc changes."
authorColin Dixon <colin@colindixon.com>
Wed, 15 Jun 2016 13:33:38 +0000 (13:33 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 15 Jun 2016 13:33:38 +0000 (13:33 +0000)
32 files changed:
manuals/developer-guide/src/main/asciidoc/vtn/vtn-dev.adoc
manuals/developer-guide/src/main/asciidoc/vtn/vtn-overview.adoc
manuals/getting-started-guide/src/main/asciidoc/vtn/vtn-install.adoc
manuals/howto-openstack/src/main/asciidoc/openstack-vtn.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_Support_for_Microsoft_SCVMM.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_Troubleshoot_Coordinator_Installation.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_Use_VTN_to_make_packets_take_different_paths.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_configure_L2_Network_with_Multiple_Controllers.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_configure_L2_Network_with_Single_Controller.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_configure_flow_filters.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_test_vlanmap_using_mininet.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_view_Dataflows.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_How_To_view_STATIONS.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Flowfilters.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Service_Function_Chaining_Support.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Create_Mac_Map_In_VTN.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Provision_Virtual_L2_Network.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Use_VTN_to_change_the_path_of_the_packet_flow.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_View_Dataflows.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_test_vlan_map_using_mininet.adoc [new file with mode: 0644]
manuals/user-guide/src/main/asciidoc/vtn/VTN_OpenStack_Support-user.adoc
manuals/user-guide/src/main/asciidoc/vtn/VTN_Overview.adoc
manuals/user-guide/src/main/asciidoc/vtn/vtn-user.adoc
manuals/user-guide/src/main/resources/images/vtn/Flow_filter_example.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Mininet_Configuration.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_LLD.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_Verification.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services_LLD.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Single_Controller_Mapping.png [new file with mode: 0644]
manuals/user-guide/src/main/resources/images/vtn/Tenant2.png [new file with mode: 0644]

index 603257a8c88be8e0662e3c3ff4ca06a2a9347b2e..b69c3a02702b0cc06db9c6687f7dee285edac777 100644 (file)
@@ -1,5 +1,3 @@
 == Virtual Tenant Network (VTN)
 
 include::vtn-overview.adoc[VTN Overview]
-
-include::OpenStack_Support-dev.adoc[Openstack Support Developer Guide]
index 2ce0ca5d888cdf4b04aa0008ff2aab2bee29b528..5d9551acebb60573f8609a7aa78e7bacb588662e 100644 (file)
@@ -8,26 +8,16 @@ The uniqueness of VTN is a logical abstraction plane. This enables the complete
 
 VTN allows the users to define the network with a look and feel of conventional L2/L3 network. Once the network is designed on VTN, it will automatically be mapped into underlying physical network, and then configured on the individual switch leverage SDN control protocol. The definition of logical plane makes it possible not only to hide the complexity of the underlying network but also to better manage network resources. It achieves reducing reconfiguration time of network services and minimizing network configuration errors. OpenDaylight Virtual Tenant Network (VTN) is an application that provides multi-tenant virtual network on an SDN controller. It provides API for creating a common virtual network irrespective of the physical network.
 
-It is implemented as two major components
-
-* <<_vtn_coordinator,VTN Coordinator>>
-* <<_vtn_manager,VTN Manager>>
-
 .VTN Architecture
 image::vtn/vtn-overview.png[width=500]
 
-==== VTN Coordinator
-
-The VTN Coordinator is an external application that provides a REST interface for a user to use the VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple controller orchestration. It realizes Virtual Tenant Network (VTN) provisioning in OpenDaylight Controllers (ODC). In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator has been implemented as an external application to the OpenDaylight controller. This component is responsible for the VTN virtualization. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using the OpenDaylight controller. It uses OpenDaylight APIs (REST) to construct the virtual network in ODCs. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple ODCs by coordinating across ODCs.
-
-===== Feature Overview
-
-VTN Coordinator doesn't have Karaf features.
+It is implemented as two major components
 
-For VTN Coordinator REST API, please refer: https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_%28VTN%29:VTN_Coordinator:RestApi
+* <<_vtn_manager,VTN Manager>>
+* <<_vtn_coordinator,VTN Coordinator>>
 
 ==== VTN Manager
-An OpenDaylight Controller Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in ODL controller. VTN Manager is implemented as one plugin to the OpenDaylight controller. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the ODC Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
+An OpenDaylight Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in OpenDaylight. VTN Manager is implemented as one plugin to the OpenDaylight. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the OpenDaylight Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
 
 ===== Function Outline
 
@@ -40,7 +30,7 @@ The table identifies the functions and the interface used by VTN Components:
 | VTN Manager | Neutron API implementation | Handle Networks API from OpenStack (Neutron Interface)
 | VTN Coordinator | RESTful API |
 (1) Uses the RESTful interface of VTN Manager and configures VTN Virtualization model components in OpenDaylight. +
-(2) Handles multiple controller orchestration. +
+(2) Handles multiple OpenDaylight orchestration. +
 (3) Provides API to read the physical network details. See https://wiki.OpenDaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):VTN_Coordinator:RestApi:L2_Network_Example_Using_VTN_Virtualization[samples] for usage.
 
 |===
@@ -53,12 +43,43 @@ There are three features
 * *odl-vtn-manager-rest* provides VTN Manager's REST API.
 * *odl-vtn-manager-neutron* provides the integration with Neutron interface.
 
-REST API documentation for VTN Manager, please refer: 
-https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-stable-lithium/lastSuccessfulBuild/artifact/manager/northbound/target/site/wsdocs/rest.html
+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/
+
+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
+
+Once the Karaf distribution is up, install dlux and apidocs.
+
+----
+feature:install odl-dlux-all odl-mdsal-apidocs
+----
+
+====== Logging In
+
+To Log in to DLUX, after installing the application:
+
+* Open a browser and enter the login URL as http://<OpenDaylight-IP>:8181/index.html.
+
+NOTE: Replace "<OpenDaylight-IP>" with the IP address of OpenDaylight  based on your environment.
+
+* Login to the application with user ID and password credentials as admin.
+
+NOTE: admin is the only default user available for DLUX in this release.
+
+* 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/
+
+==== VTN Coordinator
+
+The VTN Coordinator is an external application that provides a REST interface for an user to use OpenDaylight VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple OpenDaylight orchestration. It realizes VTN provisioning in OpenDaylight instances. In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using OpenDaylight. It uses OpenDaylight APIs (REST) to construct the virtual network in OpenDaylight instances. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple OpenDaylight by coordinating across OpenDaylight.
+
+===== Feature Overview
+
+VTN Coordinator doesn't have Karaf features.
 
-For VTN Java API documentation, please visit: https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-master/lastSuccessfulBuild/artifact/manager/api/target/apidocs/index.html
+For VTN Coordinator REST API, please refer to: https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_%28VTN%29:VTN_Coordinator:RestApi
 
-VTN Manager API: https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_%28VTN%29:VTN_Manager:RestApi
+==== Usage Examples
+*  https://wiki.OpenDaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):VTN_Coordinator:RestApi:How_to_configure_L2_Network_with_Single_Controller[L2 Network using Single Controller]
 
-=== Usage Examples
-*  https://wiki.OpenDaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):VTN_Coordinator:RestApi:How_to_configure_L2_Network_with_Single_Controller[L2 Network using Single Controller]
\ No newline at end of file
index 9968a3cf5515b5f6512987c22e43b3e231913cbe..f06fef1bf2cbc6e4a9ea2aa59c15248df80615b5 100644 (file)
@@ -16,11 +16,11 @@ It is implemented as two major components
 * <<_vtn_coordinator,VTN Coordinator>>
 
 ==== VTN Manager
-An OpenDaylight Controller Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in ODL controller. VTN Manager is implemented as one plugin to the OpenDaylight controller. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the ODC Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
+An OpenDaylight Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in OpenDaylight. VTN Manager is implemented as one plugin to the OpenDaylight. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the OpenDaylight Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
 
 ==== VTN Coordinator
 
-The VTN Coordinator is an external application that provides a REST interface for a user to use the VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple controller orchestration. It realizes Virtual Tenant Network (VTN) provisioning in OpenDaylight Controllers (ODC). In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator has been implemented as an external application to the OpenDaylight controller. This component is responsible for the VTN virtualization. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using the OpenDaylight controller. It uses OpenDaylight APIs (REST) to construct the virtual network in ODCs. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple ODCs by coordinating across ODCs.
+The VTN Coordinator is an external application that provides a REST interface for an user to use OpenDaylight VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple OpenDaylight orchestration. It realizes VTN provisioning in OpenDaylight instances. In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using OpenDaylight. It uses OpenDaylight APIs (REST) to construct the virtual network in OpenDaylight instances. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple OpenDaylight by coordinating across OpenDaylight.
 
 === Preparing for Installation
 
@@ -33,13 +33,13 @@ Follow the instructions in <<_getting_and_installing_opendaylight,Getting and In
 ==== VTN Coordinator
 
 * Arrange a physical/virtual server with any one of the supported 64-bit OS environment.
-** RHEL 6 / 7
-** CentOS 6 / 7
+** RHEL 7
+** CentOS 7
 ** Fedora 20 / 21 / 22
 
 * Install these packages
 
-  yum install perl-Digest-SHA uuid libxslt libcurl unixODBC json-c
+  yum install perl-Digest-SHA uuid libxslt libcurl unixODBC json-c bzip2
 
   rpm -ivh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm
 
@@ -51,20 +51,20 @@ Follow the instructions in <<_getting_and_installing_opendaylight,Getting and In
 
 Install Feature
 
-  feature:install odl-vtn-manager-rest odl-vtn-manager-neutron
+  feature:install odl-vtn-manager-neutron odl-vtn-manager-rest
 
 NOTE: The above command will install all features of VTN Manager.
       You can install only REST or Neutron also.
 
 ==== VTN Coordinator
 
-* Enter into the externalapps directory in the top directory of Lithium
+* Enter into the externalapps directory in the top directory of Beryllium
 
-  cd distribution-karaf-0.2.1-Lithium-SR1/externalapps
+  cd distribution-karaf-0.4.0-Beryllium/externalapps
 
 * Run the below command to extract VTN Coordinator from the tar.bz2 file in the externalapps directory.
 
-  tar –C/ -jxvf distribution.vtn-coordinator-6.0.0.1-Lithium-SR1-bin.tar.bz2
+  tar –C/ -jxvf distribution.vtn-coordinator-6.2.0-Beryllium-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.
@@ -93,11 +93,11 @@ The response should be like this, but version might differ:
 
 * In the karaf prompt, type the below command to ensure that vtn packages are installed.
 
-  feature:list | grep vtn
+  feature:list | grep vtn
 
 * Run any VTN Manager REST API
 
-  curl --user "admin":"admin" -H "Accept: application/json" -H \"Content-type: application/json" -X GET \http://localhost:8282/controller/nb/v2/vtn/default/vtns
+  curl --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns
 
 ==== VTN Coordinator
 
index 5c2e27b1873aa9b5a0bdf244ae3c7c08d6b461fd..e6a365d43d293498f48147f676bebafea618daf3 100644 (file)
@@ -42,16 +42,16 @@ image::vtn/OpenStackDeveloperGuide.png["OpenStack Architecture",width=500]
 * This will end up with Horizon started successfully message.
 
 ===== Steps to install and deploy OpenDaylight in CentOS 7.1
-* Download the latest lithium distribution code in the below link,
+* Download the latest Beryllium distribution code in the below link,
 +
 ....
-# wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.3.1-Lithium-SR1/distribution-karaf-0.3.1-Lithium-SR1.zip
+# wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.4.0-Beryllium-SR1/distribution-karaf-0.4.0-Beryllium-SR1.zip
 ....
 +
-* Unzip the lithium distribution code by using the below command,
+* Unzip the Beryllium distribution code by using the below command,
 +
 ....
-# unzip distribution-karaf-0.3.1-Lithium-SR1.zip
+# unzip distribution-karaf-0.4.0-Beryllium-SR1.zip
 ....
 +
 * Please do the below steps in the OpenDaylight to change jetty port,
@@ -168,7 +168,7 @@ some clue as to what the problem is in the connection with OpenDaylight
 ovs-ofctl --protocols=OpenFlow13 add-flow br-int priority=0,actions=output:CONTROLLER
 ....
 +
-* Please see the https://wiki.opendaylight.org/view/Release/Lithium/VTN/User_Guide/Openstack_Packstack_Support[VTN OpenStack PackStack support guide on the wiki] to create VM's from OpenStack Horizon GUI.
+* Please see the https://wiki.opendaylight.org/view/VTN:Beryllium:User_Guide:OpenStack_PackStack_Support[VTN OpenStack PackStack support guide on the wiki] to create VM's from OpenStack Horizon GUI.
 
 ==== Implementation details
 
index 920c6c5ed91e9c8904f7eaaa385e879c4f1c6d8c..4ba38e3b51d06df06f9a1309de62304b9b79d20c 100644 (file)
@@ -27,7 +27,7 @@ image::vtn/setup_diagram_SCVMM.png["Setup" ,width= 500]
 
 * OpenDaylight (VTN Feature)
 
-** VTN Coordinator
+* VTN Coordinator
 
 ===== VTN Coordinator
 
@@ -43,17 +43,17 @@ OpenDaylight VTN as Network Service provider for SCVMM where VSEM provider is ad
 
 * In /usr/bin, create a soft link as "ln –s /usr/bin/apr-1-config /usr/bin/apr-config".
 
-* Extract tomcat under "/usr/share/java" by using the below command "tar -xvf apache-tomcat-7.0.56.tar.gz –C /usr/share/java".
+* Extract tomcat under "/usr/share/java" by using the below command "tar -xvf apache-tomcat-8.0.27.tar.gz –C /usr/share/java".
 
 NOTE:
-Please go through the bleow link to download apache-tomcat-7.0.56.tar.gz file,
-https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.56/bin/
+Please go through the bleow link to download apache-tomcat-8.0.27.tar.gz file,
+https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.27/bin/
 
-* Please go to the directory "cd /usr/share/java/apache-tomcat-7.0.56/bin and unzip tomcat-native.gz using this command "tar -xvf tomcat-native.gz".
+* Please go to the directory "cd /usr/share/java/apache-tomcat-8.0.27/bin and unzip tomcat-native.gz using this command "tar -xvf tomcat-native.gz".
 
-* Go to the directory "cd /usr/share/java/apache-tomcat-7.0.56/bin/tomcat-native-1.1.27-src/jni/native".
+* Go to the directory "cd /usr/share/java/apache-tomcat-8.0.27/bin/tomcat-native-1.1.33-src/jni/native".
 
-* Enter the command "./configure --with-apr=/usr/bin/apr-config".
+* Enter the command "./configure --with-os-type=bin --with-apr=/usr/bin/apr-config".
 
 * Enter the command "make" and "make install".
 
@@ -61,7 +61,7 @@ https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.56/bin/
 
 *Enable HTTP/HTTPS in VTN Coordinator*
 
-Enter the command "system-config-firewall-tui" to enable firewall settings in server.
+Enter the command "firewall-cmd --zone=public --add-port=8083/tcp --permanent" and "firewall-cmd --reload" to enable firewall settings in server.
 
 *Create a CA's private key and a self-signed certificate in server*
 
@@ -167,19 +167,19 @@ curl -X GET -H 'contenttype:application/json' -H 'username:admin' -H 'password:a
 * The response should be like this for both HTTP and HTTPS:
 +
 ----
-{"api_version":{"version":"V1.2"}}
+{"api_version":{"version":"V1.4"}}
 ----
 
 ===== Prerequisites to create Network Service in SCVMM machine, Please follow the below steps
 
 . 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/1.0.0-Lithium/vtnmanager-vsemprovider-1.0.0-Lithium-bin.zip
+ 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
 
-. Unzip the vtnmanager-vsemprovider-1.0.0-Lithium-bin.zip file anywhere in your SCVMM machine.
+. Unzip the vtnmanager-vsemprovider-2.0.0-Beryllium-bin.zip file anywhere in your SCVMM machine.
 
 . Stop SCVMM service from *"service manager->tools->servers->select system center virtual machine manager"* and click stop.
 
-. Go to *"C:/Program Files"* in your SCVMM machine. Inside *"C:/Program Files"*, create a folder named as *"ODLProvider".
+. Go to *"C:/Program Files"* in your SCVMM machine. Inside *"C:/Program Files"*, create a folder named as *"ODLProvider"*.
 
 . Inside *"C:/Program Files/ODLProvider"*, create a folder named as "Module" in your SCVMM machine.
 
index 76ca9d7fbdae38db435e5332b5fea05a533b843c..564780623f88862b55088063a6001d4ca4b0134e 100644 (file)
@@ -20,6 +20,7 @@ The requirements for installing these two are different.Therefore, we recommend
 *After executing db_setup, you have encountered the error "Failed to setup database"?*
 
 The error could be due to the below reasons
+
 * Access Restriction
 
 The user who owns /usr/local/vtn/ directory and installs VTN Coordinator, can only start db_setup.
@@ -90,7 +91,7 @@ The following activities take place in order during startup
 .If you encounter an erroneous situation where the REST API is always failing.
 
 ----
-  Please ensure the firewall settings for port:8282(Lithium release) or port:8083(Post Lithium 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?
 Please check the /usr/share/java/apache-tomcat-7.0.39/logs/core/core.log for failure details.
index d3544249718bcf7118f43919944160ab0521110b..6a9f13d50b2e043e1a252368d9b3b15f9b3fbfef 100644 (file)
@@ -2,7 +2,7 @@
 This example demonstrates on how to create a specific VTN Path Map information.
 
 .PathMap
-image::vtn/Pathmap.png[pathmap]
+image::vtn/Pathmap.png["Pathmap" ,width= 500]
 
 ===== Requirement
 * Save the mininet script given below as pathmap_test.py and run the mininet script in the mininet environment where Mininet is installed.
@@ -10,8 +10,8 @@ image::vtn/Pathmap.png[pathmap]
 * Create topology using the below mininet script:
 
 ----
-from mininet.topo import Topo
 class MyTopo( Topo ):
+ from mininet.topo import Topo
+ class MyTopo( Topo ):
     "Simple topology example."
     def __init__( self ):
         "Create custom topo."
@@ -45,6 +45,16 @@ from mininet.topo import Topo
  h2 h2-eth0:s3-eth3
 ----
 
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
 * Generate traffic by pinging between hosts h1 and h2 before creating the portmaps respectively
 
 ----
@@ -109,19 +119,19 @@ curl -X GET -H 'content-type: application/json' --user 'admin:adminpass' "http:/
 * Create a Flowcondition in the VTN
 
 ----
-curl --user admin:admin -H 'content-type: application/json' -X PUT -d '{"name": "flowcond_1","match": [{"index": 1,"ethernet": {"src": "ca:9e:58:0c:1e:f0","dst": "ba:bd:0f:e3:a8:c8","type": 2048},"inetMatch": {"inet4": {"src": "10.0.0.1","dst": "10.0.0.2","protocol": 1}}}]}' http://10.100.9.42:8282/controller/nb/v2/vtn/default/flowconditions/flowcond_1
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"operation":"SET","present":"false","name":"cond_1", "vtn-flow-match":[{"vtn-ether-match":{},"vtn-inet-match":{"source-network":"10.0.0.1/32","protocol":1,"destination-network":"10.0.0.2/32"},"index":"1"}]}}'
 ----
 
 * Create a Pathmap in the VTN
 
 ----
-curl --user admin:admin -H 'content-type: application/json' -X PUT -d '{"index": 10, "condition":"flowcond_1", "policy":1, "idleTimeout": 300, "hardTimeout": 0}' http://10.100.9.42:8282/controller/nb/v2/vtn/default/pathmaps/1
+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"}]}}'
 ----
 
 * Get the Path policy information
 
 ----
-curl --user admin:admin -H 'content-type: application/json' -X GET -d '{"id": 1,"default": 100000,"cost": [{"location": {"node": {"type": "OF","id": "00:00:00:00:00:00:00:01"},"port": {"type": "OF","id": "3","name": "s1-eth3"}},"cost": 1000},{"location": {"node": {"type": "OF","id": "00:00:00:00:00:00:00:04"},"port": {"type": "OF","id": "2","name": "s4-eth2"}},"cost": 1000},{"location": {"node": {"type": "OF", "id": "00:00:00:00:00:00:00:03"},"port": {"type": "OF","id": "3","name": "s3-eth3"}},"cost": 100000}]}' http://10.100.9.42:8282/controller/nb/v2/vtn/default/pathpolicies/1
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-path-policy:set-path-policy -d '{"input":{"operation":"SET","id": "1","default-cost": "10000","vtn-path-cost": [{"port-desc":"openflow:1,3,s1-eth3","cost":"1000"},{"port-desc":"openflow:4,2,s4-eth2","cost":"100000"},{"port-desc":"openflow:3,3,s3-eth3","cost":"10000"}]}}'
 ----
 
 ===== Verification
@@ -132,18 +142,18 @@ curl --user admin:admin -H 'content-type: application/json' -X GET -d '{"id": 1,
         "pathinfos": [
             {
               "in_port_name": "s1-eth1",
-              "out_port_name": "s1-eth2",
-              "switch_id": "00:00:00:00:00:00:00:01"
+              "out_port_name": "s1-eth3",
+              "switch_id": "openflow:1"
             },
             {
-              "in_port_name": "s2-eth1",
-              "out_port_name": "s2-eth2",
-              "switch_id": "00:00:00:00:00:00:00:02"
+              "in_port_name": "s4-eth1",
+              "out_port_name": "s4-eth2",
+              "switch_id": "openflow:4"
             },
             {
-               "in_port_name": "s3-eth1",
+               "in_port_name": "s3-eth2",
                "out_port_name": "s3-eth3",
-               "switch_id": "00:00:00:00:00:00:00:03"
+               "switch_id": "openflow:3"
             }
                      ]
 }
@@ -155,18 +165,18 @@ curl --user admin:admin -H 'content-type: application/json' -X GET -d '{"id": 1,
     "pathinfos": [
             {
               "in_port_name": "s1-eth1",
-              "out_port_name": "s1-eth3",
-              "switch_id": "00:00:00:00:00:00:00:01"
+              "out_port_name": "s1-eth2",
+              "switch_id": "openflow:1"
             },
             {
-              "in_port_name": "s4-eth1",
-              "out_port_name": "s4-eth2",
-              "switch_id": "00:00:00:00:00:00:00:04"
+              "in_port_name": "s2-eth1",
+              "out_port_name": "s2-eth2",
+              "switch_id": "openflow:2"
             },
             {
-               "in_port_name": "s3-eth2",
+               "in_port_name": "s3-eth1",
                "out_port_name": "s3-eth3",
-               "switch_id": "00:00:00:00:00:00:00:03"
+               "switch_id": "openflow:3"
             }
                      ]
 }
index 70d87a1226002a7793e5b49991d9828f6630146e..0ed16a0588d58454d2cc2d2190753b858a45baa6 100644 (file)
@@ -72,12 +72,28 @@ curl --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"por
 ----
 curl --user admin:adminpass -H 'content-type: application/json'  -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:05-s5-eth2"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn3/vbridges/vbr2/interfaces/if1/portmap.json
 ----
+
 ===== Verification
 Please verify whether Host h2 and Host h6 are pinging.
-* Send packets from h2 to h6
 
+* Send packets from h2 to h6
 
 ----
 mininet> h2 ping h6
 ----
 
+----
+ PING 10.0.0.6 (10.0.0.3) 56(84) bytes of data.
+ 64 bytes from 10.0.0.6: icmp_req=1 ttl=64 time=0.780 ms
+ 64 bytes from 10.0.0.6: icmp_req=2 ttl=64 time=0.079 ms
+----
+
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
index ff64bba2f02a9e870d25b897d79766ce18a79657..f85b065f4765ddf82c4df2c3ba020cc5654c8f89 100644 (file)
@@ -24,6 +24,17 @@ mininet@mininet-vm:~$ sudo mn --controller=remote,ip=<controller-ip> --topo tree
  h1 h1-eth0:s1-eth1
  h2 h2-eth0:s2-eth2
 ----
+
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
 ===== Configuration
 
 * Create a Controller
@@ -74,6 +85,9 @@ Please verify whether the Host1 and Host3 are pinging.
 * Send packets from Host1 to Host3
 
 ----
-|mininet> h1 ping h3
+ mininet> h1 ping h3
+ PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
+ 64 bytes from 10.0.0.3: icmp_req=1 ttl=64 time=0.780 ms
+ 64 bytes from 10.0.0.3: icmp_req=2 ttl=64 time=0.079 ms
 ----
 
index 7a1f1f5cb52c1208b60847b3c31e892cddc5dd42..451a0e347d4402d7b1fb99fc0f17f113bf6183ec 100644 (file)
@@ -48,55 +48,66 @@ h2 h2-eth0:s2-eth2
 h3 h3-eth0:s3-eth1
 h4 h4-eth0:s3-eth2
 ----
+
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
 ===== Configuration
 * .Create a controller
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controller1", "ipaddr":"10.100.9.61", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://127.0.0.1:8083/vtn-webapi/controllers
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controller1", "ipaddr":"10.100.9.61", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://127.0.0.1:8083/vtn-webapi/controllers
 ----
 * Create a VTN
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vtn" : {"vtn_name":"vtn_one","description":"test VTN" }}' http://127.0.0.1:8083/vtn-webapi/vtns.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vtn" : {"vtn_name":"vtn_one","description":"test VTN" }}' http://127.0.0.1:8083/vtn-webapi/vtns.json
 ----
 * Create two vBridges
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vbr_one^C"controller_id":"controller1","domain_id":"(DEFAULT)" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vbr_one^C"controller_id":"controller1","domain_id":"(DEFAULT)" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges.json
 curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" :
 {"vbr_name":"vbr_two","controller_id":"controller1","domain_id":"(DEFAULT)" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges.json
 ----
 * Create vBridge interfaces
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces.json
 curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces.json
 ----
 * Configure two mappings on the interfaces
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:03-s3-eth1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/portmap.json
+curl --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:03-s3-eth1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/portmap.json
 curl -v --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:02-s2-eth1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if2/portmap.json
 ----
 * Create Flowlist
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"flowlist": {"fl_name": "flowlist1", "ip_version":"IP"}}' http://127.0.0.1:8083/vtn-webapi/flowlists.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"flowlist": {"fl_name": "flowlist1", "ip_version":"IP"}}' http://127.0.0.1:8083/vtn-webapi/flowlists.json
 ----
 * Create Flowlistentry
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"flowlistentry": {"seqnum": "233","macethertype": "0x8000","ipdstaddr": "10.0.0.3","ipdstaddrprefix": "2","ipsrcaddr": "10.0.0.2","ipsrcaddrprefix": "2","ipproto": "17","ipdscp": "55","icmptypenum":"232","icmpcodenum": "232"}}' http://127.0.0.1:8083/vtn-webapi/flowlists/flowlist1/flowlistentries.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"flowlistentry": {"seqnum": "233","macethertype": "0x8000","ipdstaddr": "10.0.0.3","ipdstaddrprefix": "2","ipsrcaddr": "10.0.0.2","ipsrcaddrprefix": "2","ipproto": "17","ipdscp": "55","icmptypenum":"232","icmpcodenum": "232"}}' http://127.0.0.1:8083/vtn-webapi/flowlists/flowlist1/flowlistentries.json
 ----
 * Create vBridge Interface Flowfilter
 
 ----
-curl -v --user admin:adminpass -X POST -H 'content-type: application/json' -d '{"flowfilter" : {"ff_type": "in"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters.json
+curl --user admin:adminpass -X POST -H 'content-type: application/json' -d '{"flowfilter" : {"ff_type": "in"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters.json
 ----
 ===== Flow filter demonstration with DROP action-type
 
 ----
-curl -v --user admin:adminpass -X POST -H 'content-type: application/json' -d '{"flowfilterentry": {"seqnum": "233", "fl_name": "flowlist1", "action_type":"drop", "priority":"3", "dscp":"55" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters/in/flowfilterentries.json
+curl --user admin:adminpass -X POST -H 'content-type: application/json' -d '{"flowfilterentry": {"seqnum": "233", "fl_name": "flowlist1", "action_type":"drop", "priority":"3", "dscp":"55" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters/in/flowfilterentries.json
 ----
 ===== Verification
 As we have applied the action type "drop" , ping should fail.
@@ -118,7 +129,7 @@ osgi> readflows 0000000000000003
 ===== Flow filter demonstration with PASS action-type
 
 ----
-curl -v --user admin:adminpass -X PUT -H 'content-type: application/json' -d '{"flowfilterentry": {"seqnum": "233", "fl_name": "flowlist1", "action_type":"pass", "priority":"3", "dscp":"55" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters/in/flowfilterentries/233.json
+curl --user admin:adminpass -X PUT -H 'content-type: application/json' -d '{"flowfilterentry": {"seqnum": "233", "fl_name": "flowlist1", "action_type":"pass", "priority":"3", "dscp":"55" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr_two/interfaces/if1/flowfilters/in/flowfilterentries/233.json
 ----
 ===== Verification
 
index a7d2b026aebc2a462be676d1daae3e0ebebb193c..8222bc82ec930ba319399f7ed34f9bedb41c1cdf 100644 (file)
@@ -18,9 +18,21 @@ https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):Scr
 ----
 sudo mn --controller=remote,ip=192.168.64.13 --custom vlan_vtn_test.py --topo mytopo
 ----
+
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
 ===== Configuration
 
 Please follow the below steps to test a vlan map using mininet:
+
 * Create a controller
 
 ----
index 6bc9788bc0e775fc4c9583effb90ccb9d2336ef7..39db993e061c650d37be4650a37e5b027dfce6c8 100644 (file)
@@ -2,13 +2,13 @@
 This example demonstrates on how to view a specific VTN Dataflow information.
 
 ===== Configuration
-The same Configuration as Vlan Mapping Example(https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):VTN_Coordinator:RestApi:How_to_test_vlan-map_in_Mininet_environment)
+The same Configuration as Vlan Mapping Example(https://wiki.opendaylight.org/view/VTN:Coordinator:Beryllium:HowTos:How_To_test_vlanmap_using_mininet)
 
 ===== Verification
 Get the VTN Dataflows information
 
 ----
-curl -v -X GET -H 'content-type: application/json' --user 'admin:adminpass' "http://127.0.0.1:8083/vtn-webapi/dataflows?controller_id=controllerone&srcmacaddr=924c.e4a3.a743&vlan_id=300&switch_id=00:00:00:00:00:00:00:02&port_name=s2-eth1"
+curl -X GET -H 'content-type: application/json' --user 'admin:adminpass' "http://127.0.0.1:8083/vtn-webapi/dataflows?controller_id=controllerone&srcmacaddr=924c.e4a3.a743&vlan_id=300&switch_id=openflow:2&port_name=s2-eth1"
 ----
 
 
index a09e7a52351f1afeaa8d054fb06e5d9b3cda02dc..3761aac390df632b75cebafcfa4a62467ebbe359 100644 (file)
@@ -28,44 +28,60 @@ mininet> net
  64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=13.2 ms
 ----
 
+NOTE: Add the default flow to OVS to forward packets to controller when there is a table-miss:
+
+----
+ovs-ofctl --protocols=OpenFlow13 add-flow <switch-name> priority=0,actions=output:CONTROLLER
+----
+
+These flows need to be added only in case of OpenFlow1.3 or using OVS versions (>2.1.1).
+
+Here the switch name is the switches in the topology such as s1,s2,s3.
+
 ===== Configuration
-.Create Controller
+
+* Create Controller
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controllerone", "ipaddr":"10.100.9.61", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://127.0.0.1:8083/vtn-webapi/controllers.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controllerone", "ipaddr":"10.100.9.61", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://127.0.0.1:8083/vtn-webapi/controllers.json
 ----
-.Create a VTN
+
+* Create a VTN
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vtn" : {"vtn_name":"vtn1","description":"test VTN" }}' http://127.0.0.1:8083/vtn-webapi/vtns.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vtn" : {"vtn_name":"vtn1","description":"test VTN" }}' http://127.0.0.1:8083/vtn-webapi/vtns.json
 ----
-.Create a vBridge in the VTN
+
+* Create a vBridge in the VTN
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vBridge1","controller_id":"controllerone","domain_id":"(DEFAULT)" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vBridge1","controller_id":"controllerone","domain_id":"(DEFAULT)" }}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges.json
 ----
-.Create two Interfaces into the vBridge
+
+* Create two Interfaces into the vBridge
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces.json
+curl --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces.json
 curl -v --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if2","description": "if_desc2"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces.json
 ----
-.Configure two mappings on the interfaces
+
+* Configure two mappings on the interfaces
 
 ----
-curl -v --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:01-s1-eth1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces/if1/portmap.json
+curl --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:01-s1-eth1"}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces/if1/portmap.json
 curl -v --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:00:00:00:00:00:00:00:02-s2-eth2"}}' http://17.0.0.1:8083/vtn-webapi/vtns/vtn1/vbridges/vBridge1/interfaces/if2/portmap.json
 ----
-.Get the VTN stations information
+
+* Get the VTN stations information
 
 ----
-curl -v -X GET -H 'content-type: application/json' -H 'username: admin' -H 'password: adminpass' "http://127.0.0.1:8083/vtn-webapi/vtnstations?controller_id=controllerone&vtn_name=vtn1"
+curl -X GET -H 'content-type: application/json' -H 'username: admin' -H 'password: adminpass' "http://127.0.0.1:8083/vtn-webapi/vtnstations?controller_id=controllerone&vtn_name=vtn1"
 ----
 
 ===== Verification
 
 ----
-curl -v -X GET -H 'content-type: application/json' -H 'username: admin' -H 'password: adminpass' "http://127.0.0.1:8083/vtn-webapi/vtnstations?controller_id=controllerone&vtn_name=vtn1"
+curl -X GET -H 'content-type: application/json' -H 'username: admin' -H 'password: adminpass' "http://127.0.0.1:8083/vtn-webapi/vtnstations?controller_id=controllerone&vtn_name=vtn1"
 {
    "vtnstations": [
        {
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Flowfilters.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Flowfilters.adoc
new file mode 100644 (file)
index 0000000..8513bed
--- /dev/null
@@ -0,0 +1,281 @@
+==== How To Configure Flowfilters
+
+===== Overview
+
+* This page explains how to provision flowfilter using VTN Manager. This page targets Beryllium release, so the procedure described here does not work in other releases.
+
+* The flow-filter function discards, permits, or redirects packets of the traffic within a VTN, according to specified flow conditions. The table below lists the actions to be applied when a packet matches the condition:
+
+[options="header",cols="30%,70%"]
+|===
+| Action | Function
+| Pass | Permits the packet to pass along the determined path. +
+As options, packet transfer priority (set priority) and DSCP change (set ip-dscp) is specified.
+| Drop | Discards the packet.
+| Redirect | Redirects the packet to a desired virtual interface. +
+As an option, it is possible to change the MAC address when the packet is transferred.
+|===
+
+.Flow Filter Example
+image::vtn/Flow_filter_example.png["Flow filter example",width=500]
+
+* Following steps explain flow-filter function:
+
+** when a packet is transferred to an interface within a virtual network, the flow-filter function evaluates whether the transferred packet matches the condition specifed in the flow-list.
+
+** If the packet matches the condition, the flow-filter applies the flow-list matching action specified in the flow-filter.
+
+===== Requirements
+
+To apply the packet filter, configure the following:
+
+* Create a flow condition.
+* Specify where to apply the flow-filter, for example VTN, vBridge, or interface of vBridge.
+
+To provision OpenFlow switches, this page uses Mininet. Mininet details and set-up can be referred at the below page:
+https://wiki.opendaylight.org/view/OpenDaylight_Controller:Installation#Using_Mininet
+
+Start Mininet, and create three switches (s1, s2, and s3) and four hosts (h1, h2, h3 and h4) in it.
+
+----
+sudo mn --controller=remote,ip=192.168.0.100 --topo tree,2
+----
+
+NOTE: Replace "192.168.0.100" with the IP address of OpenDaylight controller based on your environment.
+
+You can check the topology that you have created by executing "net" command in the Mininet console.
+
+----
+ mininet> net
+ h1 h1-eth0:s2-eth1
+ h2 h2-eth0:s2-eth2
+ h3 h3-eth0:s3-eth1
+ h4 h4-eth0:s3-eth2
+ s1 lo:  s1-eth1:s2-eth3 s1-eth2:s3-eth3
+ s2 lo:  s2-eth1:h1-eth0 s2-eth2:h2-eth0 s2-eth3:s1-eth1
+ s3 lo:  s3-eth1:h3-eth0 s3-eth2:h4-eth0 s3-eth3:s1-eth2
+----
+
+In this guide, you will provision flowfilters to establish communication between h1 and h3.
+
+NOTE: You need to manually add flow entries to OpenFlow switches in the Mininet. The flow entries are needed to forward packets to controller when there is a table-miss. This configuration is required only in case of OpenFlow 1.3 or using OVS versions (>2.1.1).
+
+----
+sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+----
+
+===== Configuration
+
+To provision the virtual L2 network for the two hosts (h1 and h3), 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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* Create a virtual bridge named vbr1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1"}}'
+----
+
+* Create two interfaces into the virtual bridge by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if2"}}'
+----
+
+* Configure two mappings on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface if1 of the virtual bridge will be mapped to the port "s2-eth1" of the switch "openflow:2" of the Mininet.
+
+*** The h1 is connected to the port "s2-eth1".
+
+** The interface if2 of the virtual bridge will be mapped to the port "s3-eth1" of the switch "openflow:3" of the Mininet.
+
+*** The h3 is connected to the port "s3-eth1".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:2", "port-name":"s2-eth1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if2", "node":"openflow:3", "port-name":"s3-eth1"}}'
+----
+
+* Create flowcondition named cond_1 by executing
+  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[the set-flow-condition RPC].
+
+** For option source and destination-network, get inet address of host h1 and h3 from mininet.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"name":"cond_1", "vtn-flow-match":[{"vtn-ether-match":{},"vtn-inet-match":{"source-network":"10.0.0.1/32","protocol":1,"destination-network":"10.0.0.3/32"},"index":"1"}]}}'
+----
+
+* Flowfilter can be applied either in VTN, VBR or VBR Interfaces. Here in this page we provision flowfilter with VBR Interface and demonstrate with action type drop and then pass.
+
+* Flow filter demonstration with DROP action-type. Create Flowfilter in VBR Interface if1 by executing
+  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[the set-flow-filter RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input": {"tenant-name": "vtn1", "bridge-name": "vbr1","interface-name":"if1","vtn-flow-filter":[{"condition":"cond_1","vtn-drop-filter":{},"vtn-flow-action":[{"order": "1","vtn-set-inet-src-action":{"ipv4-address":"10.0.0.1/32"}},{"order": "2","vtn-set-inet-dst-action":{"ipv4-address":"10.0.0.3/32"}}],"index": "1"}]}}'
+----
+
+===== Verification of the drop filter
+
+* Please execute ping from h1 to h3. As we have applied the action type "drop" , ping should fail with no packet flows between hosts h1 and h3 as below,
+
+----
+ mininet> h1 ping h3
+----
+
+===== Configuration for pass filter
+
+* Update the flow filter to pass the packets by executing
+  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[the set-flow-filter RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input": {"tenant-name": "vtn1", "bridge-name": "vbr1","interface-name":"if1","vtn-flow-filter":[{"condition":"cond_1","vtn-pass-filter":{},"vtn-flow-action":[{"order": "1","vtn-set-inet-src-action":{"ipv4-address":"10.0.0.1/32"}},{"order": "2","vtn-set-inet-dst-action":{"ipv4-address":"10.0.0.3/32"}}],"index": "1"}]}}'
+----
+
+===== Verification For Packets Success
+
+* As we have applied action type PASS now ping should happen between hosts h1 and h3.
+
+----
+ mininet> h1 ping h3
+ PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
+ 64 bytes from 10.0.0.3: icmp_req=1 ttl=64 time=0.984 ms
+ 64 bytes from 10.0.0.3: icmp_req=2 ttl=64 time=0.110 ms
+ 64 bytes from 10.0.0.3: icmp_req=3 ttl=64 time=0.098 ms
+----
+
+* You can also verify the configurations by executing the following REST API. It shows all configuration in VTN Manager.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns/vtn/vtn1
+----
+
+----
+{
+  "vtn": [
+  {
+    "name": "vtn1",
+      "vtenant-config": {
+        "hard-timeout": 0,
+        "idle-timeout": 300,
+        "description": "creating vtn"
+      },
+      "vbridge": [
+      {
+        "name": "vbr1",
+        "vbridge-config": {
+          "age-interval": 600,
+          "description": "creating vBridge1"
+        },
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "if1",
+          "vinterface-status": {
+            "mapped-port": "openflow:2:1",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:2",
+            "port-name": "s2-eth1"
+          },
+          "vinterface-config": {
+            "description": "Creating if1 interface",
+            "enabled": true
+          },
+          "vinterface-input-filter": {
+            "vtn-flow-filter": [
+            {
+              "index": 1,
+              "condition": "cond_1",
+              "vtn-flow-action": [
+              {
+                "order": 1,
+                "vtn-set-inet-src-action": {
+                  "ipv4-address": "10.0.0.1/32"
+                }
+              },
+              {
+                "order": 2,
+                "vtn-set-inet-dst-action": {
+                  "ipv4-address": "10.0.0.3/32"
+                }
+              }
+              ],
+                "vtn-pass-filter": {}
+            },
+            {
+              "index": 10,
+              "condition": "cond_1",
+              "vtn-drop-filter": {}
+            }
+            ]
+          }
+        },
+        {
+          "name": "if2",
+          "vinterface-status": {
+            "mapped-port": "openflow:3:1",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:3",
+            "port-name": "s3-eth1"
+          },
+          "vinterface-config": {
+            "description": "Creating if2 interface",
+            "enabled": true
+          }
+        }
+        ]
+      }
+    ]
+  }
+  ]
+}
+----
+
+===== Cleaning Up
+
+* To clean up both VTN and flowcondition.
+
+* You can delete the virtual tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* You can delete the flowcondition cond_1 by executing
+  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[the remove-flow-condition RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:remove-flow-condition -d '{"input":{"name":"cond_1"}}'
+----
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Service_Function_Chaining_Support.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Configure_Service_Function_Chaining_Support.adoc
new file mode 100644 (file)
index 0000000..69cf220
--- /dev/null
@@ -0,0 +1,658 @@
+==== How To Configure Service Function Chaining using VTN Manager
+
+===== Overview
+
+This page explains how to configure VTN Manager for Service Chaining. This page targets Beryllium release, so the procedure described here does not work in other releases.
+
+.Service Chaining With One Service
+image::vtn/Service_Chaining_With_One_Service.png["Service Chaining With One Service",width=500]
+
+===== Requirements
+
+* Please refer to the https://wiki.opendaylight.org/view/VTN:Beryllium:Installation_Guide[Installation Pages] to run ODL with VTN Feature enabled.
+* Please ensure Bridge-Utils package is installed in mininet environment before running the mininet script.
+* To install Bridge-Utils package run sudo apt-get install bridge-utils (assuming Ubuntu is used to run mininet, If not then this is not required).
+* Save the mininet script given below as topo_handson.py and run the mininet script in the mininet environment where Mininet is installed.
+
+===== Mininet Script
+
+* https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):Scripts:Mininet[Script for emulating network with multiple hosts].
+* Before executing the mininet script, please confirm Controller is up and running.
+* Run the mininet script.
+* Replace <path> and <Controller IP> based on your environment
+
+----
+sudo mn --controller=remote,ip=<Controller IP> --custom <path>\topo_handson.py --topo mytopo2
+----
+
+----
+ mininet> net
+ h11 h11-eth0:s1-eth1
+ h12 h12-eth0:s1-eth2
+ h21 h21-eth0:s2-eth1
+ h22 h22-eth0:s2-eth2
+ h23 h23-eth0:s2-eth3
+ srvc1 srvc1-eth0:s3-eth3 srvc1-eth1:s4-eth3
+ srvc2 srvc2-eth0:s3-eth4 srvc2-eth1:s4-eth4
+ s1 lo:  s1-eth1:h11-eth0 s1-eth2:h12-eth0 s1-eth3:s2-eth4 s1-eth4:s3-eth2
+ s2 lo:  s2-eth1:h21-eth0 s2-eth2:h22-eth0 s2-eth3:h23-eth0 s2-eth4:s1-eth3 s2-eth5:s4-eth1
+ s3 lo:  s3-eth1:s4-eth2 s3-eth2:s1-eth4 s3-eth3:srvc1-eth0 s3-eth4:srvc2-eth0
+ s4 lo:  s4-eth1:s2-eth5 s4-eth2:s3-eth1 s4-eth3:srvc1-eth1 s4-eth4:srvc2-eth1
+----
+
+===== Configurations
+
+====== Mininet
+
+* Please follow the below steps to configure the network in mininet as in the below image:
+
+.Mininet Configuration
+image::vtn/Mininet_Configuration.png["Mininet Configuration",width=500]
+
+====== Install flow entries
+
+* In mininet environment, install the following flow entries to send PACKET_IN to the controller.
+
+----
+ $ sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+ $ sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+ $ sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+ $ sudo ovs-ofctl add-flow s4 priority=0,actions=output:CONTROLLER
+----
+
+====== Configure service nodes
+
+* Please execute the following commands in the mininet console where mininet script is executed.
+
+----
+ mininet> srvc1 ip addr del 10.0.0.6/8 dev srvc1-eth0
+ mininet> srvc1 brctl addbr br0
+ mininet> srvc1 brctl addif br0 srvc1-eth0
+ mininet> srvc1 brctl addif br0 srvc1-eth1
+ mininet> srvc1 ifconfig br0 up
+ mininet> srvc1 tc qdisc add dev srvc1-eth1 root netem delay 200ms
+ mininet> srvc2 ip addr del 10.0.0.7/8 dev srvc2-eth0
+ mininet> srvc2 brctl addbr br0
+ mininet> srvc2 brctl addif br0 srvc2-eth0
+ mininet> srvc2 brctl addif br0 srvc2-eth1
+ mininet> srvc2 ifconfig br0 up
+ mininet> srvc2 tc qdisc add dev srvc2-eth1 root netem delay 300ms
+----
+
+===== Controller
+
+====== Multi-Tenancy
+
+* Please execute the below commands to configure the network topology in the controller as in the below image:
+
+.Tenant2
+image::vtn/Tenant2.png["Tenant2",width=500]
+
+====== 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: https://bugs.opendaylight.org/show_bug.cgi?id=3818.
+
+----
+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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1","update-mode":"CREATE","operation":"SET","description":"creating vtn","idle-timeout":300,"hard-timeout":0}}'
+----
+
+* Create a virtual bridge named vbr1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"creating vbr","tenant-name":"vtn1","bridge-name":"vbr1"}}'
+----
+
+* Create interface if1 into the virtual bridge vbr1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vbrif1 interface","tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1"}}'
+----
+
+* Configure port mapping on the interface by executing
+  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[the set-port-map RPC].
+
+** The interface if1 of the virtual bridge will be mapped to the port "s1-eth2" of the switch "openflow:1" of the Mininet.
+
+*** The h12 is connected to the port "s1-eth2".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"vlan-id":0,"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1","node":"openflow:1","port-name":"s1-eth2"}}'
+----
+
+* Create interface if2 into the virtual bridge vbr1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vbrif2 interface","tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if2"}}'
+----
+
+* Configure port mapping on the interface by executing
+  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[the set-port-map RPC].
+
+** The interface if2 of the virtual bridge will be mapped to the port "s2-eth2" of the switch "openflow:2" of the Mininet.
+
+*** The h22 is connected to the port "s2-eth2".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"vlan-id":0,"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if2","node":"openflow:2","port-name":"s2-eth2"}}'
+----
+
+* Create interface if3 into the virtual bridge vbr1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vbrif3 interface","tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if3"}}'
+----
+
+* Configure port mapping on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface if3 of the virtual bridge will be mapped to the port "s2-eth3" of the switch "openflow:2" of the Mininet.
+
+*** The h23 is connected to the port "s2-eth3".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"vlan-id":0,"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if3","node":"openflow:2","port-name":"s2-eth3"}}'
+----
+
+===== Traffic filtering
+
+* Create flowcondition named cond_1 by executing
+  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[the set-flow-condition RPC].
+
+** For option source and destination-network, get inet address of host h12(src) and h22(dst) from mininet.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"operation":"SET","present":"false","name":"cond_1","vtn-flow-match":[{"index":1,"vtn-ether-match":{},"vtn-inet-match":{"source-network":"10.0.0.2/32","destination-network":"10.0.0.4/32"}}]}}'
+----
+
+* Flow filter demonstration with DROP action-type. Create Flowfilter in VBR Interface if1 by executing
+  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[the set-flow-filter RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input":{"output":"false","tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1","vtn-flow-filter":[{"condition":"cond_1","index":10,"vtn-drop-filter":{}}]}}'
+----
+
+===== Service Chaining
+
+====== With One Service
+
+* Please execute the below commands to configure the network topology which sends some specific traffic via a single service(External device) in the controller as in the below image:
+
+.Service Chaining With One Service LLD
+image::vtn/Service_Chaining_With_One_Service_LLD.png["Service Chaining With One Service LLD",width=500]
+
+* Create a virtual terminal named vt_srvc1_1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal[the update-vterminal RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vterminal:update-vterminal -d '{"input":{"update-mode":"CREATE","operation":"SET","tenant-name":"vtn1","terminal-name":"vt_srvc1_1","description":"Creating vterminal"}}'
+----
+
+* Create interface IF into the virtual terminal vt_srvc1_1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vterminal IF","enabled":"true","tenant-name":"vtn1","terminal-name":"vt_srvc1_1","interface-name":"IF"}}'
+----
+
+* Configure port mapping on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface IF of the virtual terminal will be mapped to the port "s3-eth3" of the switch "openflow:3" of the Mininet.
+
+*** The h12 is connected to the port "s3-eth3".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1","terminal-name":"vt_srvc1_1","interface-name":"IF","node":"openflow:3","port-name":"s3-eth3"}}'
+----
+
+* Create a virtual terminal named vt_srvc1_2 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal[the update-vterminal RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vterminal:update-vterminal -d '{"input":{"update-mode":"CREATE","operation":"SET","tenant-name":"vtn1","terminal-name":"vt_srvc1_2","description":"Creating vterminal"}}'
+----
+
+* Create interface IF into the virtual terminal vt_srvc1_2 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vterminal IF","enabled":"true","tenant-name":"vtn1","terminal-name":"vt_srvc1_2","interface-name":"IF"}}'
+----
+
+* Configure port mapping on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface IF of the virtual terminal will be mapped to the port "s4-eth3" of the switch "openflow:4" of the Mininet.
+
+*** The h22 is connected to the port "s4-eth3".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1","terminal-name":"vt_srvc1_2","interface-name":"IF","node":"openflow:4","port-name":"s4-eth3"}}'
+----
+
+* Create flowcondition named cond_1 by executing
+  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[the set-flow-condition RPC].
+
+** For option source and destination-network, get inet address of host h12(src) and h22(dst) from mininet.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"operation":"SET","present":"false","name":"cond_1","vtn-flow-match":[{"index":1,"vtn-ether-match":{},"vtn-inet-match":{"source-network":"10.0.0.2/32","destination-network":"10.0.0.4/32"}}]}}'
+----
+
+* Create flowcondition named cond_any by executing
+  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[the set-flow-condition RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"operation":"SET","present":"false","name":"cond_any","vtn-flow-match":[{"index":1}]}}'
+----
+
+* Flow filter demonstration with redirect action-type. Create Flowfilter in virtual terminal vt_srvc1_2 interface IF by executing
+  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[the set-flow-filter RPC].
+
+** Flowfilter redirects vt_srvc1_2 to bridge1-IF2
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input":{"output":"false","tenant-name":"vtn1","terminal-name":"vt_srvc1_2","interface-name":"IF","vtn-flow-filter":[{"condition":"cond_any","index":10,"vtn-redirect-filter":{"redirect-destination":{"bridge-name":"vbr1","interface-name":"if2"},"output":"true"}}]}}'
+----
+
+* Flow filter demonstration with redirect action-type. Create Flowfilter in vbridge vbr1 interface if1 by executing
+  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[the set-flow-filter RPC].
+
+** Flow filter redirects Bridge1-IF1 to vt_srvc1_1
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input":{"output":"false","tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1","vtn-flow-filter":[{"condition":"cond_1","index":10,"vtn-redirect-filter":{"redirect-destination":{"terminal-name":"vt_srvc1_1","interface-name":"IF"},"output":"true"}}]}}'
+----
+
+===== Verification
+
+.Service Chaining With One Service
+image::vtn/Service_Chaining_With_One_Service_Verification.png["Service Chaining With One Service Verification",width=500]
+
+* Ping host12 to host22 to view the host rechability, a delay of 200ms will be taken to reach host22 as below.
+
+----
+ mininet> h12 ping h22
+ PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
+ 64 bytes from 10.0.0.4: icmp_seq=35 ttl=64 time=209 ms
+ 64 bytes from 10.0.0.4: icmp_seq=36 ttl=64 time=201 ms
+ 64 bytes from 10.0.0.4: icmp_seq=37 ttl=64 time=200 ms
+ 64 bytes from 10.0.0.4: icmp_seq=38 ttl=64 time=200 ms
+----
+
+====== With two services
+
+* Please execute the below commands to configure the network topology which sends some specific traffic via two services(External device) in the controller as in the below image.
+
+.Service Chaining With Two Services LLD
+image::vtn/Service_Chaining_With_Two_Services_LLD.png["Service Chaining With Two Services LLD",width=500]
+
+* Create a virtual terminal named vt_srvc2_1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal[the update-vterminal RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vterminal:update-vterminal -d '{"input":{"update-mode":"CREATE","operation":"SET","tenant-name":"vtn1","terminal-name":"vt_srvc2_1","description":"Creating vterminal"}}'
+----
+
+* Create interface IF into the virtual terminal vt_srvc2_1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vterminal IF","enabled":"true","tenant-name":"vtn1","terminal-name":"vt_srvc2_1","interface-name":"IF"}}'
+----
+
+* Configure port mapping on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface IF of the virtual terminal will be mapped to the port "s3-eth4" of the switch "openflow:3" of the Mininet.
+
+*** The host h12 is connected to the port "s3-eth4".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1","terminal-name":"vt_srvc2_1","interface-name":"IF","node":"openflow:3","port-name":"s3-eth4"}}'
+----
+
+* Create a virtual terminal named vt_srvc2_2 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vterminal.html#update-vterminal[the update-vterminal RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vterminal:update-vterminal -d '{"input":{"update-mode":"CREATE","operation":"SET","tenant-name":"vtn1","terminal-name":"vt_srvc2_2","description":"Creating vterminal"}}'
+----
+
+* Create interfaces IF into the virtual terminal vt_srvc2_2 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"update-mode":"CREATE","operation":"SET","description":"Creating vterminal IF","enabled":"true","tenant-name":"vtn1","terminal-name":"vt_srvc2_2","interface-name":"IF"}}'
+----
+
+* Configure port mapping on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface IF of the virtual terminal will be mapped to the port "s4-eth4" of the switch "openflow:4" of the mininet.
+
+*** The host h22 is connected to the port "s4-eth4".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1","terminal-name":"vt_srvc2_2","interface-name":"IF","node":"openflow:4","port-name":"s4-eth4"}}'
+----
+
+* Flow filter demonstration with redirect action-type. Create Flowfilter in virtual terminal vt_srvc2_2 interface IF by executing
+  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[the set-flow-filter RPC].
+
+** Flow filter redirects vt_srvc2_2 to Bridge1-IF2.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input":{"output":"false","tenant-name":"vtn1","terminal-name":"vt_srvc2_2","interface-name":"IF","vtn-flow-filter":[{"condition":"cond_any","index":10,"vtn-redirect-filter":{"redirect-destination":{"bridge-name":"vbr1","interface-name":"if2"},"output":"true"}}]}}'
+----
+
+* Flow filter demonstration with redirect action-type. Create Flowfilter in virtual terminal vt_srvc2_2 interface IF by executing
+  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[the set-flow-filter RPC].
+
+** Flow filter redirects vt_srvc1_2 to vt_srvc2_1.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-filter:set-flow-filter -d '{"input":{"output":"false","tenant-name":"vtn1","terminal-name":"vt_srvc1_2","interface-name":"IF","vtn-flow-filter":[{"condition":"cond_any","index":10,"vtn-redirect-filter":{"redirect-destination":{"terminal-name":"vt_srvc2_1","interface-name":"IF"},"output":"true"}}]}}'
+----
+
+===== Verification
+
+.Service Chaining With Two Service
+image::vtn/Service_Chaining_With_Two_Services.png["Service Chaining With Two Services",width=500]
+
+* Ping host12 to host22 to view the host rechability, a delay of 500ms will be taken to reach host22 as below.
+
+----
+ mininet> h12 ping h22
+ PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
+ 64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=512 ms
+ 64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=501 ms
+ 64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=500 ms
+ 64 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=500 ms
+----
+
+* You can verify the configuration by executing the following REST API. It shows all configuration in VTN Manager.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns
+----
+
+----
+{
+  "vtn": [
+  {
+    "name": "vtn1",
+      "vtenant-config": {
+        "hard-timeout": 0,
+        "idle-timeout": 300,
+        "description": "creating vtn"
+      },
+      "vbridge": [
+      {
+        "name": "vbr1",
+        "vbridge-config": {
+          "age-interval": 600,
+          "description": "creating vbr"
+        },
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "if1",
+          "vinterface-status": {
+            "mapped-port": "openflow:1:2",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:1",
+            "port-name": "s1-eth2"
+          },
+          "vinterface-config": {
+            "description": "Creating vbrif1 interface",
+            "enabled": true
+          },
+          "vinterface-input-filter": {
+            "vtn-flow-filter": [
+            {
+              "index": 10,
+              "condition": "cond_1",
+              "vtn-redirect-filter": {
+                "output": true,
+                "redirect-destination": {
+                  "terminal-name": "vt_srvc1_1",
+                  "interface-name": "IF"
+                }
+              }
+            }
+            ]
+          }
+        },
+        {
+          "name": "if2",
+          "vinterface-status": {
+            "mapped-port": "openflow:2:2",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:2",
+            "port-name": "s2-eth2"
+          },
+          "vinterface-config": {
+            "description": "Creating vbrif2 interface",
+            "enabled": true
+          }
+        },
+        {
+          "name": "if3",
+          "vinterface-status": {
+            "mapped-port": "openflow:2:3",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:2",
+            "port-name": "s2-eth3"
+          },
+          "vinterface-config": {
+            "description": "Creating vbrif3 interface",
+            "enabled": true
+          }
+        }
+        ]
+      }
+    ],
+      "vterminal": [
+      {
+        "name": "vt_srvc2_2",
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "IF",
+          "vinterface-status": {
+            "mapped-port": "openflow:4:4",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:4",
+            "port-name": "s4-eth4"
+          },
+          "vinterface-config": {
+            "description": "Creating vterminal IF",
+            "enabled": true
+          },
+          "vinterface-input-filter": {
+            "vtn-flow-filter": [
+            {
+              "index": 10,
+              "condition": "cond_any",
+              "vtn-redirect-filter": {
+                "output": true,
+                "redirect-destination": {
+                  "bridge-name": "vbr1",
+                  "interface-name": "if2"
+                }
+              }
+            }
+            ]
+          }
+        }
+        ],
+          "vterminal-config": {
+            "description": "Creating vterminal"
+          }
+      },
+      {
+        "name": "vt_srvc1_1",
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "IF",
+          "vinterface-status": {
+            "mapped-port": "openflow:3:3",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:3",
+            "port-name": "s3-eth3"
+          },
+          "vinterface-config": {
+            "description": "Creating vterminal IF",
+            "enabled": true
+          }
+        }
+        ],
+          "vterminal-config": {
+            "description": "Creating vterminal"
+          }
+      },
+      {
+        "name": "vt_srvc1_2",
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "IF",
+          "vinterface-status": {
+            "mapped-port": "openflow:4:3",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:4",
+            "port-name": "s4-eth3"
+          },
+          "vinterface-config": {
+            "description": "Creating vterminal IF",
+            "enabled": true
+          },
+          "vinterface-input-filter": {
+            "vtn-flow-filter": [
+            {
+              "index": 10,
+              "condition": "cond_any",
+              "vtn-redirect-filter": {
+                "output": true,
+                "redirect-destination": {
+                  "terminal-name": "vt_srvc2_1",
+                  "interface-name": "IF"
+                }
+              }
+            }
+            ]
+          }
+        }
+        ],
+          "vterminal-config": {
+            "description": "Creating vterminal"
+          }
+      },
+      {
+        "name": "vt_srvc2_1",
+        "bridge-status": {
+          "state": "UP",
+          "path-faults": 0
+        },
+        "vinterface": [
+        {
+          "name": "IF",
+          "vinterface-status": {
+            "mapped-port": "openflow:3:4",
+            "state": "UP",
+            "entity-state": "UP"
+          },
+          "port-map-config": {
+            "vlan-id": 0,
+            "node": "openflow:3",
+            "port-name": "s3-eth4"
+          },
+          "vinterface-config": {
+            "description": "Creating vterminal IF",
+            "enabled": true
+          }
+        }
+        ],
+          "vterminal-config": {
+            "description": "Creating vterminal"
+          }
+      }
+    ]
+  }
+  ]
+}
+----
+
+===== Cleaning Up
+
+* To clean up both VTN and flowconditions.
+
+* You can delete the virtual tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* You can delete the flowcondition cond_1 and cond_any by executing
+  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[the remove-flow-condition RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:remove-flow-condition -d '{"input":{"name":"cond_1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:remove-flow-condition -d '{"input":{"name":"cond_any"}}'
+----
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Create_Mac_Map_In_VTN.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Create_Mac_Map_In_VTN.adoc
new file mode 100644 (file)
index 0000000..042a479
--- /dev/null
@@ -0,0 +1,178 @@
+==== How To Create Mac Map In VTN
+
+===== Overview
+
+* This page demonstrates Mac Mapping. This demonstration aims at enabling communication between two hosts and denying communication of 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 does not work in other releases.
+
+.Single Controller Mapping
+image::vtn/Single_Controller_Mapping.png["Single_Controller_Mapping",width=500]
+
+===== Requirement
+
+====== Configure mininet and create a topology
+
+* https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):Scripts:Mininet#Network_with_Multiple_Hosts_for_Service_Function_Chain[Script for emulating network with multiple hosts].
+* Before executing the mininet script, please confirm Controller is up and running.
+* Run the mininet script.
+* Replace <path> and <Controller IP> based on your environment.
+
+----
+sudo mn --controller=remote,ip=<Controller IP> --custom <path>\topo_handson.py --topo mytopo2
+----
+
+----
+mininet> net
+h11 h11-eth0:s1-eth1
+h12 h12-eth0:s1-eth2
+h21 h21-eth0:s2-eth1
+h22 h22-eth0:s2-eth2
+h23 h23-eth0:s2-eth3
+srvc1 srvc1-eth0:s3-eth3 srvc1-eth1:s4-eth3
+srvc2 srvc2-eth0:s3-eth4 srvc2-eth1:s4-eth4
+s1 lo:  s1-eth1:h11-eth0 s1-eth2:h12-eth0 s1-eth3:s2-eth4 s1-eth4:s3-eth2
+s2 lo:  s2-eth1:h21-eth0 s2-eth2:h22-eth0 s2-eth3:h23-eth0 s2-eth4:s1-eth3 s2-eth5:s4-eth1
+s3 lo:  s3-eth1:s4-eth2 s3-eth2:s1-eth4 s3-eth3:srvc1-eth0 s3-eth4:srvc2-eth0
+s4 lo:  s4-eth1:s2-eth5 s4-eth2:s3-eth1 s4-eth3:srvc1-eth1 s4-eth4:srvc2-eth1
+----
+
+NOTE:
+You need to manually add flow entries to OpenFlow switches in the Mininet. The flow entries are needed to forward packets to controller when there is a table-miss. This configuration is required only in case of OpenFlow 1.3 or using OVS versions (>2.1.1).
+
+----
+sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+sudo ovs-ofctl add-flow s4 priority=0,actions=output:CONTROLLER
+----
+
+===== Configuration
+
+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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"Tenant1"}}'
+----
+
+* Create a virtual bridge named vBridge1 in the tenant Tenant1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"Tenant1","bridge-name":"vBridge1"}}'
+----
+
+* 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
+  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[the set-mac-map RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-mac-map:set-mac-map -d '{"input":{"operation":"SET","allowed-hosts":["de:05:40:c4:96:76@0","62:c5:33:bc:d7:4e@0"],"tenant-name":"Tenant1","bridge-name":"vBridge1"}}'
+----
+
+NOTE: Mac Address of host h12 and host h22 can be obtained with the following command in mininet.
+
+----
+ mininet> h12 ifconfig
+ h12-eth0  Link encap:Ethernet  HWaddr 62:c5:33:bc:d7:4e
+ inet addr:10.0.0.2  Bcast:10.255.255.255  Mask:255.0.0.0
+ inet6 addr: fe80::60c5:33ff:febc:d74e/64 Scope:Link
+----
+
+----
+ mininet> h22 ifconfig
+ h22-eth0  Link encap:Ethernet  HWaddr de:05:40:c4:96:76
+ inet addr:10.0.0.4  Bcast:10.255.255.255  Mask:255.0.0.0
+ inet6 addr: fe80::dc05:40ff:fec4:9676/64 Scope:Link
+----
+
+* MAC Mapping will not be activated just by configuring it, a two end communication needs to be established to activate Mac Mapping.
+
+* Ping host h22 from host h12 in mininet, the ping will not happen between the hosts as only one way activation is enabled.
+
+----
+ mininet> h12 ping h22
+ PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
+ From 10.0.0.2 icmp_seq=1 Destination Host Unreachable
+ From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
+----
+
+* Ping host h12 from host h22 in mininet, now the ping communication will take place as the two end communication is enabled.
+
+----
+ mininet> h22 ping h12
+ PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
+ 64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=91.8 ms
+ 64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=0.510 ms
+----
+
+* After two end communication enabled, now host h12 can ping host h22
+
+----
+ mininet> h12 ping h22
+ PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
+ 64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.780 ms
+ 64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.079 ms
+----
+
+===== Verification
+
+* To view the configured Mac Map of allowed host execute the following command.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns/vtn/Tenant1/vbridge/vBridge1/mac-map
+----
+
+----
+{
+  "mac-map": {
+    "mac-map-status": {
+      "mapped-host": [
+      {
+        "mac-address": "c6:44:22:ba:3e:72",
+          "vlan-id": 0,
+          "port-id": "openflow:1:2"
+      },
+      {
+        "mac-address": "f6:e0:43:b6:3a:b7",
+        "vlan-id": 0,
+        "port-id": "openflow:2:2"
+      }
+      ]
+    },
+      "mac-map-config": {
+        "allowed-hosts": {
+          "vlan-host-desc-list": [
+          {
+            "host": "c6:44:22:ba:3e:72@0"
+          },
+          {
+            "host": "f6:e0:43:b6:3a:b7@0"
+          }
+          ]
+        }
+      }
+  }
+}
+----
+
+NOTE:
+When Deny is configured a broadcast message is sent to all the hosts connected to the vBridge, so a two end communication need not be establihed like allow, the hosts can communicate directly without any two way communication enabled.
+
+. To Deny host h23 communication from hosts connected on vBridge1, the following configuration can be applied.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-mac-map:set-mac-map -d '{"input":{"operation": "SET", "denied-hosts": ["0a:d3:ea:3d:8f:a5@0"],"tenant-name": "Tenant1","bridge-name": "vBridge1"}}'
+----
+
+===== Cleaning Up
+
+* You can delete the virtual tenant Tenant1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"Tenant1"}}'
+----
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Provision_Virtual_L2_Network.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Provision_Virtual_L2_Network.adoc
new file mode 100644 (file)
index 0000000..ae508b0
--- /dev/null
@@ -0,0 +1,190 @@
+==== How to provision virtual L2 Network
+
+===== Overview
+
+This page explains how to provision virtual L2 network using VTN Manager. This page targets Beryllium release, so the procedure described here does not work in other releases.
+
+.EXAMPLE DEMONSTRATING SINGLE CONTROLLER
+image::vtn/vtn-single-controller-topology-example.png[EXAMPLE DEMONSTRATING SINGLE CONTROLLER]
+
+===== Requirements
+
+====== Mininet
+
+* To provision OpenFlow switches, this page uses Mininet. Mininet details and set-up can be referred at the following page:
+https://wiki.opendaylight.org/view/OpenDaylight_Controller:Installation#Using_Mininet
+
+* Start Mininet and create three switches(s1, s2, and s3) and four hosts(h1, h2, h3, and h4) in it.
+
+----
+ mininet@mininet-vm:~$ sudo mn --controller=remote,ip=192.168.0.100 --topo tree,2
+----
+
+NOTE:
+Replace "192.168.0.100" with the IP address of OpenDaylight controller based on your environment.
+
+* you can check the topology that you have created by executing "net" command in the Mininet console.
+
+----
+ mininet> net
+ h1 h1-eth0:s2-eth1
+ h2 h2-eth0:s2-eth2
+ h3 h3-eth0:s3-eth1
+ h4 h4-eth0:s3-eth2
+ s1 lo:  s1-eth1:s2-eth3 s1-eth2:s3-eth3
+ s2 lo:  s2-eth1:h1-eth0 s2-eth2:h2-eth0 s2-eth3:s1-eth1
+ s3 lo:  s3-eth1:h3-eth0 s3-eth2:h4-eth0 s3-eth3:s1-eth2
+----
+
+* In this guide, you will provision the virtual L2 network to establish communication between h1 and h3.
+
+* You need to manually add flow entries to OpenFlow switches in the Mininet. The flow entries are needed to forward packets to controller when there is a table-miss. This configuration is required only in case of Openflow 1.3 or using OVS version(>2.1.1).
+
+----
+ sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+----
+
+===== Configuration
+
+To provision the virtual L2 network for the two hosts (h1 and h3), 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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* Create a virtual bridge named vbr1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1"}}'
+----
+
+* Create two interfaces into the virtual bridge by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if2"}}'
+----
+
+* Configure two mappings on the created interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface if1 of the virtual bridge will be mapped to the port "s2-eth1" of the switch "openflow:2" of the Mininet.
+*** The h1 is connected to the port "s2-eth1".
+
+** The interface if2 of the virtual bridge will be mapped to the port "s3-eth1" of the switch "openflow:3" of the Mininet.
+*** The h3 is connected to the port "s3-eth1".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:2", "port-name":"s2-eth1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if2", "node":"openflow:3", "port-name":"s3-eth1"}}'
+----
+
+===== Verification
+
+* Please execute ping from h1 to h3 to verify if the virtual L2 network for h1 and h3 is provisioned successfully.
+
+----
+ mininet> h1 ping h3
+ PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
+ 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=243 ms
+ 64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.341 ms
+ 64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.078 ms
+ 64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.079 ms
+----
+
+* You can also verify the configuration by executing the following REST API. It shows all configuration in VTN Manager.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns/
+----
+
+* The result of the command should be like this.
+
+----
+{
+  "vtns": {
+    "vtn": [
+    {
+      "name": "vtn1",
+        "vtenant-config": {
+          "idle-timeout": 300,
+          "hard-timeout": 0
+        },
+        "vbridge": [
+        {
+          "name": "vbr1",
+          "bridge-status": {
+            "state": "UP",
+            "path-faults": 0
+          },
+          "vbridge-config": {
+            "age-interval": 600
+          },
+          "vinterface": [
+          {
+            "name": "if2",
+            "vinterface-status": {
+              "entity-state": "UP",
+              "state": "UP",
+              "mapped-port": "openflow:3:3"
+            },
+            "vinterface-config": {
+              "enabled": true
+            },
+            "port-map-config": {
+              "vlan-id": 0,
+              "port-name": "s3-eth1",
+              "node": "openflow:3"
+            }
+          },
+          {
+            "name": "if1",
+            "vinterface-status": {
+              "entity-state": "UP",
+              "state": "UP",
+              "mapped-port": "openflow:2:1"
+            },
+            "vinterface-config": {
+              "enabled": true
+            },
+            "port-map-config": {
+              "vlan-id": 0,
+              "port-name": "s2-eth1",
+              "node": "openflow:2"
+            }
+          }
+          ]
+        }
+      ]
+    }
+    ]
+  }
+}
+----
+
+===== Cleaning Up
+
+* You can delete the virtual tenant vtn1 by executing
+https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Use_VTN_to_change_the_path_of_the_packet_flow.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_Use_VTN_to_change_the_path_of_the_packet_flow.adoc
new file mode 100644 (file)
index 0000000..f2d8095
--- /dev/null
@@ -0,0 +1,321 @@
+==== How to use VTN to change the path of the packet flow
+
+===== Overview
+
+* This page explains how to create specific VTN Pathmap using VTN Manager. This page targets Beryllium release, so the procedure described here does not work in other releases.
+
+.Pathmap
+image::vtn/Pathmap.png["Pathmap",width=500]
+
+===== Requirement
+
+* Save the mininet script given below as pathmap_test.py and run the mininet script in the mininet environment where Mininet is installed.
+
+* Create topology using the below mininet script:
+
+----
+ from mininet.topo import Topo
+ class MyTopo( Topo ):
+    "Simple topology example."
+    def __init__( self ):
+        "Create custom topo."
+        # Initialize topology
+        Topo.__init__( self )
+        # Add hosts and switches
+        leftHost = self.addHost( 'h1' )
+        rightHost = self.addHost( 'h2' )
+        leftSwitch = self.addSwitch( 's1' )
+        middleSwitch = self.addSwitch( 's2' )
+        middleSwitch2 = self.addSwitch( 's4' )
+        rightSwitch = self.addSwitch( 's3' )
+        # Add links
+        self.addLink( leftHost, leftSwitch )
+        self.addLink( leftSwitch, middleSwitch )
+        self.addLink( leftSwitch, middleSwitch2 )
+        self.addLink( middleSwitch, rightSwitch )
+        self.addLink( middleSwitch2, rightSwitch )
+        self.addLink( rightSwitch, rightHost )
+ topos = { 'mytopo': ( lambda: MyTopo() ) }
+----
+
+* After creating new file with the above script start the mininet as below,
+
+----
+sudo mn --controller=remote,ip=10.106.138.124 --custom pathmap_test.py --topo mytopo
+----
+
+NOTE: Replace "10.106.138.124" with the IP address of OpenDaylight controller based on your environment.
+
+----
+ mininet> net
+ h1 h1-eth0:s1-eth1
+ h2 h2-eth0:s3-eth3
+ s1 lo:  s1-eth1:h1-eth0 s1-eth2:s2-eth1 s1-eth3:s4-eth1
+ s2 lo:  s2-eth1:s1-eth2 s2-eth2:s3-eth1
+ s3 lo:  s3-eth1:s2-eth2 s3-eth2:s4-eth2 s3-eth3:h2-eth0
+ s4 lo:  s4-eth1:s1-eth3 s4-eth2:s3-eth2
+ c0
+----
+
+NOTE: You need to manually add flow entries to OpenFlow switches in the Mininet. The flow entries are needed to forward packets to controller when there is a table-miss. This configuration is required only in case of OpenFlow 1.3 or using OVS versions (>2.1.1).
+
+----
+ sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+----
+
+* Generate traffic by pinging between host h1 and host h2 before creating the portmaps respectively.
+
+----
+ mininet> h1 ping h2
+ PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
+ From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
+ From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
+ From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
+ From 10.0.0.1 icmp_seq=4 Destination Host Unreachable
+----
+
+===== Configuration
+
+* To change the path of the packet flow, 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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* Create a virtual bridge named vbr1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1"}}'
+----
+
+* Create two interfaces into the virtual bridge by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vinterface.html#update-vinterface[the update-vinterface RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if1"}}'
+----
+
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vinterface:update-vinterface -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1","interface-name":"if2"}}'
+----
+
+* Configure two mappings on the interfaces by executing
+  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[the set-port-map RPC].
+
+** The interface if1 of the virtual bridge will be mapped to the port "s2-eth1" of the switch "openflow:1" of the Mininet.
+
+*** The h1 is connected to the port "s1-eth1".
+
+** The interface if2 of the virtual bridge will be mapped to the port "s3-eth1" of the switch "openflow:3" of the Mininet.
+
+*** The h3 is connected to the port "s3-eth3".
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if1", "node":"openflow:1", "port-name":"s1-eth1"}}'
+----
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-port-map:set-port-map -d '{"input":{"tenant-name":"vtn1", "bridge-name":"vbr1", "interface-name":"if2", "node":"openflow:3", "port-name":"s3-eth3"}}'
+----
+
+* Genarate traffic by pinging between host h1 and host h2 after creating the portmaps respectively.
+
+----
+ mininet> h1 ping h2
+ PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
+ 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.861 ms
+ 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.101 ms
+ 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.101 ms
+----
+
+* Get the Dataflows information by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow.html#get-data-flow[the get-data-flow RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow:get-data-flow -d '{"input":{"tenant-name":"vtn1","mode":"DETAIL","node":"openflow:1","data-flow-port":{"port-id":1,"port-name":"s1-eth1"}}}'
+----
+
+* Create flowcondition named cond_1 by executing
+  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[the set-flow-condition RPC].
+
+** For option source and destination-network, get inet address of host h1 or host h2 from mininet
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:set-flow-condition -d '{"input":{"operation":"SET","present":"false","name":"cond_1", "vtn-flow-match":[{"vtn-ether-match":{},"vtn-inet-match":{"source-network":"10.0.0.1/32","protocol":1,"destination-network":"10.0.0.2/32"},"index":"1"}]}}'
+----
+
+* Create pathmap with flowcondition cond_1 by executing
+  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[the set-path-map RPC].
+
+----
+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
+  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[the set-path-policy RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-path-policy:set-path-policy -d '{"input":{"operation":"SET","id": "1","default-cost": "10000","vtn-path-cost": [{"port-desc":"openflow:1,3,s1-eth3","cost":"1000"},{"port-desc":"openflow:4,2,s4-eth2","cost":"1000"},{"port-desc":"openflow:3,3,s3-eth3","cost":"100000"}]}}'
+----
+
+===== Verification
+
+* Before applying Path policy get node information by executing get dataflow command.
+
+----
+"data-flow-info": [
+{
+  "physical-route": [
+  {
+    "physical-ingress-port": {
+      "port-name": "s3-eth3",
+        "port-id": "3"
+    },
+      "physical-egress-port": {
+        "port-name": "s3-eth1",
+        "port-id": "1"
+      },
+      "node": "openflow:3",
+      "order": 0
+  },
+  {
+    "physical-ingress-port": {
+      "port-name": "s2-eth2",
+      "port-id": "2"
+    },
+    "physical-egress-port": {
+      "port-name": "s2-eth1",
+      "port-id": "1"
+    },
+    "node": "openflow:2",
+    "order": 1
+  },
+  {
+    "physical-ingress-port": {
+      "port-name": "s1-eth2",
+      "port-id": "2"
+    },
+    "physical-egress-port": {
+      "port-name": "s1-eth1",
+      "port-id": "1"
+    },
+    "node": "openflow:1",
+    "order": 2
+  }
+  ],
+    "data-egress-node": {
+      "interface-name": "if1",
+      "bridge-name": "vbr1",
+      "tenant-name": "vtn1"
+    },
+    "data-egress-port": {
+      "node": "openflow:1",
+      "port-name": "s1-eth1",
+      "port-id": "1"
+    },
+    "data-ingress-node": {
+      "interface-name": "if2",
+      "bridge-name": "vbr1",
+      "tenant-name": "vtn1"
+    },
+    "data-ingress-port": {
+      "node": "openflow:3",
+      "port-name": "s3-eth3",
+      "port-id": "3"
+    },
+    "flow-id": 32
+  },
+}
+----
+
+* After applying Path policy get node information by executing get dataflow command.
+
+----
+"data-flow-info": [
+{
+  "physical-route": [
+  {
+    "physical-ingress-port": {
+      "port-name": "s1-eth1",
+        "port-id": "1"
+    },
+      "physical-egress-port": {
+        "port-name": "s1-eth3",
+        "port-id": "3"
+      },
+      "node": "openflow:1",
+      "order": 0
+  },
+  {
+    "physical-ingress-port": {
+      "port-name": "s4-eth1",
+      "port-id": "1"
+    },
+    "physical-egress-port": {
+      "port-name": "s4-eth2",
+      "port-id": "2"
+    },
+    "node": "openflow:4",
+    "order": 1
+  },
+  {
+    "physical-ingress-port": {
+      "port-name": "s3-eth2",
+      "port-id": "2"
+    },
+    "physical-egress-port": {
+      "port-name": "s3-eth3",
+      "port-id": "3"
+    },
+    "node": "openflow:3",
+    "order": 2
+  }
+  ],
+    "data-egress-node": {
+      "interface-name": "if2",
+      "bridge-name": "vbr1",
+      "tenant-name": "vtn1"
+    },
+    "data-egress-port": {
+      "node": "openflow:3",
+      "port-name": "s3-eth3",
+      "port-id": "3"
+    },
+    "data-ingress-node": {
+      "interface-name": "if1",
+      "bridge-name": "vbr1",
+      "tenant-name": "vtn1"
+    },
+    "data-ingress-port": {
+      "node": "openflow:1",
+      "port-name": "s1-eth1",
+      "port-id": "1"
+    },
+}
+----
+
+===== Cleaning Up
+
+* To clean up both VTN and flowcondition.
+
+* You can delete the virtual tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* You can delete the flowcondition cond_1 by executing
+  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[the remove-flow-condition RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow-condition:remove-flow-condition -d '{"input":{"name":"cond_1"}}'
+----
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_View_Dataflows.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_View_Dataflows.adoc
new file mode 100644 (file)
index 0000000..a6433f0
--- /dev/null
@@ -0,0 +1,246 @@
+==== How To View Dataflows
+
+===== Overview
+
+This page explains how to view Dataflows using VTN Manager. This page targets Beryllium 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 switch or a switch port or a L2 source host.
+
+The flow information provided by this feature are
+
+* Location of virtual node which maps the incoming packet and outgoing packets.
+
+* Location of physical switch port where incoming and outgoing packets is sent and received.
+
+* A sequence of physical route info which represents the packet route in the physical network.
+
+===== Configuration
+
+* To view Dataflow information, configure with VLAN Mapping
+  https://wiki.opendaylight.org/view/VTN:Mananger:How_to_test_Vlan-map_using_mininet.
+
+===== Verification
+
+After creating vlan mapping configuration from the above page, execute as below in mininet to get switch details.
+
+----
+ mininet> net
+ h1 h1-eth0.200:s1-eth1
+ h2 h2-eth0.300:s2-eth2
+ h3 h3-eth0.200:s2-eth3
+ h4 h4-eth0.300:s2-eth4
+ h5 h5-eth0.200:s3-eth2
+ h6 h6-eth0.300:s3-eth3
+ s1 lo:  s1-eth1:h1-eth0.200 s1-eth2:s2-eth1 s1-eth3:s3-eth1
+ s2 lo:  s2-eth1:s1-eth2 s2-eth2:h2-eth0.300 s2-eth3:h3-eth0.200 s2-eth4:h4-eth0.300
+ s3 lo:  s3-eth1:s1-eth3 s3-eth2:h5-eth0.200 s3-eth3:h6-eth0.300
+ c0
+ mininet>
+----
+
+Please execute ping from h1 to h3 to check hosts reachability.
+
+----
+ mininet> h1 ping h3
+ PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
+ 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=11.4 ms
+ 64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.654 ms
+ 64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.093 ms
+----
+
+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
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-flow.html#get-data-flow[the get-data-flow RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-flow:get-data-flow -d '{"input":{"tenant-name":"vtn1","mode":"DETAIL","node":"openflow:1","data-flow-port":{"port-id":"1","port-name":"s1-eth1"}}}'
+----
+
+----
+{
+  "output": {
+    "data-flow-info": [
+    {
+      "averaged-data-flow-stats": {
+        "packet-count": 1.1998800119988002,
+          "start-time": 1455241209151,
+          "end-time": 1455241219152,
+          "byte-count": 117.58824117588242
+      },
+        "physical-route": [
+        {
+          "physical-ingress-port": {
+            "port-name": "s2-eth3",
+            "port-id": "3"
+          },
+          "physical-egress-port": {
+            "port-name": "s2-eth1",
+            "port-id": "1"
+          },
+          "node": "openflow:2",
+          "order": 0
+        },
+        {
+          "physical-ingress-port": {
+            "port-name": "s1-eth2",
+            "port-id": "2"
+          },
+          "physical-egress-port": {
+            "port-name": "s1-eth1",
+            "port-id": "1"
+          },
+          "node": "openflow:1",
+          "order": 1
+        }
+      ],
+        "data-egress-node": {
+          "bridge-name": "vbr1",
+          "tenant-name": "vtn1"
+        },
+        "hard-timeout": 0,
+        "idle-timeout": 300,
+        "data-flow-stats": {
+          "duration": {
+            "nanosecond": 640000000,
+            "second": 362
+          },
+          "packet-count": 134,
+          "byte-count": 12932
+        },
+        "data-egress-port": {
+          "node": "openflow:1",
+          "port-name": "s1-eth1",
+          "port-id": "1"
+        },
+        "data-ingress-node": {
+          "bridge-name": "vbr1",
+          "tenant-name": "vtn1"
+        },
+        "data-ingress-port": {
+          "node": "openflow:2",
+          "port-name": "s2-eth3",
+          "port-id": "3"
+        },
+        "creation-time": 1455240855753,
+        "data-flow-match": {
+          "vtn-ether-match": {
+            "vlan-id": 200,
+            "source-address": "6a:ff:e2:81:86:bb",
+            "destination-address": "26:9f:82:70:ec:66"
+          }
+        },
+        "virtual-route": [
+        {
+          "reason": "VLANMAPPED",
+          "virtual-node-path": {
+            "bridge-name": "vbr1",
+            "tenant-name": "vtn1"
+          },
+          "order": 0
+        },
+        {
+          "reason": "FORWARDED",
+          "virtual-node-path": {
+            "bridge-name": "vbr1",
+            "tenant-name": "vtn1"
+          },
+          "order": 1
+        }
+      ],
+        "flow-id": 16
+    },
+    {
+      "averaged-data-flow-stats": {
+        "packet-count": 1.1998800119988002,
+        "start-time": 1455241209151,
+        "end-time": 1455241219152,
+        "byte-count": 117.58824117588242
+      },
+      "physical-route": [
+      {
+        "physical-ingress-port": {
+          "port-name": "s1-eth1",
+          "port-id": "1"
+        },
+        "physical-egress-port": {
+          "port-name": "s1-eth2",
+          "port-id": "2"
+        },
+        "node": "openflow:1",
+        "order": 0
+      },
+      {
+        "physical-ingress-port": {
+          "port-name": "s2-eth1",
+          "port-id": "1"
+        },
+        "physical-egress-port": {
+          "port-name": "s2-eth3",
+          "port-id": "3"
+        },
+        "node": "openflow:2",
+        "order": 1
+      }
+      ],
+        "data-egress-node": {
+          "bridge-name": "vbr1",
+          "tenant-name": "vtn1"
+        },
+        "hard-timeout": 0,
+        "idle-timeout": 300,
+        "data-flow-stats": {
+          "duration": {
+            "nanosecond": 587000000,
+            "second": 362
+          },
+          "packet-count": 134,
+          "byte-count": 12932
+        },
+        "data-egress-port": {
+          "node": "openflow:2",
+          "port-name": "s2-eth3",
+          "port-id": "3"
+        },
+        "data-ingress-node": {
+          "bridge-name": "vbr1",
+          "tenant-name": "vtn1"
+        },
+        "data-ingress-port": {
+          "node": "openflow:1",
+          "port-name": "s1-eth1",
+          "port-id": "1"
+        },
+        "creation-time": 1455240855747,
+        "data-flow-match": {
+          "vtn-ether-match": {
+            "vlan-id": 200,
+            "source-address": "26:9f:82:70:ec:66",
+            "destination-address": "6a:ff:e2:81:86:bb"
+          }
+        },
+        "virtual-route": [
+        {
+          "reason": "VLANMAPPED",
+          "virtual-node-path": {
+            "bridge-name": "vbr1",
+            "tenant-name": "vtn1"
+          },
+          "order": 0
+        },
+        {
+          "reason": "FORWARDED",
+          "virtual-node-path": {
+            "bridge-name": "vbr1",
+            "tenant-name": "vtn1"
+          },
+          "order": 1
+        }
+      ],
+        "flow-id": 15
+    }
+    ]
+  }
+}
+----
+
diff --git a/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_test_vlan_map_using_mininet.adoc b/manuals/user-guide/src/main/asciidoc/vtn/VTN_Manager_How_To_test_vlan_map_using_mininet.adoc
new file mode 100644 (file)
index 0000000..b86240c
--- /dev/null
@@ -0,0 +1,182 @@
+==== How To Test Vlan-Map In Mininet Environment
+
+===== 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 here does not work in other releases.
+
+.Example that demonstrates vlanmap testing in Mininet Environment
+image::vtn/vlanmap_using_mininet.png[Example that demonstrates vlanmap testing in Mininet Environment]
+
+===== Requirements
+Save the mininet script given below as vlan_vtn_test.py and run the mininet script in the mininet environment where Mininet is installed.
+
+===== Mininet Script
+https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_(VTN):Scripts:Mininet#Network_with_hosts_in_different_vlan
+
+* Run the mininet script
+
+----
+sudo mn --controller=remote,ip=192.168.64.13 --custom vlan_vtn_test.py --topo mytopo
+----
+
+NOTE:
+Replace "192.168.64.13" with the IP address of OpenDaylight controller based on your environment.
+
+* You can check the topology that you have created by executing "net" command in the Mininet console.
+
+----
+ mininet> net
+ h1 h1-eth0.200:s1-eth1
+ h2 h2-eth0.300:s2-eth2
+ h3 h3-eth0.200:s2-eth3
+ h4 h4-eth0.300:s2-eth4
+ h5 h5-eth0.200:s3-eth2
+ h6 h6-eth0.300:s3-eth3
+ s1 lo:  s1-eth1:h1-eth0.200 s1-eth2:s2-eth1 s1-eth3:s3-eth1
+ s2 lo:  s2-eth1:s1-eth2 s2-eth2:h2-eth0.300 s2-eth3:h3-eth0.200 s2-eth4:h4-eth0.300
+ s3 lo:  s3-eth1:s1-eth3 s3-eth2:h5-eth0.200 s3-eth3:h6-eth0.300
+ c0
+----
+
+NOTE:
+You need to manually add flow entries to OpenFlow switches in the Mininet. The flow entries are needed to forward packets to controller when there is a table-miss. This configuration is required only in case of OpenFlow 1.3 or using OVS versions (>2.1.1).
+
+----
+ sudo ovs-ofctl add-flow s1 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s2 priority=0,actions=output:CONTROLLER
+ sudo ovs-ofctl add-flow s3 priority=0,actions=output:CONTROLLER
+----
+
+===== Configuration
+
+To test vlan-map, execute REST API provided by VTN Manager as follows.
+
+* Create a virtual tenant named vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#update-vtn[the update-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:update-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
+* Create a virtual bridge named vbr1 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr1"}}'
+----
+
+* Configure a vlan map with vlanid 200 for vBridge vbr1 by executing
+  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[the add-vlan-map RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vlan-map:add-vlan-map -d '{"input":{"vlan-id":200,"tenant-name":"vtn1","bridge-name":"vbr1"}}'
+----
+
+* Create a virtual bridge named vbr2 in the tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn-vbridge.html#update-vbridge[the update-vbridge RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vbridge:update-vbridge -d '{"input":{"tenant-name":"vtn1","bridge-name":"vbr2"}}'
+----
+
+* Configure a vlan map with vlanid 300 for vBridge vbr2 by executing
+  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[the add-vlan-map RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn-vlan-map:add-vlan-map -d '{"input":{"vlan-id":300,"tenant-name":"vtn1","bridge-name":"vbr2"}}'
+----
+
+===== Verification
+
+* Please execute pingall in mininet environment to view the host reachability.
+
+----
+ mininet> pingall
+ Ping: testing ping reachability
+ h1 -> X h3 X h5 X
+ h2 -> X X h4 X h6
+ h3 -> h1 X X h5 X
+ h4 -> X h2 X X h6
+ h5 -> h1 X h3 X X
+ h6 -> X h2 X h4 X
+----
+
+* You can also verify the configuration by executing the following REST API. It shows all configurations in VTN Manager.
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X GET http://localhost:8181/restconf/operational/vtn:vtns
+----
+
+* The result of the command should be like this.
+
+----
+{
+  "vtns": {
+    "vtn": [
+    {
+      "name": "vtn1",
+        "vtenant-config": {
+          "hard-timeout": 0,
+          "idle-timeout": 300,
+          "description": "creating vtn"
+        },
+        "vbridge": [
+        {
+          "name": "vbr2",
+          "vbridge-config": {
+            "age-interval": 600,
+            "description": "creating vbr2"
+          },
+          "bridge-status": {
+            "state": "UP",
+            "path-faults": 0
+          },
+          "vlan-map": [
+          {
+            "map-id": "ANY.300",
+            "vlan-map-config": {
+              "vlan-id": 300
+            },
+            "vlan-map-status": {
+              "active": true
+            }
+          }
+          ]
+        },
+        {
+          "name": "vbr1",
+          "vbridge-config": {
+            "age-interval": 600,
+            "description": "creating vbr1"
+          },
+          "bridge-status": {
+            "state": "UP",
+            "path-faults": 0
+          },
+          "vlan-map": [
+          {
+            "map-id": "ANY.200",
+            "vlan-map-config": {
+              "vlan-id": 200
+            },
+            "vlan-map-status": {
+              "active": true
+            }
+          }
+          ]
+        }
+      ]
+    }
+    ]
+  }
+}
+----
+
+===== Cleaning Up
+
+* You can delete the virtual tenant vtn1 by executing
+  https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-beryllium/lastSuccessfulBuild/artifact/manager/model/target/site/models/vtn.html#remove-vtn[the remove-vtn RPC].
+
+----
+curl --user "admin":"admin" -H "Content-type: application/json" -X POST http://localhost:8181/restconf/operations/vtn:remove-vtn -d '{"input":{"tenant-name":"vtn1"}}'
+----
+
index ce8df8f51651ff2fe34daa8e73641e6524cc7c67..d665054ab2a31647576c971cca582a3961d1ec64 100644 (file)
@@ -2,7 +2,7 @@
 
 This guide describes how to set up OpenStack for integration with OpenDaylight Controller.
 
-While OpenDaylight Controller provides several ways to integrate with OpenStack, this guide focus on the way which uses VTN features available on OpenDaylight controller.In the integration, VTN Manager work as network service provider for OpenStack.
+While OpenDaylight Controller provides several ways to integrate with OpenStack, this guide focus on the way which uses VTN features available on OpenDaylightIn the integration, VTN Manager work as network service provider for OpenStack.
 
 VTN Manager features, enable OpenStack to work in pure OpenFlow environment in which all switches in data plane are OpenFlow switch.
 
@@ -82,11 +82,38 @@ NOTE: The entries for eth1 are not mandatory, If not set, we may have to manuall
 - Login again and check the output of ifconfig to ensure that both interfaces are listed
 
 ====  OpenDaylight Settings and Execution
-=====  vtn.ini
- * VTN uses the configuration parameters from  'vtn.ini' file for the OpenStack integration.
+
+=====  VTN Configuration for OpenStack Integration:
+
+ * VTN uses the configuration parameters from  "90-vtn-neutron.xml" file for the OpenStack integration.
  * These values will be set for the OpenvSwitch, in all the participating OpenStack nodes.
- * A configuration file 'vtn.ini'''' needs to be created manually in the 'configuration' directory.
- * The contents of 'vtn.ini' should be as follows:
+ * 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,
+
+
+   http://www.opendaylight.org/software/downloads
+
+
+ * cd "distribution-karaf-0.4.0-Beryllium" and run karaf by using the following command "./bin/karaf".
+ * Install the below feature to generate "90-vtn-neutron.xml",
+
+----
+ feature:install odl-vtn-manager-neutron
+----
+
+ * Check "90-vtn-neutron.xml" file from the following path "distribution-karaf-0.4.0-Beryllium/etc/opendaylight/karaf/".
+
+TIP: After running OpenDaylight, please ensure OpenDaylight listens to the ports:6633,6653, 6640 and 8080
+
+TIP: Please allow the ports in firewall for the devstack to be able to communicate with OpenDaylight.
+
+NOTE:
+
+* 6633/6653 - OpenFlow Ports
+* 6640 - Open vSwitch Manager Port
+* 8282 - Port for REST API
+
+ * The contents of "90-vtn-neutron.xml" should be as follows:
 
 
 bridgename=br-int
@@ -95,7 +122,7 @@ protocols=OpenFlow13
 failmode=secure
 
  * The values of the configuration parameters must be changed based on the user environment.
- * Especially, "portname" should be carefully configured, because if the value is wrong, OpenDaylight controller fails to forward packets.
+ * Especially, "portname" should be carefully configured, because if the value is wrong, OpenDaylight fails to forward packets.
  * Other parameters works fine as is for general use cases.
  ** bridgename
  *** The name of the bridge in Open vSwitch, that will be created by OpenDaylight Controller.
@@ -103,7 +130,7 @@ failmode=secure
  ** portname
  *** The name of the port that will be created in the vbridge in Open vSwitch.
  *** This must be the same name of the interface of OpenStack Nodes which is used for interconnecting OpenStack Nodes in data plane.(in our case:eth1)
- *** By default, if vtn.ini is not created, VTN uses ens33 as portname.
+ *** By default, if 90-vtn-neutron.xml is not created, VTN uses ens33 as portname.
  ** protocols
  *** OpenFlow protocol through which OpenFlow Switch and Controller communicate.
  *** The values can be OpenFlow13 or OpenFlow10.
@@ -111,26 +138,11 @@ failmode=secure
  *** The value can be "standalone" or "secure".
  *** Please use "secure" for general use cases.
 
-====  Start OpenDaylight
-
- * Please install the feature *odl-vtn-manager-neutron* that provides the integration with Neutron interface.
-
-feature:install odl-vtn-manager-neutron
-
-TIP: After running OpenDaylight, please ensure OpenDaylight listens to the ports:6633,6653, 6640 and 8080
-
-TIP: Please allow the ports in firewall for the devstack to be able to communicate with OpenDaylight.
-
-NOTE:
-* 6633/6653 - OpenFlow Ports
-* 6640 - Open vSwitch Manager Port
-* 8282 - Port for REST API
-
 ====  Devstack Setup
 
 ===== VTN Devstack Script
 * The local.conf is a user-maintained settings file. This allows all custom settings for DevStack to be contained in a single file. This file is processed strictly in sequence.
-The following datas are needed to be set in the local.conf file:
+The following data are needed to be set in the local.conf file:
 * Set the Host_IP as the detection is unreliable.
 * Set FLOATING_RANGE to a range not used on the local network, i.e. 192.168.1.224/27. This configures IP addresses ending in 225-254 to be used as floating IPs.
 * Set FLAT_INTERFACE to the Ethernet interface that connects the host to your local network. This is the interface that should be configured with the static IP address mentioned above.
@@ -342,18 +354,20 @@ NOTE:
 ** git clone https://git.openstack.org/openstack-dev/devstack;
 * Switch to stable/Juno Version branch
 ** cd devstack
-** git checkout stable/juno
+
+
+   git checkout stable/juno
 
 NOTE:
    If you want to use stable/kilo Version branch, Please execute the below command in devstack folder
-   
-   
+
+
    git checkout stable/kilo
 
 NOTE:
    If you want to use stable/liberty Version branch, Please execute the below command in devstack folder
-   
-   
+
+
    git checkout stable/liberty
 
 ===== Stack Control Node
@@ -393,7 +407,7 @@ NOTE:
 * The output of the ovs-vsctl show will be similar to the one seen in control node.
 
 ===== Additional Verifications
-* Please visit the OpenDaylight DLUX GUI after stacking all the nodes, http://<ODL_IP_ADDRESS>:8181/dlux/index.html. The switches, topology and the ports that are currently read can be validated.
+* Please visit the OpenDaylight DLUX GUI after stacking all the nodes, http://<ODL_IP_ADDRESS>:8181/index.html. The switches, topology and the ports that are currently read can be validated.
 
 TIP: If the interconnected between the Open vSwitch is not seen, Please bring up the interface for the dataplane manually using the below comamnd
 
index 582366ad75b1fdc6ec19c96305f77650a1490670..44d1db607685ad8124ac0dbb4148e1bbd449deff 100644 (file)
@@ -17,7 +17,7 @@ It is implemented as two major components
 * <<_vtn_coordinator,VTN Coordinator>>
 
 ==== VTN Manager
-An OpenDaylight Controller Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in ODL controller. VTN Manager is implemented as one plugin to the OpenDaylight controller. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the ODC Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
+An OpenDaylight Plugin that interacts with other modules to implement the components of the VTN model. It also provides a REST interface to configure VTN components in OpenDaylight. VTN Manager is implemented as one plugin to the OpenDaylight. This provides a REST interface to create/update/delete VTN components. The user command in VTN Coordinator is translated as REST API to VTN Manager by the OpenDaylight Driver component. In addition to the above mentioned role, it also provides an implementation to the OpenStack L2 Network Functions API.
 
 ===== Features Overview
 
@@ -34,8 +34,8 @@ Here is an example of how to create a virtual tenant network.
 ----
  curl --user "admin":"admin" -H "Accept: application/json" -H \
  "Content-type: application/json" -X POST \
- http://localhost:8282/controller/nb/v2/vtn/default/vtns/Tenant1 \
- -d '{"description": "My First Virtual Tenant Network"}'
+ http://localhost:8181/restconf/operations/vtn:update-vtn \
+ -d '{"input":{"tenant-name":"vtn1"}}'
 ----
 
 You can check the list of all tenants by executing the following command.
@@ -43,16 +43,16 @@ You can check the list of all tenants by executing the following command.
 ----
  curl --user "admin":"admin" -H "Accept: application/json" -H \
  "Content-type: application/json" -X GET \
- http://localhost:8282/controller/nb/v2/vtn/default/vtns
+ http://localhost:8181/restconf/operational/vtn:vtns
 ----
 
-REST API documentation for VTN Manager, please refer: https://jenkins.opendaylight.org/releng/view/vtn/job/vtn-merge-master/lastSuccessfulBuild/artifact/manager/northbound/target/site/wsdocs/rest.html
+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/
 
 ==== VTN Coordinator
 
-The VTN Coordinator is an external application that provides a REST interface for a user to use the VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple controller orchestration. It realizes Virtual Tenant Network (VTN) provisioning in OpenDaylight Controllers (ODC). In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator has been implemented as an external application to the OpenDaylight controller. This component is responsible for the VTN virtualization. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using the OpenDaylight controller. It uses OpenDaylight APIs (REST) to construct the virtual network in ODCs. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple ODCs by coordinating across ODCs.
+The VTN Coordinator is an external application that provides a REST interface for an user to use OpenDaylight VTN Virtualization. It interacts with VTN Manager plugin to implement the user configuration. It is also capable of multiple OpenDaylight orchestration. It realizes Virtual Tenant Network (VTN) provisioning in OpenDaylight instances. In the OpenDaylight architecture VTN Coordinator is part of the network application, orchestration and services layer. VTN Coordinator will use the REST interface exposed by the VTN Manger to realize the virtual network using OpenDaylight. It uses OpenDaylight APIs (REST) to construct the virtual network in OpenDaylight instances. It provides REST APIs for northbound VTN applications and supports virtual networks spanning across multiple OpenDaylight by coordinating across OpenDaylight.
 
-For VTN Coordinator REST API, please refer: https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_%28VTN%29:VTN_Coordinator:RestApi
+For VTN Coordinator REST API, please refer to: https://wiki.opendaylight.org/view/OpenDaylight_Virtual_Tenant_Network_%28VTN%29:VTN_Coordinator:RestApi
 
 ==== Network Virtualization Function
 
@@ -145,7 +145,7 @@ The vRouter transfers IPv4 packets between vBridges. The vRouter supports routin
   When an IP address is registered with a virtual interface of the vRouter, the default routing information for that interface is registered. It is also possible to statically register routing information for a virtual interface.
 * ARP learning function
   The vRouter associates a destination IP address, MAC address and a virtual interface, based on an ARP request to its host or a reply packet for an ARP request, and maintains this information in an ARP table prepared for each routing domain. The registered ARP entry is retained until the aging timer, described later, times out. The vRouter transmits an ARP request on an individual aging timer basis and deletes the associated entry from the ARP table if no reply is returned. For static ARP learning, you can register ARP entry information manually.
-*DHCP relay agent function
+* DHCP relay agent function
   The vRouter also provides the DHCP relay agent function.
 
 ==== Flow Filter Functions
@@ -174,6 +174,7 @@ VLAN priority control and DSCP marking are also supported.
 
 [cols="2*"]
 |===
+| Action | Function
 | Pass
 | Pass particular packets matching the specified conditions.
 
index a756039cae79647406c571da75f1a3147e73910d..fc2aa1cebb56c045167d6fe4692cc284e1b97609 100644 (file)
@@ -4,7 +4,23 @@ include::VTN_Overview.adoc[VTN Overview]
 
 include::VTN_OpenStack_Support-user.adoc[VTN OpenStack Configuration]
 
-=== VTN Usage Examples
+=== VTN Manager Usage Examples
+
+include::VTN_Manager_How_To_Provision_Virtual_L2_Network.adoc[How to provision virtual L2 Network]
+
+include::VTN_Manager_How_To_test_vlan_map_using_mininet.adoc[How To Test Vlan-map using Mininet Environment]
+
+include::VTN_Manager_How_To_Configure_Service_Function_Chaining_Support.adoc[How To Configure Service Function Chaining Support using Mininet Environmen]
+
+include::VTN_Manager_How_To_View_Dataflows.adoc[How To View Dataflow in VTN Manager]
+
+include::VTN_Manager_How_To_Create_Mac_Map_In_VTN.adoc[How To Create Mac Map In VTN]
+
+include::VTN_Manager_How_To_Configure_Flowfilters.adoc[How To Configure Flow Filters using VTN]
+
+include::VTN_Manager_How_To_Use_VTN_to_change_the_path_of_the_packet_flow.adoc[How To Use VTN to change the path of the packet flow]
+
+=== VTN Coordinator Usage Examples
 
 include::VTN_How_To_configure_L2_Network_with_Single_Controller.adoc[How to configure L2 Network with Single Controller]
 
@@ -23,3 +39,4 @@ include::VTN_How_To_Use_VTN_to_make_packets_take_different_paths.adoc[Change Tra
 include::VTN_How_To_Troubleshoot_Coordinator_Installation.adoc[Troubleshoot VTN Coordinator]
 
 include::VTN_How_To_Support_for_Microsoft_SCVMM.adoc[Support for Microsoft SCVMM 2012 R2 with ODL VTN]
+
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Flow_filter_example.png b/manuals/user-guide/src/main/resources/images/vtn/Flow_filter_example.png
new file mode 100644 (file)
index 0000000..1dd88d8
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Flow_filter_example.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Mininet_Configuration.png b/manuals/user-guide/src/main/resources/images/vtn/Mininet_Configuration.png
new file mode 100644 (file)
index 0000000..bd14105
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Mininet_Configuration.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service.png b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service.png
new file mode 100644 (file)
index 0000000..0d1f5fd
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_LLD.png b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_LLD.png
new file mode 100644 (file)
index 0000000..b87a51f
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_LLD.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_Verification.png b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_Verification.png
new file mode 100644 (file)
index 0000000..0d1f5fd
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_One_Service_Verification.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services.png b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services.png
new file mode 100644 (file)
index 0000000..7886897
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services_LLD.png b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services_LLD.png
new file mode 100644 (file)
index 0000000..3053386
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Service_Chaining_With_Two_Services_LLD.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Single_Controller_Mapping.png b/manuals/user-guide/src/main/resources/images/vtn/Single_Controller_Mapping.png
new file mode 100644 (file)
index 0000000..378b86d
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Single_Controller_Mapping.png differ
diff --git a/manuals/user-guide/src/main/resources/images/vtn/Tenant2.png b/manuals/user-guide/src/main/resources/images/vtn/Tenant2.png
new file mode 100644 (file)
index 0000000..4d3caa5
Binary files /dev/null and b/manuals/user-guide/src/main/resources/images/vtn/Tenant2.png differ