NSH_SFC: Remove 21/23421/2
authorTibor Frank <tifrank@cisco.com>
Thu, 14 Nov 2019 09:06:03 +0000 (10:06 +0100)
committerTibor Frank <tifrank@cisco.com>
Thu, 21 Nov 2019 13:05:37 +0000 (14:05 +0100)
Change-Id: Ib7f9dff7bede4f8ec3148f234109132be920de82
Signed-off-by: Tibor Frank <tifrank@cisco.com>
39 files changed:
NSH_SFC_VER [deleted file]
README.md
bootstrap-nsh_sfc-functional-virl.sh [deleted file]
docs/report/detailed_test_results/nshsfc_functional_results/index.rst [deleted file]
docs/report/index.html.template
docs/report/introduction/introduction.rst
docs/report/introduction/test_scenarios_overview.rst
docs/report/nsh_sfc_functional_tests/csit_release_notes.rst [deleted file]
docs/report/nsh_sfc_functional_tests/documentation.rst [deleted file]
docs/report/nsh_sfc_functional_tests/index.rst [deleted file]
docs/report/nsh_sfc_functional_tests/overview.rst [deleted file]
docs/report/nsh_sfc_functional_tests/test_environment.rst [deleted file]
resources/libraries/python/SFC/SFCConstants.py [deleted file]
resources/libraries/python/SFC/SFCTest.py [deleted file]
resources/libraries/python/SFC/SetupSFCTest.py [deleted file]
resources/libraries/python/SFC/TunnelProtocol.py [deleted file]
resources/libraries/python/SFC/VerifyPacket.py [deleted file]
resources/libraries/python/SFC/__init__.py [deleted file]
resources/libraries/robot/nsh_sfc/default.robot [deleted file]
resources/tools/doc_gen/src/index.rst
resources/tools/doc_gen/src/tests.nsh_sfc.func.rst [deleted file]
resources/tools/presentation/conf.py
resources/tools/presentation/doc/pal_lld.rst
resources/tools/presentation/specification.yaml
resources/tools/scripts/download_nsh_sfc_pkgs.sh [deleted file]
resources/traffic_scripts/send_tcp_for_classifier_test.py [deleted file]
resources/traffic_scripts/send_vxlan_for_proxy_test.py [deleted file]
resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py [deleted file]
resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py [deleted file]
tests/nsh_sfc/func/__init__.robot [deleted file]
tests/nsh_sfc/func/classifier/eth2p-ethip4-sfc-classifier-func.robot [deleted file]
tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-inbound-func.robot [deleted file]
tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-outbound-func.robot [deleted file]
tests/nsh_sfc/func/sff/eth2p-ethip4-sfc-sff-func.robot [deleted file]
tests/nsh_sfc/sfc_scripts/install_sfc.sh [deleted file]
tests/nsh_sfc/sfc_scripts/set_nsh_proxy_inbound.sh [deleted file]
tests/nsh_sfc/sfc_scripts/set_nsh_proxy_outbound.sh [deleted file]
tests/nsh_sfc/sfc_scripts/set_sfc_classifier.sh [deleted file]
tests/nsh_sfc/sfc_scripts/set_sfc_sff.sh [deleted file]

diff --git a/NSH_SFC_VER b/NSH_SFC_VER
deleted file mode 100644 (file)
index 4a979a5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-VPP = 17.07-rc0
-NSH_SFC = 17.07-rc0
index d20d859..86d0968 100644 (file)
--- a/README.md
+++ b/README.md
@@ -72,7 +72,6 @@ A brief bottom-up description is provided here:
    - Test suites with test cases;
    - Functional tests using VIRL environment:
      - VPP;
-     - NSH_SFC;
      - DMM;
      - TLDK;
    - Performance tests using physical testbed environment:
@@ -100,9 +99,6 @@ A brief bottom-up description is provided here:
     │   └── perf                    # DPDK performance tests
     ├── kubernetes
     │   └── perf                    # VPP K8S orchestration performance tests
-    ├── nsh_sfc
-    │   ├── func                    # NSH_SFC functional tests
-    │   └── sfc_scripts             # NSH_SFC helper scripts
     ├── tldk
     │   ├── func                    # TLDK functional VIRL tests
     │   ├── tldk_scripts            # TLDK helper scripts
diff --git a/bootstrap-nsh_sfc-functional-virl.sh b/bootstrap-nsh_sfc-functional-virl.sh
deleted file mode 100755 (executable)
index 034ea9b..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -x
-
-cat /etc/hostname
-cat /etc/hosts
-
-ARCHIVE_ARTIFACTS=(log.html output.xml report.html)
-
-export DEBIAN_FRONTEND=noninteractive
-sudo apt-get -y update
-sudo apt-get -y install libpython2.7-dev python-virtualenv
-
-if [ -f "/etc/redhat-release" ]; then
-    OS="centos7"
-else
-    OS="ubuntu1604"
-fi
-
-VIRL_SERVERS=("10.30.51.28" "10.30.51.29" "10.30.51.30")
-VIRL_SERVER=""
-
-VIRL_USERNAME=jenkins-in
-VIRL_PKEY=priv_key
-VIRL_SERVER_STATUS_FILE="status"
-VIRL_SERVER_EXPECTED_STATUS="PRODUCTION"
-
-STREAM="master"
-
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-export PYTHONPATH=${SCRIPT_DIR}
-
-if [ "${OS}" == "ubuntu1604" ]; then
-    VIRL_TOPOLOGY=$(cat ${SCRIPT_DIR}/VIRL_TOPOLOGY_UBUNTU)
-    VIRL_RELEASE=$(cat ${SCRIPT_DIR}/VIRL_RELEASE_UBUNTU)
-elif [ "${OS}" == "centos7" ]; then
-    VIRL_TOPOLOGY=$(cat ${SCRIPT_DIR}/VIRL_TOPOLOGY_CENTOS)
-    VIRL_RELEASE=$(cat ${SCRIPT_DIR}/VIRL_RELEASE_CENTOS)
-else
-    echo Unsupported OS, exiting
-    exit 1
-fi
-
-SSH_OPTIONS="-i ${VIRL_PKEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o LogLevel=error"
-
-function ssh_do() {
-    echo
-    echo "### "  ssh $@
-    ssh ${SSH_OPTIONS} $@
-}
-
-rm -f ${VIRL_PKEY}
-cat > ${VIRL_PKEY} <<EOF
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEA+IHXq87GcqMR1C47rzx6Cbip5Ghq8pKrbqKrP5Nf41HcYrT6
-GOXl9nFWKsMOzIlIn+8y7Il27eZh7csQGApbg8QLiHMtcYEmWNzKZpkqg4nuAPxX
-VXwlKgnKX902SrET9Gp9TDayiHtCRWVfrlPPPSA0UEXW6BjLN/uHJ+W/Xzrrab+9
-asBVa05vT2W6n0KJ66zfCaeDM912mQ6SttscAwFoWDmdHlegiVqrlIG2ABxOvxxz
-L3dM3iSmlmQlzv9bThjo+nI4KFYh6m5wrZmAo5r/4q9CIJc21HVnTqkGOWJIZz6J
-73lePJVSq5gYqaoGw3swFEA/MDkOx7baWKSoLQIDAQABAoIBAQCNBeolNp+JWJ76
-gQ4fwLsknyXSV6sxYyhkDW4PEwwcTU06uqce0AAzXVffxne0fMe48x47+zqBgPbb
-4huM+Pu8B9nfojUMr5TaYtl9Zbgpk3F8H7dT7LKOa6XrxvZTZrADSRc30+Z26zPN
-e9zTaf42Gvt0/l0Zs1BHwbaOXqO+XuwJ3/F9Sf3PQYWXD3EOWjpHDP/X/1vAs6lV
-SLkm6J/9KKE1m6I6LTYjIXuYt4SXybW6N2TSy54hhQtYcDUnIU2hR/PHVWKrGA0J
-kELgrtTNTdbML27O5gFWU4PLUEYTZ9fN11D6qUZKxLcPOiPPHXkiILMRCCnG5DYI
-ksBAU/YlAoGBAPxZO9VO18TYc8THV1nLKcvT2+1oSs1UcA2wNQMU55t910ZYinRa
-MRwUhMOf8Mv5wOeiZaRICQB1PnVWtDVmGECgPpK6jUxqAwn8rgJcnoafLGL5YKMY
-RVafTe6N5LXgCaOcJrk21wxs6v7ninEbUxxc575urOvZMBkymDw91dwbAoGBAPwa
-YRhKhrzFKZzdK0RadVjnxKvolUllpoqqg3XuvmeAJHAOAnaOgVWq68NAcp5FZJv0
-2D2Up7TX8pjf9MofP1SJbcraKBpK4NzfNkA0dSdEi+FhVofAJ9umB2o5LW1n7sab
-UIrjsdzSJK/9Zb9yTTHPyibYzNEgaJV1HsbxfEFXAoGAYO2RmvRm0phll18OQVJV
-IpKk9kLKAKZ/R/K32hAsikBC8SVPQTPniyaifFWx81diblalff2hX4ipTf7Yx24I
-wMIMZuW7Im/R7QMef4+94G3Bad7p7JuE/qnAEHJ2OBnu+eYfxaK35XDsrq6XMazS
-NqHE7hOq3giVfgg+C12hCKMCgYEAtu9dbYcG5owbehxzfRI2/OCRsjz/t1bv1seM
-xVMND4XI6xb/apBWAZgZpIFrqrWoIBM3ptfsKipZe91ngBPUnL9s0Dolx452RVAj
-yctHB8uRxWYgqDkjsxtzXf1HnZBBkBS8CUzYj+hdfuddoeKLaY3invXLCiV+PpXS
-U4KAK9kCgYEAtSv0m5+Fg74BbAiFB6kCh11FYkW94YI6B/E2D/uVTD5dJhyEUFgZ
-cWsudXjMki8734WSpMBqBp/J8wG3C9ZS6IpQD+U7UXA+roB7Qr+j4TqtWfM+87Rh
-maOpG56uAyR0w5Z9BhwzA3VakibVk9KwDgZ29WtKFzuATLFnOtCS46E=
------END RSA PRIVATE KEY-----
-EOF
-chmod 600 ${VIRL_PKEY}
-
-#
-# Pick a random host from the array of VIRL servers, and attempt
-# to reach it and verify it's status.
-#
-# The server must be reachable, and have a "status" file with
-# the content "PRODUCTION", to be selected.
-#
-# If the server is not reachable, or does not have the correct
-# status, remove it from the array and start again.
-#
-# Abort if there are no more servers left in the array.
-#
-while [[ ! "$VIRL_SERVER" ]]
-do
-    num_hosts=${#VIRL_SERVERS[@]}
-    if [ $num_hosts == 0 ]
-    then
-        echo "No more VIRL candidate hosts available, failing."
-        exit 127
-    fi
-    element=$[ $RANDOM % $num_hosts ]
-    virl_server_candidate=${VIRL_SERVERS[$element]}
-    virl_server_status=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${virl_server_candidate} cat $VIRL_SERVER_STATUS_FILE 2>&1)
-    echo VIRL HOST $virl_server_candidate status is \"$virl_server_status\"
-    if [ "$virl_server_status" == "$VIRL_SERVER_EXPECTED_STATUS" ]
-    then
-        # Candidate is in good status. Select this server.
-        VIRL_SERVER="$virl_server_candidate"
-    else
-        # Candidate is in bad status. Remove from array.
-        VIRL_SERVERS=("${VIRL_SERVERS[@]:0:$element}" "${VIRL_SERVERS[@]:$[$element+1]}")
-    fi
-done
-
-# Download VPP and NSH SFC packages from the current branch
-echo Downloading packages...
-bash ${SCRIPT_DIR}/resources/tools/scripts/download_nsh_sfc_pkgs.sh ${STREAM} ${OS}
-
-if [ "${OS}" == "centos7" ]; then
-    VPP_PKGS=(*.rpm)
-else
-    VPP_PKGS=(*.deb)
-fi
-echo ${VPP_PKGS[@]}
-VIRL_DIR_LOC="/tmp"
-VPP_PKGS_FULL=(${VPP_PKGS[@]})
-
-# Prepend directory location at remote host to package file list
-for index in "${!VPP_PKGS_FULL[@]}"; do
-    VPP_PKGS_FULL[${index}]=${VIRL_DIR_LOC}/${VPP_PKGS_FULL[${index}]}
-done
-
-echo "Updated file names: " ${VPP_PKGS_FULL[@]}
-
-cat ${VIRL_PKEY}
-
-# Copy the files to VIRL hosts
-DONE=""
-for index in "${!VIRL_SERVER[@]}"; do
-    # Do not copy files in case they have already been copied to the VIRL host
-    [[ "${DONE[@]}" =~ "${VIRL_SERVER[${index}]}" ]] && copy=0 || copy=1
-
-    if [ "${copy}" -eq "0" ]; then
-        echo "files have already been copied to the VIRL host ${VIRL_SERVER[${index}]}"
-    else
-        if [ "${OS}" == "centos7" ]; then
-            scp ${SSH_OPTIONS} *.rpm \
-                ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC}/
-        else
-            scp ${SSH_OPTIONS} *.deb \
-                ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC}/
-        fi
-         result=$?
-        if [ "${result}" -ne "0" ]; then
-            echo "Failed to copy files to VIRL host ${VIRL_SERVER[${index}]}"
-            echo ${result}
-            exit ${result}
-        else
-            echo "files successfully copied to the VIRL host ${VIRL_SERVER[${index}]}"
-        fi
-        DONE+=(${VIRL_SERVER[${index}]})
-    fi
-done
-
-# Start a simulation on VIRL server
-echo "Starting simulation on VIRL server"
-
-function stop_virl_simulation {
-    ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER}\
-        "stop-testcase ${VIRL_SID}"
-}
-
-# Upon script exit, cleanup the simulation execution
-trap stop_virl_simulation EXIT
-
-VIRL_SID=$(ssh ${SSH_OPTIONS} \
-    ${VIRL_USERNAME}@${VIRL_SERVER} \
-    "start-testcase -vv -c ${VIRL_TOPOLOGY} -r ${VIRL_RELEASE} ${VPP_PKGS_FULL[@]}")
-retval=$?
-if [ "${retval}" -ne "0" ]; then
-    echo "VIRL simulation start failed"
-    exit ${retval}
-fi
-
-if [[ ! "${VIRL_SID}" =~ session-[a-zA-Z0-9_]{6} ]]; then
-    echo "No VIRL session ID reported."
-    exit 127
-fi
-
-echo ${VIRL_SID}
-
-ssh_do ${VIRL_USERNAME}@${VIRL_SERVER} cat /scratch/${VIRL_SID}/topology.yaml
-
-# Download the topology file from virl session
-scp ${SSH_OPTIONS} \
-    ${VIRL_USERNAME}@${VIRL_SERVER}:/scratch/${VIRL_SID}/topology.yaml \
-    topologies/enabled/topology.yaml
-
-retval=$?
-if [ "${retval}" -ne "0" ]; then
-    echo "Failed to copy topology file from VIRL simulation"
-    exit ${retval}
-fi
-
-virtualenv --system-site-packages env
-. env/bin/activate
-
-echo pip install
-pip install -r ${SCRIPT_DIR}/requirements.txt
-
-pykwalify -s ${SCRIPT_DIR}/resources/topology_schemas/3_node_topology.sch.yaml \
-          -s ${SCRIPT_DIR}/resources/topology_schemas/topology.sch.yaml \
-          -d ${SCRIPT_DIR}/topologies/enabled/topology.yaml \
-          -vvv
-
-if [ "$?" -ne "0" ]; then
-    echo "Topology schema validation failed."
-    echo "However, the tests will start."
-fi
-
-PYTHONPATH=`pwd` pybot -L TRACE -W 136\
-    -v TOPOLOGY_PATH:${SCRIPT_DIR}/topologies/enabled/topology.yaml \
-    --suite "tests.nsh_sfc.func" \
-    --include vm_envAND3_node_single_link_topo \
-    --exclude PERFTEST \
-    --exclude SKIP_PATCH \
-    tests/
-
-# Archive artifacts
-mkdir archive
-for i in ${ARCHIVE_ARTIFACTS[@]}; do
-    cp $( readlink -f ${i} | tr '\n' ' ' ) archive/
-done
diff --git a/docs/report/detailed_test_results/nshsfc_functional_results/index.rst b/docs/report/detailed_test_results/nshsfc_functional_results/index.rst
deleted file mode 100644 (file)
index a4880b1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-NSH SFC Functional
-==================
-
-.. note::
-
-    Data sources for reported test results: i) `FD.io test executor NSH_SFC
-    functional jobs`_, ii) archived FD.io jobs test result `output files
-    <../../_static/archive/>`_.
-
-.. toctree::
-
-    nshsfc_functional_results
index 141ffbf..23b7e01 100644 (file)
@@ -60,16 +60,6 @@ CSIT-1908
     vpp_functional_tests/test_environment
     vpp_functional_tests/documentation
 
