Added initial draft for samplevnf useguide 99/39699/5
authorDeepak S <deepak.s@linux.intel.com>
Sat, 19 Aug 2017 03:02:05 +0000 (20:02 -0700)
committerDeepak S <deepak.s@linux.intel.com>
Mon, 21 Aug 2017 13:02:05 +0000 (13:02 +0000)
JIRA: SAMPLEVNF-77
Change-Id: Ib537b36ae82361754762a627ae942d99b4966856
Signed-off-by: Deepak S <deepak.s@linux.intel.com>
docs/testing/user/userguide/01-introduction.rst [new file with mode: 0755]
docs/testing/user/userguide/02-methodology.rst [new file with mode: 0644]
docs/testing/user/userguide/03-architecture.rst [new file with mode: 0755]
docs/testing/user/userguide/04-installation.rst [new file with mode: 0644]
docs/testing/user/userguide/05-BKMs.rst [new file with mode: 0644]
docs/testing/user/userguide/glossary.rst [new file with mode: 0644]
docs/testing/user/userguide/images/deploy_type.png [new file with mode: 0644]
docs/testing/user/userguide/index.rst
docs/testing/user/userguide/references.rst [new file with mode: 0644]

diff --git a/docs/testing/user/userguide/01-introduction.rst b/docs/testing/user/userguide/01-introduction.rst
new file mode 100755 (executable)
index 0000000..bb92af6
--- /dev/null
@@ -0,0 +1,62 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+============
+Introduction
+============
+
+**Welcome to SampleVNF's documentation !**
+
+.. _Pharos: https://wiki.opnfv.org/pharos
+.. _SampleVNF: https://wiki.opnfv.org/samplevnf
+.. _Technical_Briefs: https://wiki.opnfv.org/display/SAM/Technical+Briefs+of+VNFs
+
+SampleVNF_ is an OPNFV Project.
+
+The project's goal is to provides a placeholder for various sample VNF
+(Virtual Network Function (:term:`VNF`)) development which includes example
+reference architecture and optimization methods related to VNF/Network service
+for high performance VNFs. This project provides benefits to other OPNFV
+projects like Functest, Models, yardstick etc to perform real life
+use-case based testing and VNF/NFVi characterization for the same.
+
+The Project's scope to create a repository of sample VNFs to help VNF
+benchmarking and NFVi characterization with real world traffic and host a
+common development environment for developing the VNF using optimized libraries.
+Also, Develop a test framework in yardstick  to enable
+Virtual Network Function (:term:`VNF`) / Network Function Virtualization Infrastructure
+(:term:`NFVI`) verification.
+
+*SampleVNF* is used in OPNFV for characterization of NFVi/VNF on OPNFV infrastructure
+and some of the OPNFV features.
+
+.. seealso:: Pharos_ for information on OPNFV community labs and this
+   Technical_Briefs_ for an overview of *SampleVNF*
+
+
+About This Document
+===================
+
+This document consists of the following chapters:
+
+* Chapter :doc:`01-introduction` provides a brief introduction to *SampleVNF*
+  project's background and describes the structure of this document.
+
+* Chapter :doc:`02-methodology` describes the methodology implemented by the
+  *SampleVNF* Project for :term:`VNF` and :term:`NFVI` verification.
+
+* Chapter :doc:`03-architecture` provides information on the software architecture
+  of *SampleVNF*.
+
+* Chapter :doc:`04-installation` provides instructions to install *SampleVNF*.
+
+* Chapter :doc:`05-BKMs` provides example on how installing and running *SampleVNF*.
+
+Contact SampleVNF
+=================
+
+Feedback? `Contact us`_
+
+.. _Contact us: opnfv-users@lists.opnfv.org
diff --git a/docs/testing/user/userguide/02-methodology.rst b/docs/testing/user/userguide/02-methodology.rst
new file mode 100644 (file)
index 0000000..9f377d8
--- /dev/null
@@ -0,0 +1,85 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+===========
+Methodology
+===========
+
+Abstract
+========
+
+This chapter describes the methodology/overview of SampleVNF project from
+the perspective of a :term:`VNF` and verifying the :term:`NFVI`
+
+Overview
+========
+This project provides a placeholder for various sample VNF (Virtual Network Function (:term:`VNF`))
+development which includes example reference architecture and optimization methods
+related to VNF/Network service for high performance VNFs.
+
+The sample VNFs are Open Source approximations* of Telco grade :term:`VNF`
+using optimized VNF + NFVi Infrastructure libraries, with Performance Characterization of Sample† Traffic Flows.
+• * Not a commercial product. Encourage the community to contribute and close the feature gaps.
+• † No Vendor/Proprietary Workloads 
+
+ETSI-NFV
+========
+
+.. _NFV-TST001: http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf
+.. _SampleVNFtst: https://wiki.opnfv.org/display/SAM/Technical+Briefs+of+VNFs
+.. _Yardstick_NSB: http://artifacts.opnfv.org/yardstick/docs/testing_user_userguide/index.html#document-13-nsb-overview
+
+SampleVNF Test Infrastructure (NSB (Yardstick_NSB_))in yardstick helps to facilitate
+consistent/repeatable methodologies for characterizing & validating the
+sample VNFs (:term:`VNF`) through OPEN SOURCE VNF approximations.
+
+Network Service Benchmarking in yardstick framework follows ETSI GS NFV-TST001_
+to verify/characterize both :term:`NFVI` & :term:`VNF`
+
+The document ETSI GS NFV-TST001_, "Pre-deployment Testing; Report on Validation
+of NFV Environments and Services", recommends methods for pre-deployment
+testing of the functional components of an NFV environment.
+
+The SampleVNF project implements the methodology described in chapter 13 of Yardstick_NSB_,
+"Pre-deployment validation of NFV infrastructure".
+
+The methodology consists in decomposing the typical :term:`VNF` work-load
+performance metrics into a number of characteristics/performance vectors, which
+each can be represented by distinct test-cases.
+
+.. seealso:: SampleVNFtst_ for material on alignment ETSI TST001 and SampleVNF.
+
+Metrics
+=======
+
+The metrics, as defined by ETSI GS NFV-TST001, are shown in
+:ref:`Table1 <table2_1>`.
+
+.. _table2_1:
+
+**Table 1 - Performance/Speed Metrics**
+
++---------+-------------------------------------------------------------------+
+| Category| Performance/Speed                                                 |
+|         |                                                                   |
++---------+-------------------------------------------------------------------+
+| Network | * Throughput per NFVI node (frames/byte per second)               |
+|         | * Throughput provided to a VM (frames/byte per second)            |
+|         | * Latency per traffic flow                                        |
+|         | * Latency between VMs                                             |
+|         | * Latency between NFVI nodes                                      |
+|         | * Packet delay variation (jitter) between VMs                     |
+|         | * Packet delay variation (jitter) between NFVI nodes              |
+|         |                                                                   |
++---------+-------------------------------------------------------------------+
+
+.. note:: The description in this OPNFV document is intended as a reference for
+  users to understand the scope of the SampleVNF Project and the
+  deliverables of the SampleVNF framework. For complete description of
+  the methodology, please refer to the ETSI document.
+
+.. rubric:: Footnotes
+.. [1] To be included in future deliveries.
+
diff --git a/docs/testing/user/userguide/03-architecture.rst b/docs/testing/user/userguide/03-architecture.rst
new file mode 100755 (executable)
index 0000000..4c4b7e6
--- /dev/null
@@ -0,0 +1,113 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+============
+Architecture
+============
+
+Abstract
+========
+This chapter describes the samplevnf  software architecture.
+we will introduce it VNFs. More technical details will be introduced in this chapter.
+
+Overview
+========
+
+Architecture overview
+---------------------
+This project provides a placeholder for various sample VNF (Virtual Network Function)
+development which includes example reference architecture and optimization methods
+related to VNF/Network service for high performance VNFs.
+
+The sample VNFs are Open Source approximations* of Telco grade VNF’s using
+optimized VNF + NFVi Infrastructure libraries, with Performance Characterization
+of Sample† Traffic Flows.
+
+::
+
+ * Not a commercial product. Encourage the community to contribute and close the feature gaps.
+ † No Vendor/Proprietary Workloads
+
+t helps to facilitate deterministic & repeatable bench-marking on Industry
+standard high volume Servers. It augments well with a Test Infrastructure to
+help facilitate consistent/repeatable methodologies for characterizing &
+validating the sample VNFs through OPEN SOURCE VNF approximations and test tools.
+The VNFs belongs to this project are never meant for field deployment.
+All the VNF source code part of this project requires Apache License Version 2.0.
+
+Supported deployment:
+----------------------
+* Bare-Metal - All VNFs can run on a Bare-Metal DUT
+* Standalone Virtualization: All VNFs can run on SV like VPP as switch, ovs,
+  ovs-dpdk, srioc
+* Openstack: Latest Openstack supported
+
+VNF supported
+-------------
+ - Carrier Grade Network Address Translation (CG-NAT) VNF
+   ::
+      The Carrier Grade Network Address and port Translation (vCG-NAPT) is a
+      VNF approximation extending the life of the service providers IPv4 network
+      infrastructure and mitigate IPv4 address exhaustion by using address and
+      port translation in large scale. It processes the traffic in both the directions.
+      It also supports the connectivity between the IPv6 access network to
+      IPv4 data network using the IPv6 to IPv4 address translation and vice versa.
+ - Firewall (vFW) VNF
+   ::
+      The Virtual Firewall (vFW) is a VNF approximation serving as a state full
+      L3/L4 packet filter with connection tracking enabled for TCP, UDP and ICMP.
+      The VNF could be a part of Network Services (industry use-cases) deployed
+      to secure the enterprise network from un-trusted network.
+ - Access Control List (vACL) VNF
+   ::
+      The vACL vNF is implemented as a DPDK application using VNF Infrastructure
+      Library (VIL). The VIL implements common VNF internal, optimized for
+      Intel Architecture functions like load balancing between cores, IPv4/IPv6
+      stack features, and interface to NFV infrastructure like OVS or SRIOV.
+ - UDP_Replay
+   ::
+      The UDP Replay is implemented as a DPDK application using VNF Infrastructure
+      Library (VIL). Performs as a refelector of all the traffic on given port.
+ - Prox - Packet pROcessing eXecution engine.
+   ::
+      Packet pROcessing eXecution Engine (PROX) which is a DPDK application.
+      PROX can do operations on packets in a highly configurable manner.
+      The PROX application is also displaying performance statistics that can
+      be used for performance investigations. 
+      Intel® DPPD - PROX is an application built on top of DPDK which allows
+      creating software architectures, such as the one depicted below, through
+      small and readable configuration files.
+
+Test Framework
+--------------
+
+.. _Yardstick_NSB: http://artifacts.opnfv.org/yardstick/docs/testing_user_userguide/index.html#document-13-nsb-overview
+
+SampleVNF Test Infrastructure (NSB (Yardstick_NSB_))in yardstick helps to facilitate
+consistent/repeatable methodologies for characterizing & validating the
+sample VNFs (:term:`VNF`) through OPEN SOURCE VNF approximations.
+
+
+Network Service Benchmarking in yardstick framework follows ETSI GS NFV-TST001_
+to verify/characterize both :term:`NFVI` & :term:`VNF`
+
+For more inforamtion refer, 
+
+SampleVNF Directory structure
+=============================
+
+**samplevnf/** - SampleVNF main directory.
+
+*common/* - Common re-useable code like arp, nd, packet fwd etc
+
+*docs/* - All documentation is stored here, such as configuration guides,
+          user guides and SampleVNF descriptions.
+
+*tools/* - Currently contains tools to build image for VMs which are deployed
+           by Heat. Currently contains helper scripts like install, setup env 
+
+*VNFs/* - all VNF source code directory.
+
+*VNF_Catalogue/* - Collection of all  Open Source VNFs
diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst
new file mode 100644 (file)
index 0000000..265f4e6
--- /dev/null
@@ -0,0 +1,258 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+SampleVNF Installation
+======================
+
+
+Abstract
+--------
+
+This project provides a placeholder for various sample VNF
+(Virtual Network Function (:term `VNF`)) development which includes example
+reference architecture and optimization methods related to VNF/Network service
+for high performance VNFs.
+The sample VNFs are Open Source approximations* of Telco grade VNF’s using
+optimized VNF + NFVi Infrastructure libraries, with Performance Characterization
+of Sample† Traffic Flows.
+
+::
+  • * Not a commercial product. Encourage the community to contribute and close the feature gaps.
+  • † No Vendor/Proprietary Workloads 
+
+SampleVNF supports installation directly in Ubuntu. The installation procedure
+are detailed in the sections below.
+
+The steps needed to run SampleVNF are:
+1. Install and Build SampleVNF.
+2. deploy the VNF on the target and modify the config based on the
+   Network under test
+3. Run the traffic generator to generate the traffic.
+
+Prerequisites
+-------------
+
+Supported Test setup:
+--------------------
+The device under test (DUT) consists of a system following;
+  * A single or dual processor and PCH chip, except for System on Chip (SoC) cases
+  * DRAM memory size and frequency (normally single DIMM per channel)
+  * Specific Intel Network Interface Cards (NICs)
+  * BIOS settings noting those that updated from the basic settings
+  * DPDK build configuration settings, and commands used for tests
+Connected to the DUT is an IXIA* or Software Traffic generator like pktgen or TRex,
+simulation platform to generate packet traffic to the DUT ports and
+determine the throughput/latency at the tester side.
+
+Below are the supported/tested (:term `VNF`) deployment type.
+.. image:: images/deploy_type.png
+   :width: 800px
+   :alt: SampleVNF supported topology
+
+Hardware & Software Ingredients
+-------------------------------
+.. code-block:: console
+   +-----------+------------------+
+   | Item      | Description      |
+   +-----------+------------------+
+   | Memory    | Min 20GB         |
+   +-----------+------------------+
+   | NICs      | 2 x 10G          |
+   +-----------+------------------+
+   | OS        | Ubuntu 16.04 LTS |
+   +-----------+------------------+
+   | kernel    |  4.4.0-34-generic|
+   +-----------+------------------+
+   |DPD        | 17.02            |
+   +-----------+------------------+
+
+   Boot and BIOS settings
+   +------------------+---------------------------------------------------+
+   | Boot settings    | default_hugepagesz=1G hugepagesz=1G hugepages=16  |
+   |                  | hugepagesz=2M hugepages=2048 isolcpus=1-11,22-33  |
+   |                  | nohz_full=1-11,22-33 rcu_nocbs=1-11,22-33         |
+   |                  | Note: nohz_full and rcu_nocbs is to disable Linux*|
+   |                  | kernel interrupts, and it’s import                |
+   +------------------+---------------------------------------------------+
+   |BIOS              | CPU Power and Performance Policy <Performance>    |
+   |                  | CPU C-state Disabled                              |
+   |                  | CPU P-state Disabled                              |
+   |                  | Enhanced Intel® Speedstep® Tech Disabled          |
+   |                  | Hyper-Threading Technology (If supported) Enable  |
+   |                  | Virtualization Techology Enable                   |
+   |                  | Coherency Enable                                  |
+   |                  | Turbo Boost Disabled                              |
+   +------------------+---------------------------------------------------+
+
+Network Topology for testing VNFs
+---------------------------------
+The ethernet cables should be connected between traffic generator and the VNF server (BM,
+SRIOV or OVS) setup based on the test profile.
+
+The connectivity could be
+1. Single port pair : One pair ports used for traffic 
+   ::
+     e.g. Single port pair link0 and link1 of VNF are used
+     TG:port 0 ------ VNF:Port 0
+     TG:port 1 ------ VNF:Port 1
+
+2. Multi port pair :  More than one pair of traffic
+   ::
+     e.g. Two port pair link 0, link1, link2 and link3 of VNF are used
+     TG:port 0 ------ VNF:Port 0
+     TG:port 1 ------ VNF:Port 1
+     TG:port 2 ------ VNF:Port 2 
+     TG:port 3 ------ VNF:Port 3
+
+ * Bare-Metal
+   Refer: http://fast.dpdk.org/doc/pdf-guides/ to setup the DUT for VNF to run 
+
+ * Standalone Virtualization - PHY-VM-PHY
+   * SRIOV
+     Refer below link to setup sriov
+     https://software.intel.com/en-us/articles/using-sr-iov-to-share-an-ethernet-port-among-multiple-vms
+
+   * OVS/OVS/DPDK
+     Refer below link to setup ovs/ovs-dpdk
+     http://docs.openvswitch.org/en/latest/intro/install/general/
+     http://docs.openvswitch.org/en/latest/intro/install/dpdk/
+
+ * Openstack
+     Use OPNFV installer to deploy the openstack.
+    
+
+Build VNFs on the DUT:
+----------------------
+ * Clone sampleVNF project repository  - git clone https://git.opnfv.org/samplevnf
+ Auto Build
+ ----------
+   * Interactive options: 
+         ::
+           ./tools/vnf_build.sh -i
+           Follow the steps in the screen from option [1] –> [9] and
+           select option [8] to build the vnfs.
+           It will automatically download selected DPDK version and any
+           required patches and will setup everything and build VNFs.
+
+           Following are the options for setup:
+           ----------------------------------------------------------
+            Step 1: Environment setup.
+            ----------------------------------------------------------
+            [1] Check OS and network connection
+            [2] Select DPDK RTE version
+
+          ----------------------------------------------------------
+           Step 2: Download and Install
+           ----------------------------------------------------------
+           [3] Agree to download
+           [4] Download packages
+           [5] Download DPDK zip
+           [6] Build and Install DPDK
+           [7] Setup hugepages
+
+           ----------------------------------------------------------
+            Step 3: Build VNFs
+            ----------------------------------------------------------
+            [8] Build all VNFs (vACL, vCGNAPT, vFW, UDP_Replay, DPPD-PROX)
+
+            [9] Exit Script
+    * non-Interactive options:
+          ::
+            ./tools/vnf_build.sh -s -d=<dpdk version eg 17.02>
+Manual Build
+------------
+   ::
+      1.Download DPDK supported version from dpdk.org
+        http://dpdk.org/browse/dpdk/snapshot/dpdk-$DPDK_RTE_VER.zip
+        unzip dpdk-$DPDK_RTE_VER.zip and apply dpdk patches only in case of 16.04 (Not required for other DPDK versions)
+        cd dpdk
+        make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc
+        cd x86_64-native-linuxapp-gcc
+        make -j
+      2.Setup huge pages
+        For 1G/2M hugepage sizes, for example 1G pages, the size must be specified
+        explicitly and can also be optionally set as the default hugepage size
+        for the system. For example, to reserve 8G of hugepage memory in the form
+        of eight 1G pages, the following options should be passed to the
+        kernel: * default_hugepagesz=1G hugepagesz=1G hugepages=8 hugepagesz=2M hugepages=2048
+      3.Add this to Go to /etc/default/grub configuration file.
+        Append “default_hugepagesz=1G hugepagesz=1G hugepages=8 hugepagesz=2M hugepages=2048”to the GRUB_CMDLINE_LINUX entry.
+      4.Setup Environment Variable
+        export RTE_SDK=<samplevnf>/dpdk
+        export RTE_TARGET=x86_64-native-linuxapp-gcc
+        export VNF_CORE=<samplevnf>
+        or using ./tools/setenv.sh
+      5.Build vACL VNFs
+        cd <samplevnf>/VNFs/vACL
+        make clean
+        make
+        The vACL executable will be created at the following location
+        <samplevnf>/VNFs/vACL/build/vACL
+
+Standalone virtualization/Openstack:
+ ::
+  * Build image from yardstick
+    git clone https://git.opnfv.org/yardstick
+  * cd yardstick and run
+    ./tools/yardstick-img-modify tools/ubuntu-server-cloudimg-samplevnf-modify.sh
+
+Modify Scripts as per Traffic Generator Settings
+---------------------------------------------------------
+
+e.g: vFW
+Modify the configuration according to system test configuration.
+
+traffic_type selction in config file:
+The traffic_type parmeter should be set to 4 (IPv4) or 6 (IPv6)
+traffic type.
+
+There are many other vFW parameters which can be changed
+in the config file for simulating different traffic conditions like
+timeouts.
+
+Modify the scripts according to system test configuration.
+
+The routeadd and arpadd settings should be updated as per the
+traffic generator settings.
+
+; routeadd <port #> <ipv4 nhip address in decimal> <Mask>
+routeadd 0 202.16.100.20 0xff000000
+routeadd 1 172.16.40.20 0xff000000
+
+;routeadd <port #> <ipv6 nhip address in hex> <Depth>
+;routeadd 0 fec0::6a05:caff:fe30:21b0 64
+;routeadd 1 2012::6a05:caff:fe30:2081 64
+
+; IPv4 static ARP
+;p 1 arpadd 1 172.16.40.20 00:00:00:00:00:04
+;p 1 arpadd 0 202.16.100.20 00:00:00:00:00:01
+
+; IPv6 static ARP
+;p 1 arpadd 0 fec0::6a05:caff:fe30:21b0 00:00:00:00:00:01
+;p 1 arpadd 1 2012::6a05:caff:fe30:2081 00:00:00:00:00:04
+
+The vFW supports  enabling/disabling of multiple features
+like firewall, conntrack, synproxy and debug.
+Thease features can be enabled/disabled through scripts or
+CLI commands.
+
+
+ACL rules can be modified based on the test scenarios.
+The default rules are provided for reference.
+
+
+Commands to run vFW
+----------------------------
+::
+  SW_LoadB
+  ./vFW -p <port mask> -f <config> -s <script>
+  HW_LoadB
+  ./vFW -p <port mask> -f <config> -s <script> -hwlb <num_WT>
+
+
+Proxy Support (**Todo**)
+---------------------------
+
diff --git a/docs/testing/user/userguide/05-BKMs.rst b/docs/testing/user/userguide/05-BKMs.rst
new file mode 100644 (file)
index 0000000..289bdad
--- /dev/null
@@ -0,0 +1,277 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+SampleVNF BKMs - Example how to run VNF vFW
+============================================
+
+
+Abstract
+--------
+
+This project provides a placeholder for various sample VNF
+(Virtual Network Function (:term `VNF`)) development which includes example
+reference architecture and optimization methods related to VNF/Network service
+for high performance VNFs.
+The sample VNFs are Open Source approximations* of Telco grade VNF’s using
+optimized VNF + NFVi Infrastructure libraries, with Performance Characterization
+of Sample† Traffic Flows.
+
+::
+  • * Not a commercial product. Encourage the community to contribute and close the feature gaps.
+  • † No Vendor/Proprietary Workloads 
+
+SampleVNF supports installation directly in Ubuntu. The installation procedure
+are detailed in the sections below.
+
+The steps needed to run SampleVNF are:
+1. Install and Build SampleVNF.
+2. deploy the VNF on the target and modify the config based on the
+   Network under test
+3. Run the traffic generator to generate the traffic.
+
+Prerequisites
+-------------
+
+Supported Test setup:
+--------------------
+The device under test (DUT) consists of a system following;
+  * A single or dual processor and PCH chip, except for System on Chip (SoC) cases
+  * DRAM memory size and frequency (normally single DIMM per channel)
+  * Specific Intel Network Interface Cards (NICs)
+  * BIOS settings noting those that updated from the basic settings
+  * DPDK build configuration settings, and commands used for tests
+Connected to the DUT is an IXIA* or Software Traffic generator like pktgen or TRex,
+simulation platform to generate packet traffic to the DUT ports and
+determine the throughput/latency at the tester side.
+
+Below are the supported/tested (:term `VNF`) deployment type.
+.. image:: images/deploy_type.png
+   :width: 800px
+   :alt: SampleVNF supported topology
+
+Hardware & Software Ingredients
+-------------------------------
+.. code-block:: console
+   +-----------+------------------+
+   | Item      | Description      |
+   +-----------+------------------+
+   | Memory    | Min 20GB         |
+   +-----------+------------------+
+   | NICs      | 2 x 10G          |
+   +-----------+------------------+
+   | OS        | Ubuntu 16.04 LTS |
+   +-----------+------------------+
+   | kernel    |  4.4.0-34-generic|
+   +-----------+------------------+
+   |DPD        | 17.02            |
+   +-----------+------------------+
+
+   Boot and BIOS settings
+   +------------------+---------------------------------------------------+
+   | Boot settings    | default_hugepagesz=1G hugepagesz=1G hugepages=16  |
+   |                  | hugepagesz=2M hugepages=2048 isolcpus=1-11,22-33  |
+   |                  | nohz_full=1-11,22-33 rcu_nocbs=1-11,22-33         |
+   |                  | Note: nohz_full and rcu_nocbs is to disable Linux*|
+   |                  | kernel interrupts, and it’s import                |
+   +------------------+---------------------------------------------------+
+   |BIOS              | CPU Power and Performance Policy <Performance>    |
+   |                  | CPU C-state Disabled                              |
+   |                  | CPU P-state Disabled                              |
+   |                  | Enhanced Intel® Speedstep® Tech Disabled          |
+   |                  | Hyper-Threading Technology (If supported) Enable  |
+   |                  | Virtualization Techology Enable                   |
+   |                  | Coherency Enable                                  |
+   |                  | Turbo Boost Disabled                              |
+   +------------------+---------------------------------------------------+
+
+Network Topology for testing VNFs
+---------------------------------
+The ethernet cables should be connected between traffic generator and the VNF server (BM,
+SRIOV or OVS) setup based on the test profile.
+
+The connectivity could be
+1. Single port pair : One pair ports used for traffic 
+   ::
+     e.g. Single port pair link0 and link1 of VNF are used
+     TG:port 0 ------ VNF:Port 0
+     TG:port 1 ------ VNF:Port 1
+
+2. Multi port pair :  More than one pair of traffic
+   ::
+     e.g. Two port pair link 0, link1, link2 and link3 of VNF are used
+     TG:port 0 ------ VNF:Port 0
+     TG:port 1 ------ VNF:Port 1
+     TG:port 2 ------ VNF:Port 2 
+     TG:port 3 ------ VNF:Port 3
+
+ * Bare-Metal
+   Refer: http://fast.dpdk.org/doc/pdf-guides/ to setup the DUT for VNF to run 
+
+ * Stadalone Virtualization - PHY-VM-PHY
+   * SRIOV
+     Refer below link to setup sriov
+     https://software.intel.com/en-us/articles/using-sr-iov-to-share-an-ethernet-port-among-multiple-vms
+
+   * OVS/OVS/DPDK
+     Refer below link to setup ovs/ovs-dpdk
+     http://docs.openvswitch.org/en/latest/intro/install/general/
+     http://docs.openvswitch.org/en/latest/intro/install/dpdk/
+
+ * Openstack
+     use OPNFV installer to deploy the openstack.
+    
+Traffic generator and VNF Setup details
+----------------------------------------
+
+step 0:  Preparing hardware connection.
+         Connect Traffic generator and VNF system back to back as shown in previous section e.g. Bare-Metal Configuration
+         TRex port 0 ↔ (VNF Port 0) ↔ (VNF Port 1) ↔ TRex port 1
+
+step 1: Setting up Traffic generator (TRex) (Refer: https://trex-tgn.cisco.com/trex/doc/trex_stateless_bench.html)
+        TRex Software preparations
+        --------------------------
+        a. Install the OS (Bare metal Linux, not VM!)
+        b. Obtain the latest TRex package: wget https://trex-tgn.cisco.com/trex/release/latest
+        c. Untar the package: tar -xzf latest
+        d. Change dir to unzipped TRex
+        e. Create config file using command: sudo python dpdk_setup_ports.py -i
+           In case of Ubuntu 16 need python3
+           See paragraph config creation for detailed step-by-step
+step 2: Setting up VNF
+
+        Deployment type - Bare-Metal:
+        ----------------------------
+        a. Clone sampleVNF project repository  - git clone https://git.opnfv.org/samplevnf
+        Auto Build
+          * Interactive options: 
+                ./tools/vnf_build.sh -i
+                Follow the steps in the screen from option [1] –> [9] and select option [8] to build the vnfs. It will automatically download selected DPDK version and any required patches and will setup everything and build VNFs.
+                Following are the options for setup:
+                ----------------------------------------------------------
+                Step 1: Environment setup.
+                ----------------------------------------------------------
+                [1] Check OS and network connection
+                [2] Select DPDK RTE version
+
+                ----------------------------------------------------------
+                Step 2: Download and Install
+                ----------------------------------------------------------
+                [3] Agree to download
+                [4] Download packages
+                [5] Download DPDK zip
+                [6] Build and Install DPDK
+                [7] Setup hugepages
+
+                ----------------------------------------------------------
+                Step 3: Build VNFs
+                ----------------------------------------------------------
+                [8] Build all VNFs (vACL, vCGNAPT, vFW, UDP_Replay, DPPD-PROX)
+
+                [9] Exit Script
+          * non-Interactive options:
+                ./tools/vnf_build.sh -s -d=<dpdk version eg 17.02>
+        Manual Build
+           1. Download DPDK supported version from dpdk.org
+              http://dpdk.org/browse/dpdk/snapshot/dpdk-$DPDK_RTE_VER.zip
+              unzip dpdk-$DPDK_RTE_VER.zip and apply dpdk patches only in case of 16.04 (Not required for other DPDK versions)
+              cd dpdk
+              make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc
+              cd x86_64-native-linuxapp-gcc
+              make
+           2. Setup huge pages
+              For 1G/2M hugepage sizes, for example 1G pages, the size must be
+              specified explicitly and can also be optionally set as the
+              default hugepage size for the system. For example, to reserve 8G
+              of hugepage memory in the form of eight 1G pages, the following
+              options should be passed to the kernel: * default_hugepagesz=1G
+              hugepagesz=1G hugepages=8 hugepagesz=2M hugepages=2048
+           3. Add this to Go to /etc/default/grub configuration file.
+              Append “default_hugepagesz=1G hugepagesz=1G hugepages=8 hugepagesz=2M hugepages=2048”
+              to the GRUB_CMDLINE_LINUX entry.
+           4. Setup Environment Variable
+              export RTE_SDK=<samplevnf>/dpdk
+              export RTE_TARGET=x86_64-native-linuxapp-gcc
+              export VNF_CORE=<samplevnf>
+              or using ./tools/setenv.sh
+           5. Build vFW VNFs
+              cd <samplevnf>/VNFs/vFW
+              make clean
+              make
+              The vFW executable will be created at the following location
+              <samplevnf>/VNFs/vFW/build/vFW
+
+step 3: Running VNF
+  a. Setup Port to run VNF
+        For DPDK versions 17.xx
+        1. cd <samplevnf>/dpdk
+        2. ./usertools/dpdk-devbind.py --status <--- List the network device
+        3. ./usertools/dpdk-devbind.py -b igb_uio <PCI Port 0> <PCI Port 1>
+        .. _More details: http://dpdk.org/doc/guides-17.05/linux_gsg/build_dpdk.html#binding-and-unbinding-network-ports-to-from-the-kernel-modules 
+  b. Prepare script to enalble VNF to route the packets
+        ::
+          cd <samplevnf>/VNFs/vFW/config
+          Open -> VFW_SWLB_SinglePortPair_script.tc. Replace the bold items based on your setting.
+
+           link 0 config <VNF port 0 IP eg 202.16.100.10> 8
+           link 0 up
+           link 1 down
+           link 1 config <VNF port 0 IP eg 172.16.40.10> 8
+           link 1 up
+           ; routeadd <port #> <ipv4 nhip address in decimal> <Mask>
+           routeadd 0 <traffic generator port 0 IP eg 202.16.100.20> 0xff000000
+           routeadd 1 <traffic generator port 1 IP eg 172.16.40.20> 0xff000000
+
+           ; IPv4 static ARP; disable if dynamic arp is enabled.
+           p 1 arpadd 0 <traffic generator port 0 IP eg 202.16.100.20> <traffic generator port 0 MAC>
+           p 1 arpadd 1  <traffic generator port 1 IP eg 172.16.40.20> <traffic generator port 1 MAC>
+           p action add 0 accept
+           p action add 0 fwd 0
+           p action add 0 count
+           p action add 1 accept
+           p action add 1 fwd 1
+           p action add 1 count
+           p action add 2 drop
+           p action add 2 count
+           p action add 0 conntrack
+           p action add 1 conntrack
+           p action add 2 conntrack
+           p action add 3 conntrack
+           ; IPv4 rules
+           p vfw add 1 <traffic generator port 0 IP eg 202.16.100.20> 8 <traffic generator port 1 IP eg 172.16.40.20> 8 0 65535 67 69 0 0 2
+           p vfw add 2 <traffic generator port 0 IP eg 202.16.100.20> 8 <traffic generator port 1 IP eg 172.16.40.20> 8 0 65535 0 65535 0 0 1
+           p vfw add 2 <traffic generator port 1 IP eg 172.16.40.20> 8 <traffic generator port 0 IP eg 202.16.100.20> 8 0 65535 0 65535 0 0 0
+           p vfw applyruleset
+   c. Run below cmd to launch the VNF. Please make sure both hugepages and ports to be used are bind to dpdk.
+      ::
+        cd <samplevnf>/VNFs/vFW/
+        ./build/vFW -p 0x3 -f ./config/VFW_SWLB_SinglePortPair_4Thread.cfg  -s ./config/VFW_SWLB_SinglePortPair_script.tc
+
+step 4: Run Test using traffic geneator
+
+On traffic generator system:
+        cd <trex eg v2.28/stl>
+        Update the bench.py to generate the traffic. 
+
+        class STLBench(object):
+        ip_range = {}
+        ip_range['src'] = {'start': '<traffic generator port 0 IP eg 202.16.100.20>', 'end': '<traffic generator port 0 IP eg 202.16.100.20>'}
+        ip_range['dst'] = {'start': '<traffic generator port 1 IP eg 172.16.40.20>', 'end': '<traffic generator port 1 IP eg 172.16.40.20>'}
+        cd <trex eg v2.28>
+        Run the TRex server: sudo ./t-rex-64 -i -c 7
+        In another shell run TRex console: trex-console
+        The console can be run from another computer with -s argument, --help for more info.
+        Other options for TRex client are automation or GUI
+        In the console, run "tui" command, and then send the traffic with commands like:
+        start -f stl/bench.py -m 50% --port 0 3 -t size=590,vm=var1
+        For more details refer: https://trex-tgn.cisco.com/trex/doc/trex_stateless_bench.html 
+
+Deployment type Standalone Virtualization/Openstack:
+Step 0: Setup the NFVi Infrastrucutre. (Refer installation section)
+Step 1: Build SampleVNF enabled VM
+  * Build image from yardstick
+    git clone https://git.opnfv.org/yardstick
+  * cd yardstick and run
+    ./tools/yardstick-img-modify tools/ubuntu-server-cloudimg-samplevnf-modify.sh
+Step 3: Follow steps 0 to 4 in above section to run the VNF.
diff --git a/docs/testing/user/userguide/glossary.rst b/docs/testing/user/userguide/glossary.rst
new file mode 100644 (file)
index 0000000..e54794e
--- /dev/null
@@ -0,0 +1,62 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+========
+Glossary
+========
+
+.. glossary::
+   :sorted:
+
+   TRex
+     Realistic traffic generator
+
+   API
+     Application Programming Interface
+
+   DPI
+     Deep Packet Inspection
+
+   DPDK
+     Data Plane Development Kit
+
+   NIC
+     Network Interface Controller
+
+   BNG
+     Broadband Network Gateway
+
+   VM
+     Virtual Machine
+
+   VNF
+     Virtual Network Function
+
+   VNFC
+     Virtual Network Function Component
+
+   NFVI
+     Network Function Virtualization Infrastructure
+
+   SR-IOV
+     Single Root IO Virtualization
+
+   SUT
+     System Under Test
+
+   ToS
+     Type of Service
+
+   vFW
+     Virtual Firewall
+
+   vCGNAPT
+     Virtual Carrier Grade Network Address and port Translation
+
+   vACL
+     Virtual Access Control List
+
+   PROX
+     Packet pROcessing eXecution engine
diff --git a/docs/testing/user/userguide/images/deploy_type.png b/docs/testing/user/userguide/images/deploy_type.png
new file mode 100644 (file)
index 0000000..9f5aad8
Binary files /dev/null and b/docs/testing/user/userguide/images/deploy_type.png differ
index 1998be3..e21f1fa 100644 (file)
@@ -3,3 +3,19 @@
 .. (c) OPNFV, Intel Corporation and others.
 
 .. OPNFV SAMPLEVNF Documentation master file.
+
+===========================================
+SampleVNF User Guide
+===========================================
+
+.. toctree::
+   :maxdepth: 4
+   :numbered:
+
+   01-introduction
+   02-methodology
+   03-architecture
+   04-installation
+   05-BKMs
+   glossary
+   references
diff --git a/docs/testing/user/userguide/references.rst b/docs/testing/user/userguide/references.rst
new file mode 100644 (file)
index 0000000..30f6e60
--- /dev/null
@@ -0,0 +1,48 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Intel Corporation and others.
+
+==========
+References
+==========
+
+
+OPNFV
+=====
+
+* Yardstick wiki: https://wiki.opnfv.org/yardstick
+* SampleVNF wiki: https://wiki.opnfv.org/samplevnf
+
+References used in Test Cases
+=============================
+
+* TRex: https://trex-tgn.cisco.com/
+* DPDKpktgen: https://github.com/Pktgen/Pktgen-DPDK/
+* DPDK: http://dpdk.org
+* DPDK supported NICs: http://dpdk.org/doc/nics
+* fdisk: http://www.tldp.org/HOWTO/Partition/fdisk_partitioning.html
+* fio: http://www.bluestop.org/fio/HOWTO.txt
+* free: http://manpages.ubuntu.com/manpages/trusty/en/man1/free.1.html
+* iperf3: https://iperf.fr/
+* Lmbench man-pages: http://manpages.ubuntu.com/manpages/trusty/lat_mem_rd.8.html
+* Memory bandwidth man-pages: http://manpages.ubuntu.com/manpages/trusty/bw_mem.8.html
+* mpstat man-pages: http://manpages.ubuntu.com/manpages/trusty/man1/mpstat.1.html
+* pktgen: https://www.kernel.org/doc/Documentation/networking/pktgen.txt
+* RAMspeed: http://alasir.com/software/ramspeed/
+* SR-IOV: https://wiki.openstack.org/wiki/SR-IOV-Passthrough-For-Networking
+* Storperf: https://wiki.opnfv.org/display/storperf/Storperf
+* unixbench: https://github.com/kdlucas/byte-unixbench/blob/master/UnixBench
+
+
+Research
+========
+*
+
+Standards
+=========
+
+* ETSI NFV: http://www.etsi.org/technologies-clusters/technologies/nfv
+* ETSI GS-NFV TST 001: http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf
+* RFC2544: https://www.ietf.org/rfc/rfc2544.txt
+