Merge "Cleanup unittests for test_attacker_baremetal"
authorAbhijit Sinha <abhijit.sinha@intel.com>
Mon, 17 Dec 2018 14:13:32 +0000 (14:13 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Mon, 17 Dec 2018 14:13:32 +0000 (14:13 +0000)
47 files changed:
ansible/build_yardstick_image.yml
ansible/group_vars/all.yml
ansible/install.yaml
ansible/library/fetch_url_and_verify.py
ansible/prepare_openstack.yml
ansible/roles/add_repos_jumphost/tasks/Debian.yml
ansible/roles/build_yardstick_image/vars/main.yml
ansible/roles/configure_gui/tasks/main.yml
ansible/roles/configure_rabbitmq/tasks/main.yml
ansible/roles/configure_rabbitmq/templates/rabbitmq.config.j2 [deleted file]
ansible/roles/configure_rabbitmq/templates/user_definitions.json.j2 [deleted file]
ansible/roles/download_drivers/defaults/main.yml
ansible/roles/enable_iommu_on_boot/tasks/main.yml
ansible/roles/install_dependencies_jumphost/tasks/Debian.yml
ansible/roles/install_dependencies_jumphost/tasks/RedHat.yml
ansible/roles/install_dependencies_jumphost/tasks/Suse.yml
ansible/roles/install_dpdk/tasks/Debian.yml
ansible/roles/install_yardstick/tasks/main.yml
docker/Dockerfile_ubuntu18 [new file with mode: 0644]
docker/supervisor.sh
docs/release/release-notes/release-notes.rst
docs/testing/developer/devguide/images/vPE_Diagram.png [new file with mode: 0644]
docs/testing/user/userguide/14-nsb-operation.rst
docs/testing/user/userguide/nsb/nsb-list-of-tcs.rst
docs/testing/user/userguide/nsb/tc_vfw_rfc2544.rst [new file with mode: 0644]
docs/testing/user/userguide/nsb/tc_vfw_rfc2544_correlated.rst [new file with mode: 0644]
docs/testing/user/userguide/nsb/tc_vfw_rfc3511.rst [new file with mode: 0644]
samples/vnf_samples/nsut/bng/tc_bng_pppoe_rfc2544_ixia_8ports_1port_congested_IMIX.yaml [moved from samples/vnf_samples/nsut/bng/tc_bng_pppoe_rfc2544_ixia_4port_IMIX.yaml with 57% similarity]
samples/vnf_samples/nsut/bng/tc_bng_pppoe_rfc2544_ixia_IMIX_scale_up.yaml [moved from samples/vnf_samples/nsut/bng/tc_bng_pppoe_rfc2544_ixia_IMIX.yaml with 51% similarity]
samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
samples/vnf_samples/nsut/vpe/vpe_config/action_bulk_512.txt
samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports
samples/vnf_samples/nsut/vpe/vpe_config/vpe_script_sample [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vbng_1port_congested-8.yaml [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vbng_scale_up.yaml [moved from samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vbng-4.yaml with 50% similarity]
tests/opnfv/test_cases/opnfv_yardstick_tc094.yaml [new file with mode: 0644]
yardstick/benchmark/runners/iteration.py
yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
yardstick/network_services/traffic_profile/base.py
yardstick/network_services/traffic_profile/ixia_rfc2544.py
yardstick/network_services/vnf_generic/vnf/sample_vnf.py
yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
yardstick/network_services/vnf_generic/vnf/vpe_vnf.py
yardstick/tests/unit/benchmark/runner/test_iteration.py [new file with mode: 0644]
yardstick/tests/unit/network_services/traffic_profile/test_base.py
yardstick/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py

index 072c12c..495a547 100644 (file)
       'amd64': disk1
       'arm64': uefi1
     boot_mode: "{{ boot_modes[YARD_IMG_ARCH] }}"
-    image_filename: "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img"
-    image_path: "{{ release }}/current/{{ image_filename }}"
+    image_filename:
+      'xenial': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img"
+      'bionic': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}.img"
+    image_path: "{{ release }}/current/{{ image_filename[release] }}"
     host: "{{ lookup('env', 'HOST')|default('cloud-images.ubuntu.com', true)}}"
     image_url: "{{ lookup('env', 'IMAGE_URL')|default('https://' ~ host ~ '/' ~ image_path, true) }}"
-    image_dest: "{{ workspace }}/{{ image_filename }}"
+    image_dest: "{{ workspace }}/{{ image_filename[release] }}"
     sha256sums_path: "{{ release }}/current/SHA256SUMS"
     sha256sums_filename: "{{ sha256sums_path|basename }}"
     sha256sums_url: "{{ lookup('env', 'SHA256SUMS_URL')|default('https://' ~ host ~ '/' ~ sha256sums_path, true) }}"
index 5965605..0e8ad5b 100644 (file)
@@ -1,9 +1,9 @@
 ---\r
 target_os: "Ubuntu"\r
 YARD_IMG_ARCH: "amd64"\r
-IMG_PROPERTY: "normal"\r
+IMG_PROPERTY: "{{ IMAGE_PROPERTY | default('normal') }}"\r
 clone_dest: /opt/tempT\r
-release: xenial\r
+release: "{{ OS_RELEASE  | default('xenial') }}"\r
 normal_image_file: "{{ workspace }}/yardstick-image.img"\r
 nsb_image_file: "{{ workspace }}/yardstick-nsb-image.img"\r
 ubuntu_image_file: /tmp/workspace/yardstick/yardstick-trusty-server.raw\r
index 01478fb..0c7ad7e 100644 (file)
@@ -21,7 +21,7 @@
 
   pre_tasks:
 
-    - name: Create NSB binaries directory, accesible to any user
+    - name: Create NSB binaries directory, accessible to any user
       file:
         path: "{{ nsb_dir }}"
         state: directory
         - installation_mode != inst_mode_container_pull
 
   roles:
-    - { role: add_repos_jumphost, when: installation_mode != inst_mode_container_pull }
-    - { role: install_dependencies_jumphost, when: installation_mode != inst_mode_container_pull }
+    - add_repos_jumphost
+    - install_dependencies_jumphost
     - { role: install_yardstick, when: installation_mode != inst_mode_container_pull }
     - { role: configure_uwsgi, when: installation_mode != inst_mode_container_pull }
     - { role: configure_nginx, when: installation_mode != inst_mode_container_pull }
     - { role: configure_gui, when: installation_mode != inst_mode_container_pull }
     - { role: download_trex, when: installation_mode != inst_mode_container_pull }
     - { role: install_trex, when: installation_mode != inst_mode_container_pull }
-    - { role: configure_rabbitmq, when: installation_mode != inst_mode_container_pull }
+    - { role: configure_rabbitmq, when: installation_mode == inst_mode_baremetal }
 
 
   post_tasks:
   hosts: jumphost
 
   tasks:
-    - include_role:
-        name: install_dependencies_jumphost
-      when: installation_mode == inst_mode_container_pull
-
     - include_role:
         name: docker
       when: installation_mode == inst_mode_container_pull
index 6c5c0a8..13e8608 100644 (file)
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# pylint: disable-all
+
 DOCUMENTATION = '''
 ---
 module: fetch_url_and_verify
@@ -42,6 +44,7 @@ def main():
     dest = params['dest']
     sha256url = params['sha256url']
     retries = params['retries']
+    sha256line = ''
 
     image_dir, image_filename = os.path.split(dest)
     rc, stdout, stderr = module.run_command(['curl', '-sS', sha256url])
@@ -59,7 +62,7 @@ def main():
         module.exit_json(changed=False, dest=dest, url=url,
                          sha256sum=sha256sum)
 
-    for retry in range(retries):
+    for _ in range(retries):
         curl_rc, stdout, stderr = module.run_command(
             ['curl', '-sS', '-o', dest, url], cwd=image_dir)
         if curl_rc == 0:
@@ -74,7 +77,7 @@ def main():
 
 
 # <<INCLUDE_ANSIBLE_MODULE_COMMON>>
-from ansible.module_utils.basic import *  # noqa
+from ansible.module_utils.basic import *
 
 if __name__ == '__main__':
     main()
index 6f54ef5..c9067c9 100644 (file)
@@ -23,7 +23,6 @@
   include: build_yardstick_image.yml
   vars:
     YARD_IMG_ARCH: amd64
-    release: xenial
     img_property: nsb
 
 - name: Cleanup old OpenStack images and upload the new one
index 626f0b0..e156996 100644 (file)
@@ -71,7 +71,6 @@
       deb [arch={{ extra_arch }}] {{ extra_repo }} {{ ansible_distribution_release }} main universe multiverse restricted
       deb [arch={{ extra_arch }}] {{ extra_repo }} {{ ansible_distribution_release }}-updates main universe multiverse restricted
       deb [arch={{ extra_arch }}] {{ extra_repo }} {{ ansible_distribution_release }}-security main universe multiverse restricted
-      deb [arch={{ extra_arch }}] {{ extra_repo }} {{ ansible_distribution_release }}-proposed main universe multiverse restricted
   when: installation_mode == "container"
 
 - name: Remove the marker
index 6728e5a..3d40544 100644 (file)
@@ -16,11 +16,13 @@ boot_modes:
   'amd64': disk1\r
   'arm64': uefi1\r
 boot_mode: "{{ boot_modes[YARD_IMG_ARCH] }}"\r
-image_filename: "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img"\r
-image_path: "{{ release }}/current/{{ image_filename }}"\r
+image_filename:\r
+  'xenial': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img"\r
+  'bionic': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}.img"\r
+image_path: "{{ release }}/current/{{ image_filename[release] }}"\r
 host: "{{ lookup('env', 'HOST')|default('cloud-images.ubuntu.com', true)}}"\r
 image_url: "{{ lookup('env', 'IMAGE_URL')|default('https://' ~ host ~ '/' ~ image_path, true) }}"\r
-image_dest: "{{ workspace }}/{{ image_filename }}"\r
+image_dest: "{{ workspace }}/{{ image_filename[release] }}"\r
 sha256sums_path: "{{ release }}/current/SHA256SUMS"\r
 sha256sums_filename: "{{ sha256sums_path|basename }}"\r
 sha256sums_url: "{{ lookup('env', 'SHA256SUMS_URL')|default('https://' ~ host ~ '/' ~ sha256sums_path, true) }}"\r
index 846a9cb..665053c 100644 (file)
     state: directory
     recurse: yes
 
+- name: Remove /etc/nginx/yardstick/gui/dist directory if it exists
+  file:
+    path: /etc/nginx/yardstick/gui/dist
+    state: absent
+
 - name: Move dist to /etc/nginx/yardstick/gui
   shell:
     cmd: mv dist /etc/nginx/yardstick/gui
index 4ff4222..3ad60c1 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ---
-- name: Create rabbitmq configuration
-  template:
-    src: rabbitmq.config.j2
-    dest: /etc/rabbitmq/rabbitmq.config
-
-- name: Define user definitions file
-  template:
-    src: user_definitions.json.j2
-    dest: /etc/rabbitmq/definitions.json
-
 - name: Restart rabbitmq
   service:
     name: rabbitmq-server
 - name: rabbitmqctl start_app
   shell: rabbitmqctl start_app
 
-- name: Enable management plugin
-  shell: rabbitmq-plugins enable rabbitmq_management
+- name: Configure rabbitmq
+  rabbitmq_user:
+    user: yardstick
+    password: yardstick
+    configure_priv: .*
+    read_priv: .*
+    write_priv: .*
+    state: present
diff --git a/ansible/roles/configure_rabbitmq/templates/rabbitmq.config.j2 b/ansible/roles/configure_rabbitmq/templates/rabbitmq.config.j2
deleted file mode 100644 (file)
index 8f07edf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
- [\r
-    {rabbitmq_management, [\r
-       {load_definitions, "/etc/rabbitmq/definitions.json"}\r
-    ]}\r
-].
\ No newline at end of file
diff --git a/ansible/roles/configure_rabbitmq/templates/user_definitions.json.j2 b/ansible/roles/configure_rabbitmq/templates/user_definitions.json.j2
deleted file mode 100644 (file)
index 7c811f1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
- {\r
-    "users": [{\r
-        "name": "yardstick",\r
-        "password_hash": "XHp9fBOE3vjTEf7ktiUBHqefW2g=",\r
-        "hashing_algorithm": "rabbit_password_hashing_sha256",\r
-        "tags": ""\r
-    }],\r
-    "vhosts": [{\r
-        "name": "/"\r
-    }],\r
-    "permissions": [{\r
-        "user": "yardstick",\r
-        "vhost": "/",\r
-        "configure": ".*",\r
-        "write": ".*",\r
-        "read": ".*"\r
-    }],\r
-    "parameters": [],\r
-    "policies": [],\r
-    "queues": [],\r
-    "exchanges": [],\r
-    "bindings": []\r
-}\r
index ab68a3c..bf1e48a 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ---
-i40evf_version: "3.4.2"
+i40evf_version: "3.5.13"
 i40evf_gzfile: "i40evf-{{ i40evf_version }}.tar.gz"
 i40evf_url: "https://netix.dl.sourceforge.net/project/e1000/i40evf%20stable/{{ i40evf_version }}/{{ i40evf_gzfile }}"
 i40evf_dest: "{{ clone_dest }}/"
 i40evf_path: "{{ i40evf_dest }}/{{ i40evf_gzfile|regex_replace('[.]tar[.]gz$', '') }}"
 i40evf_checksum:
   "3.4.2": "sha256:a8e2a722fb2f8ac874cb39545a331761841f1724830ff1581d2012dd37314645"
+  "3.5.13": "sha256:e57b95b694c8480b905e72ea13caac8714d6bb0c9eabe37cca655505b808f033"
\ No newline at end of file
index e406fcc..188b329 100644 (file)
     iommu_boot_params: ' amd_iommu=on iommu=pt'
   when: hostvars[inventory_hostname]['ansible_system_vendor'] == "AuthenticAMD"
 
-- name: Define grub string for IOMMU
-  set_fact:
-    enable_iommu: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX{{ iommu_boot_params }}'
+- block:
+  - name: Define grub string for IOMMU
+    set_fact:
+      enable_iommu: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX{{ iommu_boot_params }}'
 
-- name: check if iommu is set by this role in {{ grub_file}}
-  lineinfile:
-    path: "{{ grub_file}}"
-    regexp: '{{ iommu_help_string }}'
-    line: '{{ iommu_help_string }}'
-    state: absent
-  check_mode: yes
-  register: is_nsb_iommu_role
-  ignore_errors: True
+  - name: check if iommu is set by this role in {{ grub_file}}
+    lineinfile:
+      path: "{{ grub_file}}"
+      regexp: '{{ iommu_help_string }}'
+      line: '{{ iommu_help_string }}'
+      state: absent
+    check_mode: yes
+    register: is_nsb_iommu_role
+    ignore_errors: True
 
-- name: Check if IOMMU is set by someone else
-  lineinfile:
-    path: "{{ grub_file}}"
-    regexp: "_iommu="
-    line: '{{ iommu_help_string }}'
-    state: absent
-  check_mode: yes
-  register: is_iommu
-  ignore_errors: True
+  - name: Check if IOMMU is set by someone else
+    lineinfile:
+      path: "{{ grub_file}}"
+      regexp: "_iommu="
+      line: '{{ iommu_help_string }}'
+      state: absent
+    check_mode: yes
+    register: is_iommu
+    ignore_errors: True
 
-- name: Send info that IOMMU is configured by someone else
-  debug:
-    msg: "INFO: NOT modified, IOMMU is already configured by someone."
-  when:
-    - not is_nsb_iommu_role.changed
-    - is_iommu.changed
+  - name: Send info that IOMMU is configured by someone else
+    debug:
+      msg: "INFO: NOT modified, IOMMU is already configured by someone."
+    when:
+      - not is_nsb_iommu_role.changed
+      - is_iommu.changed
 
-- name: Add IOMMU when it is not set
-  lineinfile:
-    path: "{{ grub_file }}"
-    regexp: "{{ iommu_help_string }}"
-    line: '{{ enable_iommu }}" {{ iommu_help_string }}'
-  when:
-    - not is_nsb_iommu_role.changed
-    - not is_iommu.changed
+  - name: Add IOMMU when it is not set
+    lineinfile:
+      path: "{{ grub_file }}"
+      regexp: "{{ iommu_help_string }}"
+      line: '{{ enable_iommu }}" {{ iommu_help_string }}'
+    when:
+      - not is_nsb_iommu_role.changed
+      - not is_iommu.changed
 
-- name: find boot grub.cfg
-  find:
-    paths: /boot
-    file_type: file
-    patterns: 'grub*.cfg'
-    recurse: yes
-  register: grub_files
+  - name: find boot grub.cfg
+    find:
+      paths: /boot
+      file_type: file
+      patterns: 'grub*.cfg'
+      recurse: yes
+    register: grub_files
 
-- include: manual_modify_grub.yml
-  # only tested on Ubuntu, kernel line is probably different on other distros
-  with_items: "{{ grub_files.files }}"
-  when: ansible_distribution == "Ubuntu"
+  - include: manual_modify_grub.yml
+    # only tested on Ubuntu, kernel line is probably different on other distros
+    with_items: "{{ grub_files.files }}"
+    when: ansible_distribution == "Ubuntu"
+  when: iommu_boot_params is defined
index 9baf7e5..6c3900d 100755 (executable)
   apt:
     update_cache: yes
 
+- name: Install dependency for Ubuntu 18
+  action: "{{ ansible_pkg_mgr }} name=libssl1.0-dev state=present"
+  when:
+    - ansible_distribution == 'Ubuntu'
+    - ansible_distribution_major_version|int >= 17
+
 - name: Install core packages
   action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
   with_items:
     - vim
     - libffi-dev
     - libfuse-dev
-    - libssl-dev
     - libxft-dev
     - libxml2-dev
     - libxss-dev
-    - libxslt-dev
     - libxslt1-dev
-    - libzmq-dev
+    - libzmq3-dev
     - qemu-user-static
     - qemu-utils
     - kpartx
     - python
     - python-setuptools
     - python-dev
-    - python-pip
     - python-libvirt
     - python-virtualenv
     - bridge-utils
@@ -54,7 +57,6 @@
     - uwsgi-plugin-python
     - supervisor
     - lsof
-    - nodejs
     - npm
     - rabbitmq-server
 
 - name: Remove useless packages from the cache
   apt:
     autoclean: yes
+
+# There is a bug with the easy install ansible module in Ubuntu 16.04 linux.
+# Refer https://github.com/ansible/ansible/issues/23534
+- name: Install pip
+  shell: easy_install -U pip
+  when:
+    - ansible_distribution == 'Ubuntu'
+    - ansible_distribution_major_version|int <= 16
+
+- name: Install python-pip
+  action: "{{ ansible_pkg_mgr }} name=python-pip state=present"
+  when:
+    - ansible_distribution == 'Ubuntu'
+    - ansible_distribution_major_version|int >= 17
+
+- name: Install required docker-py module
+  pip:
+    name: docker-py
+    state: latest
+  environment: "{{ proxy_env }}"
index af53c9c..7932ed9 100644 (file)
@@ -47,3 +47,9 @@
     - openssl
     - python-virtualenv
     - ccze
+
+# There is a bug with the easy install ansible module in suse linux.
+# Until this is fixed the shell command must be used
+# Refer https://github.com/ansible/ansible/issues/37296
+- name: Install pip
+  shell: easy_install -U pip
index 4f0c3c8..b76a0fb 100755 (executable)
@@ -17,6 +17,7 @@
   with_items:
     - libpcap-dev
     - pciutils
+    - libelf-dev
 
 - name: Install kernel headers
   action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ dpdk_kernel }} state=present"
index 203acc3..f93f8ee 100644 (file)
     scope: global
     value: False
 
-# There is a bug with the easy install ansible module in suse linux.
-# Until this is fixed the shell command must be used
-- name: Install pip
-  shell: easy_install -U pip
-#    easy_install:
-#    name: pip
-#    state: latest
-
 - name: Install Yardstick requirements (venv)
   pip:
     requirements: "{{ yardstick_dir }}/requirements.txt"
diff --git a/docker/Dockerfile_ubuntu18 b/docker/Dockerfile_ubuntu18
new file mode 100644 (file)
index 0000000..a9dfaeb
--- /dev/null
@@ -0,0 +1,62 @@
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+FROM ubuntu:18.04
+
+LABEL image=opnfv/yardstick
+
+ARG BRANCH=master
+
+# GIT repo directory
+ENV REPOS_DIR="/home/opnfv/repos" \
+    IMAGE_DIR="/home/opnfv/images/"
+
+# Set work directory
+
+# Yardstick repo
+ENV YARDSTICK_REPO_DIR="${REPOS_DIR}/yardstick/" \
+    RELENG_REPO_DIR="${REPOS_DIR}/releng" \
+    STORPERF_REPO_DIR="${REPOS_DIR}/storperf"
+
+RUN apt-get update && apt-get install -y git python python-setuptools python-pip iputils-ping && apt-get -y autoremove && apt-get clean
+
+RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 openstacksdk==0.9.17 python-openstackclient==3.12.1 python-heatclient==1.11.1 ansible==2.5.5
+
+RUN mkdir -p ${REPOS_DIR}
+
+RUN git config --global http.sslVerify false
+#For developers: To test your changes you must comment out the git clone for ${YARDSTICK_REPO_DIR}.
+#You must also uncomment the RUN and COPY commands below.
+#You must run docker build from your yardstick directory on the host.
+RUN git clone --depth 1 -b $BRANCH https://gerrit.opnfv.org/gerrit/yardstick ${YARDSTICK_REPO_DIR}
+#RUN mkdir ${YARDSTICK_REPO_DIR}
+#COPY ./ ${YARDSTICK_REPO_DIR}
+RUN git clone --depth 1 https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO_DIR}
+RUN git clone --depth 1 -b $BRANCH https://gerrit.opnfv.org/gerrit/storperf ${STORPERF_REPO_DIR}
+
+RUN ansible-playbook -i ${YARDSTICK_REPO_DIR}/ansible/install-inventory.ini -c local -vvv -e INSTALLATION_MODE="container" ${YARDSTICK_REPO_DIR}/ansible/install.yaml
+
+RUN ${YARDSTICK_REPO_DIR}/docker/supervisor.sh
+
+RUN echo "daemon off;" >> /etc/nginx/nginx.conf
+# nginx=5000, rabbitmq=5672
+EXPOSE 5000 5672
+
+ADD http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img ${IMAGE_DIR}
+ADD http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img ${IMAGE_DIR}
+
+# For developers: when `docker build ...` is running from YARDSTICK_REPO_DIR, please change
+#                 path `./exec_tests.sh` -> `./docker/exec_tests.sh``.
+COPY ./exec_tests.sh /usr/local/bin/
+
+ENV NSB_DIR="/opt/nsb_bin"
+ENV PYTHONPATH="${PYTHONPATH}:${NSB_DIR}/trex_client:${NSB_DIR}/trex_client/stl"
+
+WORKDIR ${REPOS_DIR}
+CMD ["/usr/bin/supervisord"]
index 44e34fb..bd17cfb 100755 (executable)
 
 # nginx service start when boot
 supervisor_config='/etc/supervisor/conf.d/yardstick.conf'
+rabbitmq_config='/etc/supervisor/conf.d/rabbitmq.conf'
 
 if [[ ! -e "${supervisor_config}" ]]; then
+
     cat << EOF > "${supervisor_config}"
 [supervisord]
 nodaemon = true
@@ -22,8 +24,18 @@ command = service nginx restart
 [program:yardstick_uwsgi]
 directory = /etc/yardstick
 command = uwsgi -i yardstick.ini
+EOF
+
+fi
+
+if [[ ! -e "${rabbitmq_config}" ]]; then
 
+    cat << EOF > "${rabbitmq_config}"
 [program:rabbitmq]
-command = service rabbitmq-server restart
+command = /bin/bash -c "service rabbitmq-server restart
+    rabbitmqctl start_app
+    rabbitmqctl add_user yardstick yardstick
+    rabbitmqctl set_permissions -p / yardstick '.*' '.*'"
 EOF
+
 fi
index 4b3f12b..914daa3 100644 (file)
@@ -33,6 +33,9 @@ Version History
 | November 9, 2018  | 7.0.0     | Yardstick for Gambia release    |
 |                   |           |                                 |
 +-------------------+-----------+---------------------------------+
+| December 14, 2018 | 7.1.0     | Yardstick for Gambia release    |
+|                   |           |                                 |
++-------------------+-----------+---------------------------------+
 
 
 Important Notes
@@ -111,19 +114,19 @@ Release Data
 | **Project**                    | Yardstick             |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Repo/tag**                   | yardstick/opnfv-7.0.0 |
+| **Repo/tag**                   | yardstick/opnfv-7.1.0 |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Yardstick Docker image tag** | opnfv-7.0.0           |
+| **Yardstick Docker image tag** | opnfv-7.1.0           |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Release designation**        | Gambia 7.0            |
+| **Release designation**        | Gambia 7.1            |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Release date**               | November 9, 2018      |
+| **Release date**               | December 14, 2018     |
 |                                |                       |
 +--------------------------------+-----------------------+
-| **Purpose of the delivery**    | OPNFV Gambia 7.0.0    |
+| **Purpose of the delivery**    | OPNFV Gambia 7.1.0    |
 |                                |                       |
 +--------------------------------+-----------------------+
 
@@ -269,7 +272,7 @@ List of Scenarios
 New Test cases
 --------------
 
-.. note:: Yardstick Gambia 7.0.0 adds no new test cases.
+.. note:: Yardstick Gambia 7.1.0 adds no new test cases.
 
 * Generic NFVI test cases
 
@@ -326,7 +329,7 @@ Feature additions
 Scenario Matrix
 ===============
 
-For Gambia 7.0.0, Yardstick was tested on the following scenarios:
+For Gambia 7.1.0, Yardstick was tested on the following scenarios:
 
 +-------------------------+------+---------+----------+------+
 |        Scenario         | Apex | Compass | Fuel-arm | Fuel |
@@ -370,58 +373,35 @@ Known Issues/Faults
 Corrected Faults
 ----------------
 
-Gambia 7.0.0:
+Gambia 7.1.0:
 
 +--------------------+--------------------------------------------------------------------------+
 | **JIRA REFERENCE** |                             **DESCRIPTION**                              |
 +====================+==========================================================================+
-| YARDSTICK-1137     | Fix CLI argument handling in nsb_setup.sh                                |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1220     | Get stats for multiple port simultaneously                               |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1260     | Added missing functionality to start VM and access it using SSH keys     |
-|                    | in Standalone contexts.                                                  |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1298     | Allows for in-line overriding/modification of traffic profile variables  |
-|                    | from the testcase file.                                                  |
+| YARDSTICK-1241     | Update NSB PROX devguide.                                                |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1368     | Updated existing test cases in Yardstick to minimize changes done        |
-|                    | manually to run standalone tests for Trex.                               |
+| YARDSTICK-1458     | NSB NFVi PROX Should report realtime port activity not historical data.  |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1389     | Add status filed for RFC2544 TC iterations                               |
+| YARDSTICK-1471     | Add Testcase Prox Standalone SRIOV.                                      |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1395     | Update 'configure_uwsgi' role to work in baremetal/container modes.      |
+| YARDSTICK-1475     | Adding Testcase for Prox Stanalone OvS-DPDK.                             |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1402     | Change IP assignment for VM to static for standalone context             |
+| YARDSTICK-1500     | Adding Testcase for Prox L2FWD PktTouch Stanalone OvS-DPDK.              |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1404     | CPU Utilization for VNF and traffic generator are now graphed on Grafana |
+| YARDSTICK-1517     | Missing opnfv "os-ovn-nofeature-ha" scenario test suite.                 |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1411     | Fix Yardstick Docker image ARM build                                     |
+| YARDSTICK-l526     | Run testcase 074 result overridden by job status.                        |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1414     | Update the pinned sampleVNF version to use a commit instead of a branch  |
+| YARDSTICK-1547     | Adding scale up test case for l3fwd OvS-DPDK.                            |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1418     | NSB PROX NFVi test now stops after reaching expected precision           |
+| YARDSTICK-1560     | Fix pip environment.                                                     |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1457     | Fix influxdb "field type conflict" error                                 |
+| YARDSTICK-1561     | L3FWD Gradana Dashboards Out-of-date and incorrect.                      |
 +--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1458     | Update Grafana to display "real-time" data instead of historical data.   |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1462     | NSB: Add OvS 2.8.1 support in SA context                                 |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1492     | Make OvS server to listen on TCP                                         |
-+--------------------+--------------------------------------------------------------------------+
-| YARDSTICK-1493     | The RX queues number is hard-codded and cannot be changed                |
-+--------------------+--------------------------------------------------------------------------+
-
 
-Gambia 7.0.0 known restrictions/issues
+Gambia 7.1.0 known restrictions/issues
 ======================================
 
-+-----------+-----------------------+------------------+
-| Installer |       Scenario        |      Issue       |
-+===========+=======================+==================+
-|   apex    |  os-ovn-nofeature-ha  |  YARDSTICK-1517  |
-+-----------+-----------------------+------------------+
 
 Useful links
 ============
diff --git a/docs/testing/developer/devguide/images/vPE_Diagram.png b/docs/testing/developer/devguide/images/vPE_Diagram.png
new file mode 100644 (file)
index 0000000..c3985b7
Binary files /dev/null and b/docs/testing/developer/devguide/images/vPE_Diagram.png differ
index 7ec5b4e..72b1c4b 100644 (file)
@@ -601,3 +601,33 @@ may be changed.
 
 2. Subsection ``runner``: specifies the test duration and the interval of
 TG and VNF side KPIs polling. For more details, refer to :doc:`03-architecture`.
+
+Preparing test run of vPE test case
+-----------------------------------
+The vPE (Provider Edge Router) is a :term: `VNF` approximation
+serving as an Edge Router. The vPE is approximated using the
+``ip_pipeline`` dpdk application.
+
+         .. image:: images/vPE_Diagram.png
+            :width: 800px
+            :alt: NSB vPE Diagram
+
+The ``vpe_config`` file must be passed as it is not auto generated.
+The ``vpe_script`` defines the rules applied to each of the pipelines. This can be
+auto generated or a file can be passed using the ``script_file`` option in
+``vnf_config`` as shown below. The ``full_tm_profile_file`` option must be
+used if a traffic manager is defined in ``vpe_config``.
+
+.. code-block:: yaml
+
+     vnf_config: { file: './vpe_config/vpe_config_2_ports',
+                   action_bulk_file: './vpe_config/action_bulk_512.txt',
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg',
+                   script_file: './vpe_config/vpe_script_sample' }
+
+Testcases for vPE can be found in the ``vnf_samples/nsut/vpe`` directory.
+A testcase can be started with the following command as an example:
+
+.. code-block:: bash
+
+    yardstick task start /yardstick/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml
index 723cd6f..52b738f 100644 (file)
@@ -33,3 +33,6 @@ NSB PROX Test Case Descriptions
    tc_epc_saegw_tput_relocation_landslide
    tc_epc_network_service_request_landslide
    tc_epc_ue_service_request_landslide
+   tc_vfw_rfc2544.rst
+   tc_vfw_rfc2544_correlated.rst
+   tc_vfw_rfc3511.rst
diff --git a/docs/testing/user/userguide/nsb/tc_vfw_rfc2544.rst b/docs/testing/user/userguide/nsb/tc_vfw_rfc2544.rst
new file mode 100644 (file)
index 0000000..139990b
--- /dev/null
@@ -0,0 +1,189 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, 2018 Intel Corporation.
+
+************************************************
+Yardstick Test Case Description: NSB vFW RFC2544
+************************************************
+
++------------------------------------------------------------------------------+
+| NSB vFW test for VNF characterization                                        |
+|                                                                              |
++---------------+--------------------------------------------------------------+
+| test case id  | tc_{context}_rfc2544_ipv4_1rule_1flow_{pkt_size}_{tg_type}   |
+|               |                                                              |
+|               | * context = baremetal, heat, heat_external, ovs, sriov       |
+|               |             heat_sriov_external contexts;                    |
+|               | * tg_type = ixia (context != heat,heat_sriov_external),      |
+|               |             trex;                                            |
+|               | * pkt_size = 64B - all contexts;                             |
+|               |              128B, 256B, 512B, 1024B, 1280B, 1518B -         |
+|               |              (context = heat, tg_type = ixia)                |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| metric        | * Network Throughput;                                        |
+|               | * TG Packets Out;                                            |
+|               | * TG Packets In;                                             |
+|               | * TG Latency;                                                |
+|               | * VNF Packets Out;                                           |
+|               | * VNF Packets In;                                            |
+|               | * VNF Packets Fwd;                                           |
+|               | * Dropped packets;                                           |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test purpose  | The VFW RFC2544 tests measure performance characteristics of |
+|               | the SUT (multiple ports) and sends UDP bidirectional traffic |
+|               | from all TG ports to SampleVNF vFW application. The          |
+|               | application forwards received traffic based on rules         |
+|               | provided by the user in the TC configuration and default     |
+|               | rules created by vFW to send traffic from uplink ports to    |
+|               | downlink and voice versa.                                    |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| configuration | The 2 ports RFC2544 test cases are listed below:             |
+|               |                                                              |
+|               | * tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml        |
+|               | * tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml        |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_1024B_ixia.yaml  |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_1280B_ixia.yaml  |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_128B_ixia.yaml   |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_1518B_ixia.yaml  |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_256B_ixia.yaml   |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_512B_ixia.yaml   |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml    |
+|               | * tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex.yaml    |
+|               | * tc_heat_sriov_external_rfc2544_ipv4_1rule_1flow_64B_trex.  |
+|               |   yaml                                                       |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex.yaml             |
+|               | * tc_ovs_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml              |
+|               | * tc_ovs_rfc2544_ipv4_1rule_1flow_64B_trex.yaml              |
+|               | * tc_sriov_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml            |
+|               | * tc_sriov_rfc2544_ipv4_1rule_1flow_64B_trex.yaml            |
+|               |                                                              |
+|               | The 4 ports RFC2544 test cases are listed below:             |
+|               |                                                              |
+|               | * tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml  |
+|               | * tc_tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_4port.   |
+|               |   yaml                                                       |
+|               | * tc_tc_heat_external_rfc2544_ipv4_1rule_1flow_64B_trex_4    |
+|               |   port.yaml                                                  |
+|               | * tc_tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_4port.yaml    |
+|               |                                                              |
+|               | The scale-up RFC2544 test cases are listed below:            |
+|               |                                                              |
+|               | * tc_tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_scale-up.yaml |
+|               |                                                              |
+|               | The scale-out RFC2544 test cases are listed below:           |
+|               |                                                              |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_scale_out.yaml   |
+|               |                                                              |
+|               | Test duration is set as 30 sec for each test and default     |
+|               | number of rules are applied. These can be configured         |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test tool     | The vFW is a DPDK application that performs basic filtering  |
+|               | for malformed packets and dynamic packet filtering of        |
+|               | incoming packets using the connection tracker library.       |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| applicability | The vFW RFC2544 test cases can be configured with different: |
+|               |                                                              |
+|               |  * packet sizes;                                             |
+|               |  * test duration;                                            |
+|               |  * tolerated loss;                                           |
+|               |  * traffic flows;                                            |
+|               |  * rules;                                                    |
+|               |                                                              |
+|               | Default values exist.                                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| pre-test      | For OpenStack test case image (yardstick-samplevnf) needs    |
+| conditions    | to be installed into Glance with vFW and DPDK included in    |
+|               | it (NSB install).                                            |
+|               |                                                              |
+|               | For Baremetal tests cases vFW and DPDK must be installed on  |
+|               | the hosts where the test is executed. The pod.yaml file must |
+|               | have the necessary system and NIC information.               |
+|               |                                                              |
+|               | For standalone (SA) SRIOV/OvS test cases the                 |
+|               | yardstick-samplevnf image needs to be installed on hosts and |
+|               | pod.yaml file must be provided with necessary system, NIC    |
+|               | information.                                                 |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test sequence | Description and expected result                              |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 1        | For Baremetal test: The TG (except IXIA) and VNF are started |
+|               | on the hosts based on the pod file.                          |
+|               |                                                              |
+|               | For Heat test: Two host VMs are booted, as Traffic generator |
+|               | and VNF(vFW) based on the test flavor. In case of scale-out  |
+|               | scenario the multiple VNF VMs will be started.               |
+|               |                                                              |
+|               | For Heat external test: vFW VM is booted and TG (except IXIA)|
+|               | generator is started on the external host based on the pod   |
+|               | file. In case of scale-out scenario the multiple VNF VMs     |
+|               | will be deployed.                                            |
+|               |                                                              |
+|               | For Heat SRIOV external test: vFW VM is booted with network  |
+|               | interfaces of `direct` type which are mapped to VFs that are |
+|               | available to OpenStack. TG (except IXIA) is started on the   |
+|               | external host based on the pod file. In case of scale-out    |
+|               | scenario the multiple VNF VMs will be deployed.              |
+|               |                                                              |
+|               | For SRIOV test: VF ports are created on host's PFs specified |
+|               | in the TC file and VM is booed using those ports and image   |
+|               | provided in the configuration. TG (except IXIA) is started   |
+|               | on other host connected to VNF machine based on the pod      |
+|               | file. The vFW is started in the booted VM. In case of        |
+|               | scale-out scenario the multiple VNF VMs will be created.     |
+|               |                                                              |
+|               | For OvS-DPDK test: OvS DPDK switch is started and bridges    |
+|               | are created with ports specified in the TC file. DPDK vHost  |
+|               | ports are added to corresponding bridge and VM is booed      |
+|               | using those ports and image provided in the configuration.   |
+|               | TG (except IXIA) is started on other host connected to VNF   |
+|               | machine based on the pod file. The vFW is started in the     |
+|               | booted VM. In case of scale-out scenario the multiple VNF    |
+|               | VMs will be deployed.                                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 2        | Yardstick is connected with the TG and VNF by using ssh (in  |
+|               | case of IXIA TG is connected via TCL interface). The test    |
+|               | will resolve the topology and instantiate all VNFs           |
+|               | and TG and collect the KPI's/metrics.                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 3        | The TG will send packets to the VNFs. If the number of       |
+|               | dropped packets is more than the tolerated loss the line     |
+|               | rate or throughput is halved. This is done until the dropped |
+|               | packets are within an acceptable tolerated loss.             |
+|               |                                                              |
+|               | The KPI is the number of packets per second for different    |
+|               | packet size with an accepted minimal packet loss for the     |
+|               | default configuration.                                       |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 4        | In Baremetal test: The test quits the application and unbind |
+|               | the DPDK ports.                                              |
+|               |                                                              |
+|               | In Heat test: All VNF VMs and TG are deleted on test         |
+|               | completion.                                                  |
+|               |                                                              |
+|               | In SRIOV test: The deployed VM with vFW is destroyed on the  |
+|               | host and TG (exclude IXIA) is stopped.                       |
+|               |                                                              |
+|               | In Heat SRIOV test: The deployed VM with vFW is destroyed,   |
+|               | VFs are released and TG (exclude IXIA) is stopped.           |
+|               |                                                              |
+|               | In OvS test: The deployed VM with vFW is destroyed on the    |
+|               | host and OvS DPDK switch is stopped and ports are unbinded.  |
+|               | The TG (exclude IXIA) is stopped.                            |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test verdict  | The test case will achieve a Throughput with an accepted     |
+|               | minimal tolerated packet loss.                               |
++---------------+--------------------------------------------------------------+
+
diff --git a/docs/testing/user/userguide/nsb/tc_vfw_rfc2544_correlated.rst b/docs/testing/user/userguide/nsb/tc_vfw_rfc2544_correlated.rst
new file mode 100644 (file)
index 0000000..de49090
--- /dev/null
@@ -0,0 +1,130 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, 2018 Intel Corporation.
+
+*************************************************************
+Yardstick Test Case Description: NSB vFW RFC2544 (correlated)
+*************************************************************
+
++------------------------------------------------------------------------------+
+| NSB vFW test for VNF characterization using correlated traffic               |
+|                                                                              |
++---------------+--------------------------------------------------------------+
+| test case id  | tc_{context}_rfc2544_ipv4_1rule_1flow_64B_trex_corelated     |
+|               |                                                              |
+|               | * context = baremetal, heat                                  |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| metric        | * Network Throughput;                                        |
+|               | * TG Packets Out;                                            |
+|               | * TG Packets In;                                             |
+|               | * TG Latency;                                                |
+|               | * VNF Packets Out;                                           |
+|               | * VNF Packets In;                                            |
+|               | * VNF Packets Fwd;                                           |
+|               | * Dropped packets;                                           |
+|               |                                                              |
+|               | NOTE: For correlated TCs the TG metrics are available on     |
+|               | uplink ports.                                                |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test purpose  | The VFW RFC2544 correlated tests measure performance         |
+|               | characteristics of the SUT (multiple ports) and sends UDP    |
+|               | traffic from uplink TG ports to SampleVNF vFW application.   |
+|               | The application forwards received traffic from uplink ports  |
+|               | to downlink ports based on rules provided by the user in the |
+|               | TC configuration and default rules created by vFW. The VNF   |
+|               | downlink traffic is received by another UDPReplay VNF and it |
+|               | is mirrored back to the VNF on the same port. Finally, the   |
+|               | traffic is received back to the TG uplink port.              |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| configuration | The 2 ports RFC2544 correlated test cases are listed below:  |
+|               |                                                              |
+|               | * tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated   |
+|               |   _traffic.yaml                                              |
+|               |                                                              |
+|               | Multiple VNF (2, 4, 10) RFC2544 correlated test cases are    |
+|               | listed below:                                                |
+|               |                                                              |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_correlated       |
+|               |   _scale_10.yaml                                             |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_correlated_scale |
+|               |   _2.yaml                                                    |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_correlated_scale |
+|               |   _4.yaml                                                    |
+|               |                                                              |
+|               | The scale-out RFC2544 test cases are listed below:           |
+|               |                                                              |
+|               | * tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_correlated_scale |
+|               |   _out.yaml                                                  |
+|               |                                                              |
+|               | Test duration is set as 30 sec for each test and default     |
+|               | number of rules are applied. These can be configured         |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test tool     | The vFW is a DPDK application that performs basic filtering  |
+|               | for malformed packets and dynamic packet filtering of        |
+|               | incoming packets using the connection tracker library.       |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| applicability | The vFW RFC2544 test cases can be configured with different: |
+|               |                                                              |
+|               |  * packet sizes;                                             |
+|               |  * test duration;                                            |
+|               |  * tolerated loss;                                           |
+|               |  * traffic flows;                                            |
+|               |  * rules;                                                    |
+|               |                                                              |
+|               | Default values exist.                                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| pre-test      | For OpenStack test case image (yardstick-samplevnf) needs    |
+| conditions    | to be installed into Glance with vFW and DPDK included in    |
+|               | it (NSB install).                                            |
+|               |                                                              |
+|               | For Baremetal tests cases vFW and DPDK must be installed on  |
+|               | the hosts where the test is executed. The pod.yaml file must |
+|               | have the necessary system and NIC information.               |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test sequence | Description and expected result                              |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 1        | For Baremetal test: The TG (except IXIA), vFW and UDPReplay  |
+|               | VNFs are started on the hosts based on the pod file.         |
+|               |                                                              |
+|               | For Heat test: Three host VMs are booted, as Traffic         |
+|               | generator, vFW and UDPReplay VNF(vFW) based on the test      |
+|               | flavor. In case of scale-out scenario the multiple vFW VNF   |
+|               | VMs will be started.                                         |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 2        | Yardstick is connected with the TG, vFW and UDPReplay VNF by |
+|               | using ssh (in case of IXIA TG is connected via TCL           |
+|               | interface). The test will resolve the topology and           |
+|               | instantiate all VNFs and TG and collect the KPI's/metrics.   |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 3        | The TG will send packets to the VNFs. If the number of       |
+|               | dropped packets is more than the tolerated loss the line     |
+|               | rate or throughput is halved. This is done until the dropped |
+|               | packets are within an acceptable tolerated loss.             |
+|               |                                                              |
+|               | The KPI is the number of packets per second for 64B packet   |
+|               | size with an accepted minimal packet loss for the default    |
+|               | configuration.                                               |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 4        | In Baremetal test: The test quits the application and unbind |
+|               | the DPDK ports.                                              |
+|               |                                                              |
+|               | In Heat test: All VNF VMs and TG are deleted on test         |
+|               | completion.                                                  |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test verdict  | The test case will achieve a Throughput with an accepted     |
+|               | minimal tolerated packet loss.                               |
++---------------+--------------------------------------------------------------+
+
diff --git a/docs/testing/user/userguide/nsb/tc_vfw_rfc3511.rst b/docs/testing/user/userguide/nsb/tc_vfw_rfc3511.rst
new file mode 100644 (file)
index 0000000..9051fc4
--- /dev/null
@@ -0,0 +1,133 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, 2018 Intel Corporation.
+
+*******************************************************
+Yardstick Test Case Description: NSB vFW RFC3511 (HTTP)
+*******************************************************
+
++------------------------------------------------------------------------------+
+| NSB vFW test for VNF characterization based on RFC3511 and IXIA              |
+|                                                                              |
++---------------+--------------------------------------------------------------+
+| test case id  | tc_{context}_http_ixload_{http_size}_Requests-65000_{type}   |
+|               |                                                              |
+|               | * context = baremetal, heat_external                         |
+|               | * http_size = 1b, 4k, 64k, 256k, 512k, 1024k payload size    |
+|               | * type = Concurrency, Connections, Throughput                |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| metric        | * HTTP Total Throughput (Kbps);                              |
+|               | * HTTP Simulated Users;                                      |
+|               | * HTTP Concurrent Connections;                               |
+|               | * HTTP Connection Rate;                                      |
+|               | * HTTP Transaction Rate                                      |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test purpose  | The vFW RFC3511 tests measure performance characteristics of |
+|               | the SUT by sending the HTTP traffic from uplink to downlink  |
+|               | TG ports through vFW VNF. The application forwards received  |
+|               | traffic based on rules provided by the user in the TC        |
+|               | configuration and default rules created by vFW to send       |
+|               | traffic from uplink ports to downlink and voice versa.       |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| configuration | The 2 ports RFC3511 test cases are listed below:             |
+|               |                                                              |
+|               | * tc_baremetal_http_ixload_1024k_Requests-65000              |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_baremetal_http_ixload_1b_Requests-65000                 |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_baremetal_http_ixload_256k_Requests-65000               |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_baremetal_http_ixload_4k_Requests-65000                 |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_baremetal_http_ixload_512k_Requests-65000               |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_baremetal_http_ixload_64k_Requests-65000                |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_heat_external_http_ixload_1b_Requests-10Gbps            |
+|               |   _Throughput.yaml                                           |
+|               | * tc_heat_external_http_ixload_1b_Requests-65000             |
+|               |   _Concurrency.yaml                                          |
+|               | * tc_heat_external_http_ixload_1b_Requests-65000             |
+|               |   _Connections.yaml                                          |
+|               |                                                              |
+|               | The 4 ports RFC3511 test cases are listed below:             |
+|               |                                                              |
+|               | * tc_baremetal_http_ixload_1b_Requests-65000                 |
+|               |   _Concurrency_4port.yaml                                    |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test tool     | The vFW is a DPDK application that performs basic filtering  |
+|               | for malformed packets and dynamic packet filtering of        |
+|               | incoming packets using the connection tracker library.       |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| applicability | The vFW RFC3511 test cases can be configured with different: |
+|               |                                                              |
+|               |  * http payload sizes;                                       |
+|               |  * traffic flows;                                            |
+|               |  * rules;                                                    |
+|               |                                                              |
+|               | Default values exist.                                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| pre-test      | For OpenStack test case image (yardstick-samplevnf) needs    |
+| conditions    | to be installed into Glance with vFW and DPDK included in    |
+|               | it (NSB install).                                            |
+|               |                                                              |
+|               | For Baremetal tests cases vFW and DPDK must be installed on  |
+|               | the hosts where the test is executed. The pod.yaml file must |
+|               | have the necessary system and NIC information.               |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test sequence | Description and expected result                              |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 1        | For Baremetal test: The vFW VNF is started on the hosts      |
+|               | based on the pod file.                                       |
+|               |                                                              |
+|               | For Heat external test: The vFW VM are deployed and booted.  |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 2        | Yardstick is connected with the TG (IxLoad) via IxLoad API   |
+|               | and VNF by using ssh. The test will resolve the topology and |
+|               | instantiate all VNFs and TG and collect the KPI's/metrics.   |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 3        | The TG simulates HTTP traffic based on selected type of TC.  |
+|               |                                                              |
+|               | Concurrency:                                                 |
+|               |   The TC attempts to simulate some number of human users.    |
+|               |   The simulated users are gradually brought online until 64K |
+|               |   users is met (the Ramp-Up phase), then taken offline (the  |
+|               |   Ramp Down phase).                                          |
+|               |                                                              |
+|               | Connections:                                                 |
+|               |   The TC creates some number of HTTP connections per second. |
+|               |   It will attempt to generate the 64K of HTTP connections    |
+|               |   per second.                                                |
+|               |                                                              |
+|               | Throughput:                                                  |
+|               |   TC simultaneously transmits and receives TCP payload       |
+|               |   (bytes) at a certain rate measured in Megabits per second  |
+|               |   (Mbps), Kilobits per second (Kbps), or Gigabits per        |
+|               |   second. The 10 Gbits is default throughput.                |
+|               |                                                              |
+|               | At the end of the TC, the KPIs are collected and stored      |
+|               | (depends on the selected dispatcher).                        |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| step 4        | In Baremetal test: The test quits the application and        |
+|               | unbinds the DPDK ports.                                      |
+|               |                                                              |
+|               | In Heat test: All VNF VMs are deleted and connections to TG  |
+|               | are terminated.                                              |
+|               |                                                              |
++---------------+--------------------------------------------------------------+
+| test verdict  | The test case will try to achieve the configured HTTP        |
+|               | Concurrency/Throughput/Connections.                          |
++---------------+--------------------------------------------------------------+
+
 # limitations under the License.
 
 ---
+{% set sessions_per_port = sessions_per_port or 4000 %}
+{% set sessions_per_svlan = sessions_per_svlan or 1000 %}
 schema: yardstick:task:0.1
+description: >
+  vBNG RFC2544 test case with QoS base line with link congestion.
+  Test case creates PPPoE sessions, runs traffic from two core ports
+  to one access port causing congestion of that port (traffic from
+  other access ports are splitting between remaining core ports)
+  and measures packets drop rate on all ports for each priority flow.
 scenarios:
 - type: NSPerf
-  traffic_profile: "../../traffic_profiles/ixia_ipv4_latency_vbng-4.yaml"
-  topology: "../agnostic/agnostic_vnf_topology_ixia_4ports.yaml"
+  traffic_profile: "../../traffic_profiles/ixia_ipv4_latency_vbng_1port_congested-8.yaml"
+  topology: "../agnostic/agnostic_vnf_topology_ixia_8ports.yaml"
   ixia_config: IxiaPppoeClient
   nodes:
     tg__0: tg_0.yardstick
     vnf__0: vnf_0.yardstick
   options:
     pppoe_client: # access network
-      sessions_per_port: 4000
-      sessions_per_svlan: 1000
+      sessions_per_port: {{ sessions_per_port }}
+      sessions_per_svlan: {{ sessions_per_svlan }}
       pap_user: 'wfnos'
       pap_password: ''
-      ip: [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}]
+      ip: [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}, {'tg__0': 'xe4'}, {'tg__0': 'xe6'}]
       s_vlan: 100  # s-vlan applies per device group
       c_vlan: 1000  # c-vlan applies per subscriber
     ipv4_client: # core network
       sessions_per_port: 1
       sessions_per_vlan: 1
-      ip: [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}]
-      gateway_ip: [{'vnf__0': 'xe1'}, {'vnf__0': 'xe3'}]
+      ip: [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}, {'tg__0': 'xe5'}, {'tg__0': 'xe7'}]
+      gateway_ip: [{'vnf__0': 'xe1'}, {'vnf__0': 'xe3'}, {'vnf__0': 'xe5'}, {'vnf__0': 'xe7'}]
       vlan: 101
       bgp:
         bgp_type: external
@@ -45,8 +53,8 @@ scenarios:
       uplink: {70B: 33, 940B: 33, 1470B: 34}
       downlink: {68B: 3, 932B: 1, 1470B: 96}
     flow:
-      src_ip: [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}]
-      dst_ip: [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}]
+      src_ip: [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}, {'tg__0': 'xe4'}, {'tg__0': 'xe6'}]
+      dst_ip: [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}, {'tg__0': 'xe5'}, {'tg__0': 'xe7'}]
       count: 1
     traffic_type: 4
     rfc2544:
@@ -59,4 +67,4 @@ context:
   type: Node
   name: yardstick
   nfvi_type: baremetal
-  file: /etc/yardstick/nodes/pod_ixia_4port.yaml
+  file: /etc/yardstick/nodes/pod_ixia.yaml
 # limitations under the License.
 
 ---
+{% set sessions_per_port = sessions_per_port or 4000 %}
+{% set sessions_per_svlan = sessions_per_svlan or 1000 %}
+{% set vports = vports or 2 %}
+{% set svlans_per_port = sessions_per_port / sessions_per_svlan %}
 schema: yardstick:task:0.1
+description: >
+  vBNG RFC2544 test case with QoS base line without link congestion.
+  Test case creates PPPoE sessions, runs traffic on maximum throughput
+  and measures packets drop rate on all ports for each priority flow.
 scenarios:
 - type: NSPerf
-  traffic_profile: "../../traffic_profiles/ixia_ipv4_latency_vbng-4.yaml"
-  topology: "../agnostic/agnostic_vnf_topology_ixia_2ports.yaml"
+  traffic_profile: "../../traffic_profiles/ixia_ipv4_latency_vbng_scale_up.yaml"
+  topology: "../agnostic/agnostic_vnf_topology_ixia_{{ vports }}ports.yaml"
   ixia_config: IxiaPppoeClient
+  extra_args:
+    svlans_per_port: {{ svlans_per_port|int }}
+    access_vports_num: {{ vports|int / 2 }}
   nodes:
     tg__0: tg_0.yardstick
     vnf__0: vnf_0.yardstick
   options:
     pppoe_client: # access network
-      sessions_per_port: 4000
-      sessions_per_svlan: 1000
+      sessions_per_port: {{ sessions_per_port }}
+      sessions_per_svlan: {{ sessions_per_svlan }}
       pap_user: 'wfnos'
       pap_password: ''
-      ip: [{'tg__0': 'xe0'}]
+      ip:
+{% for vnf_num in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vnf_num }}'}
+{% endfor %}
       s_vlan: 100  # s-vlan applies per device group
       c_vlan: 1000  # c-vlan applies per subscriber
     ipv4_client: # core network
       sessions_per_port: 1
       sessions_per_vlan: 1
-      ip: [{'tg__0': 'xe1'}]
-      gateway_ip: [{'vnf__0': 'xe1'}]
-      prefix: '24'
+      ip:
+{% for vnf_num in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vnf_num }}'}
+{% endfor %}
+      gateway_ip:
+{% for vnf_num in range(1, vports|int, 2) %}
+        - {'vnf__0': 'xe{{ vnf_num }}'}
+{% endfor %}
       vlan: 101
       bgp:
         bgp_type: external
         dut_ip: 10.0.0.3
         as_number: 65000
     framesize:
-      uplink: {64B: 100}
-      downlink: {64B: 100}
+      uplink: {70B: 33, 940B: 33, 1470B: 34}
+      downlink: {68B: 3, 932B: 1, 1470B: 96}
     flow:
-      src_ip: [{'tg__0': 'xe0'}]
-      dst_ip: [{'tg__0': 'xe1'}]
+      src_ip:
+{% for vnf_num in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vnf_num }}'}
+{% endfor %}
+      dst_ip:
+{% for vnf_num in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vnf_num }}'}
+{% endfor %}
       count: 1
     traffic_type: 4
     rfc2544:
index 330d8e8..399de9c 100644 (file)
@@ -36,7 +36,8 @@ scenarios:
       nfvi_enable: True
       vnf_config: {file: './vpe_config/vpe_config_2_ports',
                    action_bulk_file: './vpe_config/action_bulk_512.txt',
-                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'}
+                   full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg',
+                   script_file: './vpe_config/vpe_script_sample'}
   runner:
     type: Iteration
     iterations: 10
index 21731cd..6fb3bdd 100644 (file)
@@ -1,3 +1,17 @@
+# Copyright (c) 2016-2018 Intel Corporation
+#
+# 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.
+
 flow 0 meter 0 trtcm 1250000000 1250000000 1000000 1000000 policer 0 g G y Y r R meter 1 trtcm 1250000000 1250000000 1000000 1000000 policer 1 g G y Y r R meter 2 trtcm 1250000000 1250000000 1000000 1000000 policer 2 g G y Y r R meter 3 trtcm 1250000000 1250000000 1000000 1000000 policer 3 g G y Y r R port 0
 flow 1 meter 0 trtcm 1250000000 1250000000 1000000 1000000 policer 0 g G y Y r R meter 1 trtcm 1250000000 1250000000 1000000 1000000 policer 1 g G y Y r R meter 2 trtcm 1250000000 1250000000 1000000 1000000 policer 2 g G y Y r R meter 3 trtcm 1250000000 1250000000 1000000 1000000 policer 3 g G y Y r R port 0
 flow 2 meter 0 trtcm 1250000000 1250000000 1000000 1000000 policer 0 g G y Y r R meter 1 trtcm 1250000000 1250000000 1000000 1000000 policer 1 g G y Y r R meter 2 trtcm 1250000000 1250000000 1000000 1000000 policer 2 g G y Y r R meter 3 trtcm 1250000000 1250000000 1000000 1000000 policer 3 g G y Y r R port 0
index 35443c8..44aa985 100644 (file)
@@ -1,3 +1,17 @@
+# Copyright (c) 2016-2018 Intel Corporation
+#
+# 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.
+
 [PIPELINE0]
 type = MASTER
 core = 0
diff --git a/samples/vnf_samples/nsut/vpe/vpe_config/vpe_script_sample b/samples/vnf_samples/nsut/vpe/vpe_config/vpe_script_sample
new file mode 100644 (file)
index 0000000..ebf59cc
--- /dev/null
@@ -0,0 +1,631 @@
+# Copyright (c) 2016-2018 Intel Corporation
+#
+# 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.
+
+p 1 firewall add priority 1 ipv4  152.16.0.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.1.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.2.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.3.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.4.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.5.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.6.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.7.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.8.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.9.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.10.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.11.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.12.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.13.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.14.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.15.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.16.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.17.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.18.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.19.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.20.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.21.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.22.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.23.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.24.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.25.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.26.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.27.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.28.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.29.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.30.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.31.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.32.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.33.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.34.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.35.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.36.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.37.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.38.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.39.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.40.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.41.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.42.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.43.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.44.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.45.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.46.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.47.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.48.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.49.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.50.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.51.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.52.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.53.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.54.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.55.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.56.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.57.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.58.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.59.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.60.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.61.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.62.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.63.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.64.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.65.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.66.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.67.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.68.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.69.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.70.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.71.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.72.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.73.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.74.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.75.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.76.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.77.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.78.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.79.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.80.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.81.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.82.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.83.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.84.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.85.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.86.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.87.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.88.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.89.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.90.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.91.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.92.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.93.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.94.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.95.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.96.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.97.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.98.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.99.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.100.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.101.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.102.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.103.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.104.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.105.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.106.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.107.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.108.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.109.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.110.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.111.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.112.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.113.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.114.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.115.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.116.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.117.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.118.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.119.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.120.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.121.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.122.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.123.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.124.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.125.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.126.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.127.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.128.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.129.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.130.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.131.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.132.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.133.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.134.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.135.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.136.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.137.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.138.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.139.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.140.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.141.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.142.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.143.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.144.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.145.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.146.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.147.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.148.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.149.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.150.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.151.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.152.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.153.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.154.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.155.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.156.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.157.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.158.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.159.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.160.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.161.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.162.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.163.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.164.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.165.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.166.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.167.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.168.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.169.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.170.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.171.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.172.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.173.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.174.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.175.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.176.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.177.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.178.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.179.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.180.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.181.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.182.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.183.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.184.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.185.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.186.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.187.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.188.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.189.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.190.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.191.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.192.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.193.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.194.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.195.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.196.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.197.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.198.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.199.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.200.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.201.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.202.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.203.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.204.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.205.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.206.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.207.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.208.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.209.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.210.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.211.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.212.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.213.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.214.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.215.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.216.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.217.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.218.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.219.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.220.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.221.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.222.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.223.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.224.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.225.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.226.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.227.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.228.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.229.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.230.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.231.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.232.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.233.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.234.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.235.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.236.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.237.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.238.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.239.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.240.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.241.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.242.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.243.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.244.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.245.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.246.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.247.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.248.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.249.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.250.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.251.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.252.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.253.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.254.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add priority 1 ipv4  152.16.255.0 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0
+p 1 firewall add default 1
+
+p 2 flow add qinq 128 512 port 0 id 1
+p 2 flow add default 1
+p 3 action flow bulk /tmp/action_bulk_512.txt
+p 4 action flow bulk /tmp/action_bulk_512.txt
+p 4 action dscp 0 class 0 color G
+p 4 action dscp 1 class 1 color Y
+p 4 action dscp 2 class 2 color R
+p 4 action dscp 3 class 3 color G
+p 4 action dscp 4 class 0 color Y
+p 4 action dscp 5 class 1 color R
+p 4 action dscp 6 class 2 color G
+p 4 action dscp 7 class 3 color Y
+p 4 action dscp 8 class 0 color R
+p 4 action dscp 9 class 1 color G
+p 4 action dscp 10 class 2 color Y
+p 4 action dscp 11 class 3 color R
+p 4 action dscp 12 class 0 color G
+p 4 action dscp 13 class 1 color Y
+p 4 action dscp 14 class 2 color R
+p 4 action dscp 15 class 3 color G
+p 4 action dscp 16 class 0 color Y
+p 4 action dscp 17 class 1 color R
+p 4 action dscp 18 class 2 color G
+p 4 action dscp 19 class 3 color Y
+p 4 action dscp 20 class 0 color R
+p 4 action dscp 21 class 1 color G
+p 4 action dscp 22 class 2 color Y
+p 4 action dscp 23 class 3 color R
+p 4 action dscp 24 class 0 color G
+p 4 action dscp 25 class 1 color Y
+p 4 action dscp 26 class 2 color R
+p 4 action dscp 27 class 3 color G
+p 4 action dscp 28 class 0 color Y
+p 4 action dscp 29 class 1 color R
+p 4 action dscp 30 class 2 color G
+p 4 action dscp 31 class 3 color Y
+p 4 action dscp 32 class 0 color R
+p 4 action dscp 33 class 1 color G
+p 4 action dscp 34 class 2 color Y
+p 4 action dscp 35 class 3 color R
+p 4 action dscp 36 class 0 color G
+p 4 action dscp 37 class 1 color Y
+p 4 action dscp 38 class 2 color R
+p 4 action dscp 39 class 3 color G
+p 4 action dscp 40 class 0 color Y
+p 4 action dscp 41 class 1 color R
+p 4 action dscp 42 class 2 color G
+p 4 action dscp 43 class 3 color Y
+p 4 action dscp 44 class 0 color R
+p 4 action dscp 45 class 1 color G
+p 4 action dscp 46 class 2 color Y
+p 4 action dscp 47 class 3 color R
+p 4 action dscp 48 class 0 color G
+p 4 action dscp 49 class 1 color Y
+p 4 action dscp 50 class 2 color R
+p 4 action dscp 51 class 3 color G
+p 4 action dscp 52 class 0 color Y
+p 4 action dscp 53 class 1 color R
+p 4 action dscp 54 class 2 color G
+p 4 action dscp 55 class 3 color Y
+p 4 action dscp 56 class 0 color R
+p 4 action dscp 57 class 1 color G
+p 4 action dscp 58 class 2 color Y
+p 4 action dscp 59 class 3 color R
+p 4 action dscp 60 class 0 color G
+p 4 action dscp 61 class 1 color Y
+p 4 action dscp 62 class 2 color R
+p 4 action dscp 63 class 3 color G
+p 5 route add 152.40.0.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:0
+p 5 route add 152.40.8.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:8
+p 5 route add 152.40.16.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:16
+p 5 route add 152.40.24.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:24
+p 5 route add 152.40.32.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:32
+p 5 route add 152.40.40.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:40
+p 5 route add 152.40.48.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:48
+p 5 route add 152.40.56.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:56
+p 5 route add 152.40.64.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:64
+p 5 route add 152.40.72.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:72
+p 5 route add 152.40.80.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:80
+p 5 route add 152.40.88.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:88
+p 5 route add 152.40.96.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:96
+p 5 route add 152.40.104.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:104
+p 5 route add 152.40.112.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:112
+p 5 route add 152.40.120.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:120
+p 5 route add 152.40.128.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:128
+p 5 route add 152.40.136.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:136
+p 5 route add 152.40.144.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:144
+p 5 route add 152.40.152.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:152
+p 5 route add 152.40.160.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:160
+p 5 route add 152.40.168.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:168
+p 5 route add 152.40.176.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:176
+p 5 route add 152.40.184.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:184
+p 5 route add 152.40.192.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:192
+p 5 route add 152.40.200.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:200
+p 5 route add 152.40.208.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:208
+p 5 route add 152.40.216.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:216
+p 5 route add 152.40.224.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:224
+p 5 route add 152.40.232.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:232
+p 5 route add 152.40.240.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:240
+p 5 route add 152.40.248.0 21 port 0 ether 00:98:28:28:14:00 mpls 0:248
+p 5 route add default 1
+
+p 6 route add 152.16.0.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 0
+p 6 route add 152.16.1.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 1
+p 6 route add 152.16.2.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 2
+p 6 route add 152.16.3.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 3
+p 6 route add 152.16.4.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 4
+p 6 route add 152.16.5.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 5
+p 6 route add 152.16.6.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 6
+p 6 route add 152.16.7.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 7
+p 6 route add 152.16.8.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 8
+p 6 route add 152.16.9.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 9
+p 6 route add 152.16.10.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 10
+p 6 route add 152.16.11.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 11
+p 6 route add 152.16.12.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 12
+p 6 route add 152.16.13.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 13
+p 6 route add 152.16.14.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 14
+p 6 route add 152.16.15.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 15
+p 6 route add 152.16.16.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 16
+p 6 route add 152.16.17.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 17
+p 6 route add 152.16.18.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 18
+p 6 route add 152.16.19.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 19
+p 6 route add 152.16.20.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 20
+p 6 route add 152.16.21.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 21
+p 6 route add 152.16.22.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 22
+p 6 route add 152.16.23.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 23
+p 6 route add 152.16.24.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 24
+p 6 route add 152.16.25.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 25
+p 6 route add 152.16.26.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 26
+p 6 route add 152.16.27.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 27
+p 6 route add 152.16.28.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 28
+p 6 route add 152.16.29.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 29
+p 6 route add 152.16.30.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 30
+p 6 route add 152.16.31.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 31
+p 6 route add 152.16.32.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 32
+p 6 route add 152.16.33.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 33
+p 6 route add 152.16.34.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 34
+p 6 route add 152.16.35.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 35
+p 6 route add 152.16.36.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 36
+p 6 route add 152.16.37.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 37
+p 6 route add 152.16.38.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 38
+p 6 route add 152.16.39.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 39
+p 6 route add 152.16.40.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 40
+p 6 route add 152.16.41.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 41
+p 6 route add 152.16.42.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 42
+p 6 route add 152.16.43.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 43
+p 6 route add 152.16.44.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 44
+p 6 route add 152.16.45.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 45
+p 6 route add 152.16.46.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 46
+p 6 route add 152.16.47.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 47
+p 6 route add 152.16.48.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 48
+p 6 route add 152.16.49.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 49
+p 6 route add 152.16.50.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 50
+p 6 route add 152.16.51.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 51
+p 6 route add 152.16.52.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 52
+p 6 route add 152.16.53.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 53
+p 6 route add 152.16.54.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 54
+p 6 route add 152.16.55.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 55
+p 6 route add 152.16.56.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 56
+p 6 route add 152.16.57.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 57
+p 6 route add 152.16.58.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 58
+p 6 route add 152.16.59.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 59
+p 6 route add 152.16.60.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 60
+p 6 route add 152.16.61.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 61
+p 6 route add 152.16.62.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 62
+p 6 route add 152.16.63.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 63
+p 6 route add 152.16.64.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 64
+p 6 route add 152.16.65.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 65
+p 6 route add 152.16.66.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 66
+p 6 route add 152.16.67.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 67
+p 6 route add 152.16.68.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 68
+p 6 route add 152.16.69.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 69
+p 6 route add 152.16.70.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 70
+p 6 route add 152.16.71.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 71
+p 6 route add 152.16.72.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 72
+p 6 route add 152.16.73.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 73
+p 6 route add 152.16.74.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 74
+p 6 route add 152.16.75.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 75
+p 6 route add 152.16.76.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 76
+p 6 route add 152.16.77.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 77
+p 6 route add 152.16.78.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 78
+p 6 route add 152.16.79.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 79
+p 6 route add 152.16.80.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 80
+p 6 route add 152.16.81.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 81
+p 6 route add 152.16.82.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 82
+p 6 route add 152.16.83.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 83
+p 6 route add 152.16.84.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 84
+p 6 route add 152.16.85.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 85
+p 6 route add 152.16.86.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 86
+p 6 route add 152.16.87.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 87
+p 6 route add 152.16.88.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 88
+p 6 route add 152.16.89.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 89
+p 6 route add 152.16.90.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 90
+p 6 route add 152.16.91.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 91
+p 6 route add 152.16.92.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 92
+p 6 route add 152.16.93.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 93
+p 6 route add 152.16.94.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 94
+p 6 route add 152.16.95.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 95
+p 6 route add 152.16.96.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 96
+p 6 route add 152.16.97.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 97
+p 6 route add 152.16.98.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 98
+p 6 route add 152.16.99.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 99
+p 6 route add 152.16.100.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 100
+p 6 route add 152.16.101.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 101
+p 6 route add 152.16.102.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 102
+p 6 route add 152.16.103.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 103
+p 6 route add 152.16.104.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 104
+p 6 route add 152.16.105.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 105
+p 6 route add 152.16.106.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 106
+p 6 route add 152.16.107.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 107
+p 6 route add 152.16.108.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 108
+p 6 route add 152.16.109.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 109
+p 6 route add 152.16.110.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 110
+p 6 route add 152.16.111.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 111
+p 6 route add 152.16.112.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 112
+p 6 route add 152.16.113.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 113
+p 6 route add 152.16.114.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 114
+p 6 route add 152.16.115.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 115
+p 6 route add 152.16.116.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 116
+p 6 route add 152.16.117.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 117
+p 6 route add 152.16.118.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 118
+p 6 route add 152.16.119.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 119
+p 6 route add 152.16.120.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 120
+p 6 route add 152.16.121.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 121
+p 6 route add 152.16.122.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 122
+p 6 route add 152.16.123.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 123
+p 6 route add 152.16.124.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 124
+p 6 route add 152.16.125.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 125
+p 6 route add 152.16.126.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 126
+p 6 route add 152.16.127.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 127
+p 6 route add 152.16.128.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 128
+p 6 route add 152.16.129.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 129
+p 6 route add 152.16.130.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 130
+p 6 route add 152.16.131.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 131
+p 6 route add 152.16.132.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 132
+p 6 route add 152.16.133.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 133
+p 6 route add 152.16.134.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 134
+p 6 route add 152.16.135.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 135
+p 6 route add 152.16.136.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 136
+p 6 route add 152.16.137.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 137
+p 6 route add 152.16.138.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 138
+p 6 route add 152.16.139.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 139
+p 6 route add 152.16.140.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 140
+p 6 route add 152.16.141.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 141
+p 6 route add 152.16.142.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 142
+p 6 route add 152.16.143.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 143
+p 6 route add 152.16.144.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 144
+p 6 route add 152.16.145.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 145
+p 6 route add 152.16.146.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 146
+p 6 route add 152.16.147.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 147
+p 6 route add 152.16.148.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 148
+p 6 route add 152.16.149.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 149
+p 6 route add 152.16.150.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 150
+p 6 route add 152.16.151.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 151
+p 6 route add 152.16.152.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 152
+p 6 route add 152.16.153.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 153
+p 6 route add 152.16.154.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 154
+p 6 route add 152.16.155.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 155
+p 6 route add 152.16.156.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 156
+p 6 route add 152.16.157.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 157
+p 6 route add 152.16.158.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 158
+p 6 route add 152.16.159.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 159
+p 6 route add 152.16.160.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 160
+p 6 route add 152.16.161.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 161
+p 6 route add 152.16.162.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 162
+p 6 route add 152.16.163.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 163
+p 6 route add 152.16.164.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 164
+p 6 route add 152.16.165.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 165
+p 6 route add 152.16.166.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 166
+p 6 route add 152.16.167.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 167
+p 6 route add 152.16.168.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 168
+p 6 route add 152.16.169.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 169
+p 6 route add 152.16.170.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 170
+p 6 route add 152.16.171.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 171
+p 6 route add 152.16.172.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 172
+p 6 route add 152.16.173.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 173
+p 6 route add 152.16.174.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 174
+p 6 route add 152.16.175.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 175
+p 6 route add 152.16.176.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 176
+p 6 route add 152.16.177.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 177
+p 6 route add 152.16.178.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 178
+p 6 route add 152.16.179.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 179
+p 6 route add 152.16.180.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 180
+p 6 route add 152.16.181.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 181
+p 6 route add 152.16.182.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 182
+p 6 route add 152.16.183.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 183
+p 6 route add 152.16.184.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 184
+p 6 route add 152.16.185.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 185
+p 6 route add 152.16.186.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 186
+p 6 route add 152.16.187.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 187
+p 6 route add 152.16.188.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 188
+p 6 route add 152.16.189.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 189
+p 6 route add 152.16.190.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 190
+p 6 route add 152.16.191.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 191
+p 6 route add 152.16.192.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 192
+p 6 route add 152.16.193.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 193
+p 6 route add 152.16.194.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 194
+p 6 route add 152.16.195.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 195
+p 6 route add 152.16.196.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 196
+p 6 route add 152.16.197.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 197
+p 6 route add 152.16.198.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 198
+p 6 route add 152.16.199.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 199
+p 6 route add 152.16.200.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 200
+p 6 route add 152.16.201.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 201
+p 6 route add 152.16.202.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 202
+p 6 route add 152.16.203.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 203
+p 6 route add 152.16.204.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 204
+p 6 route add 152.16.205.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 205
+p 6 route add 152.16.206.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 206
+p 6 route add 152.16.207.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 207
+p 6 route add 152.16.208.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 208
+p 6 route add 152.16.209.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 209
+p 6 route add 152.16.210.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 210
+p 6 route add 152.16.211.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 211
+p 6 route add 152.16.212.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 212
+p 6 route add 152.16.213.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 213
+p 6 route add 152.16.214.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 214
+p 6 route add 152.16.215.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 215
+p 6 route add 152.16.216.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 216
+p 6 route add 152.16.217.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 217
+p 6 route add 152.16.218.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 218
+p 6 route add 152.16.219.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 219
+p 6 route add 152.16.220.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 220
+p 6 route add 152.16.221.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 221
+p 6 route add 152.16.222.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 222
+p 6 route add 152.16.223.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 223
+p 6 route add 152.16.224.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 224
+p 6 route add 152.16.225.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 225
+p 6 route add 152.16.226.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 226
+p 6 route add 152.16.227.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 227
+p 6 route add 152.16.228.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 228
+p 6 route add 152.16.229.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 229
+p 6 route add 152.16.230.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 230
+p 6 route add 152.16.231.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 231
+p 6 route add 152.16.232.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 232
+p 6 route add 152.16.233.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 233
+p 6 route add 152.16.234.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 234
+p 6 route add 152.16.235.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 235
+p 6 route add 152.16.236.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 236
+p 6 route add 152.16.237.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 237
+p 6 route add 152.16.238.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 238
+p 6 route add 152.16.239.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 239
+p 6 route add 152.16.240.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 240
+p 6 route add 152.16.241.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 241
+p 6 route add 152.16.242.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 242
+p 6 route add 152.16.243.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 243
+p 6 route add 152.16.244.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 244
+p 6 route add 152.16.245.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 245
+p 6 route add 152.16.246.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 246
+p 6 route add 152.16.247.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 247
+p 6 route add 152.16.248.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 248
+p 6 route add 152.16.249.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 249
+p 6 route add 152.16.250.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 250
+p 6 route add 152.16.251.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 251
+p 6 route add 152.16.252.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 252
+p 6 route add 152.16.253.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 253
+p 6 route add 152.16.254.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 254
+p 6 route add 152.16.255.0 24 port 0 ether 00:98:10:64:14:00 qinq 0 255
+p 6 route add default 1
diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vbng_1port_congested-8.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vbng_1port_congested-8.yaml
new file mode 100644 (file)
index 0000000..a317004
--- /dev/null
@@ -0,0 +1,412 @@
+# Copyright (c) 2018 Intel Corporation
+#
+# 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.
+
+---
+schema: "nsb:traffic_profile:0.1"
+
+# This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator
+
+name:            rfc2544
+description:     Traffic profile to run RFC2544 latency
+traffic_profile:
+  traffic_type : IXIARFC2544PppoeScenarioProfile # defines traffic behavior - constant or look for highest possible throughput
+  frame_rate : 12.5%  # pc of linerate
+  duration: {{ duration }}
+  enable_latency: True
+
+uplink_0:
+      ipv4:
+        id: 1
+        port: xe0
+        outer_l2:
+          framesize: &uplink_framesize
+            64B: "{{get(imix, 'imix.uplink.64B', '0') }}"
+            68B: "{{get(imix, 'imix.uplink.68B', '0') }}"
+            70B: "{{get(imix, 'imix.uplink.70B', '0') }}"
+            128B: "{{get(imix, 'imix.uplink.128B', '0') }}"
+            256B: "{{get(imix, 'imix.uplink.256B', '0') }}"
+            373B: "{{get(imix, 'imix.uplink.373B', '0') }}"
+            512B: "{{get(imix, 'imix.uplink.512B', '0') }}"
+            570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
+            932B: "{{get(imix, 'imix.uplink.932B', '0') }}"
+            940B: "{{get(imix, 'imix.uplink.940B', '0') }}"
+            1024B: "{{get(imix, 'imix.uplink.1024B', '0') }}"
+            1280B: "{{get(imix, 'imix.uplink.1280B', '0') }}"
+            1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
+            1470B: "{{get(imix, 'imix.uplink.1470B', '0') }}"
+            1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
+            1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: &uplink_precedence [0, 4, 7]
+downlink_0:
+      ipv4:
+        id: 2
+        port: xe1
+        outer_l2:
+          framesize: &downlink_framesize
+            64B: "{{get(imix, 'imix.downlink.64B', '0') }}"
+            68B: "{{get(imix, 'imix.downlink.68B', '0') }}"
+            70B: "{{get(imix, 'imix.downlink.70B', '0') }}"
+            128B: "{{get(imix, 'imix.downlink.128B', '0') }}"
+            256B: "{{get(imix, 'imix.downlink.256B', '0') }}"
+            373B: "{{get(imix, 'imix.downlink.373B', '0') }}"
+            512B: "{{get(imix, 'imix.downlink.512B', '0') }}"
+            570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
+            932B: "{{get(imix, 'imix.downlink.932B', '0') }}"
+            940B: "{{get(imix, 'imix.downlink.940B', '0') }}"
+            1024B: "{{get(imix, 'imix.downlink.1024B', '0') }}"
+            1280B: "{{get(imix, 'imix.downlink.1280B', '0') }}"
+            1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
+            1470B: "{{get(imix, 'imix.downlink.1470B', '0') }}"
+            1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
+            1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: &downlink_precedence [0, 4, 7]
+uplink_1:
+      ipv4:
+        id: 3
+        port: xe0
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_1:
+      ipv4:
+        id: 4
+        port: xe1
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_2:
+      ipv4:
+        id: 5
+        port: xe0
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_2:
+      ipv4:
+        id: 6
+        port: xe3
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_3:
+      ipv4:
+        id: 7
+        port: xe0
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_3:
+      ipv4:
+        id: 8
+        port: xe3
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_4:
+      ipv4:
+        id: 9
+        port: xe2
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_4:
+      ipv4:
+        id: 10
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_5:
+      ipv4:
+        id: 11
+        port: xe2
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_5:
+      ipv4:
+        id: 12
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_6:
+      ipv4:
+        id: 13
+        port: xe2
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_6:
+      ipv4:
+        id: 14
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_7:
+      ipv4:
+        id: 15
+        port: xe2
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_7:
+      ipv4:
+        id: 16
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_8:
+      ipv4:
+        id: 17
+        port: xe4
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_8:
+      ipv4:
+        id: 18
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_9:
+      ipv4:
+        id: 19
+        port: xe4
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_9:
+      ipv4:
+        id: 20
+        port: xe5
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_10:
+      ipv4:
+        id: 21
+        port: xe4
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_10:
+      ipv4:
+        id: 22
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_11:
+      ipv4:
+        id: 23
+        port: xe4
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_11:
+      ipv4:
+        id: 24
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+
+uplink_12:
+      ipv4:
+        id: 25
+        port: xe6
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_12:
+      ipv4:
+        id: 26
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_13:
+      ipv4:
+        id: 27
+        port: xe6
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_13:
+      ipv4:
+        id: 28
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_14:
+      ipv4:
+        id: 29
+        port: xe6
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_14:
+      ipv4:
+        id: 30
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
+uplink_15:
+      ipv4:
+        id: 31
+        port: xe6
+        outer_l2:
+          framesize: *uplink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *uplink_precedence
+downlink_15:
+      ipv4:
+        id: 32
+        port: xe7
+        outer_l2:
+          framesize: *downlink_framesize
+
+        outer_l3v4:
+            priority:
+              tos:
+                precedence: *downlink_precedence
@@ -12,6 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+---
+{% set svlan_per_port = get(extra_args, 'svlans_per_port') %}
+{% set ports = get(extra_args, 'access_vports_num')|int %}
 schema: "nsb:traffic_profile:0.1"
 
 # This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator
@@ -19,14 +22,15 @@ schema: "nsb:traffic_profile:0.1"
 name:            rfc2544
 description:     Traffic profile to run RFC2544 latency
 traffic_profile:
-  traffic_type : IXIARFC2544Profile # defines traffic behavior - constant or look for highest possible throughput
-  frame_rate : 25%  # pc of linerate
+  traffic_type : IXIARFC2544PppoeScenarioProfile # defines traffic behavior - constant or look for highest possible throughput
+  frame_rate : 12.5%  # pc of linerate
   duration: {{ duration }}
   enable_latency: True
 
-uplink_0:
+{% for i in range(svlan_per_port|int * ports|int) %}
+uplink_{{ i }}:
       ipv4:
-        id: 1
+        id: {{ (i * 2) + 1 }}
         outer_l2:
           framesize:
             64B: "{{get(imix, 'imix.uplink.64B', '0') }}"
@@ -34,7 +38,7 @@ uplink_0:
             70B: "{{get(imix, 'imix.uplink.70B', '0') }}"
             128B: "{{get(imix, 'imix.uplink.128B', '0') }}"
             256B: "{{get(imix, 'imix.uplink.256B', '0') }}"
-            373b: "{{get(imix, 'imix.uplink.373B', '0') }}"
+            373B: "{{get(imix, 'imix.uplink.373B', '0') }}"
             512B: "{{get(imix, 'imix.uplink.512B', '0') }}"
             570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
             932B: "{{get(imix, 'imix.uplink.932B', '0') }}"
@@ -49,19 +53,10 @@ uplink_0:
         outer_l3v4:
             priority:
               tos:
-                # Precedence values:
-                # 0 - (000) Routine
-                # 1 - (001) Priority
-                # 2 - (010) Immediate
-                # 3 - (011) Flash
-                # 4 - (100) Flash Override
-                # 5 - (101) CRITIC/ECP
-                # 6 - (110) Internetwork Control
-                # 7 - (111) Network Control
                 precedence: [0, 4, 7]
-downlink_0:
+downlink_{{ i }}:
       ipv4:
-        id: 2
+        id: {{ (i * 2) + 2 }}
         outer_l2:
           framesize:
             64B: "{{get(imix, 'imix.downlink.64B', '0') }}"
@@ -69,59 +64,7 @@ downlink_0:
             70B: "{{get(imix, 'imix.downlink.70B', '0') }}"
             128B: "{{get(imix, 'imix.downlink.128B', '0') }}"
             256B: "{{get(imix, 'imix.downlink.256B', '0') }}"
-            373b: "{{get(imix, 'imix.downlink.373B', '0') }}"
-            512B: "{{get(imix, 'imix.downlink.512B', '0') }}"
-            570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
-            932B: "{{get(imix, 'imix.downlink.932B', '0') }}"
-            940B: "{{get(imix, 'imix.downlink.940B', '0') }}"
-            1024B: "{{get(imix, 'imix.downlink.1024B', '0') }}"
-            1280B: "{{get(imix, 'imix.downlink.1280B', '0') }}"
-            1400B: "{{get(imix, 'imix.downlink.1400B', '0') }}"
-            1470B: "{{get(imix, 'imix.downlink.1470B', '0') }}"
-            1500B: "{{get(imix, 'imix.downlink.1500B', '0') }}"
-            1518B: "{{get(imix, 'imix.downlink.1518B', '0') }}"
-
-        outer_l3v4:
-            priority:
-              tos:
-                precedence: [0, 4, 7]
-uplink_1:
-      ipv4:
-        id: 3
-        outer_l2:
-          framesize:
-            64B: "{{get(imix, 'imix.uplink.64B', '0') }}"
-            68B: "{{get(imix, 'imix.uplink.68B', '0') }}"
-            70B: "{{get(imix, 'imix.uplink.70B', '0') }}"
-            128B: "{{get(imix, 'imix.uplink.128B', '0') }}"
-            256B: "{{get(imix, 'imix.uplink.256B', '0') }}"
-            373b: "{{get(imix, 'imix.uplink.373B', '0') }}"
-            512B: "{{get(imix, 'imix.uplink.512B', '0') }}"
-            570B: "{{get(imix, 'imix.uplink.570B', '0') }}"
-            932B: "{{get(imix, 'imix.uplink.932B', '0') }}"
-            940B: "{{get(imix, 'imix.uplink.940B', '0') }}"
-            1024B: "{{get(imix, 'imix.uplink.1024B', '0') }}"
-            1280B: "{{get(imix, 'imix.uplink.1280B', '0') }}"
-            1400B: "{{get(imix, 'imix.uplink.1400B', '0') }}"
-            1470B: "{{get(imix, 'imix.uplink.1470B', '0') }}"
-            1500B: "{{get(imix, 'imix.uplink.1500B', '0') }}"
-            1518B: "{{get(imix, 'imix.uplink.1518B', '0') }}"
-
-        outer_l3v4:
-            priority:
-              tos:
-                precedence: [0, 4, 7]
-downlink_1:
-      ipv4:
-        id: 4
-        outer_l2:
-          framesize:
-            64B: "{{get(imix, 'imix.downlink.64B', '0') }}"
-            68B: "{{get(imix, 'imix.downlink.68B', '0') }}"
-            70B: "{{get(imix, 'imix.downlink.70B', '0') }}"
-            128B: "{{get(imix, 'imix.downlink.128B', '0') }}"
-            256B: "{{get(imix, 'imix.downlink.256B', '0') }}"
-            373b: "{{get(imix, 'imix.downlink.373B', '0') }}"
+            373B: "{{get(imix, 'imix.downlink.373B', '0') }}"
             512B: "{{get(imix, 'imix.downlink.512B', '0') }}"
             570B: "{{get(imix, 'imix.downlink.570B', '0') }}"
             932B: "{{get(imix, 'imix.downlink.932B', '0') }}"
@@ -137,3 +80,4 @@ downlink_1:
             priority:
               tos:
                 precedence: [0, 4, 7]
+{% endfor %}
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc094.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc094.yaml
new file mode 100644 (file)
index 0000000..afeb443
--- /dev/null
@@ -0,0 +1,94 @@
+# Copyright (c) 2018 Intel Corporation
+#
+# 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 tp = tp or "../../../samples/vnf_samples/traffic_profiles/prox_binsearch.yaml" %}
+{% set topology = topology or "../../../samples/vnf_samples/nsut/prox/prox-tg-topology-2.yaml" %}
+{% set vnf_config = vnf_config or "../../../samples/vnf_samples/nsut/prox/configs/handle_l2fwd-2.cfg" %}
+{% set tg_config = tg_config or "../../../samples/vnf_samples/nsut/prox/configs/gen_l2fwd-2.cfg" %}
+---
+schema: "yardstick:task:0.1"
+description: >
+    Yardstick NSB TC094 config file;
+    Measures network metrics such as Throughput and Latency of the DPDK
+    SampleVNF PROX application running on SUT based on RFC2544.
+scenarios:
+-
+  type: NSPerf
+  traffic_profile: {{ tp }}
+  topology: {{ topology }}
+
+  nodes:
+    tg__0: tg_0.yardstick
+    vnf__0: vnf_0.yardstick
+
+  options:
+    vnf__0:
+      collectd:
+        interval: 1
+      prox_path: /opt/nsb_bin/prox
+      prox_config: {{ vnf_config }}
+      prox_args:
+        "-t": ""
+
+    tg__0:
+      collectd:
+        interval: 1
+      prox_path: /opt/nsb_bin/prox
+      prox_config: {{ tg_config }}
+      prox_args:
+        "-e": ""
+        "-t": ""
+
+  runner:
+    type: Duration
+    duration: 300
+
+context:
+  name: yardstick
+  image: yardstick-samplevnfs
+  user: ubuntu
+  flavor:
+    vcpus: 10
+    ram: 20480
+    disk: 6
+    extra_specs:
+      hw:cpu_sockets: 1
+      hw:cpu_cores: 10
+      hw:cpu_threads: 1
+  placement_groups:
+    pgrp1:
+      policy: "availability"
+
+  servers:
+    vnf_0:
+      floating_ip: true
+      placement: "pgrp1"
+    tg_0:
+      floating_ip: true
+      placement: "pgrp1"
+
+  networks:
+    mgmt:
+      cidr: '10.0.1.0/24'
+    uplink_0:
+      cidr: '10.0.2.0/24'
+      gateway_ip: 'null'
+      port_security_enabled: False
+      enable_dhcp: 'false'
+    downlink_0:
+      cidr: '10.0.3.0/24'
+      gateway_ip: 'null'
+      port_security_enabled: False
+      enable_dhcp: 'false'
+
index 4c88f36..58ab06a 100644 (file)
@@ -96,6 +96,7 @@ def _worker_process(queue, cls, method_name, scenario_cfg,
             except Exception:  # pylint: disable=broad-except
                 errors = traceback.format_exc()
                 LOG.exception("")
+                raise
             else:
                 if result:
                     # add timeout for put so we don't block test
index b5e4172..4e7434c 100644 (file)
@@ -216,6 +216,14 @@ class IxNextgen(object):  # pragma: no cover
         """
         return self.ixnet.getAttribute(proto, '-sessionStatus')
 
+    def get_topology_device_groups(self, topology):
+        """Get list of device groups in topology
+
+        :param topology: (str) topology descriptor
+        :return: (list) list of device groups descriptors
+        """
+        return self.ixnet.getList(topology, 'deviceGroup')
+
     def is_traffic_running(self):
         """Returns true if traffic state == TRAFFIC_STATUS_STARTED"""
         return self._get_traffic_state() == TRAFFIC_STATUS_STARTED
@@ -406,7 +414,7 @@ class IxNextgen(object):  # pragma: no cover
         self._create_flow_groups(uplink_endpoints, downlink_endpoints)
         self._setup_config_elements()
 
-    def create_ipv4_traffic_model(self, uplink_topologies, downlink_topologies):
+    def create_ipv4_traffic_model(self, uplink_endpoints, downlink_endpoints):
         """Create a traffic item and the needed flow groups
 
         Each flow group inside the traffic item (only one is present)
@@ -418,7 +426,7 @@ class IxNextgen(object):  # pragma: no cover
             FlowGroup4: uplink2    <- downlink2
         """
         self._create_traffic_item('ipv4')
-        self._create_flow_groups(uplink_topologies, downlink_topologies)
+        self._create_flow_groups(uplink_endpoints, downlink_endpoints)
         self._setup_config_elements(False)
 
     def _update_frame_mac(self, ethernet_descriptor, field, mac_address):
index ea3f178..2fdf6ce 100644 (file)
@@ -36,7 +36,7 @@ class TrafficProfileConfig(object):
         self.description = tp_config.get('description')
         tprofile = tp_config['traffic_profile']
         self.traffic_type = tprofile.get('traffic_type')
-        self.frame_rate, self.rate_unit = self._parse_rate(
+        self.frame_rate, self.rate_unit = self.parse_rate(
             tprofile.get('frame_rate', self.DEFAULT_FRAME_RATE))
         self.test_precision = tprofile.get('test_precision')
         self.packet_sizes = tprofile.get('packet_sizes')
@@ -46,7 +46,7 @@ class TrafficProfileConfig(object):
         self.step_interval = tprofile.get('step_interval')
         self.enable_latency = tprofile.get('enable_latency', False)
 
-    def _parse_rate(self, rate):
+    def parse_rate(self, rate):
         """Parse traffic profile rate
 
         The line rate can be defined in fps or percentage over the maximum line
index 83d24a4..3503889 100644 (file)
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import logging
+import collections
 
 from yardstick.common import utils
 from yardstick.network_services.traffic_profile import base as tp_base
@@ -35,6 +36,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         super(IXIARFC2544Profile, self).__init__(yaml_data)
         self.rate = self.config.frame_rate
         self.rate_unit = self.config.rate_unit
+        self.full_profile = {}
 
     def _get_ip_and_mask(self, ip_range):
         _ip_range = ip_range.split('-')
@@ -78,6 +80,12 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
                 'outer_l4': {},
             }
 
+            frame_rate = value.get('frame_rate')
+            if frame_rate:
+                flow_rate, flow_rate_unit = self.config.parse_rate(frame_rate)
+                result[traffickey]['rate'] = flow_rate
+                result[traffickey]['rate_unit'] = flow_rate_unit
+
             outer_l2 = value.get('outer_l2')
             if outer_l2:
                 result[traffickey]['outer_l2'].update({
@@ -164,9 +172,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         first_run = self.first_run
         if self.first_run:
             self.first_run = False
-            self.full_profile = {}
             self.pg_id = 0
-            self.update_traffic_profile(traffic_generator)
             self.max_rate = self.rate
             self.min_rate = 0.0
         else:
@@ -237,3 +243,33 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         samples['latency_ns_max'] = latency_ns_max
 
         return completed, samples
+
+
+class IXIARFC2544PppoeScenarioProfile(IXIARFC2544Profile):
+    """Class handles BNG PPPoE scenario tests traffic profile"""
+
+    def __init__(self, yaml_data):
+        super(IXIARFC2544PppoeScenarioProfile, self).__init__(yaml_data)
+        self.full_profile = collections.OrderedDict()
+
+    def _get_flow_groups_params(self):
+        flows_data = [key for key in self.params.keys()
+                      if key.split('_')[0] in [self.UPLINK, self.DOWNLINK]]
+        for i in range(len(flows_data)):
+            uplink = '_'.join([self.UPLINK, str(i)])
+            downlink = '_'.join([self.DOWNLINK, str(i)])
+            if uplink in flows_data:
+                self.full_profile.update({uplink: self.params[uplink]})
+            if downlink in flows_data:
+                self.full_profile.update({downlink: self.params[downlink]})
+
+    def update_traffic_profile(self, traffic_generator):
+        def port_generator():
+            for vld_id, intfs in sorted(traffic_generator.networks.items()):
+                if not vld_id.startswith((self.UPLINK, self.DOWNLINK)):
+                    continue
+                for intf in intfs:
+                    yield traffic_generator.vnfd_helper.port_num(intf)
+
+        self._get_flow_groups_params()
+        self.ports = [port for port in port_generator()]
index ebe3ff7..8833b88 100644 (file)
@@ -180,7 +180,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
         """No actions/rules (flows) by default"""
         return None
 
-    def _build_pipeline_kwargs(self, cfg_file=None):
+    def _build_pipeline_kwargs(self, cfg_file=None, script=None):
         tool_path = self.ssh_helper.provision_tool(tool_file=self.APP_NAME)
         # count the number of actual ports in the list of pairs
         # remove duplicate ports
@@ -201,7 +201,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
 
         self.pipeline_kwargs = {
             'cfg_file': cfg_file if cfg_file else self.CFG_CONFIG,
-            'script': self.CFG_SCRIPT,
+            'script': script if script else self.CFG_SCRIPT,
             'port_mask_hex': ports_mask_hex,
             'tool_path': tool_path,
             'hwlb': hwlb,
index 4c13112..1d37f8f 100644 (file)
@@ -43,7 +43,8 @@ class IxiaBasicScenario(object):
     def apply_config(self):
         pass
 
-    def create_traffic_model(self):
+    def create_traffic_model(self, traffic_profile=None):
+        # pylint: disable=unused-argument
         vports = self.client.get_vports()
         self._uplink_vports = vports[::2]
         self._downlink_vports = vports[1::2]
@@ -71,6 +72,7 @@ class IxiaPppoeClientScenario(object):
         self._context_cfg = context_cfg
         self._ixia_cfg = ixia_cfg
         self.protocols = []
+        self.device_groups = []
 
     def apply_config(self):
         vports = self.client.get_vports()
@@ -80,9 +82,15 @@ class IxiaPppoeClientScenario(object):
         self._apply_access_network_config()
         self._apply_core_network_config()
 
-    def create_traffic_model(self):
-        self.client.create_ipv4_traffic_model(self._access_topologies,
-                                              self._core_topologies)
+    def create_traffic_model(self, traffic_profile):
+        endpoints_id_pairs = self._get_endpoints_src_dst_id_pairs(
+            traffic_profile.full_profile)
+        endpoints_obj_pairs = \
+            self._get_endpoints_src_dst_obj_pairs(endpoints_id_pairs)
+        uplink_endpoints = endpoints_obj_pairs[::2]
+        downlink_endpoints = endpoints_obj_pairs[1::2]
+        self.client.create_ipv4_traffic_model(uplink_endpoints,
+                                              downlink_endpoints)
 
     def run_protocols(self):
         LOG.info('PPPoE Scenario - Start Protocols')
@@ -116,6 +124,144 @@ class IxiaPppoeClientScenario(object):
                                       strict=False)
         return ip, ipaddr.prefixlen
 
+    @staticmethod
+    def _get_endpoints_src_dst_id_pairs(flows_params):
+        """Get list of flows src/dst port pairs
+
+        Create list of flows src/dst port pairs based on traffic profile
+        flows data. Each uplink/downlink pair in traffic profile represents
+        specific flows between the pair of ports.
+
+        Example ('port' key represents port on which flow will be created):
+
+        Input flows data:
+        uplink_0:
+          ipv4:
+            id: 1
+            port: xe0
+        downlink_0:
+          ipv4:
+            id: 2
+            port: xe1
+        uplink_1:
+          ipv4:
+            id: 3
+            port: xe2
+        downlink_1:
+          ipv4:
+            id: 4
+            port: xe3
+
+        Result list: ['xe0', 'xe1', 'xe2', 'xe3']
+
+        Result list means that the following flows pairs will be created:
+        - uplink 0: port xe0 <-> port xe1
+        - downlink 0: port xe1 <-> port xe0
+        - uplink 1: port xe2 <-> port xe3
+        - downlink 1: port xe3 <-> port xe2
+
+        :param flows_params: ordered dict of traffic profile flows params
+        :return: (list) list of flows src/dst ports
+        """
+        if len(flows_params) % 2:
+            raise RuntimeError('Number of uplink/downlink pairs'
+                               ' in traffic profile is not equal')
+        endpoint_pairs = []
+        for flow in flows_params:
+            port = flows_params[flow]['ipv4'].get('port')
+            if port is None:
+                continue
+            endpoint_pairs.append(port)
+        return endpoint_pairs
+
+    def _get_endpoints_src_dst_obj_pairs(self, endpoints_id_pairs):
+        """Create list of uplink/downlink device groups pairs
+
+        Based on traffic profile options, create list of uplink/downlink
+        device groups pairs between which flow groups will be created:
+
+        1. In case uplink/downlink flows in traffic profile doesn't have
+           specified 'port' key, flows will be created between each device
+           group on access port and device group on corresponding core port.
+           E.g.:
+           Device groups created on access port xe0: dg1, dg2, dg3
+           Device groups created on core port xe1: dg4
+           Flows will be created between:
+           dg1 -> dg4
+           dg4 -> dg1
+           dg2 -> dg4
+           dg4 -> dg2
+           dg3 -> dg4
+           dg4 -> dg3
+
+        2. In case uplink/downlink flows in traffic profile have specified
+           'port' key, flows will be created between device groups on this
+           port.
+           E.g., for the following traffic profile
+           uplink_0:
+             port: xe0
+           downlink_0:
+             port: xe1
+           uplink_1:
+             port: xe0
+           downlink_0:
+             port: xe3
+           Flows will be created between:
+           Port xe0 (dg1) -> Port xe1 (dg1)
+           Port xe1 (dg1) -> Port xe0 (dg1)
+           Port xe0 (dg2) -> Port xe3 (dg1)
+           Port xe3 (dg3) -> Port xe0 (dg1)
+
+        :param endpoints_id_pairs: (list) List of uplink/downlink flows ports
+         pairs
+        :return: (list) list of uplink/downlink device groups descriptors pairs
+        """
+        pppoe = self._ixia_cfg['pppoe_client']
+        sessions_per_port = pppoe['sessions_per_port']
+        sessions_per_svlan = pppoe['sessions_per_svlan']
+        svlan_count = int(sessions_per_port / sessions_per_svlan)
+
+        uplink_ports = [p['tg__0'] for p in self._ixia_cfg['flow']['src_ip']]
+        downlink_ports = [p['tg__0'] for p in self._ixia_cfg['flow']['dst_ip']]
+        uplink_port_topology_map = zip(uplink_ports, self._access_topologies)
+        downlink_port_topology_map = zip(downlink_ports, self._core_topologies)
+
+        port_to_dev_group_mapping = {}
+        for port, topology in uplink_port_topology_map:
+            topology_dgs = self.client.get_topology_device_groups(topology)
+            port_to_dev_group_mapping[port] = topology_dgs
+        for port, topology in downlink_port_topology_map:
+            topology_dgs = self.client.get_topology_device_groups(topology)
+            port_to_dev_group_mapping[port] = topology_dgs
+
+        uplink_endpoints = endpoints_id_pairs[::2]
+        downlink_endpoints = endpoints_id_pairs[1::2]
+
+        uplink_dev_groups = []
+        group_up = [uplink_endpoints[i:i + svlan_count]
+                    for i in range(0, len(uplink_endpoints), svlan_count)]
+
+        for group in group_up:
+            for i, port in enumerate(group):
+                uplink_dev_groups.append(port_to_dev_group_mapping[port][i])
+
+        downlink_dev_groups = []
+        for port in downlink_endpoints:
+            downlink_dev_groups.append(port_to_dev_group_mapping[port][0])
+
+        endpoint_obj_pairs = []
+        [endpoint_obj_pairs.extend([up, down])
+         for up, down in zip(uplink_dev_groups, downlink_dev_groups)]
+
+        if not endpoint_obj_pairs:
+            for up, down in zip(uplink_ports, downlink_ports):
+                uplink_dev_groups = port_to_dev_group_mapping[up]
+                downlink_dev_groups = \
+                    port_to_dev_group_mapping[down] * len(uplink_dev_groups)
+                [endpoint_obj_pairs.extend(list(i))
+                 for i in zip(uplink_dev_groups, downlink_dev_groups)]
+        return endpoint_obj_pairs
+
     def _fill_ixia_config(self):
         pppoe = self._ixia_cfg["pppoe_client"]
         ipv4 = self._ixia_cfg["ipv4_client"]
@@ -151,6 +297,7 @@ class IxiaPppoeClientScenario(object):
                 c_vlan = ixnet_api.Vlan(vlan_id=pppoe['c_vlan'], vlan_id_step=1)
                 name = 'SVLAN {}'.format(s_vlan_id)
                 dg = self.client.add_device_group(tp, name, sessions_per_svlan)
+                self.device_groups.append(dg)
                 # add ethernet layer to device group
                 ethernet = self.client.add_ethernet(dg, 'Ethernet')
                 self.protocols.append(ethernet)
@@ -181,6 +328,7 @@ class IxiaPppoeClientScenario(object):
             for dg_id in range(vlan_count):
                 name = 'Core port {}'.format(core_tp_id)
                 dg = self.client.add_device_group(tp, name, sessions_per_vlan)
+                self.device_groups.append(dg)
                 # add ethernet layer to device group
                 ethernet = self.client.add_ethernet(dg, 'Ethernet')
                 self.protocols.append(ethernet)
@@ -295,12 +443,12 @@ class IxiaResourceHelper(ClientResourceHelper):
             raise RuntimeError(
                 "IXIA config type '{}' not supported".format(ixia_config))
 
-    def _initialize_client(self):
+    def _initialize_client(self, traffic_profile):
         """Initialize the IXIA IxNetwork client and configure the server"""
         self.client.clear_config()
         self.client.assign_ports()
         self._ix_scenario.apply_config()
-        self._ix_scenario.create_traffic_model()
+        self._ix_scenario.create_traffic_model(traffic_profile)
 
     def run_traffic(self, traffic_profile, *args):
         if self._terminated.value:
@@ -312,7 +460,8 @@ class IxiaResourceHelper(ClientResourceHelper):
         default = "00:00:00:00:00:00"
 
         self._build_ports()
-        self._initialize_client()
+        traffic_profile.update_traffic_profile(self)
+        self._initialize_client(traffic_profile)
 
         mac = {}
         for port_name in self.vnfd_helper.port_pairs.all_ports:
index 349ef78..dd32213 100644 (file)
@@ -106,6 +106,7 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
         action_bulk_file = vnf_cfg.get('action_bulk_file', '/tmp/action_bulk_512.txt')
         full_tm_profile_file = vnf_cfg.get('full_tm_profile_file', '/tmp/full_tm_profile_10G.cfg')
         config_file = vnf_cfg.get('file', '/tmp/vpe_config')
+        script_file = vnf_cfg.get('script_file', None)
         vpe_vars = {
             "bin_path": self.ssh_helper.bin_path,
             "socket": self.socket,
@@ -113,8 +114,16 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
         self._build_vnf_ports()
         vpe_conf = ConfigCreate(self.vnfd_helper, self.socket)
 
+        if script_file is None:
+            # autogenerate vpe_script if not given
+            vpe_script = vpe_conf.generate_vpe_script(self.vnfd_helper.interfaces)
+            script_file = self.CFG_SCRIPT
+        else:
+            with utils.open_relative_file(script_file, task_path) as handle:
+                vpe_script = handle.read()
+
         config_basename = posixpath.basename(config_file)
-        script_basename = posixpath.basename(self.CFG_SCRIPT)
+        script_basename = posixpath.basename(script_file)
 
         with utils.open_relative_file(action_bulk_file, task_path) as handle:
             action_bulk = handle.read()
@@ -125,8 +134,6 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
         with utils.open_relative_file(config_file, task_path) as handle:
             vpe_config = handle.read()
 
-        # vpe_script needs to be autogenerated
-        vpe_script = vpe_conf.generate_vpe_script(self.vnfd_helper.interfaces)
         # upload the 4 config files to the target server
         self.ssh_helper.upload_config_file(config_basename, vpe_config.format(**vpe_vars))
         self.ssh_helper.upload_config_file(script_basename, vpe_script.format(**vpe_vars))
@@ -138,7 +145,8 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
         LOG.info("Provision and start the %s", self.APP_NAME)
         LOG.info(config_file)
         LOG.info(self.CFG_SCRIPT)
-        self._build_pipeline_kwargs(cfg_file='/tmp/' + config_basename)
+        self._build_pipeline_kwargs(cfg_file='/tmp/' + config_basename,
+                                    script='/tmp/' + script_basename)
         return self.PIPELINE_COMMAND.format(**self.pipeline_kwargs)
 
 
diff --git a/yardstick/tests/unit/benchmark/runner/test_iteration.py b/yardstick/tests/unit/benchmark/runner/test_iteration.py
new file mode 100644 (file)
index 0000000..783b236
--- /dev/null
@@ -0,0 +1,45 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import mock
+import unittest
+import multiprocessing
+from yardstick.benchmark.runners import iteration
+from yardstick.common import exceptions as y_exc
+
+
+class IterationRunnerTest(unittest.TestCase):
+    def setUp(self):
+        self.scenario_cfg = {
+            'runner': {'interval': 0, "duration": 0},
+            'type': 'some_type'
+        }
+
+        self.benchmark = mock.Mock()
+        self.benchmark_cls = mock.Mock(return_value=self.benchmark)
+
+    def _assert_defaults__worker_run_setup_and_teardown(self):
+        self.benchmark_cls.assert_called_once_with(self.scenario_cfg, {})
+        self.benchmark.setup.assert_called_once()
+
+    def _assert_defaults__worker_run_one_iteration(self):
+        self.benchmark.pre_run_wait_time.assert_called_once_with(0)
+        self.benchmark.my_method.assert_called_once_with({})
+
+    def test__worker_process_broad_exception(self):
+        self.benchmark.my_method = mock.Mock(
+            side_effect=y_exc.YardstickException)
+
+        with self.assertRaises(Exception):
+            iteration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method',
+                                 self.scenario_cfg, {},
+                                 multiprocessing.Event(), mock.Mock())
+
+        self._assert_defaults__worker_run_one_iteration()
+        self._assert_defaults__worker_run_setup_and_teardown()
index 0dc3e05..d9244e3 100644 (file)
@@ -95,18 +95,18 @@ class TrafficProfileConfigTestCase(unittest.TestCase):
     def test__parse_rate(self):
         tp_config = {'traffic_profile': {'packet_sizes': {'64B': 100}}}
         tp_config_obj = base.TrafficProfileConfig(tp_config)
-        self.assertEqual((100.0, 'fps'), tp_config_obj._parse_rate('100  '))
-        self.assertEqual((200.5, 'fps'), tp_config_obj._parse_rate('200.5'))
-        self.assertEqual((300.8, 'fps'), tp_config_obj._parse_rate('300.8fps'))
+        self.assertEqual((100.0, 'fps'), tp_config_obj.parse_rate('100  '))
+        self.assertEqual((200.5, 'fps'), tp_config_obj.parse_rate('200.5'))
+        self.assertEqual((300.8, 'fps'), tp_config_obj.parse_rate('300.8fps'))
         self.assertEqual((400.2, 'fps'),
-                         tp_config_obj._parse_rate('400.2 fps'))
-        self.assertEqual((500.3, '%'), tp_config_obj._parse_rate('500.3%'))
-        self.assertEqual((600.1, '%'), tp_config_obj._parse_rate('600.1 %'))
+                         tp_config_obj.parse_rate('400.2 fps'))
+        self.assertEqual((500.3, '%'), tp_config_obj.parse_rate('500.3%'))
+        self.assertEqual((600.1, '%'), tp_config_obj.parse_rate('600.1 %'))
 
     def test__parse_rate_exception(self):
         tp_config = {'traffic_profile': {'packet_sizes': {'64B': 100}}}
         tp_config_obj = base.TrafficProfileConfig(tp_config)
         with self.assertRaises(exceptions.TrafficProfileRate):
-            tp_config_obj._parse_rate('100Fps')
+            tp_config_obj.parse_rate('100Fps')
         with self.assertRaises(exceptions.TrafficProfileRate):
-            tp_config_obj._parse_rate('100 kbps')
+            tp_config_obj.parse_rate('100 kbps')
index 5b39b6c..ef16676 100644 (file)
@@ -16,6 +16,7 @@ import copy
 
 import mock
 import unittest
+import collections
 
 from yardstick.network_services.traffic_profile import ixia_rfc2544
 from yardstick.network_services.traffic_profile import trex_traffic_profile
@@ -511,9 +512,7 @@ class TestIXIARFC2544Profile(unittest.TestCase):
         with mock.patch.object(rfc2544_profile, '_get_ixia_traffic_profile') \
                 as mock_get_tp, \
                 mock.patch.object(rfc2544_profile, '_ixia_traffic_generate') \
-                as mock_tgenerate, \
-                mock.patch.object(rfc2544_profile, 'update_traffic_profile') \
-                as mock_update_tp:
+                as mock_tgenerate:
             mock_get_tp.return_value = 'fake_tprofile'
             output = rfc2544_profile.execute_traffic(mock.ANY,
                                                      ixia_obj=mock.ANY)
@@ -524,7 +523,6 @@ class TestIXIARFC2544Profile(unittest.TestCase):
         self.assertEqual(0, rfc2544_profile.min_rate)
         mock_get_tp.assert_called_once()
         mock_tgenerate.assert_called_once()
-        mock_update_tp.assert_called_once()
 
     def test_execute_traffic_not_first_run(self):
         rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
@@ -683,3 +681,37 @@ class TestIXIARFC2544Profile(unittest.TestCase):
         self.assertEqual(66.833, samples['RxThroughput'])
         self.assertEqual(0.099651, samples['DropPercentage'])
         self.assertEqual(33.45, rfc2544_profile.rate)
+
+
+class TestIXIARFC2544PppoeScenarioProfile(unittest.TestCase):
+
+    TRAFFIC_PROFILE = {
+        "schema": "nsb:traffic_profile:0.1",
+        "name": "fixed",
+        "description": "Fixed traffic profile to run UDP traffic",
+        "traffic_profile": {
+            "traffic_type": "FixedTraffic",
+            "frame_rate": 100},
+        'uplink_0': {'ipv4': {'port': 'xe0', 'id': 1}},
+        'downlink_0': {'ipv4': {'port': 'xe2', 'id': 2}},
+        'uplink_1': {'ipv4': {'port': 'xe1', 'id': 3}},
+        'downlink_1': {'ipv4': {'port': 'xe2', 'id': 4}}
+    }
+
+    def setUp(self):
+        self.ixia_tp = ixia_rfc2544.IXIARFC2544PppoeScenarioProfile(
+            self.TRAFFIC_PROFILE)
+
+    def test___init__(self):
+        self.assertIsInstance(self.ixia_tp.full_profile,
+                              collections.OrderedDict)
+
+    def test__get_flow_groups_params(self):
+        expected_tp = collections.OrderedDict([
+            ('uplink_0', {'ipv4': {'id': 1, 'port': 'xe0'}}),
+            ('downlink_0', {'ipv4': {'id': 2, 'port': 'xe2'}}),
+            ('uplink_1', {'ipv4': {'id': 3, 'port': 'xe1'}}),
+            ('downlink_1', {'ipv4': {'id': 4, 'port': 'xe2'}})])
+
+        self.ixia_tp._get_flow_groups_params()
+        self.assertDictEqual(self.ixia_tp.full_profile, expected_tp)
index e223988..65bf56f 100644 (file)
@@ -18,6 +18,7 @@ import mock
 import six
 import unittest
 import ipaddress
+from collections import OrderedDict
 
 from yardstick.common import utils
 from yardstick.common import exceptions
@@ -105,6 +106,7 @@ class TestIxiaResourceHelper(unittest.TestCase):
             ixia_rhelper.run_traffic(mock_tprofile)
 
         self.assertEqual('fake_samples', ixia_rhelper._queue.get())
+        mock_tprofile.update_traffic_profile.assert_called_once()
 
 
 @mock.patch.object(tg_rfc2544_ixia, 'ixnet_api')
@@ -524,12 +526,112 @@ class TestIxiaPppoeClientScenario(unittest.TestCase):
         mock_apply_core_net_cfg.assert_called_once()
         mock_apply_access_net_cfg.assert_called_once()
 
-    def test_create_traffic_model(self):
-        self.scenario._access_topologies = 'access'
-        self.scenario._core_topologies = 'core'
-        self.scenario.create_traffic_model()
+    @mock.patch.object(tg_rfc2544_ixia.IxiaPppoeClientScenario,
+                       '_get_endpoints_src_dst_id_pairs')
+    @mock.patch.object(tg_rfc2544_ixia.IxiaPppoeClientScenario,
+                       '_get_endpoints_src_dst_obj_pairs')
+    def test_create_traffic_model(self, mock_obj_pairs, mock_id_pairs):
+        uplink_endpoints = ['group1', 'group2']
+        downlink_endpoints = ['group3', 'group3']
+        mock_id_pairs.return_value = ['xe0', 'xe1', 'xe0', 'xe1']
+        mock_obj_pairs.return_value = ['group1', 'group3', 'group2', 'group3']
+        mock_tp = mock.Mock()
+        mock_tp.full_profile = {'uplink_0': 'data',
+                                'downlink_0': 'data',
+                                'uplink_1': 'data',
+                                'downlink_1': 'data'
+                                }
+        self.scenario.create_traffic_model(mock_tp)
+        mock_id_pairs.assert_called_once_with(mock_tp.full_profile)
+        mock_obj_pairs.assert_called_once_with(['xe0', 'xe1', 'xe0', 'xe1'])
         self.scenario.client.create_ipv4_traffic_model.assert_called_once_with(
-            'access', 'core')
+            uplink_endpoints, downlink_endpoints)
+
+    def test__get_endpoints_src_dst_id_pairs(self):
+        full_tp = OrderedDict([
+            ('uplink_0', {'ipv4': {'port': 'xe0'}}),
+            ('downlink_0', {'ipv4': {'port': 'xe1'}}),
+            ('uplink_1', {'ipv4': {'port': 'xe0'}}),
+            ('downlink_1', {'ipv4': {'port': 'xe3'}})])
+        endpoints_src_dst_pairs = ['xe0', 'xe1', 'xe0', 'xe3']
+        res = self.scenario._get_endpoints_src_dst_id_pairs(full_tp)
+        self.assertEqual(res, endpoints_src_dst_pairs)
+
+    def test__get_endpoints_src_dst_id_pairs_wrong_flows_number(self):
+        full_tp = OrderedDict([
+            ('uplink_0', {'ipv4': {'port': 'xe0'}}),
+            ('downlink_0', {'ipv4': {'port': 'xe1'}}),
+            ('uplink_1', {'ipv4': {'port': 'xe0'}})])
+        with self.assertRaises(RuntimeError):
+            self.scenario._get_endpoints_src_dst_id_pairs(full_tp)
+
+    def test__get_endpoints_src_dst_id_pairs_no_port_key(self):
+        full_tp = OrderedDict([
+            ('uplink_0', {'ipv4': {'id': 1}}),
+            ('downlink_0', {'ipv4': {'id': 2}})])
+        self.assertEqual(
+            self.scenario._get_endpoints_src_dst_id_pairs(full_tp), [])
+
+    def test__get_endpoints_src_dst_obj_pairs_tp_with_port_key(self):
+        endpoints_id_pairs = ['xe0', 'xe1',
+                              'xe0', 'xe1',
+                              'xe0', 'xe3',
+                              'xe0', 'xe3']
+        ixia_cfg = {
+            'pppoe_client': {
+                'sessions_per_port': 4,
+                'sessions_per_svlan': 1
+            },
+            'flow': {
+                'src_ip': [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}],
+                'dst_ip': [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}]
+            }
+        }
+
+        expected_result = ['tp1_dg1', 'tp3_dg1', 'tp1_dg2', 'tp3_dg1',
+                           'tp1_dg3', 'tp4_dg1', 'tp1_dg4', 'tp4_dg1']
+
+        self.scenario._ixia_cfg = ixia_cfg
+        self.scenario._access_topologies = ['topology1', 'topology2']
+        self.scenario._core_topologies = ['topology3', 'topology4']
+        self.mock_IxNextgen.get_topology_device_groups.side_effect = \
+            [['tp1_dg1', 'tp1_dg2', 'tp1_dg3', 'tp1_dg4'],
+             ['tp2_dg1', 'tp2_dg2', 'tp2_dg3', 'tp2_dg4'],
+             ['tp3_dg1'],
+             ['tp4_dg1']]
+        res = self.scenario._get_endpoints_src_dst_obj_pairs(
+            endpoints_id_pairs)
+        self.assertEqual(res, expected_result)
+
+    def test__get_endpoints_src_dst_obj_pairs_default_flows_mapping(self):
+        endpoints_id_pairs = []
+        ixia_cfg = {
+            'pppoe_client': {
+                'sessions_per_port': 4,
+                'sessions_per_svlan': 1
+            },
+            'flow': {
+                'src_ip': [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}],
+                'dst_ip': [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}]
+            }
+        }
+
+        expected_result = ['tp1_dg1', 'tp3_dg1', 'tp1_dg2', 'tp3_dg1',
+                           'tp1_dg3', 'tp3_dg1', 'tp1_dg4', 'tp3_dg1',
+                           'tp2_dg1', 'tp4_dg1', 'tp2_dg2', 'tp4_dg1',
+                           'tp2_dg3', 'tp4_dg1', 'tp2_dg4', 'tp4_dg1']
+
+        self.scenario._ixia_cfg = ixia_cfg
+        self.scenario._access_topologies = ['topology1', 'topology2']
+        self.scenario._core_topologies = ['topology3', 'topology4']
+        self.mock_IxNextgen.get_topology_device_groups.side_effect = \
+            [['tp1_dg1', 'tp1_dg2', 'tp1_dg3', 'tp1_dg4'],
+             ['tp2_dg1', 'tp2_dg2', 'tp2_dg3', 'tp2_dg4'],
+             ['tp3_dg1'],
+             ['tp4_dg1']]
+        res = self.scenario._get_endpoints_src_dst_obj_pairs(
+            endpoints_id_pairs)
+        self.assertEqual(res, expected_result)
 
     def test_run_protocols(self):
         self.scenario.client.is_protocols_running.return_value = True