aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries')
-rw-r--r--resources/libraries/bash/function/common.sh16
-rw-r--r--resources/libraries/bash/function/device.sh34
-rw-r--r--resources/libraries/python/topology.py28
-rw-r--r--resources/libraries/robot/performance/performance_configuration.robot18
-rw-r--r--resources/libraries/robot/shared/interfaces.robot50
5 files changed, 122 insertions, 24 deletions
diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh
index 751d994c09..a03e90422c 100644
--- a/resources/libraries/bash/function/common.sh
+++ b/resources/libraries/bash/function/common.sh
@@ -959,7 +959,7 @@ function select_vpp_device_tags () {
set -exuo pipefail
case "${TEST_CODE}" in
- # Select specific performance tests based on jenkins job type variable.
+ # Select specific device tests based on jenkins job type variable.
* )
if [[ -z "${TEST_TAG_STRING-}" ]]; then
# If nothing is specified, we will run pre-selected tests by
@@ -973,6 +973,20 @@ function select_vpp_device_tags () {
;;
esac
+ # Blacklisting certain tags per topology.
+ #
+ # Reasons for blacklisting:
+ # - avf - AVF is not possible to run on enic driver of VirtualBox.
+ # - vhost - VirtualBox does not support nesting virtualization on Intel CPU.
+ case "${TEST_CODE}" in
+ *"1n-vbox"*)
+ test_tag_array+=("!avf")
+ test_tag_array+=("!vhost")
+ ;;
+ *)
+ ;;
+ esac
+
TAGS=()
# We will prefix with devicetest to prevent running other tests
diff --git a/resources/libraries/bash/function/device.sh b/resources/libraries/bash/function/device.sh
index e31ead734a..ce88ec8c46 100644
--- a/resources/libraries/bash/function/device.sh
+++ b/resources/libraries/bash/function/device.sh
@@ -305,11 +305,13 @@ function get_available_interfaces () {
TG_PCIDEVS=()
TG_NETMACS=()
TG_DRIVERS=()
+ TG_VLANS=()
# DUT1 side of connections.
DUT1_NETDEVS=()
DUT1_PCIDEVS=()
DUT1_NETMACS=()
DUT1_DRIVERS=()
+ DUT1_VLANS=()
# Find the first ${device_count} number of available TG Linux network
# VF device names. Only allowed VF PCI IDs are filtered.
@@ -350,17 +352,21 @@ function get_available_interfaces () {
get_pci_addr
get_mac_addr
get_krn_driver
+ get_vlan_filter
TG_PCIDEVS+=(${PCI_ADDR})
TG_NETMACS+=(${MAC_ADDR})
TG_DRIVERS+=(${KRN_DRIVER})
+ TG_VLANS+=(${VLAN_ID})
done
for NETDEV in "${DUT1_NETDEVS[@]}"; do
get_pci_addr
get_mac_addr
get_krn_driver
+ get_vlan_filter
DUT1_PCIDEVS+=(${PCI_ADDR})
DUT1_NETMACS+=(${MAC_ADDR})
DUT1_DRIVERS+=(${KRN_DRIVER})
+ DUT1_VLANS+=(${VLAN_ID})
done
# We need at least two interfaces for TG/DUT1 for building topology.
@@ -433,6 +439,24 @@ function get_pci_addr () {
}
+function get_vlan_filter () {
+
+ # Get VLAN stripping filter from PF searched by mac adress.
+ #
+ # Variables read:
+ # - MAC_ADDR - MAC address of VF.
+ # Variables set:
+ # - VLAN_ID - VLAN ids.
+
+ set -exuo pipefail
+
+ # Sed regular expression pattern.
+ exp="s/^.*vlan ([[:digit:]]+).*$/\1/"
+ VLAN_ID=$(ip link | grep vlan | grep ${MAC_ADDR} | sed -re "${exp}") || true
+ VLAN_ID="${VLAN_ID:-0}"
+}
+
+
function installed () {
# Check if the given utility is installed. Fail if not installed.
@@ -481,12 +505,16 @@ function read_env_variables () {
DCR_UUIDS+=([dut1]="${CSIT_DUT1_UUID}")
TG_PCIDEVS=("${CSIT_TG_INTERFACES_PORT1_PCI}")
TG_DRIVERS=("${CSIT_TG_INTERFACES_PORT1_DRV}")
+ TG_VLANS+=("${CSIT_TG_INTERFACES_PORT1_VLAN}")
TG_PCIDEVS+=("${CSIT_TG_INTERFACES_PORT2_PCI}")
TG_DRIVERS+=("${CSIT_TG_INTERFACES_PORT2_DRV}")
+ TG_VLANS+=("${CSIT_TG_INTERFACES_PORT2_VLAN}")
DUT1_PCIDEVS=("${CSIT_DUT1_INTERFACES_PORT1_PCI}")
DUT1_DRIVERS=("${CSIT_DUT1_INTERFACES_PORT1_DRV}")
+ DUT1_VLANS+=("${CSIT_DUT1_INTERFACES_PORT1_VLAN}")
DUT1_PCIDEVS+=("${CSIT_DUT1_INTERFACES_PORT2_PCI}")
DUT1_DRIVERS+=("${CSIT_DUT1_INTERFACES_PORT2_DRV}")
+ DUT1_VLANS+=("${CSIT_DUT1_INTERFACES_PORT2_VLAN}")
}
@@ -527,15 +555,19 @@ function set_env_variables () {
CSIT_TG_INTERFACES_PORT1_MAC="${TG_NETMACS[0]}"
CSIT_TG_INTERFACES_PORT1_PCI="${TG_PCIDEVS[0]}"
CSIT_TG_INTERFACES_PORT1_DRV="${TG_DRIVERS[0]}"
+ CSIT_TG_INTERFACES_PORT1_VLAN="${TG_VLANS[0]}"
CSIT_TG_INTERFACES_PORT2_MAC="${TG_NETMACS[1]}"
CSIT_TG_INTERFACES_PORT2_PCI="${TG_PCIDEVS[1]}"
CSIT_TG_INTERFACES_PORT2_DRV="${TG_DRIVERS[1]}"
+ CSIT_TG_INTERFACES_PORT2_VLAN="${TG_VLANS[1]}"
CSIT_DUT1_INTERFACES_PORT1_MAC="${DUT1_NETMACS[0]}"
CSIT_DUT1_INTERFACES_PORT1_PCI="${DUT1_PCIDEVS[0]}"
CSIT_DUT1_INTERFACES_PORT1_DRV="${DUT1_DRIVERS[0]}"
+ CSIT_DUT1_INTERFACES_PORT1_VLAN="${DUT1_VLANS[0]}"
CSIT_DUT1_INTERFACES_PORT2_MAC="${DUT1_NETMACS[1]}"
CSIT_DUT1_INTERFACES_PORT2_PCI="${DUT1_PCIDEVS[1]}"
CSIT_DUT1_INTERFACES_PORT2_DRV="${DUT1_DRIVERS[1]}"
+ CSIT_DUT1_INTERFACES_PORT2_VLAN="${DUT1_VLANS[1]}"
set +a
}
@@ -577,8 +609,6 @@ function start_topology_containers () {
# Mount vfio to be able to bind to see binded interfaces. We cannot use
# --device=/dev/vfio as this does not see newly binded interfaces.
dcr_stc_params+="--volume /dev/vfio:/dev/vfio "
- # Mount nested_vm image to be able to run VM tests.
- dcr_stc_params+="--volume /var/lib/vm/vhost-nested.img:/var/lib/vm/vhost-nested.img "
# Mount docker.sock to be able to use docker deamon of the host.
dcr_stc_params+="--volume /var/run/docker.sock:/var/run/docker.sock "
# Mount /opt/boot/ where VM kernel and initrd are located.
diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py
index b06cf7dc4e..394dc9df58 100644
--- a/resources/libraries/python/topology.py
+++ b/resources/libraries/python/topology.py
@@ -198,6 +198,19 @@ class Topology(object):
node['interfaces'][iface_key]['pci_address'] = str(pci_address)
@staticmethod
+ def update_interface_vlan(node, iface_key, vlan):
+ """Update VLAN on the interface from the node.
+
+ :param node: Node to update VLAN on.
+ :param iface_key: Topology key of the interface.
+ :param vlan: VLAN ID.
+ :type node: dict
+ :type iface_key: str
+ :type vlan: str
+ """
+ node['interfaces'][iface_key]['vlan'] = int(vlan)
+
+ @staticmethod
def update_interface_vhost_socket(node, iface_key, vhost_socket):
"""Update vhost socket name on the interface from the node.
@@ -696,6 +709,21 @@ class Topology(object):
return None
@staticmethod
+ def get_interface_vlan(node, iface_key):
+ """Get interface vlan.
+
+ :param node: Node to get interface driver on.
+ :param iface_key: Interface key from topology file.
+ :type node: dict
+ :type iface_key: str
+ :returns: Return interface vlan or None if not found.
+ """
+ try:
+ return node['interfaces'][iface_key].get('vlan')
+ except KeyError:
+ return None
+
+ @staticmethod
def get_node_interfaces(node):
"""Get all node interfaces.
diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot
index 3f5538d3ad..6e65e26d8e 100644
--- a/resources/libraries/robot/performance/performance_configuration.robot
+++ b/resources/libraries/robot/performance/performance_configuration.robot
@@ -114,24 +114,6 @@
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2}
| | All VPP Interfaces Ready Wait | ${nodes}
-| Initialize AVF interfaces
-| | [Documentation]
-| | ... | Initialize AVF interfaces on each DUT. Interfaces are brought up.
-| | ...
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
-| | | ${if1_pci}= | Get Interface PCI Addr | ${nodes['${dut}']}
-| | | ... | ${${dut}_if1_vf0}
-| | | ${if2_pci}= | Get Interface PCI Addr | ${nodes['${dut}']}
-| | | ... | ${${dut}_if2_vf0}
-| | | ${dut_eth_vf_if1}= | VPP Create AVF Interface | ${nodes['${dut}']}
-| | | ... | ${if1_pci} | ${rxq_count_int}
-| | | ${dut_eth_vf_if2}= | VPP Create AVF Interface | ${nodes['${dut}']}
-| | | ... | ${if2_pci} | ${rxq_count_int}
-| | | Set Test Variable | ${${dut}_if1} | ${dut_eth_vf_if1}
-| | | Set Test Variable | ${${dut}_if2} | ${dut_eth_vf_if2}
-| | Set interfaces in path up
-
| Initialize IPSec in 3-node circular topology
| | [Documentation]
| | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot
index d24b2fba3c..50dec59442 100644
--- a/resources/libraries/robot/shared/interfaces.robot
+++ b/resources/libraries/robot/shared/interfaces.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -82,6 +82,44 @@
| | Set Test Variable | ${prev_layer} | if
| | Set interfaces in path up
+| Initialize layer avf on node
+| | [Documentation]
+| | ... | Initialize AVF interfaces on DUT. Interfaces are brought up.
+| | ...
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Initialize layer avf on node \| DUT1 \|
+| | ...
+| | [Arguments] | ${dut}
+| | ...
+| | ${dut_str}= | Convert To Lowercase | ${dut}
+| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1}
+| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2}
+| | Set Test Variable | ${${dut_str}_vlan1} | ${if1_vlan}
+| | Set Test Variable | ${${dut_str}_vlan2} | ${if2_vlan}
+| | ${if1_pci}= | Get Interface PCI Addr | ${nodes['${dut}']}
+| | ... | ${${dut}_if1_vf0}
+| | ${if2_pci}= | Get Interface PCI Addr | ${nodes['${dut}']}
+| | ... | ${${dut}_if2_vf0}
+| | ${dut_eth_vf_if1}= | VPP Create AVF Interface | ${nodes['${dut}']}
+| | ... | ${if1_pci} | ${rxq_count_int}
+| | ${dut_eth_vf_if2}= | VPP Create AVF Interface | ${nodes['${dut}']}
+| | ... | ${if2_pci} | ${rxq_count_int}
+| | Set Test Variable | ${${dut_str}_if1} | ${dut_eth_vf_if1}
+| | Set Test Variable | ${${dut_str}_if2} | ${dut_eth_vf_if2}
+
+| Initialize AVF interfaces
+| | [Documentation]
+| | ... | Initialize AVF interfaces on each DUT. Interfaces are brought up.
+| | ...
+| | :FOR | ${dut} | IN | @{duts}
+| | | Initialize layer avf on node | ${dut}
+| | Set Test Variable | ${prev_layer} | vf
+| | Set interfaces in path up
+
| Initialize layer bonding on node
| | [Documentation]
| | ... | Bonded interface and variables to be created on across east and
@@ -152,8 +190,14 @@
| | ...
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
-| | | ${if1_vlan}= | Evaluate | ${100} + ${id} - ${1}
-| | | ${if2_vlan}= | Evaluate | ${200} + ${id} - ${1}
+| | | ${if1_vlan}= | Run Keyword If | ${${dut_str}_vlan1}
+| | | ... | Set Variable | ${${dut_str}_vlan1}
+| | | ... | ELSE
+| | | ... | Evaluate | ${100} + ${id} - ${1}
+| | | ${if2_vlan}= | Run Keyword If | ${${dut_str}_vlan2}
+| | | ... | Set Variable | ${${dut_str}_vlan2}
+| | | ... | ELSE
+| | | ... | Evaluate | ${200} + ${id} - ${1}
| | | ${if1_name} | ${if1_index}= | Run Keyword If
| | | ... | ${create} or ${id} == ${1}
| | | ... | Create Vlan Subinterface