-..
-    .. toctree::
-        :maxdepth: 2
-        :caption: NSH_SFC Functional
-
-        nsh_sfc_functional_tests/overview
-        nsh_sfc_functional_tests/csit_release_notes
-        nsh_sfc_functional_tests/test_environment
-        nsh_sfc_functional_tests/documentation
-
 ..
     .. toctree::
         :maxdepth: 2
@@ -92,7 +82,6 @@ CSIT-1908
 
 ..
     detailed_test_results/dmm_functional_results/index
-    detailed_test_results/nshsfc_functional_results/index
 
 .. toctree::
     :maxdepth: 2
index be63cf5..170891e 100644 (file)
@@ -128,13 +128,3 @@ available for download.
        - **Test Environment**: Functional test environment configuration.
        - **Documentation**: Pointers to CSIT source code documentation for
          DMM functional tests.
-
-    #. NSH_SFC FUNCTIONAL: NSH_SFC functional tests executed in
-       virtual FD.io testbeds.
-
-       - **Overview**: Tested virtual topologies, test coverage and naming
-         specifics;
-       - **Release Notes**: Changes in |csit-release|, known issues.
-       - **Test Environment**: Functional test environment configuration.
-       - **Documentation**: Pointers to CSIT source code documentation for
-         NSH_SFC functional tests.
index 318d86c..00af70c 100644 (file)
@@ -57,9 +57,6 @@ Brief overview of test scenarios covered in this report:
        FD.io testbeds demonstrating a single server (DUT1) and single
        client (DUT2) scenario using DMM framework and Linux kernel TCP/IP
        stack.
-    #. **NSH_SFC Functional**: NSH_SFC functional tests are executed in
-       virtual FD.io testbeds focusing on VPP nsh-plugin data plane
-       functionality. Scapy is used as a traffic generator.
 
 All CSIT test data included in this report is auto-
 generated from :abbr:`RF (Robot Framework)` :file:`output.xml` files
