aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NSH_SFC_VER2
-rw-r--r--README.md4
-rwxr-xr-xbootstrap-nsh_sfc-functional-virl.sh248
-rw-r--r--docs/report/detailed_test_results/nshsfc_functional_results/index.rst12
-rw-r--r--docs/report/index.html.template11
-rw-r--r--docs/report/introduction/introduction.rst10
-rw-r--r--docs/report/introduction/test_scenarios_overview.rst3
-rw-r--r--docs/report/nsh_sfc_functional_tests/csit_release_notes.rst12
-rw-r--r--docs/report/nsh_sfc_functional_tests/documentation.rst6
-rw-r--r--docs/report/nsh_sfc_functional_tests/index.rst9
-rw-r--r--docs/report/nsh_sfc_functional_tests/overview.rst78
-rw-r--r--docs/report/nsh_sfc_functional_tests/test_environment.rst7
-rw-r--r--resources/libraries/python/SFC/SFCConstants.py42
-rw-r--r--resources/libraries/python/SFC/SFCTest.py71
-rw-r--r--resources/libraries/python/SFC/SetupSFCTest.py226
-rw-r--r--resources/libraries/python/SFC/TunnelProtocol.py43
-rw-r--r--resources/libraries/python/SFC/VerifyPacket.py213
-rw-r--r--resources/libraries/python/SFC/__init__.py16
-rw-r--r--resources/libraries/robot/nsh_sfc/default.robot81
-rw-r--r--resources/tools/doc_gen/src/index.rst1
-rw-r--r--resources/tools/doc_gen/src/tests.nsh_sfc.func.rst3
-rw-r--r--resources/tools/presentation/conf.py2
-rw-r--r--resources/tools/presentation/doc/pal_lld.rst8
-rw-r--r--resources/tools/presentation/specification.yaml1
-rwxr-xr-xresources/tools/scripts/download_nsh_sfc_pkgs.sh65
-rwxr-xr-xresources/traffic_scripts/send_tcp_for_classifier_test.py98
-rwxr-xr-xresources/traffic_scripts/send_vxlan_for_proxy_test.py107
-rwxr-xr-xresources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py108
-rwxr-xr-xresources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py108
-rw-r--r--tests/nsh_sfc/func/__init__.robot22
-rw-r--r--tests/nsh_sfc/func/classifier/eth2p-ethip4-sfc-classifier-func.robot91
-rw-r--r--tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-inbound-func.robot85
-rw-r--r--tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-outbound-func.robot86
-rw-r--r--tests/nsh_sfc/func/sff/eth2p-ethip4-sfc-sff-func.robot85
-rwxr-xr-xtests/nsh_sfc/sfc_scripts/install_sfc.sh114
-rwxr-xr-xtests/nsh_sfc/sfc_scripts/set_nsh_proxy_inbound.sh43
-rwxr-xr-xtests/nsh_sfc/sfc_scripts/set_nsh_proxy_outbound.sh43
-rwxr-xr-xtests/nsh_sfc/sfc_scripts/set_sfc_classifier.sh40
-rwxr-xr-xtests/nsh_sfc/sfc_scripts/set_sfc_sff.sh42
39 files changed, 0 insertions, 2246 deletions
diff --git a/NSH_SFC_VER b/NSH_SFC_VER
deleted file mode 100644
index 4a979a5789..0000000000
--- a/NSH_SFC_VER
+++ /dev/null
@@ -1,2 +0,0 @@
-VPP = 17.07-rc0
-NSH_SFC = 17.07-rc0
diff --git a/README.md b/README.md
index d20d859076..86d0968410 100644
--- 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
index 034ea9bfd4..0000000000
--- a/bootstrap-nsh_sfc-functional-virl.sh
+++ /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
index a4880b1ff0..0000000000
--- a/docs/report/detailed_test_results/nshsfc_functional_results/index.rst
+++ /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
diff --git a/docs/report/index.html.template b/docs/report/index.html.template
index 141ffbf370..23b7e016db 100644
--- a/docs/report/index.html.template
+++ b/docs/report/index.html.template
@@ -63,16 +63,6 @@ CSIT-1908
..
.. 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
:caption: DMM Functional
dmm_functional_tests/overview
@@ -92,7 +82,6 @@ CSIT-1908
..
detailed_test_results/dmm_functional_results/index
- detailed_test_results/nshsfc_functional_results/index
.. toctree::
:maxdepth: 2
diff --git a/docs/report/introduction/introduction.rst b/docs/report/introduction/introduction.rst
index be63cf5c1e..170891e1b2 100644
--- a/docs/report/introduction/introduction.rst
+++ b/docs/report/introduction/introduction.rst
@@ -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.
diff --git a/docs/report/introduction/test_scenarios_overview.rst b/docs/report/introduction/test_scenarios_overview.rst
index 318d86c376..00af70c4cf 100644
--- a/docs/report/introduction/test_scenarios_overview.rst
+++ b/docs/report/introduction/test_scenarios_overview.rst
@@ -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
index 4ba9d7f1a5..0000000000
--- a/docs/report/nsh_sfc_functional_tests/csit_release_notes.rst
+++ /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
index 9e3298a295..0000000000
--- a/docs/report/nsh_sfc_functional_tests/documentation.rst
+++ /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
index 5e467170ed..0000000000
--- a/docs/report/nsh_sfc_functional_tests/index.rst
+++ /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
index 1cbfd9a040..0000000000
--- a/docs/report/nsh_sfc_functional_tests/overview.rst
+++ /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
index 68ac5f208a..0000000000
--- a/docs/report/nsh_sfc_functional_tests/test_environment.rst
+++ /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
index b9eef22788..0000000000
--- a/resources/libraries/python/SFC/SFCConstants.py
+++ /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
index 3794d3a2a1..0000000000
--- a/resources/libraries/python/SFC/SFCTest.py
+++ /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
index 7daf49c82d..0000000000
--- a/resources/libraries/python/SFC/SetupSFCTest.py
+++ /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
index 3248cf9103..0000000000
--- a/resources/libraries/python/SFC/TunnelProtocol.py
+++ /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
index a13c7601d5..0000000000
--- a/resources/libraries/python/SFC/VerifyPacket.py
+++ /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
index e90d968cca..0000000000
--- a/resources/libraries/python/SFC/__init__.py
+++ /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
index 64d31a9897..0000000000
--- a/resources/libraries/robot/nsh_sfc/default.robot
+++ /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}
diff --git a/resources/tools/doc_gen/src/index.rst b/resources/tools/doc_gen/src/index.rst
index 6ba9a2671b..fb12eb517b 100644
--- a/resources/tools/doc_gen/src/index.rst
+++ b/resources/tools/doc_gen/src/index.rst
@@ -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
index e06d26dc7c..0000000000
--- a/resources/tools/doc_gen/src/tests.nsh_sfc.func.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-NSH SFC Functional Tests
-========================
-
diff --git a/resources/tools/presentation/conf.py b/resources/tools/presentation/conf.py
index 9b1a8ef33d..ae781bdac8 100644
--- a/resources/tools/presentation/conf.py
+++ b/resources/tools/presentation/conf.py
@@ -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/
diff --git a/resources/tools/presentation/doc/pal_lld.rst b/resources/tools/presentation/doc/pal_lld.rst
index e3589ae748..d3a9782681 100644
--- a/resources/tools/presentation/doc/pal_lld.rst
+++ b/resources/tools/presentation/doc/pal_lld.rst
@@ -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
'''''''''''''''
diff --git a/resources/tools/presentation/specification.yaml b/resources/tools/presentation/specification.yaml
index 127768d680..f4ad61686d 100644
--- a/resources/tools/presentation/specification.yaml
+++ b/resources/tools/presentation/specification.yaml
@@ -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
index 2261f084e5..0000000000
--- a/resources/tools/scripts/download_nsh_sfc_pkgs.sh
+++ /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
index 5a6873ab4e..0000000000
--- a/resources/traffic_scripts/send_tcp_for_classifier_test.py
+++ /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
index d33ed413c8..0000000000
--- a/resources/traffic_scripts/send_vxlan_for_proxy_test.py
+++ /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
index 3ea1f0bc62..0000000000
--- a/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py
+++ /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
index 6879d20f2c..0000000000
--- a/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py
+++ /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
index 7f1391ca30..0000000000
--- a/tests/nsh_sfc/func/__init__.robot
+++ /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
index b922771ea1..0000000000
--- a/tests/nsh_sfc/func/classifier/eth2p-ethip4-sfc-classifier-func.robot
+++ /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
index 518ed2a3fc..0000000000
--- a/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-inbound-func.robot
+++ /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
index b228511cad..0000000000
--- a/tests/nsh_sfc/func/proxy/eth2p-ethip4-nsh-proxy-outbound-func.robot
+++ /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
index e86c659f8c..0000000000
--- a/tests/nsh_sfc/func/sff/eth2p-ethip4-sfc-sff-func.robot
+++ /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
index 265d4c153a..0000000000
--- a/tests/nsh_sfc/sfc_scripts/install_sfc.sh
+++ /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
index 9d7ee72690..0000000000
--- a/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_inbound.sh
+++ /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
index 3aaf0e9853..0000000000
--- a/tests/nsh_sfc/sfc_scripts/set_nsh_proxy_outbound.sh
+++ /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
index ae5f54bbb6..0000000000
--- a/tests/nsh_sfc/sfc_scripts/set_sfc_classifier.sh
+++ /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
index 183267623f..0000000000
--- a/tests/nsh_sfc/sfc_scripts/set_sfc_sff.sh
+++ /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