diff --git a/docs/report/nsh_sfc_functional_tests/csit_release_notes.rst b/docs/report/nsh_sfc_functional_tests/csit_release_notes.rst
deleted file mode 100644 (file)
index 4ba9d7f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Release Notes
-=============
-
-Changes in |csit-release|
--------------------------
-
-No changes.
-
-Known Issues
-------------
-
-No known issues.
\ No newline at end of file
diff --git a/docs/report/nsh_sfc_functional_tests/documentation.rst b/docs/report/nsh_sfc_functional_tests/documentation.rst
deleted file mode 100644 (file)
index 9e3298a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Documentation
-=============
-
-`CSIT NSH_SFC Functional Tests Documentation`_ contains detailed
-functional description and input parameters for each test case.
-
diff --git a/docs/report/nsh_sfc_functional_tests/index.rst b/docs/report/nsh_sfc_functional_tests/index.rst
deleted file mode 100644 (file)
index 5e46717..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-NSH_SFC Functional
-==================
-
-.. toctree::
-
-    overview
-    csit_release_notes
-    test_environment
-    documentation
diff --git a/docs/report/nsh_sfc_functional_tests/overview.rst b/docs/report/nsh_sfc_functional_tests/overview.rst
deleted file mode 100644 (file)
index 1cbfd9a..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-Overview
-========
-
-Virtual Topologies
-------------------
-
-CSIT NSH_SFC functional tests are executed in VM-based virtual
-topologies created on demand using :abbr:`VIRL (Virtual Internet Routing
-Lab)` simulation platform contributed by Cisco. VIRL runs on physical
-baremetal servers hosted by LF FD.io project. All tests are executed in
-three-node virtual test topology shown in the figure below.
-
-.. only:: latex
-
-    .. raw:: latex
-
-        \begin{figure}[H]
-            \centering
-                \graphicspath{{../_tmp/src/vpp_functional_tests/}}
-                \includegraphics[width=0.90\textwidth]{virtual-3n-nic2nic}
-                \label{fig:virtual-3n-nic2nic}
-        \end{figure}
-
-.. only:: html
-
-    .. figure:: ../vpp_functional_tests/virtual-3n-nic2nic.svg
-        :alt: virtual-3n-nic2nic
-        :align: center
-
-SUT1 and SUT2 are two VMs (running Ubuntu or Centos, depending on the
-test suite), TG is a Traffic Generator (running Ubuntu VM). SUTs run VPP
-with nsh-plugin in Linux user-mode as a Device Under Test (DUT) within
-the VM. TG runs Scapy SW application as a packet Traffic Generator.
-Network connectivity between SUTs and to TG is provided using virtual
-NICs and VMs' virtio drivers.
-
-Functional Tests Coverage
--------------------------
-
-|csit-release| includes following NSH_SFC functionality tested in
-virtual VM environment:
-
-+-----------------------+----------------------------------------------+
-| Functionality         |  Description                                 |
-+=======================+==============================================+
-| NSH SFC Classifier    | TG sends some TCP packets to test NSH SFC    |
-|                       | Classifier functional. DUT1 will receive     |
-|                       | these packets from one NIC and loopback the  |
-|                       | VXLAN-GPE-NSH encapsulated packets to the TG |
-|                       | from other NIC.                              |
-|                       | Test case count: 7.                          |
-+-----------------------+----------------------------------------------+
-| NSH SFC Proxy Inbound | TG sends some VXLAN-GPE-NSH encapsulated     |
-|                       | packets to test NSH SFC Proxy Inbound        |
-|                       | functional. DUT1 will receive these packets  |
-|                       | from one NIC and loopback the VXLAN          |
-|                       | encapsulated packets to the TG from other    |
-|                       | NIC.                                         |
-|                       | Test case count: 6.                          |
-+-----------------------+----------------------------------------------+
-| NSH SFC Proxy         | TG sends some VXLAN encapsulated packets to  |
-| Outbound              | test NSH SFC Proxy Outbound functional. DUT1 |
-|                       | will receive these packets from one NIC and  |
-|                       | loopback the VXLAN-GPE-NSH encapsulated      |
-|                       | packets to the TG from other NIC.            |
-|                       | Test case count: 6.                          |
-+-----------------------+----------------------------------------------+
-| NSH SFC Service       | TG sends some VXLAN-GPE-NSH                  |
-| Function Forward      | encapsulated packets to test NSH SFC Service |
-|                       | Function Forward functional. DUT1 will       |
-|                       | receive these packets from one NIC and swap  |
-|                       | the VXLAN-GPE-NSH header, after that DUT1    |
-|                       | loopback the VXLAN-GPE-NSH encapsulated      |
-|                       | packets to the TG from other NIC.            |
-|                       | Test case count: 6.                          |
-+-----------------------+----------------------------------------------+
-
-Total 25 NSH_SFC functional tests in the |csit-release|.
diff --git a/docs/report/nsh_sfc_functional_tests/test_environment.rst b/docs/report/nsh_sfc_functional_tests/test_environment.rst
deleted file mode 100644 (file)
index 68ac5f2..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Test Environment
-================
-
-FD.io CSIT NSH_SFC functional tests are executed in the same FD.io VIRL
-virtual environment as used CSIT VPP functional tests. See description
-in `VPP Functional Tests Environment
-<../vpp_functional_tests/test_environment.html>`_.
diff --git a/resources/libraries/python/SFC/SFCConstants.py b/resources/libraries/python/SFC/SFCConstants.py
deleted file mode 100644 (file)
index b9eef22..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This module define some constants.
-"""
-
-class SFCConstants(object):
-    """
-    Define some constants for the test filed verify.
-    """
-
-    DEF_SRC_PORT = 1234
-    DEF_DST_PORT = 5678
-    UDP_PROTOCOL = 17
-    VxLAN_UDP_PORT = 4789
-    VxLANGPE_UDP_PORT = 4790
-    VxLAN_FLAGS = 0x8
-    VxLAN_DEFAULT_VNI = 1
-    VxLANGPE_FLAGS = 0xc
-    VxLANGPE_NEXT_PROTOCOL = 0x4
-    VxLANGPE_DEFAULT_VNI = 9
-    NSH_HEADER_LENGTH = 0x6
-    NSH_DEFAULT_MDTYPE = 0x1
-    NSH_NEXT_PROTOCOL = 0x3
-    NSH_DEFAULT_NSP = 185
-    NSH_DEFAULT_NSI = 255
-    NSH_DEFAULT_C1 = 3232248395
-    NSH_DEFAULT_C2 = 9
-    NSH_DEFAULT_C3 = 3232248392
-    NSH_DEFAULT_C4 = 50336437
diff --git a/resources/libraries/python/SFC/SFCTest.py b/resources/libraries/python/SFC/SFCTest.py
deleted file mode 100644 (file)
index 3794d3a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This module implements functionality which configure and start
-the NSH SFC functional test.
-"""
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.Constants import Constants as con
-from resources.libraries.python.topology import Topology
-
-
-class SFCTest(object):
-    """Configure and Start the NSH SFC functional tests."""
-
-    @staticmethod
-    def config_and_start_sfc_test(dut_node, dut_if1, dut_if2, if1_adj_mac,
-                                  if2_adj_mac, testtype):
-        """
-        Start the SFC functional on the dut_node.
-
-        :param dut_node: Will execute the SFC on this node.
-        :param dut_if1: The first ingress interface on the DUT.
-        :param dut_if2: The last egress interface on the DUT.
-        :param if1_adj_mac: The interface 1 adjacency MAC.
-        :param if2_adj_mac: The interface 2 adjacency MAC.
-        :param testtype: The SFC functional test type.
-                         (Classifier, Proxy Inbound, Proxy Outbound, SFF).
-        :type dut_node: dict
-        :type dut_if1: str
-        :type dut_if2: str
-        :type if1_adj_mac: str
-        :type if2_adj_mac: str
-        :type testtype: str
-        :raises RuntimeError: If the script execute fails.
-        """
-
-        vpp_intf_name1 = Topology.get_interface_name(dut_node, dut_if1)
-        vpp_intf_name2 = Topology.get_interface_name(dut_node, dut_if2)
-
-        ssh = SSH()
-        ssh.connect(dut_node)
-
-        if testtype == "Classifier":
-            exec_shell = "set_sfc_classifier.sh"
-        elif testtype == "Proxy Inbound":
-            exec_shell = "set_nsh_proxy_inbound.sh"
-        elif testtype == "Proxy Outbound":
-            exec_shell = "set_nsh_proxy_outbound.sh"
-        else:
-            exec_shell = "set_sfc_sff.sh"
-
-        cmd = 'cd {0}/tests/nsh_sfc/sfc_scripts/ && sudo ./{1} {2} {3} {4} ' \
-              '{5}'.format(con.REMOTE_FW_DIR, exec_shell, vpp_intf_name1,
-                           vpp_intf_name2, if1_adj_mac, if2_adj_mac)
-
-        (ret_code, _, _) = ssh.exec_command(cmd, timeout=600)
-        if ret_code != 0:
-            raise RuntimeError('Failed to execute SFC setup script ' \
-                 '{0} at node {1}'.format(exec_shell, dut_node['host']))
diff --git a/resources/libraries/python/SFC/SetupSFCTest.py b/resources/libraries/python/SFC/SetupSFCTest.py
deleted file mode 100644 (file)
index 7daf49c..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""This module exists to provide setup utilities for the framework on topology
-nodes. All tasks required to be run before the actual tests are started is
-supposed to end up here.
-"""
-
-from shlex import split
-from subprocess import Popen, PIPE, call
-from multiprocessing import Pool
-from tempfile import NamedTemporaryFile
-from os.path import basename
-
-from robot.api import logger
-from robot.libraries.BuiltIn import BuiltIn
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.Constants import Constants as con
-from resources.libraries.python.topology import NodeType
-from resources.libraries.python.topology import Topology
-
-__all__ = ["SetupSFCTest"]
-
-
-def pack_framework_dir():
-    """Pack the testing WS into temp file, return its name.
-
-    :returns: the temporary package file name.
-    :rtype: str
-    :raises RuntimeError: If execute the tar command failed.
-    """
-
-    tmpfile = NamedTemporaryFile(suffix=".tgz", prefix="SFC-testing-")
-    file_name = tmpfile.name
-    tmpfile.close()
-
-    proc = Popen(
-        split("tar --exclude-vcs --exclude=./tmp -zcf {0} .".format(file_name)),
-        stdout=PIPE, stderr=PIPE)
-    (stdout, stderr) = proc.communicate()
-
-    logger.debug(stdout)
-    logger.debug(stderr)
-
-    return_code = proc.wait()
-    if return_code != 0:
-        raise RuntimeError("Could not pack testing framework.")
-
-    return file_name
-
-
-def copy_tarball_to_node(tarball, node):
-    """Copy tarball file from local host to remote node.
-
-    :param tarball: Path to tarball to upload.
-    :param node: Node in the topology where the tarball will be copied to.
-    :type tarball: str
-    :type node: dict
-    :returns: nothing
-    """
-    logger.console('Copying tarball to {0}'.format(node['host']))
-    ssh = SSH()
-    ssh.connect(node)
-
-    ssh.scp(tarball, "/tmp/")
-
-
-def extract_tarball_at_node(tarball, node):
-    """Extract tarball at given node.
-
-    Extracts tarball using tar on given node to specific CSIT loocation.
-
-    :param tarball: Path to tarball to upload.
-    :param node: Dictionary created from topology.
-    :type tarball: str
-    :type node: dict
-    :returns: nothing
-    :raises RuntimeError: If unpack the file failed.
-    """
-    logger.console('Extracting tarball to {0} on {1}'.format(
-        con.REMOTE_FW_DIR, node['host']))
-    ssh = SSH()
-    ssh.connect(node)
-
-    cmd = 'sudo rm -rf {1}; mkdir {1} ; tar -zxf {0} -C {1}; ' \
-        'rm -f {0}'.format(tarball, con.REMOTE_FW_DIR)
-    (ret_code, _, stderr) = ssh.exec_command(cmd, timeout=30)
-    if ret_code != 0:
-        logger.error('Unpack error: {0}'.format(stderr))
-        raise RuntimeError('Failed to unpack {0} at node {1}'.format(
-            tarball, node['host']))
-
-
-def create_env_directory_at_node(node):
-    """Create fresh virtualenv to a directory, install pip requirements.
-
-    :param node: Dictionary created from topology, will only install in the TG
-    :type node: dict
-    :returns: nothing
-    """
-    logger.console('Extracting virtualenv, installing requirements.txt '
-                   'on {0}'.format(node['host']))
-    ssh = SSH()
-    ssh.connect(node)
-    (ret_code, stdout, stderr) = ssh.exec_command(
-        'cd {0} && rm -rf env && '
-        'virtualenv --system-site-packages --never-download env && '
-        '. env/bin/activate && pip install -r requirements.txt'
-        .format(con.REMOTE_FW_DIR), timeout=100)
-    if ret_code != 0:
-        logger.error('Virtualenv creation error: {0}'.format(stdout + stderr))
-        raise RuntimeError('Virtualenv setup failed')
-    else:
-        logger.console('Virtualenv created on {0}'.format(node['host']))
-
-def install_sfc_test(node):
-    """Prepare the NSH SFC test envrionment.
-
-    :param node: Dictionary created from topology
-    :type node: dict
-    :returns: nothing
-    """
-    logger.console('Install the NSH SFC on {0}'.format(node['host']))
-
-    if_name_list = Topology.get_node_interfaces(node)
-
-    ssh = SSH()
-    ssh.connect(node)
-
-    (ret_code, _, stderr) = ssh.exec_command(
-        'cd {0}/tests/nsh_sfc/sfc_scripts/ && ./install_sfc.sh {1} {2}'
-        .format(con.REMOTE_FW_DIR, if_name_list[0], if_name_list[1]), \
-        timeout=600)
-
-    if ret_code != 0:
-        logger.error('Install the NSH SFC error: {0}'.format(stderr))
-        raise RuntimeError('Install the NSH SFC failed')
-    else:
-        logger.console('Install the NSH SFC on {0} success!'.
-                       format(node['host']))
-
-def setup_node(args):
-    """Run all set-up methods for a node.
-
-    This method is used as map_async parameter. It receives tuple with all
-    parameters as passed to map_async function.
-
-    :param args: All parameters needed to setup one node.
-    :type args: tuple
-    :returns: True - success, False - error
-    :rtype: bool
-    """
-    tarball, remote_tarball, node = args
-    try:
-        copy_tarball_to_node(tarball, node)
-        extract_tarball_at_node(remote_tarball, node)
-        if node['type'] == NodeType.DUT:
-            install_sfc_test(node)
-        if node['type'] == NodeType.TG:
-            create_env_directory_at_node(node)
-    except RuntimeError as exc:
-        logger.error("Node setup failed, error:'{0}'".format(exc.message))
-        return False
-    else:
-        logger.console('Setup of node {0} done'.format(node['host']))
-        return True
-
-def delete_local_tarball(tarball):
-    """Delete local tarball to prevent disk pollution.
-
-    :param tarball: Path to tarball to upload.
-    :type tarball: str
-    :returns: nothing
-    """
-    call(split('sh -c "rm {0} > /dev/null 2>&1"'.format(tarball)))
-
-
-class SetupSFCTest(object):
-    """Setup suite run on topology nodes.
-
-    Many VAT/CLI based tests need the scripts at remote hosts before executing
-    them. This class packs the whole testing directory and copies it over
-    to all nodes in topology under /tmp/
-    """
-
-    @staticmethod
-    def setup_nsh_sfc_test(nodes):
-        """Pack the whole directory and extract in temp on each node."""
-
-        tarball = pack_framework_dir()
-        msg = 'Framework packed to {0}'.format(tarball)
-        logger.console(msg)
-        logger.trace(msg)
-        remote_tarball = "/tmp/{0}".format(basename(tarball))
-
-        # Turn off logging since we use multiprocessing
-        log_level = BuiltIn().set_log_level('NONE')
-        params = ((tarball, remote_tarball, node) for node in nodes.values())
-        pool = Pool(processes=len(nodes))
-        result = pool.map_async(setup_node, params)
-        pool.close()
-        pool.join()
-
-        # Turn on logging
-        BuiltIn().set_log_level(log_level)
-
-        logger.info(
-            'Executed node setups in parallel, waiting for processes to end')
-        result.wait()
-
-        logger.info('Results: {0}'.format(result.get()))
-
-        logger.trace('Test framework copied to all topology nodes')
-        delete_local_tarball(tarball)
-        logger.console('All nodes are ready')
diff --git a/resources/libraries/python/SFC/TunnelProtocol.py b/resources/libraries/python/SFC/TunnelProtocol.py
deleted file mode 100644 (file)
index 3248cf9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This module implements the VxLAN/VXLAN-GPE/NSH protocol
-for the packet analyse.
-"""
-from scapy.all import Packet
-from scapy.all import XByteField, ShortField
-from scapy.all import BitField, XBitField, IntField
-
-class VxLAN(Packet):
-    """Define the vxlan protocol for the packet analysis."""
-    name = "vxlan"
-    fields_desc = [XByteField("flags", 0x08), BitField("reserved", 0, 24),
-                   BitField("vni", 0, 24), XByteField("reserved", 0x00)]
-
-class VxLANGPE(Packet):
-    """Define the vxlan-gpe protocol for the packet analysis."""
-    name = "vxlan-gpe"
-    fields_desc = [XByteField("flags", 0x0c), ShortField("reserved", 0),
-                   XByteField("nextproto", 0x3), BitField("vni", 0, 24),
-                   XByteField("reserved", 0x0)]
-
-class NSH(Packet):
-    """Define the NSH protocol for the packet analysis."""
-    name = "nsh"
-    fields_desc = [XBitField("Version", 0x0, 2), XBitField("OAM", 0x0, 1),
-                   XBitField("Unassigned", 0x0, 1), XBitField("TTL", 0x0, 6),
-                   XBitField("length", 0x6, 6), XBitField("Unassigned", 0x0, 4),
-                   XBitField("MDtype", 0x1, 4), XByteField("nextproto", 0x3),
-                   IntField("nsp_nsi", 0), IntField("c1", 0),
-                   IntField("c2", 0), IntField("c3", 0), IntField("c4", 0)]
diff --git a/resources/libraries/python/SFC/VerifyPacket.py b/resources/libraries/python/SFC/VerifyPacket.py
deleted file mode 100644 (file)
index a13c760..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This module defines the common functions.
-"""
-
-import ipaddress
-
-from scapy.layers.inet import IP, UDP
-from scapy.all import Raw
-from resources.libraries.python.SFC.SFCConstants import SFCConstants as sfccon
-from resources.libraries.python.SFC.TunnelProtocol import VxLAN, VxLANGPE, NSH
-
-
-def valid_ipv4(ipaddr):
-    """Check if IP address has the correct IPv4 address format.
-
-    :param ipaddr: IP address.
-    :type ipaddr: str
-    :returns: True in case of correct IPv4 address format,
-              otherwise return False.
-    :rtype: bool
-    """
-    try:
-        ipaddress.IPv4Address(unicode(ipaddr))
-        return True
-    except (AttributeError, ipaddress.AddressValueError):
-        return False
-
-
-def valid_ipv6(ipaddr):
-    """Check if IP address has the correct IPv6 address format.
-
-    :param ipaddr: IP address.
-    :type ipaddr: str
-    :returns: True in case of correct IPv6 address format,
-              otherwise return False.
-    :rtype: bool
-    """
-    try:
-        ipaddress.IPv6Address(unicode(ipaddr))
-        return True
-    except (AttributeError, ipaddress.AddressValueError):
-        return False
-
-
-class VerifyPacket(object):
-    """Define some functions for the test filed verify."""
-
-    @staticmethod
-    def check_vxlan_protocol(payload_data):
-        """
-        verify the vxlan protocol in the payload data.
-
-        :param payload_data: the payload data in the packet.
-        :type payload_data: str
-        :raises RuntimeError: If the vxlan protocol field verify fails.
-        """
-        # get the vxlan packet and check it
-        vxlan_pkt = VxLAN(payload_data[0:8])
-        if vxlan_pkt.flags != sfccon.VxLAN_FLAGS:
-            raise RuntimeError("Unexpected Vxlan flags: {0}".
-                               format(vxlan_pkt.flags))
-
-        if vxlan_pkt.vni != sfccon.VxLAN_DEFAULT_VNI:
-            raise RuntimeError("Unexpected VNI flag: {0}".format(vxlan_pkt.vni))
-
-    @staticmethod
-    def check_vxlangpe_nsh_protocol(payload_data, test_type):
-        """
-        verify the vxlangpe and nsh protocol in the payload data.
-
-        :param payload_data: the payload data in the packet.
-        :param test_type: the functional test type.
-        :type payload_data: str
-        :type test_type: str
-        :raises RuntimeError: If the vxlangpe and nsh protocol
-                              field verify fails.
-        """
-        # get the vxlan-gpe packet and check it
-        vxlangpe_pkt = VxLANGPE(payload_data[0:8])
-        if vxlangpe_pkt.flags != sfccon.VxLANGPE_FLAGS:
-            raise RuntimeError("Unexpected Vxlan-GPE flags: {0}".
-                               format(vxlangpe_pkt.flags))
-
-        if vxlangpe_pkt.nextproto != sfccon.VxLANGPE_NEXT_PROTOCOL:
-            raise RuntimeError("next protocol not the NSH")
-
-        if vxlangpe_pkt.vni != sfccon.VxLANGPE_DEFAULT_VNI:
-            raise RuntimeError("Unexpected VNI flag: {0}".
-                               format(vxlangpe_pkt.vni))
-
-        # get the NSH packet and check it
-        nsh_pkt = NSH(payload_data[8:32])
-        if nsh_pkt.Version != 0:
-            raise RuntimeError("Unexpected NSH version: {0}".
-                               format(nsh_pkt.Version))
-
-        if nsh_pkt.OAM != 0 and nsh_pkt.OAM != 1:
-            raise RuntimeError("Unexpected NSH OAM: {0}".
-                               format(nsh_pkt.OAM))
-
-        if nsh_pkt.length != sfccon.NSH_HEADER_LENGTH:
-            raise RuntimeError("NSH length {0} incorrect".
-                               format(nsh_pkt.length))
-
-        if nsh_pkt.MDtype != sfccon.NSH_DEFAULT_MDTYPE:
-            raise RuntimeError("NSH MD-Type {0} incorrect".
-                               format(nsh_pkt.MDtype))
-
-        if nsh_pkt.nextproto != sfccon.NSH_NEXT_PROTOCOL:
-            raise RuntimeError("NSH next protocol {0} incorrect".
-                               format(nsh_pkt.nextproto))
-
-        if test_type == "Proxy Outbound" or test_type == "SFF":
-            expect_nsi = sfccon.NSH_DEFAULT_NSI - 1
-        else:
-            expect_nsi = sfccon.NSH_DEFAULT_NSI
-
-        nsp_nsi = nsh_pkt.nsp_nsi
-        nsp = nsp_nsi >> 8
-        nsi = nsp_nsi & 0x000000FF
-        if nsp != sfccon.NSH_DEFAULT_NSP:
-            raise RuntimeError("NSH Service Path ID {0} incorrect".format(nsp))
-
-        if nsi != expect_nsi:
-            raise RuntimeError("NSH Service Index {0} incorrect".format(nsi))
-
-        nsh_c1 = nsh_pkt.c1
-        if nsh_c1 != sfccon.NSH_DEFAULT_C1:
-            raise RuntimeError("NSH c1 {0} incorrect".format(nsh_c1))
-
-        nsh_c2 = nsh_pkt.c2
-        if nsh_c2 != sfccon.NSH_DEFAULT_C2:
-            raise RuntimeError("NSH c2 {0} incorrect".format(nsh_c2))
-
-        nsh_c3 = nsh_pkt.c3
-        if nsh_c3 != sfccon.NSH_DEFAULT_C3:
-            raise RuntimeError("NSH c3 {0} incorrect".format(nsh_c3))
-
-        nsh_c4 = nsh_pkt.c4
-        if nsh_c4 != sfccon.NSH_DEFAULT_C4:
-            raise RuntimeError("NSH c4 {0} incorrect".format(nsh_c4))
-
-
-    @staticmethod
-    def check_the_nsh_sfc_packet(ether, frame_size, test_type):
-        """
-        verify the NSH SFC functional test loopback packet field
-        is correct.
-
-        :param ether: The Ethernet packet data.
-        :param frame_size: The origin frame size.
-        :param test_type: The test type.
-                         (Classifier, Proxy Inbound, Proxy Outbound, SFF).
-
-        :type ether: scapy.Ether
-        :type frame_size: Integer
-        :type test_type: str
-        :raises RuntimeError: If the packet field verify fails.
-        """
-
-        origin_size = int(frame_size)
-        if test_type == "Classifier":
-            expect_pkt_len = origin_size + 74 - 4
-        elif test_type == "Proxy Inbound":
-            expect_pkt_len = origin_size - 24 - 4
-        elif test_type == "Proxy Outbound":
-            expect_pkt_len = origin_size + 24 - 4
-        else:
-            expect_pkt_len = origin_size - 4
-
-        recv_pkt_len = len(ether)
-        if recv_pkt_len != expect_pkt_len:
-            raise RuntimeError("Received packet size {0} not "
-                               "the expect size {1}".format(recv_pkt_len,
-                                                            expect_pkt_len))
-
-        if not ether.haslayer(IP):
-            raise RuntimeError("Not a IPv4 packet")
-
-        pkt_proto = ether[IP].proto
-        if pkt_proto != sfccon.UDP_PROTOCOL:
-            raise RuntimeError("Not a UDP packet , {0}".format(pkt_proto))
-
-        if test_type == "Proxy Inbound":
-            expect_udp_port = sfccon.VxLAN_UDP_PORT
-        else:
-            expect_udp_port = sfccon.VxLANGPE_UDP_PORT
-
-        dst_port = ether[UDP].dport
-        if dst_port != expect_udp_port:
-            raise RuntimeError("UDP dest port must be {0}, {1}".
-                               format(expect_udp_port, dst_port))
-
-        payload_data = ether[Raw].load
-
-        if test_type == "Proxy Inbound":
-            VerifyPacket.check_vxlan_protocol(payload_data)
-        else:
-            VerifyPacket.check_vxlangpe_nsh_protocol(payload_data, test_type)
diff --git a/resources/libraries/python/SFC/__init__.py b/resources/libraries/python/SFC/__init__.py
deleted file mode 100644 (file)
index e90d968..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-__init__ file for directory resources/libraries/python/SFC
-"""
diff --git a/resources/libraries/robot/nsh_sfc/default.robot b/resources/libraries/robot/nsh_sfc/default.robot
deleted file mode 100644 (file)
index 64d31a9..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Variables | resources/libraries/python/topology.py
-| Library | resources.libraries.python.topology.Topology
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.SFC.SFCTest
-| Library | Collections
-
-*** Keywords ***
-| Setup DUT nodes for '${type}' functional testing
-| | [Documentation] | Configure and Start the SFC functional test
-| | ... | on the DUT node.
-| | ${testtype}= | Convert to String | ${type}
-| | Append Nodes | ${nodes['TG']} | ${nodes['DUT1']}
-| | ... | ${nodes['TG']}
-| | Compute Path | always_same_link=${FALSE}
-| | ${tg_to_dut_if1} | ${tg_node}= | First Interface
-| | ${tg_to_dut_if2} | ${tg_node}= | Last Interface
-| | ${dut_to_tg_if1} | ${dut_node}= | First Ingress Interface
-| | ${dut_to_tg_if2} | ${dut_node}= | Last Egress Interface
-| | ${tg_to_dut_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if1}
-| | ${tg_to_dut_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if2}
-| | ${dut_to_tg_if1_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if1}
-| | ${dut_to_tg_if2_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if2}
-| | Set Suite Variable | ${tg_to_dut_if1}
-| | Set Suite Variable | ${tg_to_dut_if2}
-| | Set Suite Variable | ${dut_to_tg_if1}
-| | Set Suite Variable | ${dut_to_tg_if2}
-| | Set Suite Variable | ${tg_to_dut_if1_mac}
-| | Set Suite Variable | ${tg_to_dut_if2_mac}
-| | Set Suite Variable | ${dut_to_tg_if1_mac}
-| | Set Suite Variable | ${dut_to_tg_if2_mac}
-| | Set Suite Variable | ${tg_node}
-| | Set Suite Variable | ${dut_node}
-| | Set Interface State | ${tg_node} | ${tg_to_dut_if1} | 'up'
-| | Set Interface State | ${tg_node} | ${tg_to_dut_if2} | 'up'
-| | Set Interface Ethernet MTU | ${tg_node} | ${tg_to_dut_if1} | 9000
-| | Set Interface Ethernet MTU | ${tg_node} | ${tg_to_dut_if2} | 9000
-| | Config and Start SFC test | ${dut_node} | ${dut_to_tg_if1}
-| | ... | ${dut_to_tg_if2} | ${tg_to_dut_if1_mac} | ${tg_to_dut_if2_mac}
-| | ... | ${testtype}
-
-
-| Node "${from_node}" interface "${from_port}" send "${size}" Bytes packet to node "${to_node}" interface "${to_port}" for "${type}" test
-| | [Documentation] | At the first start the tcpdump on the TG node,
-| | ... | then build the packet with the scapy and send the packet to the
-| | ... | DUT node, DUT node will receive the packet on the ingress interface
-| | ... | DUT will loopback packet to the TG after processed. TG will use
-| | ... | the tcpdump to capture the packet and check the packet is correct.
-| | ${src_ip}= | Set Variable If | "${type}" == "Classifier" | 10.10.12.101 | 192.168.50.72
-| | ${dst_ip}= | Set Variable If | "${type}" == "Classifier" | 10.10.12.100 | 192.168.50.76
-| | ${src_mac}= | Get interface mac | ${from_node} | ${from_port}
-| | ${dst_mac}= | Get interface mac | ${to_node} | ${to_port}
-| | ${tx_port_name}= | Get interface name | ${from_node} | ${from_port}
-| | ${rx_port_name}= | Get interface name | ${from_node} | ${tg_to_dut_if2}
-| | ${timeout}= | Set Variable | 10
-| | ${frame_size}= | Convert To Integer | ${size}
-| | ${args}= | Traffic Script Gen Arg | ${rx_port_name} | ${tx_port_name}
-| |          | ...      | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --framesize ${frame_size}
-| |          | ...      | --timeout ${timeout} | --testtype "${type}"
-| | Run Keyword If | "${type}" == "Classifier" | Run Traffic Script On Node
-| | | | | ... | send_tcp_for_classifier_test.py | ${from_node} | ${args}
-| | ... | ELSE IF | "${type}" == "Proxy Inbound" | Run Traffic Script On Node
-| | | | | ... | send_vxlangpe_nsh_for_proxy_test.py | ${from_node} | ${args}
-| | ... | ELSE IF | "${type}" == "Proxy Outbound" | Run Traffic Script On Node
-| | | | | ... | send_vxlan_for_proxy_test.py | ${from_node} | ${args}
-| | ... | ELSE | Run Traffic Script On Node | send_vxlangpe_nsh_for_sff_test.py
-| | | | | ... | ${from_node} | ${args}
index 6ba9a26..fb12eb5 100644 (file)
@@ -11,7 +11,6 @@ Contents
     resources.libraries.robot
     tests.dmm.func
     tests.dpdk.perf
-    tests.nsh_sfc.func
     tests.tldk.func
     tests.vpp.device
     tests.vpp.perf
diff --git a/resources/tools/doc_gen/src/tests.nsh_sfc.func.rst b/resources/tools/doc_gen/src/tests.nsh_sfc.func.rst
deleted file mode 100644 (file)
index e06d26d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-NSH SFC Functional Tests
-========================
-
index 9b1a8ef..ae781bd 100644 (file)
@@ -82,7 +82,6 @@ rst_epilog = """
 .. _CSIT DPDK Performance Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.dpdk.perf.html
 .. _CSIT VPP Functional Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.func.html
 .. _CSIT VPP Performance Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.perf.html
-.. _CSIT NSH_SFC Functional Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.nsh_sfc.func.html
 .. _CSIT DMM Functional Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.dmm.func.html
 .. _CSIT VPP Device Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.device.html
 .. _VPP test framework documentation: https://docs.fd.io/vpp/{vpprelease}/vpp_make_test/html/
@@ -103,7 +102,6 @@ rst_epilog = """
 .. _FD.io test executor vpp functional jobs using CentOs: https://jenkins.fd.io/view/csit/job/csit-vpp-functional-{srelease}-centos7-virl
 .. _FD.io test executor vpp device jobs using Ubuntu: https://jenkins.fd.io/view/csit/job/csit-vpp-device-{srelease}-ubuntu1804-1n-skx
 .. _FD.io test executor Honeycomb functional jobs: https://jenkins.fd.io/view/csit/job/hc2vpp-csit-integration-{srelease}-ubuntu1604
-.. _FD.io test executor NSH_SFC functional jobs: https://jenkins.fd.io/view/csit/job/csit-nsh_sfc-verify-func-{srelease}-ubuntu1604-virl
 .. _FD.io test executor DMM functional jobs: https://jenkins.fd.io/view/csit/job/csit-dmm-functional-{srelease}-ubuntu1604-virl
 .. _FD.io VPP compile job: https://jenkins.fd.io/view/vpp/job/vpp-merge-{srelease}-ubuntu1604/
 .. _FD.io DPDK compile job: https://jenkins.fd.io/view/deb-dpdk/job/deb_dpdk-merge-{sdpdkrelease}-ubuntu1604/
index e3589ae..d3a9782 100644 (file)
@@ -170,7 +170,6 @@ The structure of the section "Environment" is as follows (example):
         DIR[DTR,PERF,DPDK]: "{DIR[DTR]}/dpdk_performance_results"
         DIR[DTR,PERF,VPP]: "{DIR[DTR]}/vpp_performance_results"
         DIR[DTR,FUNC,VPP]: "{DIR[DTR]}/vpp_functional_results"
-        DIR[DTR,FUNC,NSHSFC]: "{DIR[DTR]}/nshsfc_functional_results"
         DIR[DTR,PERF,VPP,IMPRV]: "{DIR[WORKING,SRC]}/vpp_performance_tests/performance_improvements"
 
         # Detailed test configurations
@@ -365,10 +364,6 @@ The structure of the section "Debug" is as follows (example):
         -
           build: 9
           file: "csit-dpdk-perf-1707-all__9.xml"
-        csit-nsh_sfc-verify-func-1707-ubuntu1604-virl:
-        -
-          build: 2
-          file: "csit-nsh_sfc-verify-func-1707-ubuntu1604-virl-2.xml"
         csit-vpp-functional-1707-ubuntu1604-virl:
         -
           build: lastSuccessfulBuild
@@ -471,9 +466,6 @@ The structure of the section "Input" is as follows (example from 17.07 report):
         - 9
         hc2vpp-csit-integration-1707-ubuntu1604:
         - lastSuccessfulBuild
-        csit-nsh_sfc-verify-func-1707-ubuntu1604-virl:
-        - 2
-
 
 Section: Output
 '''''''''''''''
index 127768d..f4ad616 100644 (file)
@@ -45,7 +45,6 @@
     DIR[DTR,FUNC,VPP,UBUNTU]: "{DIR[DTR]}/vpp_functional_results_ubuntu"
     DIR[DTR,FUNC,VPP,CENTOS]: "{DIR[DTR]}/vpp_functional_results_centos"
     DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]: "{DIR[DTR]}/vpp_device_results_ubuntu"
-    DIR[DTR,FUNC,NSHSFC]: "{DIR[DTR]}/nshsfc_functional_results"
     DIR[DTR,FUNC,DMM]: "{DIR[DTR]}/dmm_functional_results"
     DIR[DTR,PERF,VPP,IMPRV]: "{DIR[WORKING,SRC]}/vpp_performance_tests/performance_improvements"
 
diff --git a/resources/tools/scripts/download_nsh_sfc_pkgs.sh b/resources/tools/scripts/download_nsh_sfc_pkgs.sh
deleted file mode 100755 (executable)
index 2261f08..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -ex
-
-trap 'rm -f *.deb.md5; exit' EXIT
-trap 'rm -f *.deb.md5;rm -f *.deb; exit' ERR
-
-STREAM=$1
-OS=$2
-
-URL="https://nexus.fd.io/service/local/artifact/maven/content"
-VER="RELEASE"
-GROUP="io.fd.vpp"
-NSH_GROUP="io.fd.nsh_sfc"
-VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dkms vpp-lib vpp-plugins vpp-api-java vpp-api-python vpp-api-lua"
-NSH_ARTIFACTS="vpp-nsh-plugin"
-
-if [ "${OS}" == "ubuntu1404" ]; then
-    OS="ubuntu.trusty.main"
-    PACKAGE="deb deb.md5"
-    CLASS="deb"
-elif [ "${OS}" == "ubuntu1604" ]; then
-    OS="ubuntu.xenial.main"
-    PACKAGE="deb deb.md5"
-    CLASS="deb"
-elif [ "${OS}" == "centos7" ]; then
-    OS="centos7"
-    PACKAGE="rpm rpm.md5"
-    CLASS="rpm"
-fi
-
-REPO="fd.io.${STREAM}.${OS}"
-
-for ART in ${VPP_ARTIFACTS}; do
-    for PAC in $PACKAGE; do
-        curl "${URL}?r=${REPO}&g=${GROUP}&a=${ART}&p=${PAC}&v=${VER}&c=${CLASS}" -O -J || exit
-    done
-done
-
-for ART in ${NSH_ARTIFACTS}; do
-    for PAC in $PACKAGE; do
-        curl "${URL}?r=${REPO}&g=${NSH_GROUP}&a=${ART}&p=${PAC}&v=${VER}&c=${CLASS}" -O -J || exit
-    done
-done
-
-for FILE in *.deb; do
-    echo " "${FILE} >> ${FILE}.md5
-done
-
-for MD5FILE in *.md5; do
-    md5sum -c ${MD5FILE} || exit
-done
diff --git a/resources/traffic_scripts/send_tcp_for_classifier_test.py b/resources/traffic_scripts/send_tcp_for_classifier_test.py
deleted file mode 100755 (executable)
index 5a6873a..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-Traffic script that sends an TCP packet
-from TG to DUT.
-"""
-import sys
-
-from scapy.all import Ether, Packet, Raw
-from scapy.layers.inet import IP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-
-from resources.libraries.python.SFC.VerifyPacket import *
-from resources.libraries.python.SFC.SFCConstants import SFCConstants as SfcCon
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-
-
-def main():
-    """Send TCP packet from one traffic generator interface to DUT.
-
-    :raises: If the IP address is invalid.
-    """
-    args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
-                             'timeout', 'framesize', 'testtype'])
-
-    src_mac = args.get_arg('src_mac')
-    dst_mac = args.get_arg('dst_mac')
-    src_ip = args.get_arg('src_ip')
-    dst_ip = args.get_arg('dst_ip')
-    tx_if = args.get_arg('tx_if')
-    rx_if = args.get_arg('rx_if')
-    timeout = int(args.get_arg('timeout'))
-    frame_size = int(args.get_arg('framesize'))
-    test_type = args.get_arg('testtype')
-
-    rxq = RxQueue(rx_if)
-    txq = TxQueue(tx_if)
-    sent_packets = []
-
-    protocol = TCP
-    source_port = SfcCon.DEF_SRC_PORT
-    destination_port = SfcCon.DEF_DST_PORT
-
-    if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
-        ip_version = IP
-    elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
-        ip_version = IPv6
-    else:
-        raise ValueError("Invalid IP version!")
-
-    pkt_header = (Ether(src=src_mac, dst=dst_mac) /
-                  ip_version(src=src_ip, dst=dst_ip) /
-                  protocol(sport=int(source_port), dport=int(destination_port)))
-
-    fsize_no_fcs = frame_size - 4
-    pad_len = max(0, fsize_no_fcs - len(pkt_header))
-    pad_data = "A" * pad_len
-
-    pkt_raw = pkt_header / Raw(load=pad_data)
-
-    # Send created packet on one interface and receive on the other
-    sent_packets.append(pkt_raw)
-    txq.send(pkt_raw)
-
-    while True:
-        ether = rxq.recv(timeout)
-        if ether is None:
-            raise RuntimeError('No packet is received!')
-
-        if ether.haslayer(ICMPv6ND_NS):
-            # read another packet in the queue if the current one is ICMPv6ND_NS
-            continue
-        else:
-            # otherwise process the current packet
-            break
-
-    # let us begin to check the NSH SFC loopback  packet
-    VerifyPacket.check_the_nsh_sfc_packet(ether, frame_size, test_type)
-
-    # we check all the fields about the loopback packet, this test will pass
-    sys.exit(0)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/resources/traffic_scripts/send_vxlan_for_proxy_test.py b/resources/traffic_scripts/send_vxlan_for_proxy_test.py
deleted file mode 100755 (executable)
index d33ed41..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an VxLAN packet
-from TG to DUT.
-"""
-import sys
-import time
-
-from scapy.layers.inet import IP, UDP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-from scapy.all import Ether, Packet, Raw
-
-from resources.libraries.python.SFC.VerifyPacket import *
-from resources.libraries.python.SFC.SFCConstants import SFCConstants as SfcCon
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-
-
-def main():
-    """Send VxLAN packet from TG to DUT.
-
-    :raises: If the IP address is invalid.
-    """
-    args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
-                             'timeout', 'framesize', 'testtype'])
-
-    src_mac = args.get_arg('src_mac')
-    dst_mac = args.get_arg('dst_mac')
-    src_ip = args.get_arg('src_ip')
-    dst_ip = args.get_arg('dst_ip')
-    tx_if = args.get_arg('tx_if')
-    rx_if = args.get_arg('rx_if')
-    timeout = max(2, int(args.get_arg('timeout')))
-    frame_size = int(args.get_arg('framesize'))
-    test_type = args.get_arg('testtype')
-
-    rxq = RxQueue(rx_if)
-    txq = TxQueue(tx_if)
-    sent_packets = []
-
-    protocol = TCP
-    source_port = SfcCon.DEF_SRC_PORT
-    destination_port = SfcCon.DEF_DST_PORT
-
-    if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
-        ip_version = IP
-    elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
-        ip_version = IPv6
-    else:
-        raise ValueError("Invalid IP version!")
-
-    innerpkt = (Ether(src=src_mac, dst=dst_mac) /
-                ip_version(src=src_ip, dst=dst_ip) /
-                protocol(sport=int(source_port), dport=int(destination_port)))
-
-    vxlan = '\x08\x00\x00\x00\x00\x00\x01\x00'
-
-    raw_data = vxlan + str(innerpkt)
-
-    pkt_header = (Ether(src=src_mac, dst=dst_mac) /
-                  ip_version(src=src_ip, dst=dst_ip) /
-                  UDP(sport=int(source_port), dport=4789) /
-                  Raw(load=raw_data))
-
-    fsize_no_fcs = frame_size - 4
-    pad_len = max(0, fsize_no_fcs - len(pkt_header))
-    pad_data = "A" * pad_len
-
-    pkt_raw = pkt_header / Raw(load=pad_data)
-
-    # Send created packet on one interface and receive on the other
-    sent_packets.append(pkt_raw)
-    txq.send(pkt_raw)
-
-    while True:
-        ether = rxq.recv(timeout)
-        if ether is None:
-            raise RuntimeError('No packet is received!')
-
-        if ether.haslayer(ICMPv6ND_NS):
-            # read another packet in the queue if the current one is ICMPv6ND_NS
-            continue
-        else:
-            # otherwise process the current packet
-            break
-
-    # let us begin to check the proxy outbound packet
-    VerifyPacket.check_the_nsh_sfc_packet(ether, frame_size, test_type)
-
-    # we check all the fields about the proxy outbound, this test will pass
-    sys.exit(0)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py b/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py
deleted file mode 100755 (executable)
index 3ea1f0b..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an VxLAN-GPE+NSH packet
-from TG to DUT.
-"""
-import sys
-
-from scapy.layers.inet import IP, UDP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-from scapy.all import Ether, Packet, Raw
-
-from resources.libraries.python.SFC.VerifyPacket import *
-from resources.libraries.python.SFC.SFCConstants import SFCConstants as SfcCon
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-
-
-def main():
-    """Send VxLAN-GPE+NSH packet from TG to DUT.
-
-    :raises: If the IP address is invalid.
-    """
-    args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
-                             'timeout', 'framesize', 'testtype'])
-
-    src_mac = args.get_arg('src_mac')
-    dst_mac = args.get_arg('dst_mac')
-    src_ip = args.get_arg('src_ip')
-    dst_ip = args.get_arg('dst_ip')
-    tx_if = args.get_arg('tx_if')
-    rx_if = args.get_arg('rx_if')
-    timeout = max(2, int(args.get_arg('timeout')))
-    frame_size = int(args.get_arg('framesize'))
-    test_type = args.get_arg('testtype')
-
-    rxq = RxQueue(rx_if)
-    txq = TxQueue(tx_if)
-    sent_packets = []
-
-    protocol = TCP
-    source_port = SfcCon.DEF_SRC_PORT
-    destination_port = SfcCon.DEF_DST_PORT
-
-    if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
-        ip_version = IP
-    elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
-        ip_version = IPv6
-    else:
-        raise ValueError("Invalid IP version!")
-
-    innerpkt = (Ether(src=src_mac, dst=dst_mac) /
-                ip_version(src=src_ip, dst=dst_ip) /
-                protocol(sport=int(source_port), dport=int(destination_port)))
-
-    vxlangpe_nsh = '\x0c\x00\x00\x04\x00\x00\x09\x00\x00\x06' \
-                   '\x01\x03\x00\x00\xb9\xff\xC0\xA8\x32\x4B' \
-                   '\x00\x00\x00\x09\xC0\xA8\x32\x48\x03\x00\x12\xB5'
-
-    raw_data = vxlangpe_nsh + str(innerpkt)
-
-    pkt_header = (Ether(src=src_mac, dst=dst_mac) /
-                  ip_version(src=src_ip, dst=dst_ip) /
-                  UDP(sport=int(source_port), dport=4790) /
-                  Raw(load=raw_data))
-
-    fsize_no_fcs = frame_size - 4
-    pad_len = max(0, fsize_no_fcs - len(pkt_header))
-    pad_data = "A" * pad_len
-
-    pkt_raw = pkt_header / Raw(load=pad_data)
-
-    # Send created packet on one interface and receive on the other
-    sent_packets.append(pkt_raw)
-    txq.send(pkt_raw)
-
-    while True:
-        ether = rxq.recv(timeout)
-        if ether is None:
-            raise RuntimeError('No packet is received!')
-
-        if ether.haslayer(ICMPv6ND_NS):
-            # read another packet in the queue if the current one is ICMPv6ND_NS
-            continue
-        else:
-            # otherwise process the current packet
-            break
-
-    # let us begin to check the proxy inbound packet
-    VerifyPacket.check_the_nsh_sfc_packet(ether, frame_size, test_type)
-
-    # we check all the fields about the proxy inbound, this test will pass
-    sys.exit(0)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py b/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py
deleted file mode 100755 (executable)
index 6879d20..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an VxLAN-GPE+NSH packet
-from TG to DUT.
-"""
-import sys
-
-from scapy.layers.inet import IP, UDP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-from scapy.all import Ether, Packet, Raw
-
-from resources.libraries.python.SFC.VerifyPacket import *
-from resources.libraries.python.SFC.SFCConstants import SFCConstants as SfcCon
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-
-
-def main():
-    """Send VxLAN-GPE+NSH packet from TG to DUT.
-
-    :raises: If the IP address is invalid.
-    """
-    args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
-                             'timeout', 'framesize', 'testtype'])
-
-    src_mac = args.get_arg('src_mac')
-    dst_mac = args.get_arg('dst_mac')
-    src_ip = args.get_arg('src_ip')
-    dst_ip = args.get_arg('dst_ip')
-    tx_if = args.get_arg('tx_if')
-    rx_if = args.get_arg('rx_if')
-    timeout = max(2, int(args.get_arg('timeout')))
-    frame_size = int(args.get_arg('framesize'))
-    test_type = args.get_arg('testtype')
-
-    rxq = RxQueue(rx_if)
-    txq = TxQueue(tx_if)
-    sent_packets = []
-
-    protocol = TCP
-    source_port = SfcCon.DEF_SRC_PORT
-    destination_port = SfcCon.DEF_DST_PORT
-
-    if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
-        ip_version = IP
-    elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
-        ip_version = IPv6
-    else:
-        raise ValueError("Invalid IP version!")
-
-    innerpkt = (Ether(src=src_mac, dst=dst_mac) /
-                ip_version(src=src_ip, dst=dst_ip) /
-                protocol(sport=int(source_port), dport=int(destination_port)))
-
-    vxlangpe_nsh = '\x0c\x00\x00\x04\x00\x00\x0a\x00\x00\x06' \
-                   '\x01\x03\x00\x00\xb9\xff\xC0\xA8\x32\x4B' \
-                   '\x00\x00\x00\x09\xC0\xA8\x32\x48\x03\x00\x12\xB5'
-
-    raw_data = vxlangpe_nsh + str(innerpkt)
-
-    pkt_header = (Ether(src=src_mac, dst=dst_mac) /
-                  ip_version(src=src_ip, dst=dst_ip) /
-                  UDP(sport=int(source_port), dport=4790) /
-                  Raw(load=raw_data))
-
-    fsize_no_fcs = frame_size - 4
-    pad_len = max(0, fsize_no_fcs - len(pkt_header))
-    pad_data = "A" * pad_len
-
-    pkt_raw = pkt_header / Raw(load=pad_data)
-
-    # Send created packet on one interface and receive on the other
-    sent_packets.append(pkt_raw)
-    txq.send(pkt_raw)
-
-    while True:
-        ether = rxq.recv(timeout)
-        if ether is None:
-            raise RuntimeError('No packet is received!')
-
-        if ether.haslayer(ICMPv6ND_NS):
-            # read another packet in the queue if the current one is ICMPv6ND_NS
-            continue
-        else:
-            # otherwise process the current packet
-            break
-
-    # let us begin to check the sfc sff packet
-    VerifyPacket.check_the_nsh_sfc_packet(ether, frame_size, test_type)
-
-    # we check all the fields about the sfc sff, this test will pass
-    sys.exit(0)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/tests/nsh_sfc/func/__init__.robot b/tests/nsh_sfc/func/__init__.robot
deleted file mode 100644 (file)
index 7f1391c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Library | resources.libraries.python.SFC.SetupSFCTest
-| Suite Setup | Run Keywords | Setup NSH SFC test | ${nodes} | AND
-| ... | Restart Vpp Service On All Duts | ${nodes} | AND
-| ... | Verify Vpp On All Duts | ${nodes} | AND
-| ... | VPP Enable Traces On All Duts | ${nodes} | AND
-| ... | Update All Interface Data On All Nodes | ${nodes}
diff --git a/tests/nsh_sfc/func/classifier/eth2p-ethip4-sfc-classifier-func.robot b/tests/nsh_sfc/func/classifier/eth2p-ethip4-sfc-classifier-func.robot
deleted file mode 100644 (file)
index b922771..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/nsh_sfc/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | FUNCTEST
-| Suite Setup | Run Keywords
-| ... | Configure all DUTs before test | AND
-| ... | Configure all TGs for traffic script | AND
-| ... | Update All Interface Data On All Nodes | ${nodes} | AND
-| ... | Setup DUT nodes for 'Classifier' functional testing
-| Test Setup | Run Keywords | Save VPP PIDs | AND
-| ... | Reset PAPI History On All DUTs | ${nodes} | AND
-| ... | Clear Interface Counters on all DUTs | ${nodes}
-| Test Teardown | Run Keywords
-| ... | Show packet trace on all DUTs | ${nodes} | AND
-| ... | Show PAPI History On All DUTs | ${nodes} | AND
-| ... | Verify VPP PID in Teardown
-| Documentation | *NSH SFC Classifier test cases*
-| ...
-| ... | Test the SFC Classifier functional. DUT run the VPP with NSH SFC Plugin
-| ... | TG send a TCP packet to the DUT, if the packet match the SFC Classifier
-| ... | rules, the SFC Classifier will encapsulate this packet to a VxLAN-GPE
-| ... | and NSH packet, then the DUT will loopback the packet to the TG.
-| ... | The TG will capture this encapsulation packet and check the packet
-| ... | field is correct.
-
-*** Test Cases ***
-| TC01: NSH SFC Classifier functional test with 72B frame size
-| | [Documentation]
-| | ... | Make TG send 72 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${72}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC02: NSH SFC Classifier functional test with 128B frame size
-| | [Documentation]
-| | ... | Make TG send 128 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${128}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC03: NSH SFC Classifier functional test with 256B frame size
-| | [Documentation]
-| | ... | Make TG send 256 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${256}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC04: NSH SFC Classifier functional test with 512B frame size
-| | [Documentation]
-| | ... | Make TG send 512 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${512}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC05: NSH SFC Classifier functional test with 1024B frame size
-| | [Documentation]
-| | ... | Make TG send 1024 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${1024}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC06: NSH SFC Classifier functional test with 1280B frame size
-| | [Documentation]
-| | ... | Make TG send 1280 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${1280}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
-
-| TC07: NSH SFC Classifier functional test with 1518B frame size
-| | [Documentation]
-| | ... | Make TG send 1518 Bytes TCP packet to DUT ingress interface. Make TG\
-| | ... | verify SFC Classifier encapsulation functional is correct.
-| | ${frame_size}= | Set Variable | ${1518}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Classifier" test
diff --git a/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-inbound-func.robot b/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-inbound-func.robot
deleted file mode 100644 (file)
index 518ed2a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/nsh_sfc/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | FUNCTEST
-| Suite Setup | Run Keywords
-| ... | Configure all DUTs before test | AND
-| ... | Configure all TGs for traffic script | AND
-| ... | Update All Interface Data On All Nodes | ${nodes} | AND
-| ... | Setup DUT nodes for 'Proxy Inbound' functional testing
-| Test Setup | Run Keywords | Save VPP PIDs | AND
-| ... | Reset PAPI History On All DUTs | ${nodes} | AND
-| ... | Clear Interface Counters on all DUTs | ${nodes}
-| Test Teardown | Run Keywords
-| ... | Show packet trace on all DUTs | ${nodes} | AND
-| ... | Show PAPI History On All DUTs | ${nodes} | AND
-| ... | Verify VPP PID in Teardown
-| Documentation | *NSH SFC Proxy Inbound test cases*
-| ...
-| ... | Test the SFC Proxy Inbound functional. DUT run the VPP with NSH
-| ... | SFC Plugin, TG send a VxLAN-GPE+NSH packet to the DUT,
-| ... | if the packet match the SFC Proxy inbound rules, the SFC Proxy will
-| ... | pop the VxLAN-GPE and NSH protocol, then encapsulate with the
-| ... | VxLAN protocol. DUT will loopback the packet to the TG.
-| ... | The TG will capture this VxLAN packet and check the packet
-| ... | field is correct.
-
-*** Test Cases ***
-| TC01: NSH SFC Proxy Inbound functional test with 152B frame size
-| | [Documentation]
-| | ... | Make TG send 152 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${152}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
-
-| TC02: NSH SFC Proxy Inbound functional test with 256B frame size
-| | [Documentation]
-| | ... | Make TG send 256 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${256}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
-
-| TC03: NSH SFC Proxy Inbound functional test with 512B frame size
-| | [Documentation]
-| | ... | Make TG send 512 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${512}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
-
-| TC04: NSH SFC Proxy Inbound functional test with 1024B frame size
-| | [Documentation]
-| | ... | Make TG send 1024 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1024}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
-
-| TC05: NSH SFC Proxy Inbound functional test with 1280B frame size
-| | [Documentation]
-| | ... | Make TG send 1280 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1280}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
-
-| TC06: NSH SFC Proxy Inbound functional test with 1518B frame size
-| | [Documentation]
-| | ... | Make TG send 1518 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Inbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1518}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Inbound" test
diff --git a/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-outbound-func.robot b/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-outbound-func.robot
deleted file mode 100644 (file)
index b228511..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/nsh_sfc/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | FUNCTEST
-| Suite Setup | Run Keywords
-| ... | Configure all DUTs before test | AND
-| ... | Configure all TGs for traffic script | AND
-| ... | Update All Interface Data On All Nodes | ${nodes} | AND
-| ... | Setup DUT nodes for 'Proxy Outbound' functional testing
-| Test Setup | Run Keywords | Save VPP PIDs | AND
-| ... | Reset PAPI History On All DUTs | ${nodes} | AND
-| ... | Clear Interface Counters on all DUTs | ${nodes}
-| Test Teardown | Run Keywords
-| ... | Show packet trace on all DUTs | ${nodes} | AND
-| ... | Show PAPI History On All DUTs | ${nodes} | AND
-| ... | Verify VPP PID in Teardown
-| Documentation | *NSH SFC Proxy Outbound test cases*
-| ...
-| ... | Test the SFC Proxy Outbound functional. DUT run the VPP with NSH
-| ... | SFC Plugin, TG send a VxLAN packet to the DUT,
-| ... | if the packet match the SFC Proxy outbound rules, the SFC Proxy will
-| ... | push the NSH protocol, then encapsulate with the VxLAN-GPE protocol.
-| ... | DUT will loopback the packet to the TG.
-| ... | The TG will capture this VxLAN-GPE+NSH packet and check the packet
-| ... | field is correct.
-
-
-*** Test Cases ***
-| TC01: NSH SFC Proxy Outbound functional test with 128B frame size
-| | [Documentation]
-| | ... | Make TG send 128 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${128}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
-
-| TC02: NSH SFC Proxy Outbound functional test with 256B frame size
-| | [Documentation]
-| | ... | Make TG send 256 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${256}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
-
-| TC03: NSH SFC Proxy Outbound functional test with 512B frame size
-| | [Documentation]
-| | ... | Make TG send 512 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${512}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
-
-| TC04: NSH SFC Proxy Outbound functional test with 1024B frame size
-| | [Documentation]
-| | ... | Make TG send 1024 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1024}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
-
-| TC05: NSH SFC Proxy Outbound functional test with 1280B frame size
-| | [Documentation]
-| | ... | Make TG send 1280 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1280}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
-
-| TC06: NSH SFC Proxy Outbound functional test with 1518B frame size
-| | [Documentation]
-| | ... | Make TG send 1518 Bytes VxLAN packet to DUT ingress interface.\
-| | ... | Make TG verify SFC Proxy Outbound functional is correct.
-| | ${frame_size}= | Set Variable | ${1518}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "Proxy Outbound" test
diff --git a/tests/nsh_sfc/func/sff/eth2p-ethip4-sfc-sff-func.robot b/tests/nsh_sfc/func/sff/eth2p-ethip4-sfc-sff-func.robot
deleted file mode 100644 (file)
index e86c659..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/nsh_sfc/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/ip/ip4.robot
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | FUNCTEST
-| Suite Setup | Run Keywords
-| ... | Configure all DUTs before test | AND
-| ... | Configure all TGs for traffic script | AND
-| ... | Update All Interface Data On All Nodes | ${nodes} | AND
-| ... | Setup DUT nodes for 'SFF' functional testing
-| Test Setup | Run Keywords | Save VPP PIDs | AND
-| ... | Reset PAPI History On All DUTs | ${nodes} | AND
-| ... | Clear Interface Counters on all DUTs | ${nodes}
-| Test Teardown | Run Keywords
-| ... | Show packet trace on all DUTs | ${nodes} | AND
-| ... | Show PAPI History On All DUTs | ${nodes} | AND
-| ... | Verify VPP PID in Teardown
-| Documentation | *NSH SFC SFF test cases*
-| ...
-| ... | Test the SFC Service Function Forward functional. DUT run the VPP
-| ... | with NSH SFC Plugin, TG send a VxLAN-GPE+NSH packet to the DUT,
-| ... | if the packet match the SFC SFF rules, the SFC SFF will
-| ... | swap the VxLAN-GPE and NSH protocol.
-| ... | DUT will loopback the packet to the TG.
-| ... | The TG will capture this VxLAN-GPE+NSH packet and check the packet
-| ... | field is correct.
-
-*** Test Cases ***
-| TC01: NSH SFC SFF functional test with 152B frame size
-| | [Documentation]
-| | ... | Make TG send 152 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${152}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
-
-| TC02: NSH SFC SFF functional test with 256B frame size
-| | [Documentation]
-| | ... | Make TG send 256 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${256}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
-
-| TC03: NSH SFC SFF functional test with 512B frame size
-| | [Documentation]
-| | ... | Make TG send 512 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${512}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
-
-| TC04: NSH SFC SFF functional test with 1024B frame size
-| | [Documentation]
-| | ... | Make TG send 1024 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${1024}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
-
-| TC05: NSH SFC SFF functional test with 1280B frame size
-| | [Documentation]
-| | ... | Make TG send 1280 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${1280}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
-
-| TC06: NSH SFC SFF functional test with 1518B frame size
-| | [Documentation]
-| | ... | Make TG send 1518 Bytes VxLAN-GPE+NSH packet to DUT ingress interface.\
-| | ... | Make TG verify SFC SFF functional is correct.
-| | ${frame_size}= | Set Variable | ${1518}
-| | Node "${tg_node}" interface "${tg_to_dut_if1}" send "${frame_size}" Bytes packet to node "${dut_node}" interface "${dut_to_tg_if1}" for "SFF" test
diff --git a/tests/nsh_sfc/sfc_scripts/install_sfc.sh b/tests/nsh_sfc/sfc_scripts/install_sfc.sh
deleted file mode 100755 (executable)
index 265d4c1..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/bash
-
-set -x
-
-ROOTDIR=/tmp/openvpp-testing
-PWDDIR=$(pwd)
-
-if_name1=$1
-if_name2=$2
-
-VPP_VERSION=`cat ${ROOTDIR}/NSH_SFC_VER | grep VPP | awk -F'= ' '{print $2}'`
-NSH_SFC_VERSION=`cat ${ROOTDIR}/NSH_SFC_VER | grep NSH_SFC | awk -F'= ' '{print $2}'`
-
-VPP_CODE_DIR=${ROOTDIR}/vpp_codes
-NSH_SFC_CODE_DIR=${ROOTDIR}/nsh_sfc_codes
-
-#at first, we need to stop the vpp service if have
-sudo service vpp stop
-
-#uninstall the vpp and nsh sfc plugin
-#and git clone the vpp and nsh sfc plugin source codes
-#then compile and install them in the dut nodes.
-nsh_need_install=0
-sudo dpkg -l vpp-nsh-plugin >/dev/null 2>&1
-if [ $? -eq 0 ]; then
-    nsh_plugin_version=`dpkg -s vpp-nsh-plugin | grep Version | awk -F' ' '{print $2}'`
-    if [ "${nsh_plugin_version}" \< "${NSH_SFC_VERSION}" ]; then
-        sudo dpkg -P vpp-nsh-plugin vpp-nsh-plugin-dbg vpp-nsh-plugin-dev >/dev/null 2>&1
-        test $? -eq 0 || exit 1
-        nsh_need_install=1
-    fi
-else
-    nsh_need_install=1
-fi
-
-vpp_need_install=0
-sudo dpkg -l vpp >/dev/null 2>&1
-if [ $? -eq 0 ]; then
-    vpp_version=`dpkg -s vpp | grep Version | awk -F' ' '{print $2}'`
-    if [ "${vpp_version}" \< "${VPP_VERSION}" ]; then
-        sudo dpkg -P vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib \
-                     vpp-plugins vpp-python-api >/dev/null 2>&1
-        test $? -eq 0 || exit 1
-        vpp_need_install=1
-    fi
-else
-    vpp_need_install=1
-fi
-
-sleep 5
-
-##begin to clone the vpp source code
-if [ ${vpp_need_install} -eq 1 ]; then
-    sudo rm -rf ${VPP_CODE_DIR}
-    sudo mkdir -p ${VPP_CODE_DIR}
-    cd ${VPP_CODE_DIR}
-    git clone -b v${VPP_VERSION} https://gerrit.fd.io/r/vpp
-
-    #compile the vpp code
-    cd ./vpp/build-root/
-    make distclean
-    ./bootstrap.sh
-    make V=0 PLATFORM=vpp TAG=vpp install-deb
-
-    #after that, install vpp
-    sudo dpkg -i *.deb
-    cd ${PWDDIR}
-fi
-
-##begin to clone the nsh sfc source code
-if [ ${nsh_need_install} -eq 1 ]; then
-    sudo rm -rf ${NSH_SFC_CODE_DIR}
-    sudo mkdir -p ${NSH_SFC_CODE_DIR}
-    cd ${NSH_SFC_CODE_DIR}
-    git clone -b v${NSH_SFC_VERSION} https://gerrit.fd.io/r/nsh_sfc
-
-    #compile the nsh sfc code
-    cd ./nsh_sfc/nsh-plugin/
-    sudo rm -rf build
-    sudo ./build.sh
-
-    #after that, install the nsh sfc plugin
-    cd ./packaging/
-    sudo dpkg -i *.deb
-    cd ${PWDDIR}
-fi
-
-#check and setup the hugepages
-SYS_HUGEPAGE=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages)
-if [ ${SYS_HUGEPAGE} -lt 1024 ]; then
-    MOUNT=$(mount | grep /mnt/huge)
-    while [ "${MOUNT}" != "" ]
-    do
-        sudo umount /mnt/huge
-        sleep 1
-        MOUNT=$(mount | grep /mnt/huge)
-    done
-
-    echo 2048 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
-    echo 2048 | sudo tee /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
-
-    sudo mkdir -p /mnt/huge
-    sudo mount -t hugetlbfs nodev /mnt/huge/
-    test $? -eq 0 || exit 1
-fi
-
-#check and set the max map count
-SYS_MAP=$(cat /proc/sys/vm/max_map_count)
-if [ ${SYS_MAP} -lt 200000 ]; then
-    echo 200000 | sudo tee /proc/sys/vm/max_map_count
-fi
-
-#after all, we can start the vpp service now
-sudo service vpp start
diff --git a/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_inbound.sh b/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_inbound.sh
deleted file mode 100755 (executable)
index 9d7ee72..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-set -x
-
-vpp_interface1=$1
-vpp_interface2=$2
-vpp_intf1_adj_mac=$3
-vpp_intf2_adj_mac=$4
-
-sudo service vpp restart
-sleep 5
-
-sudo vppctl set int state ${vpp_interface1} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface1} 0
-sudo vppctl set int ip address ${vpp_interface1} 192.168.50.76/24
-
-sudo vppctl create vxlan-gpe tunnel local 192.168.50.76 remote 192.168.50.72 vni 9 next-nsh encap-vrf-id 0 decap-vrf-id 0
-sudo vppctl set int l2 bridge vxlan_gpe_tunnel0 1 1
-
-sudo vppctl create vxlan tunnel src 192.168.60.76 dst 192.168.60.71 vni 1 encap-vrf-id 0 decap-next node nsh-proxy
-sudo vppctl set int l2 bridge vxlan_tunnel0 1 1
-
-sudo vppctl create nsh entry nsp 185 nsi 255 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-sudo vppctl create nsh entry nsp 185 nsi 254 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-
-sleep 2
-vxlan_gpe_index=`sudo vppctl sh int | grep "vxlan_gpe_tunnel0" | awk '{print $2}'`
-vxlan_index=`sudo vppctl sh int | grep "vxlan_tunnel0" | awk '{print $2}'`
-sudo vppctl create nsh map nsp 185 nsi 255 mapped-nsp 185 mapped-nsi 255 nsh_action pop encap-vxlan4-intf ${vxlan_index}
-sudo vppctl create nsh map nsp 185 nsi 254 mapped-nsp 185 mapped-nsi 254 nsh_action push encap-vxlan-gpe-intf ${vxlan_gpe_index}
-
-sudo vppctl ip route add 192.168.50.72/24 via 192.168.50.76
-
-sudo vppctl set int state ${vpp_interface2} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface2} 0
-sudo vppctl set int ip address ${vpp_interface2} 192.168.60.76/24
-
-sudo vppctl ip route add 192.168.60.71/24 via 192.168.60.76
-sudo vppctl set ip arp ${vpp_interface2} 192.168.60.71 ${vpp_intf2_adj_mac}
-
-sudo vppctl trace add dpdk-input 100
diff --git a/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_outbound.sh b/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_outbound.sh
deleted file mode 100755 (executable)
index 3aaf0e9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-set -x
-
-vpp_interface1=$1
-vpp_interface2=$2
-vpp_intf1_adj_mac=$3
-vpp_intf2_adj_mac=$4
-
-sudo service vpp restart
-sleep 5
-
-sudo vppctl set int state ${vpp_interface1} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface1} 0
-sudo vppctl set int ip address ${vpp_interface1} 192.168.50.76/24
-
-sudo vppctl create vxlan-gpe tunnel local 192.168.60.76 remote 192.168.60.71 vni 9 next-nsh encap-vrf-id 0 decap-vrf-id 0
-sudo vppctl set int l2 bridge vxlan_gpe_tunnel0 1 1
-
-sudo vppctl create vxlan tunnel src 192.168.50.76 dst 192.168.50.72 vni 1 encap-vrf-id 0 decap-next node nsh-proxy
-sudo vppctl set int l2 bridge vxlan_tunnel0 1 1
-
-sudo vppctl create nsh entry nsp 185 nsi 255 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-sudo vppctl create nsh entry nsp 185 nsi 254 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-
-sleep 2
-vxlan_gpe_index=`sudo vppctl sh int | grep "vxlan_gpe_tunnel0" | awk '{print $2}'`
-vxlan_index=`sudo vppctl sh int | grep "vxlan_tunnel0" | awk '{print $2}'`
-sudo vppctl create nsh map nsp 185 nsi 255 mapped-nsp 185 mapped-nsi 255 nsh_action pop encap-vxlan4-intf ${vxlan_index}
-sudo vppctl create nsh map nsp 185 nsi 254 mapped-nsp 185 mapped-nsi 254 nsh_action push encap-vxlan-gpe-intf ${vxlan_gpe_index}
-
-sudo vppctl ip route add 192.168.50.72/24 via 192.168.50.76
-
-sudo vppctl set int state ${vpp_interface2} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface2} 0
-sudo vppctl set int ip address ${vpp_interface2} 192.168.60.76/24
-
-sudo vppctl ip route add 192.168.60.71/24 via 192.168.60.76
-sudo vppctl set ip arp ${vpp_interface2} 192.168.60.71 ${vpp_intf2_adj_mac}
-
-sudo vppctl trace add dpdk-input 100
diff --git a/tests/nsh_sfc/sfc_scripts/set_sfc_classifier.sh b/tests/nsh_sfc/sfc_scripts/set_sfc_classifier.sh
deleted file mode 100755 (executable)
index ae5f54b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-set -x
-
-vpp_interface1=$1
-vpp_interface2=$2
-vpp_intf1_adj_mac=$3
-vpp_intf2_adj_mac=$4
-
-sudo service vpp restart
-sleep 5
-
-sudo vppctl set int state ${vpp_interface1} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface1} 0
-sudo vppctl set int ip address ${vpp_interface1} 192.168.50.76/24
-
-sudo vppctl classify table mask l3 ip4 proto
-sudo vppctl classify session l2-input-hit-next input-node nsh-classifier table-index 0 match l3 ip4 proto 6 opaque-index 47615
-sudo vppctl set int l2 bridge ${vpp_interface1} 1 1
-sudo vppctl set interface l2 input classify intfc ${vpp_interface1} ip4-table 0
-
-sudo vppctl create vxlan-gpe tunnel local 192.168.60.76 remote 192.168.60.71 vni 9 next-nsh encap-vrf-id 0 decap-vrf-id 0
-sudo vppctl set int l2 bridge vxlan_gpe_tunnel0 1 1
-sleep 2
-sw_index0=`sudo vppctl sh int | grep "vxlan_gpe_tunnel0" | awk '{print $2}'`
-sudo vppctl create nsh entry nsp 185 nsi 255 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-sudo vppctl create nsh map nsp 185 nsi 255 mapped-nsp 185 mapped-nsi 255 nsh_action push encap-vxlan-gpe-intf ${sw_index0}
-
-sudo vppctl ip route add 10.10.12.00/24 via 192.168.50.76
-
-sudo vppctl set int state ${vpp_interface2} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface2} 0
-sudo vppctl set int ip address ${vpp_interface2} 192.168.60.76/24
-
-sudo vppctl ip route add 192.168.60.71/24 via 192.168.60.76
-sudo vppctl set ip arp ${vpp_interface2} 192.168.60.71 ${vpp_intf2_adj_mac}
-
-sudo vppctl trace add dpdk-input 100
diff --git a/tests/nsh_sfc/sfc_scripts/set_sfc_sff.sh b/tests/nsh_sfc/sfc_scripts/set_sfc_sff.sh
deleted file mode 100755 (executable)
index 1832676..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-
-set -x
-
-vpp_interface1=$1
-vpp_interface2=$2
-vpp_intf1_adj_mac=$3
-vpp_intf2_adj_mac=$4
-
-sudo service vpp restart
-sleep 5
-
-sudo vppctl set int state ${vpp_interface1} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface1} 7
-sudo vppctl set int ip address ${vpp_interface1} 192.168.50.76/24
-
-sudo vppctl create vxlan-gpe tunnel local 192.168.60.76 remote 192.168.60.71 vni 9 next-nsh encap-vrf-id 7 decap-vrf-id 7
-sudo vppctl set int l2 bridge vxlan_gpe_tunnel0 1 1
-
-sudo vppctl create vxlan-gpe tunnel local 192.168.50.76 remote 192.168.50.72 vni 10 next-nsh encap-vrf-id 7 decap-vrf-id 7
-sudo vppctl set int l2 bridge vxlan_gpe_tunnel1 1 1
-
-sudo vppctl create nsh entry nsp 185 nsi 255 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-sudo vppctl create nsh entry nsp 185 nsi 254 md-type 1 c1 3232248395 c2 9 c3 3232248392 c4 50336437 next-ethernet
-
-sleep 2
-vxlan_gpe_index0=`sudo vppctl sh int | grep "vxlan_gpe_tunnel0" | awk '{print $2}'`
-vxlan_gpe_index1=`sudo vppctl sh int | grep "vxlan_gpe_tunnel1" | awk '{print $2}'`
-sudo vppctl create nsh map nsp 185 nsi 255 mapped-nsp 185 mapped-nsi 254 nsh_action swap encap-vxlan-gpe-intf ${vxlan_gpe_index0}
-
-sudo vppctl ip route add 192.168.50.72/32 via 192.168.50.76 ${vpp_interface1}
-
-sudo vppctl set int state ${vpp_interface2} up
-sleep 10
-sudo vppctl set int ip table ${vpp_interface2} 7
-sudo vppctl set int ip address ${vpp_interface2} 192.168.60.76/24
-
-sudo vppctl ip route add 192.168.60.71/32 via 192.168.60.76 ${vpp_interface2}
-sudo vppctl set ip arp fib-id 7 ${vpp_interface2} 192.168.60.71 ${vpp_intf2_adj_mac}
-
-sudo vppctl trace add dpdk-input 100

©2016 FD.io a Linux Foundation Collaborative Project. All Rights Reserved.
Linux Foundation is a registered trademark of The Linux Foundation. Linux is a registered trademark of Linus Torvalds.
Please see our privacy policy and terms of use.