aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/report/index.html.template2
-rw-r--r--docs/report/index.pdf.template1
-rw-r--r--resources/libraries/python/Classify.py390
-rw-r--r--resources/libraries/python/Constants.py147
-rw-r--r--resources/libraries/python/ContainerUtils.py690
-rw-r--r--resources/libraries/python/Cop.py28
-rw-r--r--resources/libraries/python/CoreDumpUtil.py40
-rw-r--r--resources/libraries/python/CpuUtils.py139
-rw-r--r--resources/libraries/python/DMM/DMMConstants.py2
-rw-r--r--resources/libraries/python/DMM/SetupDMMTest.py2
-rw-r--r--resources/libraries/python/DMM/SingleCliSer.py2
-rw-r--r--resources/libraries/python/DPDK/DPDKTools.py53
-rw-r--r--resources/libraries/python/DPDK/L2fwdTest.py27
-rw-r--r--resources/libraries/python/DPDK/L3fwdTest.py58
-rw-r--r--resources/libraries/python/DUTSetup.py491
-rw-r--r--resources/libraries/python/Dhcp.py9
-rw-r--r--resources/libraries/python/DpdkUtil.py64
-rw-r--r--resources/libraries/python/DropRateSearch.py162
-rw-r--r--resources/libraries/python/FilteredLogger.py31
-rw-r--r--resources/libraries/python/GBP.py64
-rw-r--r--resources/libraries/python/HTTPRequest.py333
-rw-r--r--resources/libraries/python/IPUtil.py247
-rw-r--r--resources/libraries/python/IPsecUtil.py779
-rw-r--r--resources/libraries/python/IPv6Util.py27
-rw-r--r--resources/libraries/python/InterfaceUtil.py873
-rw-r--r--resources/libraries/python/KubernetesUtils.py330
-rw-r--r--resources/libraries/python/L2Util.py293
-rw-r--r--resources/libraries/python/LimitUtil.py18
-rw-r--r--resources/libraries/python/LispSetup.py510
-rw-r--r--resources/libraries/python/LispUtil.py272
-rw-r--r--resources/libraries/python/LoadBalancerUtil.py184
-rw-r--r--resources/libraries/python/LocalExecution.py20
-rw-r--r--resources/libraries/python/MLRsearch/AbstractMeasurer.py7
-rw-r--r--resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py7
-rw-r--r--resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py176
-rw-r--r--resources/libraries/python/MLRsearch/NdrPdrResult.py27
-rw-r--r--resources/libraries/python/MLRsearch/ReceiveRateInterval.py31
-rw-r--r--resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py16
-rw-r--r--resources/libraries/python/Memif.py59
-rw-r--r--resources/libraries/python/NATUtil.py52
-rw-r--r--resources/libraries/python/Namespaces.py44
-rw-r--r--resources/libraries/python/NodePath.py31
-rw-r--r--resources/libraries/python/OptionString.py41
-rw-r--r--resources/libraries/python/PLRsearch/Integrator.py59
-rw-r--r--resources/libraries/python/PLRsearch/PLRsearch.py204
-rw-r--r--resources/libraries/python/PLRsearch/log_plus.py20
-rw-r--r--resources/libraries/python/PLRsearch/stat_trackers.py73
-rw-r--r--resources/libraries/python/PacketVerifier.py79
-rw-r--r--resources/libraries/python/PapiExecutor.py278
-rw-r--r--resources/libraries/python/PapiHistory.py30
-rw-r--r--resources/libraries/python/Policer.py50
-rw-r--r--resources/libraries/python/PythonThree.py39
-rw-r--r--resources/libraries/python/QemuManager.py81
-rw-r--r--resources/libraries/python/QemuUtils.py539
-rw-r--r--resources/libraries/python/SRv6.py211
-rw-r--r--resources/libraries/python/SchedUtils.py47
-rw-r--r--resources/libraries/python/SetupFramework.py168
-rw-r--r--resources/libraries/python/SysctlUtil.py17
-rw-r--r--resources/libraries/python/TGSetup.py8
-rw-r--r--resources/libraries/python/TLDK/SetupTLDKTest.py2
-rw-r--r--resources/libraries/python/TLDK/TLDKConstants.py2
-rw-r--r--resources/libraries/python/TLDK/UdpTest.py2
-rw-r--r--resources/libraries/python/Tap.py61
-rw-r--r--resources/libraries/python/TestConfig.py313
-rw-r--r--resources/libraries/python/Trace.py14
-rw-r--r--resources/libraries/python/TrafficGenerator.py321
-rw-r--r--resources/libraries/python/TrafficScriptArg.py16
-rw-r--r--resources/libraries/python/TrafficScriptExecutor.py62
-rw-r--r--resources/libraries/python/VPPUtil.py122
-rw-r--r--resources/libraries/python/VatExecutor.py222
-rw-r--r--resources/libraries/python/VatJsonUtil.py109
-rw-r--r--resources/libraries/python/VhostUser.py49
-rw-r--r--resources/libraries/python/VppApiCrc.py72
-rw-r--r--resources/libraries/python/VppConfigGenerator.py227
-rw-r--r--resources/libraries/python/VppCounters.py81
-rw-r--r--resources/libraries/python/autogen/Regenerator.py227
-rw-r--r--resources/libraries/python/autogen/Testcase.py37
-rw-r--r--resources/libraries/python/parsers/JsonParser.py26
-rw-r--r--resources/libraries/python/ssh.py254
-rw-r--r--resources/libraries/python/tcp.py40
-rw-r--r--resources/libraries/python/telemetry/SPAN.py83
-rw-r--r--resources/libraries/python/telemetry/__init__.py16
-rw-r--r--resources/libraries/python/topology.py313
-rw-r--r--resources/libraries/robot/crypto/ipsec.robot40
-rw-r--r--resources/libraries/robot/dpdk/default.robot26
-rw-r--r--resources/libraries/robot/features/acl.robot70
-rw-r--r--resources/libraries/robot/features/gbp.robot28
-rw-r--r--resources/libraries/robot/features/policer.robot27
-rw-r--r--resources/libraries/robot/ip/ip4.robot122
-rw-r--r--resources/libraries/robot/ip/ip6.robot73
-rw-r--r--resources/libraries/robot/ip/nat.robot44
-rw-r--r--resources/libraries/robot/l2/l2_bridge_domain.robot312
-rw-r--r--resources/libraries/robot/l2/l2_patch.robot2
-rw-r--r--resources/libraries/robot/l2/l2_traffic.robot86
-rw-r--r--resources/libraries/robot/l2/l2_xconnect.robot125
-rw-r--r--resources/libraries/robot/l2/tagging.robot36
-rw-r--r--resources/libraries/robot/lb/load_balancer.robot64
-rw-r--r--resources/libraries/robot/overlay/lisp.robot32
-rw-r--r--resources/libraries/robot/overlay/lisp_api.robot172
-rw-r--r--resources/libraries/robot/overlay/lisp_static_adjacency.robot20
-rw-r--r--resources/libraries/robot/overlay/lispgpe.robot12
-rw-r--r--resources/libraries/robot/overlay/srv6.robot121
-rw-r--r--resources/libraries/robot/overlay/vxlan.robot10
-rw-r--r--resources/libraries/robot/performance/performance_configuration.robot50
-rw-r--r--resources/libraries/robot/performance/performance_limits.robot40
-rw-r--r--resources/libraries/robot/performance/performance_utils.robot179
-rw-r--r--resources/libraries/robot/shared/container.robot121
-rw-r--r--resources/libraries/robot/shared/default.robot98
-rw-r--r--resources/libraries/robot/shared/interfaces.robot225
-rw-r--r--resources/libraries/robot/shared/memif.robot26
-rw-r--r--resources/libraries/robot/shared/suite_setup.robot57
-rw-r--r--resources/libraries/robot/shared/suite_teardown.robot18
-rw-r--r--resources/libraries/robot/shared/test_setup.robot16
-rw-r--r--resources/libraries/robot/shared/test_teardown.robot45
-rw-r--r--resources/libraries/robot/shared/testing_path.robot96
-rw-r--r--resources/libraries/robot/shared/traffic.robot711
-rw-r--r--resources/libraries/robot/shared/vm.robot20
-rw-r--r--resources/libraries/robot/tcp/tcp_setup.robot14
-rw-r--r--resources/libraries/robot/wrk/wrk_utils.robot32
-rw-r--r--resources/test_data/lisp/api/lisp_api_resources.py140
-rw-r--r--resources/test_data/lisp/ipv4_ipsec_lispgpe_ipv4/ipv4_ipsec_lispgpe_ipv4.py58
-rw-r--r--resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py76
-rw-r--r--resources/test_data/lisp/ipv4_lispgpe_ipv6/ipv4_lispgpe_ipsec_ipv6.py64
-rw-r--r--resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py64
-rw-r--r--resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipsec_ipv6.py54
-rw-r--r--resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py60
-rw-r--r--resources/test_data/lisp/l2/l2_ipv4.py47
-rw-r--r--resources/test_data/lisp/l2/l2_ipv6.py47
-rw-r--r--resources/test_data/lisp/lisp.py122
-rw-r--r--resources/test_data/lisp/performance/lisp_static_adjacency.py220
-rw-r--r--resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py162
-rwxr-xr-xresources/tools/doc_gen/gen_rst.py88
-rw-r--r--resources/tools/doc_gen/src/conf.py56
-rw-r--r--resources/tools/integrated/check_crc.py53
-rwxr-xr-xresources/tools/papi/vpp_papi_provider.py116
-rw-r--r--resources/tools/presentation/environment.py2
-rw-r--r--resources/tools/presentation/generator_alerts.py2
-rw-r--r--resources/tools/presentation/input_data_parser.py2
-rw-r--r--resources/tools/presentation/specification_parser.py2
-rw-r--r--resources/tools/scripts/compare_perpatch.py61
-rwxr-xr-xresources/tools/scripts/topo_reservation.py59
-rwxr-xr-xresources/tools/topology/update_topology.py90
-rwxr-xr-xresources/tools/trex/trex_server_info.py8
-rwxr-xr-xresources/tools/trex/trex_stateless_profile.py188
-rwxr-xr-xresources/tools/trex/trex_stateless_stop.py45
-rw-r--r--resources/tools/wrk/wrk.py207
-rw-r--r--resources/tools/wrk/wrk_errors.py4
-rw-r--r--resources/tools/wrk/wrk_traffic_profile_parser.py150
-rwxr-xr-xresources/traffic_profiles/trex/profile_trex_stateless_base_class.py76
-rwxr-xr-xresources/traffic_scripts/arp_request.py120
-rwxr-xr-xresources/traffic_scripts/check_ra_packet.py103
-rwxr-xr-xresources/traffic_scripts/dhcp/check_dhcp_discover.py150
-rwxr-xr-xresources/traffic_scripts/dhcp/check_dhcp_request.py218
-rwxr-xr-xresources/traffic_scripts/dhcp/check_dhcp_request_ack.py132
-rwxr-xr-xresources/traffic_scripts/dhcp/send_and_check_proxy_discover.py79
-rwxr-xr-xresources/traffic_scripts/dhcp/send_and_check_proxy_messages.py299
-rwxr-xr-xresources/traffic_scripts/dhcp/send_dhcp_v6_messages.py372
-rwxr-xr-xresources/traffic_scripts/icmpv6_echo.py108
-rwxr-xr-xresources/traffic_scripts/icmpv6_echo_req_resp.py190
-rwxr-xr-xresources/traffic_scripts/ipsec.py158
-rwxr-xr-xresources/traffic_scripts/ipv4_ping_ttl_check.py145
-rwxr-xr-xresources/traffic_scripts/ipv4_sweep_ping.py112
-rwxr-xr-xresources/traffic_scripts/ipv6_nd_proxy_check.py207
-rwxr-xr-xresources/traffic_scripts/ipv6_ns.py112
-rwxr-xr-xresources/traffic_scripts/ipv6_sweep_ping.py120
-rwxr-xr-xresources/traffic_scripts/lisp/lisp_check.py123
-rwxr-xr-xresources/traffic_scripts/lisp/lispgpe_check.py128
-rwxr-xr-xresources/traffic_scripts/policer.py72
-rwxr-xr-xresources/traffic_scripts/send_gre_check_gre_headers.py124
-rwxr-xr-xresources/traffic_scripts/send_gre_check_icmp_headers.py86
-rwxr-xr-xresources/traffic_scripts/send_icmp_check_arp.py135
-rwxr-xr-xresources/traffic_scripts/send_icmp_check_gre_headers.py92
-rwxr-xr-xresources/traffic_scripts/send_icmp_check_headers.py153
-rwxr-xr-xresources/traffic_scripts/send_icmp_check_multipath.py142
-rwxr-xr-xresources/traffic_scripts/send_icmp_type_code.py132
-rwxr-xr-xresources/traffic_scripts/send_icmp_wait_for_reply.py116
-rwxr-xr-xresources/traffic_scripts/send_ip_check_headers.py108
-rwxr-xr-xresources/traffic_scripts/send_ip_icmp.py186
-rwxr-xr-xresources/traffic_scripts/send_ipv4_icmp_check_lw_4o6.py139
-rwxr-xr-xresources/traffic_scripts/send_ipv4_udp_check_lw_4o6.py136
-rwxr-xr-xresources/traffic_scripts/send_ipv4_udp_check_map_t.py132
-rwxr-xr-xresources/traffic_scripts/send_ipv6_udp_check_map_t.py135
-rwxr-xr-xresources/traffic_scripts/send_lw_4o6_check_hairpinning_udp.py145
-rwxr-xr-xresources/traffic_scripts/send_lw_4o6_check_ipv4_udp.py126
-rwxr-xr-xresources/traffic_scripts/send_rs_check_ra.py127
-rwxr-xr-xresources/traffic_scripts/send_tcp_udp.py127
-rwxr-xr-xresources/traffic_scripts/send_vxlan_check_vxlan.py91
-rw-r--r--resources/traffic_scripts/vxlan.py16
-rw-r--r--tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot14
-rw-r--r--tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot14
-rw-r--r--tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot14
-rw-r--r--tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot14
-rw-r--r--tests/dpdk/perf/__init__.robot8
-rwxr-xr-xtests/dpdk/perf/regenerate_testcases.py2
-rw-r--r--tests/vpp/device/__init__.robot10
-rw-r--r--tests/vpp/device/container_memif/eth2p-ethipv4-ip4base-eth-2memif-1dcr-dev.robot18
-rw-r--r--tests/vpp/device/container_memif/eth2p-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev.robot18
-rw-r--r--tests/vpp/device/container_memif/eth2p-ethipv4-l2xcbase-eth-2memif-1dcr-dev.robot18
-rw-r--r--tests/vpp/device/container_memif/eth2p-ethipv6-ip6base-eth-2memif-1dcr-dev.robot18
-rw-r--r--tests/vpp/device/crypto/eth2p-ethip4ipsec1tnlsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot20
-rw-r--r--tests/vpp/device/crypto/eth2p-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot20
-rw-r--r--tests/vpp/device/crypto/eth2p-ethip6ipsec1tnlsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot20
-rw-r--r--tests/vpp/device/crypto/eth2p-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot20
-rw-r--r--tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot16
-rw-r--r--tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-namespace-dev.robot16
-rw-r--r--tests/vpp/device/interfaces/eth2p-ethipv4-l2bdbasemaclrn-eth-2tap-dev.robot18
-rw-r--r--tests/vpp/device/ip4/eth2p-ethip4-ip4base-copblklistbase-dev.robot18
-rw-r--r--tests/vpp/device/ip4/eth2p-ethip4-ip4base-copwhtlistbase-dev.robot18
-rw-r--r--tests/vpp/device/ip4/eth2p-ethip4-ip4base-iacldstbase-dev.robot18
-rw-r--r--tests/vpp/device/ip4/eth2p-ethip4-ip4base-ipolicemarkbase-dev.robot18
-rw-r--r--tests/vpp/device/ip4/eth2p-ethipv4-ip4base-dev.robot16
-rw-r--r--tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2bdbasemaclrn-dev.robot18
-rw-r--r--tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2xcbase-dev.robot18
-rw-r--r--tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-dev.robot20
-rw-r--r--tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-dev.robot20
-rw-r--r--tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-dev.robot20
-rw-r--r--tests/vpp/device/ip6/eth2p-ethip6-ip6base-copblklistbase-dev.robot18
-rw-r--r--tests/vpp/device/ip6/eth2p-ethip6-ip6base-copwhtlistbase-dev.robot18
-rw-r--r--tests/vpp/device/ip6/eth2p-ethip6-ip6base-iacldstbase-dev.robot18
-rw-r--r--tests/vpp/device/ip6/eth2p-ethip6-ip6base-ipolicemarkbase-dev.robot18
-rw-r--r--tests/vpp/device/ip6/eth2p-ethipv6-ip6base-dev.robot18
-rw-r--r--tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-dev.robot20
-rw-r--r--tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-dev.robot20
-rw-r--r--tests/vpp/device/l2bd/eth2p-avf-dot1q-l2bdbasemaclrn-gbp-dev.robot18
-rw-r--r--tests/vpp/device/l2bd/eth2p-avf-dot1qip4-l2bdbasemaclrn-dev.robot18
-rw-r--r--tests/vpp/device/l2bd/eth2p-ethipv4-l2bdbasemaclrn-dev.robot18
-rw-r--r--tests/vpp/device/l2xc/eth2p-ethipv4-l2xcbase-dev.robot18
-rw-r--r--tests/vpp/device/vm_vhost/ip4/eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev.robot18
-rw-r--r--tests/vpp/device/vm_vhost/ip6/eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev.robot18
-rw-r--r--tests/vpp/device/vm_vhost/l2bd/eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev.robot18
-rw-r--r--tests/vpp/device/vm_vhost/l2xc/eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev.robot18
-rw-r--r--tests/vpp/func/__init__.robot5
-rw-r--r--tests/vpp/func/l2xc/eth2p-dot1ad-l2xcbase-func.robot2
-rw-r--r--tests/vpp/perf/__init__.robot10
-rw-r--r--tests/vpp/perf/container_memif/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/container_memif/2n1l-10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/container_memif/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot22
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot22
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr.robot20
-rwxr-xr-xtests/vpp/perf/crypto/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-avf-eth-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-dot1q-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-udpsrcscale15-nat44-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale10-udpsrcscale15-nat44-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale100-udpsrcscale15-nat44-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale1000-udpsrcscale15-nat44-ndrpdr.robot22
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale2000-udpsrcscale15-nat44-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale4000-udpsrcscale15-nat44-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot20
-rwxr-xr-xtests/vpp/perf/ip4/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale10l2bd10vlan10vxlan-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1kl2bd1kvlan1kvxlan-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip4-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip6-ip4base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2xcbase-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/ip4_tunnels/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-dot1q-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-dot1q-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/ip6/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip4-ip6base-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip6-ip6base-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/ip6_tunnels/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2patch-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-dot1ad-l2xcbase-ndrpdr.robot22
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100flows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2patch-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/l2/10ge2p1x710-eth-l2xcbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2patch-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2patch-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2xcbase-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/l2/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-l3dsr-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-maglev-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-nat4-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/lb/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr2t-vppip4-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr2t-vppip4-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/nfv_density/dcr_memif/chain/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr2t-vppip4-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/nfv_density/dcr_memif/pipeline/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm2t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm2t-vppip4-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/nfv_density/vm_vhost/chain/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm2t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm2t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm2t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm2t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm2t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm2t-testpmd-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf.robot18
-rw-r--r--tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm2t-testpmd-reconf.robot18
-rwxr-xr-xtests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr.robot23
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr.robot20
-rwxr-xr-xtests/vpp/perf/srv6/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-cps.robot12
-rw-r--r--tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-rps.robot12
-rwxr-xr-xtests/vpp/perf/tcp/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot20
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/vm_vhost/regenerate_testcases.py2
-rw-r--r--tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr.robot18
-rw-r--r--tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr.robot18
-rwxr-xr-xtests/vpp/perf/vts/regenerate_testcases.py2
697 files changed, 12567 insertions, 18711 deletions
diff --git a/docs/report/index.html.template b/docs/report/index.html.template
index 23b7e016db..24188c1887 100644
--- a/docs/report/index.html.template
+++ b/docs/report/index.html.template
@@ -77,7 +77,6 @@ CSIT-1908
detailed_test_results/vpp_performance_results/index
detailed_test_results/vpp_mrr_results/index
detailed_test_results/dpdk_performance_results/index
- detailed_test_results/vpp_functional_results/index
detailed_test_results/vpp_device_results_ubuntu/index
..
@@ -89,7 +88,6 @@ CSIT-1908
test_configuration/vpp_performance_configuration/index
test_configuration/vpp_mrr_configuration/index
- test_configuration/vpp_functional_configuration/index
test_configuration/vpp_device_configuration_ubuntu/index
.. toctree::
diff --git a/docs/report/index.pdf.template b/docs/report/index.pdf.template
index 2c2008147c..c01d83e803 100644
--- a/docs/report/index.pdf.template
+++ b/docs/report/index.pdf.template
@@ -8,5 +8,4 @@ CSIT-1908
vpp_performance_tests/index
dpdk_performance_tests/index
vpp_device_tests/index
- vpp_functional_tests/index
csit_framework_documentation/index
diff --git a/resources/libraries/python/Classify.py b/resources/libraries/python/Classify.py
index 6d4b84c1cc..4d05079eec 100644
--- a/resources/libraries/python/Classify.py
+++ b/resources/libraries/python/Classify.py
@@ -13,7 +13,6 @@
"""Classify utilities library."""
-import binascii
import re
from ipaddress import ip_address
@@ -21,16 +20,16 @@ from ipaddress import ip_address
from robot.api import logger
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.topology import Topology
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+from resources.libraries.python.topology import Topology
-class Classify(object):
+class Classify:
"""Classify utilities."""
@staticmethod
- def _build_mac_mask(dst_mac='', src_mac='', ether_type=''):
- """Build MAC ACL mask data in hexstring format.
+ def _build_mac_mask(dst_mac=u"", src_mac=u"", ether_type=u""):
+ """Build MAC ACL mask data in bytes format.
:param dst_mac: Source MAC address <0-ffffffffffff>.
:param src_mac: Destination MAC address <0-ffffffffffff>.
@@ -38,18 +37,19 @@ class Classify(object):
:type dst_mac: str
:type src_mac: str
:type ether_type: str
- :returns MAC ACL mask in hexstring format.
- :rtype: str
+ :returns MAC ACL mask in bytes format.
+ :rtype: bytes
"""
-
- return ('{!s:0>12}{!s:0>12}{!s:0>4}'.format(
- dst_mac.replace(':', ''), src_mac.replace(':', ''),
- ether_type)).decode('hex').rstrip('\0')
+ return bytes.fromhex(
+ f"{dst_mac.replace(u':', u'')!s:0>12}"
+ f"{src_mac.replace(u':', u'')!s:0>12}"
+ f"{ether_type!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
- def _build_ip_mask(proto='', src_ip='', dst_ip='', src_port='',
- dst_port=''):
- """Build IP ACL mask data in hexstring format.
+ def _build_ip_mask(
+ proto=u"", src_ip=u"", dst_ip=u"", src_port=u"", dst_port=u""):
+ """Build IP ACL mask data in bytes format.
:param proto: Protocol number <0-ff>.
:param src_ip: Source ip address <0-ffffffff>.
@@ -61,18 +61,18 @@ class Classify(object):
:type dst_ip: str
:type src_port: str
:type dst_port:src
- :returns: IP mask in hexstring format.
- :rtype: str
+ :returns: IP mask in bytes format.
+ :rtype: bytes
"""
-
- return ('{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}'.format(
- proto, src_ip, dst_ip, src_port, dst_port)).decode('hex').\
- rstrip('\0')
+ return bytes.fromhex(
+ f"{proto!s:0>20}{src_ip!s:0>12}{dst_ip!s:0>8}{src_port!s:0>4}"
+ f"{dst_port!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
- def _build_ip6_mask(next_hdr='', src_ip='', dst_ip='', src_port='',
- dst_port=''):
- """Build IPv6 ACL mask data in hexstring format.
+ def _build_ip6_mask(
+ next_hdr=u"", src_ip=u"", dst_ip=u"", src_port=u"", dst_port=u""):
+ """Build IPv6 ACL mask data in bytes format.
:param next_hdr: Next header number <0-ff>.
:param src_ip: Source ip address <0-ffffffff>.
@@ -84,17 +84,17 @@ class Classify(object):
:type dst_ip: str
:type src_port: str
:type dst_port: str
- :returns: IPv6 ACL mask in hexstring format.
- :rtype: str
+ :returns: IPv6 ACL mask in bytes format.
+ :rtype: bytes
"""
-
- return ('{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}'.format(
- next_hdr, src_ip, dst_ip, src_port, dst_port)).decode('hex').\
- rstrip('\0')
+ return bytes.fromhex(
+ f"{next_hdr!s:0>14}{src_ip!s:0>34}{dst_ip!s:0>32}{src_port!s:0>4}"
+ f"{dst_port!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
- def _build_mac_match(dst_mac='', src_mac='', ether_type=''):
- """Build MAC ACL match data in hexstring format.
+ def _build_mac_match(dst_mac=u"", src_mac=u"", ether_type=u""):
+ """Build MAC ACL match data in bytes format.
:param dst_mac: Source MAC address <x:x:x:x:x:x>.
:param src_mac: Destination MAC address <x:x:x:x:x:x>.
@@ -102,17 +102,19 @@ class Classify(object):
:type dst_mac: str
:type src_mac: str
:type ether_type: str
- :returns: MAC ACL match data in hexstring format.
- :rtype: str
+ :returns: MAC ACL match data in bytes format.
+ :rtype: bytes
"""
-
- return ('{!s:0>12}{!s:0>12}{!s:0>4}'.format(
- dst_mac.replace(':', ''), src_mac.replace(':', ''),
- ether_type)).decode('hex').rstrip('\0')
+ return bytes.fromhex(
+ f"{dst_mac.replace(u':', u'')!s:0>12}"
+ f"{src_mac.replace(u':', u'')!s:0>12}"
+ f"{ether_type!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
- def _build_ip_match(proto=0, src_ip='', dst_ip='', src_port=0, dst_port=0):
- """Build IP ACL match data in byte-string format.
+ def _build_ip_match(
+ proto=0, src_ip=4*b"\0", dst_ip=4*b"\0", src_port=0, dst_port=0):
+ """Build IP ACL match data in bytes format.
:param proto: Protocol number with valid option "x".
:param src_ip: Source ip address in packed format.
@@ -120,21 +122,22 @@ class Classify(object):
:param src_port: Source port number "x".
:param dst_port: Destination port number "x".
:type proto: int
- :type src_ip: str
- :type dst_ip: str
+ :type src_ip: bytes
+ :type dst_ip: bytes
:type src_port: int
:type dst_port: int
:returns: IP ACL match data in byte-string format.
:rtype: str
"""
-
- return ('{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}'.format(
- hex(proto)[2:], src_ip, dst_ip, hex(src_port)[2:],
- hex(dst_port)[2:])).decode('hex').rstrip('\0')
+ return bytes.fromhex(
+ f"{hex(proto)[2:]!s:0>20}{src_ip.hex()!s:0>12}{dst_ip.hex()!s:0>8}"
+ f"{hex(src_port)[2:]!s:0>4}{hex(dst_port)[2:]!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
- def _build_ip6_match(next_hdr=0, src_ip='', dst_ip='', src_port=0,
- dst_port=0):
+ def _build_ip6_match(
+ next_hdr=0, src_ip=16*b"\0", dst_ip=16*b"\0", src_port=0,
+ dst_port=0):
"""Build IPv6 ACL match data in byte-string format.
:param next_hdr: Next header number with valid option "x".
@@ -143,17 +146,18 @@ class Classify(object):
:param src_port: Source port number "x".
:param dst_port: Destination port number "x".
:type next_hdr: int
- :type src_ip: str
- :type dst_ip: str
+ :type src_ip: bytes
+ :type dst_ip: bytes
:type src_port: int
:type dst_port: int
- :returns: IPv6 ACL match data in byte-string format.
- :rtype: str
+ :returns: IPv6 ACL match data in bytes format.
+ :rtype: bytes
"""
-
- return ('{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}'.format(
- hex(next_hdr)[2:], src_ip, dst_ip, hex(src_port)[2:],
- hex(dst_port)[2:])).decode('hex').rstrip('\0')
+ return bytes.fromhex(
+ f"{hex(next_hdr)[2:]!s:0>14}{src_ip.hex()!s:0>34}"
+ f"{dst_ip.hex()!s:0>32}{hex(src_port)[2:]!s:0>4}"
+ f"{hex(dst_port)[2:]!s:0>4}"
+ ).rstrip(b'\0')
@staticmethod
def _classify_add_del_table(
@@ -191,7 +195,7 @@ class Classify(object):
(Default value = 0)
:type node: dict
:type is_add: int
- :type mask: str
+ :type mask: bytes
:type match_n_vectors: int
:type table_index: int
:type nbuckets: int
@@ -207,7 +211,7 @@ class Classify(object):
match_n: Number of match vectors.
:rtype: tuple(int, int, int)
"""
- cmd = 'classify_add_del_table'
+ cmd = u"classify_add_del_table"
args = dict(
is_add=is_add,
table_index=table_index,
@@ -222,14 +226,13 @@ class Classify(object):
mask_len=len(mask),
mask=mask
)
- err_msg = "Failed to create a classify table on host {host}".format(
- host=node['host'])
+ err_msg = f"Failed to create a classify table on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)
- return int(reply["new_table_index"]), int(reply["skip_n_vectors"]),\
- int(reply["match_n_vectors"])
+ return int(reply[u"new_table_index"]), int(reply[u"skip_n_vectors"]),\
+ int(reply[u"match_n_vectors"])
@staticmethod
def _classify_add_del_session(
@@ -267,14 +270,14 @@ class Classify(object):
:type node: dict
:type is_add: int
:type table_index: int
- :type match: str
+ :type match: bytes
:type opaque_index: int
:type hit_next_index: int
:type advance: int
:type action: int
:type metadata: int
"""
- cmd = 'classify_add_del_session'
+ cmd = u"classify_add_del_session"
args = dict(
is_add=is_add,
table_index=table_index,
@@ -286,8 +289,7 @@ class Classify(object):
match_len=len(match),
match=match
)
- err_msg = "Failed to create a classify session on host {host}".format(
- host=node['host'])
+ err_msg = f"Failed to create a classify session on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -303,15 +305,14 @@ class Classify(object):
:type rules: list
:type tag: str
"""
- cmd = "macip_acl_add"
+ cmd = u"macip_acl_add"
args = dict(
r=rules,
count=len(rules),
tag=tag
)
- err_msg = "Failed to create a classify session on host {host}".format(
- host=node['host'])
+ err_msg = f"Failed to add MACIP ACL on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -329,8 +330,8 @@ class Classify(object):
:type acl_type: str
:type acls: list
"""
- cmd = "acl_interface_set_acl_list"
- n_input = len(acls) if acl_type == "input" else 0
+ cmd = u"acl_interface_set_acl_list"
+ n_input = len(acls) if acl_type == u"input" else 0
args = dict(
sw_if_index=sw_if_index,
acls=acls,
@@ -338,8 +339,8 @@ class Classify(object):
count=len(acls)
)
- err_msg = "Failed to set acl list for interface {idx} on host {host}".\
- format(idx=sw_if_index, host=node['host'])
+ err_msg = f"Failed to set acl list for interface {sw_if_index} " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -357,7 +358,7 @@ class Classify(object):
:type rules: list
:type tag: str
"""
- cmd = "acl_add_replace"
+ cmd = u"acl_add_replace"
args = dict(
tag=tag.encode("utf-8"),
acl_index=4294967295 if acl_idx is None else acl_idx,
@@ -365,8 +366,7 @@ class Classify(object):
r=rules
)
- err_msg = "Failed to add/replace acls on host {host}".format(
- host=node['host'])
+ err_msg = f"Failed to add/replace ACLs on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -397,32 +397,30 @@ class Classify(object):
ip6=Classify._build_ip6_mask
)
- if ip_version == "ip4" or ip_version == "ip6":
- netmask = binascii.hexlify(ip_address(unicode(netmask)).packed)
+ if ip_version in (u"ip4", u"ip6"):
+ netmask = ip_address(netmask).packed
else:
- raise ValueError("IP version {ver} is not supported.".format(
- ver=ip_version))
+ raise ValueError(f"IP version {ip_version} is not supported.")
- if direction == "src":
- mask = mask_f[ip_version](src_ip=netmask)
- elif direction == "dst":
- mask = mask_f[ip_version](dst_ip=netmask)
+ if direction == u"src":
+ mask = mask_f[ip_version](src_ip=netmask.hex())
+ elif direction == u"dst":
+ mask = mask_f[ip_version](dst_ip=netmask.hex())
else:
- raise ValueError("Direction {dir} is not supported.".format(
- dir=direction))
+ raise ValueError(f"Direction {direction} is not supported.")
# Add l2 ethernet header to mask
- mask = 14 * '\0' + mask
+ mask = 14 * b'\0' + mask
# Get index of the first significant mask octet
- i = len(mask) - len(mask.lstrip('\0'))
+ i = len(mask) - len(mask.lstrip(b'\0'))
# Compute skip_n parameter
skip_n = i // 16
# Remove octets to be skipped from the mask
mask = mask[skip_n*16:]
# Pad mask to an even multiple of the vector size
- mask = mask + (16 - len(mask) % 16 if len(mask) % 16 else 0) * '\0'
+ mask = mask + (16 - len(mask) % 16 if len(mask) % 16 else 0) * b'\0'
# Compute match_n parameter
match_n = len(mask) // 16
@@ -473,27 +471,25 @@ class Classify(object):
deny=1
)
- if ip_version == "ip4" or ip_version == "ip6":
- address = binascii.hexlify(ip_address(unicode(address)).packed)
+ if ip_version in (u"ip4", u"ip6"):
+ address = ip_address(address).packed
else:
- raise ValueError("IP version {ver} is not supported.".format(
- ver=ip_version))
+ raise ValueError(f"IP version {ip_version} is not supported.")
- if direction == "src":
+ if direction == u"src":
match = match_f[ip_version](src_ip=address)
- elif direction == "dst":
+ elif direction == u"dst":
match = match_f[ip_version](dst_ip=address)
else:
- raise ValueError("Direction {dir} is not supported.".format(
- dir=direction))
+ raise ValueError(f"Direction {direction} is not supported.")
# Prepend match with l2 ethernet header part
- match = 14 * '\0' + match
+ match = 14 * b'\0' + match
# Pad match to match skip_n_vector + match_n_vector size
match = match + ((match_n + skip_n) * 16 - len(match)
if len(match) < (match_n + skip_n) * 16
- else 0) * '\0'
+ else 0) * b'\0'
Classify._classify_add_del_session(
node,
@@ -506,83 +502,6 @@ class Classify(object):
)
@staticmethod
- def compute_classify_hex_mask(ip_version, protocol, direction):
- """Compute classify hex mask for TCP or UDP packet matching.
-
- :param ip_version: Version of IP protocol.
- :param protocol: Type of protocol.
- :param direction: Traffic direction.
- :type ip_version: str
- :type protocol: str
- :type direction: str
- :returns: Classify hex mask.
- :rtype: str
- :raises ValueError: If protocol is not TCP or UDP.
- :raises ValueError: If direction is not source or destination or
- source + destination.
- """
- if protocol in ('TCP', 'UDP'):
- base_mask = Classify._compute_base_mask(ip_version)
-
- if direction == 'source':
- return base_mask + 'FFFF0000'
- elif direction == 'destination':
- return base_mask + '0000FFFF'
- elif direction == 'source + destination':
- return base_mask + 'FFFFFFFF'
- else:
- raise ValueError("Invalid direction!")
- else:
- raise ValueError("Invalid protocol!")
-
- @staticmethod
- def compute_classify_hex_value(hex_mask, source_port, destination_port):
- """Compute classify hex value for TCP or UDP packet matching.
-
- :param hex_mask: Classify hex mask.
- :param source_port: Source TCP/UDP port.
- :param destination_port: Destination TCP/UDP port.
- :type hex_mask: str
- :type source_port: str
- :type destination_port: str
- :returns: Classify hex value.
- :rtype: str
- """
- source_port_hex = Classify._port_convert(source_port)
- destination_port_hex = Classify._port_convert(destination_port)
-
- return hex_mask[:-8] + source_port_hex + destination_port_hex
-
- @staticmethod
- def _port_convert(port):
- """Convert port number for classify hex table format.
-
- :param port: TCP/UDP port number.
- :type port: str
- :returns: TCP/UDP port number in 4-digit hexadecimal format.
- :rtype: str
- """
- return '{0:04x}'.format(int(port))
-
- @staticmethod
- def _compute_base_mask(ip_version):
- """Compute base classify hex mask based on IP version.
-
- :param ip_version: Version of IP protocol.
- :type ip_version: str
- :returns: Base hex mask.
- :rtype: str
- """
- if ip_version == 'ip4':
- return 68 * '0'
- # base value of classify hex table for IPv4 TCP/UDP ports
- elif ip_version == 'ip6':
- return 108 * '0'
- # base value of classify hex table for IPv6 TCP/UDP ports
- else:
- raise ValueError("Invalid IP version!")
-
- @staticmethod
def get_classify_table_data(node, table_index):
"""Retrieve settings for classify table by ID.
@@ -593,9 +512,8 @@ class Classify(object):
:returns: Classify table settings.
:rtype: dict
"""
- cmd = 'classify_table_info'
- err_msg = "Failed to get 'classify_table_info' on host {host}".format(
- host=node['host'])
+ cmd = u"classify_table_info"
+ err_msg = f"Failed to get 'classify_table_info' on host {node[u'host']}"
args = dict(
table_id=int(table_index)
)
@@ -614,7 +532,7 @@ class Classify(object):
:returns: List of classify session settings.
:rtype: list or dict
"""
- cmd = "classify_session_dump"
+ cmd = u"classify_session_dump"
args = dict(
table_id=int(table_index)
)
@@ -633,7 +551,8 @@ class Classify(object):
:rtype: str
"""
return PapiSocketExecutor.run_cli_cmd(
- node, "show classify tables verbose")
+ node, u"show classify tables verbose"
+ )
@staticmethod
def vpp_log_plugin_acl_settings(node):
@@ -643,7 +562,7 @@ class Classify(object):
:param node: VPP node.
:type node: dict
"""
- PapiSocketExecutor.dump_and_log(node, ["acl_dump", ])
+ PapiSocketExecutor.dump_and_log(node, [u"acl_dump", ])
@staticmethod
def vpp_log_plugin_acl_interface_assignment(node):
@@ -653,7 +572,7 @@ class Classify(object):
:param node: VPP node.
:type node: dict
"""
- PapiSocketExecutor.dump_and_log(node, ["acl_interface_list_dump", ])
+ PapiSocketExecutor.dump_and_log(node, [u"acl_interface_list_dump", ])
@staticmethod
def set_acl_list_for_interface(node, interface, acl_type, acl_idx=None):
@@ -669,20 +588,19 @@ class Classify(object):
:type acl_type: str
:type acl_idx: list
"""
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = int(interface)
acls = acl_idx if isinstance(acl_idx, list) else list()
- Classify._acl_interface_set_acl_list(node=node,
- sw_if_index=sw_if_index,
- acl_type=acl_type,
- acls=acls)
+ Classify._acl_interface_set_acl_list(
+ node=node, sw_if_index=sw_if_index, acl_type=acl_type, acls=acls
+ )
@staticmethod
- def add_replace_acl_multi_entries(node, acl_idx=None, rules=None, tag=""):
+ def add_replace_acl_multi_entries(node, acl_idx=None, rules=None, tag=u""):
"""Add a new ACL or replace the existing one. To replace an existing
ACL, pass the ID of this ACL.
@@ -695,54 +613,54 @@ class Classify(object):
:type rules: str
:type tag: str
"""
- reg_ex_src_ip = re.compile(r'(src [0-9a-fA-F.:/\d{1,2}]*)')
- reg_ex_dst_ip = re.compile(r'(dst [0-9a-fA-F.:/\d{1,2}]*)')
- reg_ex_sport = re.compile(r'(sport \d{1,5})')
- reg_ex_dport = re.compile(r'(dport \d{1,5})')
- reg_ex_proto = re.compile(r'(proto \d{1,5})')
+ reg_ex_src_ip = re.compile(r"(src [0-9a-fA-F.:/\d{1,2}]*)")
+ reg_ex_dst_ip = re.compile(r"(dst [0-9a-fA-F.:/\d{1,2}]*)")
+ reg_ex_sport = re.compile(r"(sport \d{1,5})")
+ reg_ex_dport = re.compile(r"(dport \d{1,5})")
+ reg_ex_proto = re.compile(r"(proto \d{1,5})")
acl_rules = list()
- for rule in rules.split(", "):
+ for rule in rules.split(u", "):
acl_rule = dict()
- acl_rule["is_permit"] = 1 if "permit" in rule else 0
- acl_rule["is_ipv6"] = 1 if "ipv6" in rule else 0
+ acl_rule[u"is_permit"] = 1 if u"permit" in rule else 0
+ acl_rule[u"is_ipv6"] = 1 if u"ipv6" in rule else 0
groups = re.search(reg_ex_src_ip, rule)
if groups:
- grp = groups.group(1).split(' ')[1].split('/')
- acl_rule["src_ip_addr"] = ip_address(unicode(grp[0])).packed
- acl_rule["src_ip_prefix_len"] = int(grp[1])
+ grp = groups.group(1).split(u" ")[1].split(u"/")
+ acl_rule[u"src_ip_addr"] = ip_address(grp[0]).packed
+ acl_rule[u"src_ip_prefix_len"] = int(grp[1])
groups = re.search(reg_ex_dst_ip, rule)
if groups:
- grp = groups.group(1).split(' ')[1].split('/')
- acl_rule["dst_ip_addr"] = ip_address(unicode(grp[0])).packed
- acl_rule["dst_ip_prefix_len"] = int(grp[1])
+ grp = groups.group(1).split(u" ")[1].split(u"/")
+ acl_rule[u"dst_ip_addr"] = ip_address(grp[0]).packed
+ acl_rule[u"dst_ip_prefix_len"] = int(grp[1])
groups = re.search(reg_ex_sport, rule)
if groups:
- port = int(groups.group(1).split(' ')[1])
- acl_rule["srcport_or_icmptype_first"] = port
- acl_rule["srcport_or_icmptype_last"] = port
+ port = int(groups.group(1).split(u" ")[1])
+ acl_rule[u"srcport_or_icmptype_first"] = port
+ acl_rule[u"srcport_or_icmptype_last"] = port
else:
- acl_rule["srcport_or_icmptype_first"] = 0
- acl_rule["srcport_or_icmptype_last"] = 65535
+ acl_rule[u"srcport_or_icmptype_first"] = 0
+ acl_rule[u"srcport_or_icmptype_last"] = 65535
groups = re.search(reg_ex_dport, rule)
if groups:
- port = int(groups.group(1).split(' ')[1])
- acl_rule["dstport_or_icmpcode_first"] = port
- acl_rule["dstport_or_icmpcode_last"] = port
+ port = int(groups.group(1).split(u" ")[1])
+ acl_rule[u"dstport_or_icmpcode_first"] = port
+ acl_rule[u"dstport_or_icmpcode_last"] = port
else:
- acl_rule["dstport_or_icmpcode_first"] = 0
- acl_rule["dstport_or_icmpcode_last"] = 65535
+ acl_rule[u"dstport_or_icmpcode_first"] = 0
+ acl_rule[u"dstport_or_icmpcode_last"] = 65535
groups = re.search(reg_ex_proto, rule)
if groups:
proto = int(groups.group(1).split(' ')[1])
- acl_rule["proto"] = proto
+ acl_rule[u"proto"] = proto
else:
- acl_rule["proto"] = 0
+ acl_rule[u"proto"] = 0
acl_rules.append(acl_rule)
@@ -750,7 +668,7 @@ class Classify(object):
node, acl_idx=acl_idx, rules=acl_rules, tag=tag)
@staticmethod
- def add_macip_acl_multi_entries(node, rules=""):
+ def add_macip_acl_multi_entries(node, rules=u""):
"""Add a new MACIP ACL.
:param node: VPP node to set MACIP ACL on.
@@ -758,31 +676,31 @@ class Classify(object):
:type node: dict
:type rules: str
"""
- reg_ex_ip = re.compile(r'(ip [0-9a-fA-F.:/\d{1,2}]*)')
- reg_ex_mac = re.compile(r'(mac \S\S:\S\S:\S\S:\S\S:\S\S:\S\S)')
- reg_ex_mask = re.compile(r'(mask \S\S:\S\S:\S\S:\S\S:\S\S:\S\S)')
+ reg_ex_ip = re.compile(r"(ip [0-9a-fA-F.:/\d{1,2}]*)")
+ reg_ex_mac = re.compile(r"(mac \S\S:\S\S:\S\S:\S\S:\S\S:\S\S)")
+ reg_ex_mask = re.compile(r"(mask \S\S:\S\S:\S\S:\S\S:\S\S:\S\S)")
acl_rules = list()
- for rule in rules.split(", "):
+ for rule in rules.split(u", "):
acl_rule = dict()
- acl_rule["is_permit"] = 1 if "permit" in rule else 0
- acl_rule["is_ipv6"] = 1 if "ipv6" in rule else 0
+ acl_rule[u"is_permit"] = 1 if u"permit" in rule else 0
+ acl_rule[u"is_ipv6"] = 1 if u"ipv6" in rule else 0
groups = re.search(reg_ex_mac, rule)
if groups:
- mac = groups.group(1).split(' ')[1].replace(':', '')
- acl_rule["src_mac"] = binascii.unhexlify(unicode(mac))
+ mac = groups.group(1).split(u" ")[1].replace(u":", u"")
+ acl_rule[u"src_mac"] = bytes.fromhex(mac)
groups = re.search(reg_ex_mask, rule)
if groups:
- mask = groups.group(1).split(' ')[1].replace(':', '')
- acl_rule["src_mac_mask"] = binascii.unhexlify(unicode(mask))
+ mask = groups.group(1).split(u" ")[1].replace(u":", u"")
+ acl_rule[u"src_mac_mask"] = bytes.fromhex(mask)
groups = re.search(reg_ex_ip, rule)
if groups:
- grp = groups.group(1).split(' ')[1].split('/')
- acl_rule["src_ip_addr"] = ip_address(unicode(grp[0])).packed
- acl_rule["src_ip_prefix_len"] = int(grp[1])
+ grp = groups.group(1).split(u" ")[1].split(u"/")
+ acl_rule[u"src_ip_addr"] = ip_address((grp[0])).packed
+ acl_rule[u"src_ip_prefix_len"] = int(grp[1])
acl_rules.append(acl_rule)
@@ -796,7 +714,7 @@ class Classify(object):
:param node: VPP node.
:type node: dict
"""
- PapiSocketExecutor.dump_and_log(node, ["macip_acl_dump", ])
+ PapiSocketExecutor.dump_and_log(node, [u"macip_acl_dump", ])
@staticmethod
def add_del_macip_acl_interface(node, interface, action, acl_idx):
@@ -812,16 +730,15 @@ class Classify(object):
:type acl_idx: str or int
:raises RuntimeError: If unable to set MACIP ACL for the interface.
"""
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
- is_add = 1 if action == "add" else 0
+ is_add = 1 if action == u"add" else 0
- cmd = 'macip_acl_interface_add_del'
- err_msg = "Failed to get 'macip_acl_interface' on host {host}".format(
- host=node['host'])
+ cmd = u"macip_acl_interface_add_del"
+ err_msg = f"Failed to get 'macip_acl_interface' on host {node[u'host']}"
args = dict(
is_add=is_add,
sw_if_index=int(sw_if_index),
@@ -837,9 +754,8 @@ class Classify(object):
:param node: VPP node.
:type node: dict
"""
- cmd = 'macip_acl_interface_get'
- err_msg = "Failed to get 'macip_acl_interface' on host {host}".format(
- host=node['host'])
+ cmd = u"macip_acl_interface_get"
+ err_msg = f"Failed to get 'macip_acl_interface' on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
logger.info(reply)
diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py
index 3fa9ae28dc..eee9177a18 100644
--- a/resources/libraries/python/Constants.py
+++ b/resources/libraries/python/Constants.py
@@ -42,7 +42,7 @@ def get_str_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: str
"""
- prefixes = ("FDIO_CSIT_", "CSIT_", "")
+ prefixes = (u"FDIO_CSIT_", u"CSIT_", u"")
if not isinstance(env_var_names, (list, tuple)):
env_var_names = [env_var_names]
for name in env_var_names:
@@ -65,7 +65,7 @@ def get_int_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: int
"""
- env_str = get_str_from_env(env_var_names, "")
+ env_str = get_str_from_env(env_var_names, u"")
try:
return int(env_str)
except ValueError:
@@ -84,7 +84,7 @@ def get_float_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: float
"""
- env_str = get_str_from_env(env_var_names, "")
+ env_str = get_str_from_env(env_var_names, u"")
try:
return float(env_str)
except ValueError:
@@ -101,8 +101,8 @@ def get_pessimistic_bool_from_env(env_var_names):
:returns: The value read, or False.
:rtype: bool
"""
- env_str = get_str_from_env(env_var_names, "").lower()
- return True if env_str in ("true", "yes", "y", "1") else False
+ env_str = get_str_from_env(env_var_names, u"").lower()
+ return bool(env_str in (u"true", u"yes", u"y", u"1"))
def get_optimistic_bool_from_env(env_var_names):
@@ -115,11 +115,11 @@ def get_optimistic_bool_from_env(env_var_names):
:returns: The value read, or True.
:rtype: bool
"""
- env_str = get_str_from_env(env_var_names, "").lower()
- return False if env_str in ("false", "no", "n", "0") else True
+ env_str = get_str_from_env(env_var_names, u"").lower()
+ return bool(env_str not in (u"false", u"no", u"n", u"0"))
-class Constants(object):
+class Constants:
"""Constants used in CSIT.
TODO: Yaml files are easier for humans to edit.
@@ -128,34 +128,34 @@ class Constants(object):
"""
# OpenVPP testing directory location at topology nodes
- REMOTE_FW_DIR = '/tmp/openvpp-testing'
+ REMOTE_FW_DIR = u"/tmp/openvpp-testing"
# shell scripts location
- RESOURCES_LIB_SH = 'resources/libraries/bash'
+ RESOURCES_LIB_SH = u"resources/libraries/bash"
# Python API provider location
- RESOURCES_PAPI_PROVIDER = 'resources/tools/papi/vpp_papi_provider.py'
+ RESOURCES_PAPI_PROVIDER = u"resources/tools/papi/vpp_papi_provider.py"
# vat templates location
- RESOURCES_TPL_VAT = 'resources/templates/vat'
+ RESOURCES_TPL_VAT = u"resources/templates/vat"
# Kubernetes templates location
- RESOURCES_TPL_K8S = 'resources/templates/kubernetes'
+ RESOURCES_TPL_K8S = u"resources/templates/kubernetes"
# KernelVM templates location
- RESOURCES_TPL_VM = 'resources/templates/vm'
+ RESOURCES_TPL_VM = u"resources/templates/vm"
# Container templates location
- RESOURCES_TPL_CONTAINER = 'resources/templates/container'
+ RESOURCES_TPL_CONTAINER = u"resources/templates/container"
# HTTP Server www root directory
- RESOURCES_TP_WRK_WWW = 'resources/traffic_profiles/wrk/www'
+ RESOURCES_TP_WRK_WWW = u"resources/traffic_profiles/wrk/www"
# OpenVPP VAT binary name
- VAT_BIN_NAME = 'vpp_api_test'
+ VAT_BIN_NAME = u"vpp_api_test"
# VPP service unit name
- VPP_UNIT = 'vpp'
+ VPP_UNIT = u"vpp"
# Number of system CPU cores.
CPU_CNT_SYSTEM = 1
@@ -164,120 +164,122 @@ class Constants(object):
CPU_CNT_MAIN = 1
# QEMU binary path
- QEMU_BIN_PATH = '/usr/bin'
+ QEMU_BIN_PATH = u"/usr/bin"
# QEMU VM kernel image path
- QEMU_VM_KERNEL = '/opt/boot/vmlinuz'
+ QEMU_VM_KERNEL = u"/opt/boot/vmlinuz"
# QEMU VM kernel initrd path
- QEMU_VM_KERNEL_INITRD = '/opt/boot/initrd.img'
+ QEMU_VM_KERNEL_INITRD = u"/opt/boot/initrd.img"
# QEMU VM nested image path
- QEMU_VM_IMAGE = '/var/lib/vm/vhost-nested.img'
+ QEMU_VM_IMAGE = u"/var/lib/vm/vhost-nested.img"
# QEMU VM DPDK path
- QEMU_VM_DPDK = '/opt/dpdk-19.02'
+ QEMU_VM_DPDK = u"/opt/dpdk-19.02"
# Docker container SUT image
- DOCKER_SUT_IMAGE_UBUNTU = 'snergster/csit-sut:latest'
+ DOCKER_SUT_IMAGE_UBUNTU = u"snergster/csit-sut:latest"
# Docker container arm SUT image
- DOCKER_SUT_IMAGE_UBUNTU_ARM = 'snergster/csit-arm-sut:latest'
+ DOCKER_SUT_IMAGE_UBUNTU_ARM = u"snergster/csit-arm-sut:latest"
# TRex install directory
- TREX_INSTALL_DIR = '/opt/trex-core-2.61'
+ TREX_INSTALL_DIR = u"/opt/trex-core-2.61"
# Sysctl kernel.core_pattern
- KERNEL_CORE_PATTERN = '/tmp/%p-%u-%g-%s-%t-%h-%e.core'
+ KERNEL_CORE_PATTERN = u"/tmp/%p-%u-%g-%s-%t-%h-%e.core"
# Core dump directory
- CORE_DUMP_DIR = '/tmp'
+ CORE_DUMP_DIR = u"/tmp"
# Equivalent to ~0 used in vpp code
BITWISE_NON_ZERO = 0xffffffff
# Default path to VPP API socket.
- SOCKSVR_PATH = "/run/vpp/api.sock"
+ SOCKSVR_PATH = u"/run/vpp/api.sock"
# Number of trials to execute in MRR test.
- PERF_TRIAL_MULTIPLICITY = get_int_from_env("PERF_TRIAL_MULTIPLICITY", 10)
+ PERF_TRIAL_MULTIPLICITY = get_int_from_env(u"PERF_TRIAL_MULTIPLICITY", 10)
# Duration of one trial in MRR test.
- PERF_TRIAL_DURATION = get_float_from_env("PERF_TRIAL_DURATION", 1.0)
+ PERF_TRIAL_DURATION = get_float_from_env(u"PERF_TRIAL_DURATION", 1.0)
# UUID string of DUT1 /tmp volume created outside of the
# DUT1 docker in case of vpp-device test. ${EMPTY} value means that
# /tmp directory is inside the DUT1 docker.
- DUT1_UUID = get_str_from_env("DUT1_UUID", "")
+ DUT1_UUID = get_str_from_env(u"DUT1_UUID", u"")
# Default path to VPP API Stats socket.
- SOCKSTAT_PATH = "/run/vpp/stats.sock"
+ SOCKSTAT_PATH = u"/run/vpp/stats.sock"
# Global "kill switch" for CRC checking during runtime.
- FAIL_ON_CRC_MISMATCH = get_pessimistic_bool_from_env("FAIL_ON_CRC_MISMATCH")
+ FAIL_ON_CRC_MISMATCH = get_pessimistic_bool_from_env(
+ u"FAIL_ON_CRC_MISMATCH"
+ )
# Mapping from NIC name to its bps limit.
NIC_NAME_TO_BPS_LIMIT = {
- "Cisco-VIC-1227": 10000000000,
- "Cisco-VIC-1385": 24500000000,
- "Intel-X520-DA2": 10000000000,
- "Intel-X553": 10000000000,
- "Intel-X710": 10000000000,
- "Intel-XL710": 24500000000,
- "Intel-XXV710": 24500000000,
- "Mellanox-CX556A": 100000000000,
- "virtual": 100000000,
+ u"Cisco-VIC-1227": 10000000000,
+ u"Cisco-VIC-1385": 24500000000,
+ u"Intel-X520-DA2": 10000000000,
+ u"Intel-X553": 10000000000,
+ u"Intel-X710": 10000000000,
+ u"Intel-XL710": 24500000000,
+ u"Intel-XXV710": 24500000000,
+ u"Mellanox-CX556A": 100000000000,
+ u"virtual": 100000000,
}
# Mapping from NIC name to its pps limit.
NIC_NAME_TO_PPS_LIMIT = {
- "Cisco-VIC-1227": 14880952,
- "Cisco-VIC-1385": 18750000,
- "Intel-X520-DA2": 14880952,
- "Intel-X553": 14880952,
- "Intel-X710": 14880952,
- "Intel-XL710": 18750000,
- "Intel-XXV710": 18750000,
- "Mellanox-CX556A": 60000000, #148809523,
- "virtual": 14880952,
+ u"Cisco-VIC-1227": 14880952,
+ u"Cisco-VIC-1385": 18750000,
+ u"Intel-X520-DA2": 14880952,
+ u"Intel-X553": 14880952,
+ u"Intel-X710": 14880952,
+ u"Intel-XL710": 18750000,
+ u"Intel-XXV710": 18750000,
+ u"Mellanox-CX556A": 60000000, # 148809523,
+ u"virtual": 14880952,
}
# Suite file names use codes for NICs.
NIC_NAME_TO_CODE = {
- "Cisco-VIC-1227": "10ge2p1vic1227",
- "Cisco-VIC-1385": "40ge2p1vic1385",
- "Intel-X520-DA2": "10ge2p1x520",
- "Intel-X553": "10ge2p1x553",
- "Intel-X710": "10ge2p1x710",
- "Intel-XL710": "40ge2p1xl710",
- "Intel-XXV710": "25ge2p1xxv710",
- "Mellanox-CX556A": "100ge2p1cx556a",
+ u"Cisco-VIC-1227": u"10ge2p1vic1227",
+ u"Cisco-VIC-1385": u"40ge2p1vic1385",
+ u"Intel-X520-DA2": u"10ge2p1x520",
+ u"Intel-X553": u"10ge2p1x553",
+ u"Intel-X710": u"10ge2p1x710",
+ u"Intel-XL710": u"40ge2p1xl710",
+ u"Intel-XXV710": u"25ge2p1xxv710",
+ u"Mellanox-CX556A": u"100ge2p1cx556a",
}
# TODO CSIT-1481: Crypto HW should be read from topology file instead.
NIC_NAME_TO_CRYPTO_HW = {
- "Intel-X553": "HW_C3xxx",
- "Intel-X710": "HW_DH895xcc",
- "Intel-XL710": "HW_DH895xcc",
+ u"Intel-X553": u"HW_C3xxx",
+ u"Intel-X710": u"HW_DH895xcc",
+ u"Intel-XL710": u"HW_DH895xcc",
}
PERF_TYPE_TO_KEYWORD = {
- "mrr": "Traffic should pass with maximum rate",
- "ndrpdr": "Find NDR and PDR intervals using optimized search",
- "soak": "Find critical load using PLRsearch",
+ u"mrr": u"Traffic should pass with maximum rate",
+ u"ndrpdr": u"Find NDR and PDR intervals using optimized search",
+ u"soak": u"Find critical load using PLRsearch",
}
PERF_TYPE_TO_SUITE_DOC_VER = {
- "mrr" : '''fication:* In MaxReceivedRate tests TG sends traffic\\
+ u"mrr": u'''fication:* In MaxReceivedRate tests TG sends traffic\\
| ... | at line rate and reports total received packets over trial period.\\''',
# TODO: Figure out how to include the full "*[Ver] TG verification:*"
# while keeping this readable and without breaking line length limit.
- "ndrpdr": '''fication:* TG finds and reports throughput NDR (Non Drop\\
+ u"ndrpdr": u'''ication:* TG finds and reports throughput NDR (Non Drop\\
| ... | Rate) with zero packet loss tolerance and throughput PDR (Partial Drop\\
| ... | Rate) with non-zero packet loss tolerance (LT) expressed in percentage\\
| ... | of packets transmitted. NDR and PDR are discovered for different\\
| ... | Ethernet L2 frame sizes using MLRsearch library.\\''',
- "soak": '''fication:* TG sends traffic at dynamically computed\\
+ u"soak": u'''fication:* TG sends traffic at dynamically computed\\
| ... | rate as PLRsearch algorithm gathers data and improves its estimate\\
| ... | of a rate at which a prescribed small fraction of packets\\
| ... | would be lost. After set time, the serarch stops\\
@@ -285,9 +287,8 @@ class Constants(object):
}
PERF_TYPE_TO_TEMPLATE_DOC_VER = {
- "mrr": '''Measure MaxReceivedRate for ${frame_size}B frames\\
+ u"mrr": u'''Measure MaxReceivedRate for ${frame_size}B frames\\
| | ... | using burst trials throughput test.\\''',
- "ndrpdr": '''Measure NDR and PDR values using MLRsearch algorithm.\\''',
- "soak": '''Estimate critical rate using PLRsearch algorithm.\\''',
+ u"ndrpdr": u"Measure NDR and PDR values using MLRsearch algorithm.\\",
+ u"soak": u"Estimate critical rate using PLRsearch algorithm.\\",
}
-
diff --git a/resources/libraries/python/ContainerUtils.py b/resources/libraries/python/ContainerUtils.py
index b552e4d9e6..fc61eea3bd 100644
--- a/resources/libraries/python/ContainerUtils.py
+++ b/resources/libraries/python/ContainerUtils.py
@@ -16,21 +16,24 @@
"""Library to manipulate Containers."""
-from string import Template
from collections import OrderedDict, Counter
+from io import open
+from string import Template
-from resources.libraries.python.ssh import SSH
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.ssh import SSH
from resources.libraries.python.topology import Topology, SocketType
from resources.libraries.python.VppConfigGenerator import VppConfigGenerator
-__all__ = ["ContainerManager", "ContainerEngine", "LXC", "Docker", "Container"]
+__all__ = [
+ u"ContainerManager", u"ContainerEngine", u"LXC", u"Docker", u"Container"
+]
-SUPERVISOR_CONF = '/etc/supervisor/supervisord.conf'
+SUPERVISOR_CONF = u"/etc/supervisor/supervisord.conf"
-class ContainerManager(object):
+class ContainerManager:
"""Container lifecycle management class."""
def __init__(self, engine):
@@ -43,8 +46,7 @@ class ContainerManager(object):
try:
self.engine = globals()[engine]()
except KeyError:
- raise NotImplementedError('{engine} is not implemented.'.
- format(engine=engine))
+ raise NotImplementedError(f"{engine} is not implemented.")
self.containers = OrderedDict()
def get_container_by_name(self, name):
@@ -59,8 +61,7 @@ class ContainerManager(object):
try:
return self.containers[name]
except KeyError:
- raise RuntimeError('Failed to get container with name: {name}'.
- format(name=name))
+ raise RuntimeError(f"Failed to get container with name: {name}")
def construct_container(self, **kwargs):
"""Construct container object on node with specified parameters.
@@ -75,11 +76,13 @@ class ContainerManager(object):
setattr(self.engine.container, key, kwargs[key])
# Set additional environmental variables
- setattr(self.engine.container, 'env',
- 'MICROSERVICE_LABEL={label}'.format(label=kwargs['name']))
+ setattr(
+ self.engine.container, u"env",
+ f"MICROSERVICE_LABEL={kwargs[u'name']}"
+ )
# Store container instance
- self.containers[kwargs['name']] = self.engine.container
+ self.containers[kwargs[u"name"]] = self.engine.container
def construct_containers(self, **kwargs):
"""Construct 1..N container(s) on node with specified name.
@@ -90,10 +93,10 @@ class ContainerManager(object):
:param kwargs: Named parameters.
:param kwargs: dict
"""
- name = kwargs['name']
- for i in range(kwargs['count']):
+ name = kwargs[u"name"]
+ for i in range(kwargs[u"count"]):
# Name will contain ordinal suffix
- kwargs['name'] = ''.join([name, str(i+1)])
+ kwargs[u"name"] = u"".join([name, str(i+1)])
# Create container
self.construct_container(i=i, **kwargs)
@@ -163,9 +166,15 @@ class ContainerManager(object):
:param kwargs: dict
"""
# Count number of DUTs based on node's host information
- dut_cnt = len(Counter([self.containers[container].node['host']
- for container in self.containers]))
- mod = len(self.containers)/dut_cnt
+ dut_cnt = len(
+ Counter(
+ [
+ self.containers[container].node[u"host"]
+ for container in self.containers
+ ]
+ )
+ )
+ mod = len(self.containers) // dut_cnt
for i, container in enumerate(self.containers):
mid1 = i % mod + 1
@@ -173,36 +182,37 @@ class ContainerManager(object):
sid1 = i % mod * 2 + 1
sid2 = i % mod * 2 + 2
self.engine.container = self.containers[container]
- guest_dir = self.engine.container.mnt[0].split(':')[1]
-
- if chain_topology == 'chain':
- self._configure_vpp_chain_l2xc(mid1=mid1, mid2=mid2,
- sid1=sid1, sid2=sid2,
- guest_dir=guest_dir,
- **kwargs)
- elif chain_topology == 'cross_horiz':
- self._configure_vpp_cross_horiz(mid1=mid1, mid2=mid2,
- sid1=sid1, sid2=sid2,
- guest_dir=guest_dir,
- **kwargs)
- elif chain_topology == 'chain_functional':
- self._configure_vpp_chain_functional(mid1=mid1, mid2=mid2,
- sid1=sid1, sid2=sid2,
- guest_dir=guest_dir,
- **kwargs)
- elif chain_topology == 'chain_ip4':
- self._configure_vpp_chain_ip4(mid1=mid1, mid2=mid2,
- sid1=sid1, sid2=sid2,
- guest_dir=guest_dir,
- **kwargs)
- elif chain_topology == 'pipeline_ip4':
- self._configure_vpp_pipeline_ip4(mid1=mid1, mid2=mid2,
- sid1=sid1, sid2=sid2,
- guest_dir=guest_dir,
- **kwargs)
+ guest_dir = self.engine.container.mnt[0].split(u":")[1]
+
+ if chain_topology == u"chain":
+ self._configure_vpp_chain_l2xc(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
+ elif chain_topology == u"cross_horiz":
+ self._configure_vpp_cross_horiz(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
+ elif chain_topology == u"chain_functional":
+ self._configure_vpp_chain_functional(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
+ elif chain_topology == u"chain_ip4":
+ self._configure_vpp_chain_ip4(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
+ elif chain_topology == u"pipeline_ip4":
+ self._configure_vpp_pipeline_ip4(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
else:
- raise RuntimeError('Container topology {name} not implemented'.
- format(name=chain_topology))
+ raise RuntimeError(
+ f"Container topology {chain_topology} not implemented"
+ )
def _configure_vpp_chain_l2xc(self, **kwargs):
"""Configure VPP in chain topology with l2xc.
@@ -212,13 +222,14 @@ class ContainerManager(object):
"""
self.engine.create_vpp_startup_config()
self.engine.create_vpp_exec_config(
- 'memif_create_chain_l2xc.exec',
- mid1=kwargs['mid1'], mid2=kwargs['mid2'],
- sid1=kwargs['sid1'], sid2=kwargs['sid2'],
- socket1='{guest_dir}/memif-{c.name}-{sid1}'.
- format(c=self.engine.container, **kwargs),
- socket2='{guest_dir}/memif-{c.name}-{sid2}'.
- format(c=self.engine.container, **kwargs))
+ u"memif_create_chain_l2xc.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}",
+ socket2=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid2']}"
+ )
def _configure_vpp_cross_horiz(self, **kwargs):
"""Configure VPP in cross horizontal topology (single memif).
@@ -226,22 +237,23 @@ class ContainerManager(object):
:param kwargs: Named parameters.
:param kwargs: dict
"""
- if 'DUT1' in self.engine.container.name:
+ if u"DUT1" in self.engine.container.name:
if_pci = Topology.get_interface_pci_addr(
- self.engine.container.node, kwargs['dut1_if'])
+ self.engine.container.node, kwargs[u"dut1_if"])
if_name = Topology.get_interface_name(
- self.engine.container.node, kwargs['dut1_if'])
- if 'DUT2' in self.engine.container.name:
+ self.engine.container.node, kwargs[u"dut1_if"])
+ if u"DUT2" in self.engine.container.name:
if_pci = Topology.get_interface_pci_addr(
- self.engine.container.node, kwargs['dut2_if'])
+ self.engine.container.node, kwargs[u"dut2_if"])
if_name = Topology.get_interface_name(
- self.engine.container.node, kwargs['dut2_if'])
+ self.engine.container.node, kwargs[u"dut2_if"])
self.engine.create_vpp_startup_config_dpdk_dev(if_pci)
self.engine.create_vpp_exec_config(
- 'memif_create_cross_horizon.exec',
- mid1=kwargs['mid1'], sid1=kwargs['sid1'], if_name=if_name,
- socket1='{guest_dir}/memif-{c.name}-{sid1}'.
- format(c=self.engine.container, **kwargs))
+ u"memif_create_cross_horizon.exec",
+ mid1=kwargs[u"mid1"], sid1=kwargs[u"sid1"], if_name=if_name,
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}"
+ )
def _configure_vpp_chain_functional(self, **kwargs):
"""Configure VPP in chain topology with l2xc (functional).
@@ -251,14 +263,15 @@ class ContainerManager(object):
"""
self.engine.create_vpp_startup_config_func_dev()
self.engine.create_vpp_exec_config(
- 'memif_create_chain_functional.exec',
- mid1=kwargs['mid1'], mid2=kwargs['mid2'],
- sid1=kwargs['sid1'], sid2=kwargs['sid2'],
- socket1='{guest_dir}/memif-{c.name}-{sid1}'.
- format(c=self.engine.container, **kwargs),
- socket2='{guest_dir}/memif-{c.name}-{sid2}'.
- format(c=self.engine.container, **kwargs),
- rx_mode='interrupt')
+ u"memif_create_chain_functional.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}",
+ socket2=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid2']}",
+ rx_mode=u"interrupt"
+ )
def _configure_vpp_chain_ip4(self, **kwargs):
"""Configure VPP in chain topology with ip4.
@@ -268,23 +281,24 @@ class ContainerManager(object):
"""
self.engine.create_vpp_startup_config()
- vif1_mac = kwargs['tg_if1_mac'] \
- if (kwargs['mid1'] - 1) % kwargs['nodes'] + 1 == 1 \
- else '52:54:00:00:{0:02X}:02'.format(kwargs['mid1'] - 1)
- vif2_mac = kwargs['tg_if2_mac'] \
- if (kwargs['mid2'] - 1) % kwargs['nodes'] + 1 == kwargs['nodes'] \
- else '52:54:00:00:{0:02X}:01'.format(kwargs['mid2'] + 1)
+ vif1_mac = kwargs[u"tg_if1_mac"] \
+ if (kwargs[u"mid1"] - 1) % kwargs[u"nodes"] + 1 == 1 \
+ else f"52:54:00:00:{(kwargs[u'mid1'] - 1):02X}:02"
+ vif2_mac = kwargs[u"tg_if2_mac"] \
+ if (kwargs[u"mid2"] - 1) % kwargs[u"nodes"] + 1 == kwargs[u"nodes"]\
+ else f"52:54:00:00:{(kwargs['mid2'] + 1):02X}:01"
self.engine.create_vpp_exec_config(
- 'memif_create_chain_ip4.exec',
- mid1=kwargs['mid1'], mid2=kwargs['mid2'],
- sid1=kwargs['sid1'], sid2=kwargs['sid2'],
- socket1='{guest_dir}/memif-{c.name}-{sid1}'.
- format(c=self.engine.container, **kwargs),
- socket2='{guest_dir}/memif-{c.name}-{sid2}'.
- format(c=self.engine.container, **kwargs),
- mac1='52:54:00:00:{0:02X}:01'.format(kwargs['mid1']),
- mac2='52:54:00:00:{0:02X}:02'.format(kwargs['mid2']),
- vif1_mac=vif1_mac, vif2_mac=vif2_mac)
+ u"memif_create_chain_ip4.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}",
+ socket2=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid2']}",
+ mac1=f"52:54:00:00:{kwargs[u'mid1']:02X}:01",
+ mac2=f"52:54:00:00:{kwargs[u'mid2']:02X}:02",
+ vif1_mac=vif1_mac, vif2_mac=vif2_mac
+ )
def _configure_vpp_pipeline_ip4(self, **kwargs):
"""Configure VPP in pipeline topology with ip4.
@@ -293,40 +307,36 @@ class ContainerManager(object):
:param kwargs: dict
"""
self.engine.create_vpp_startup_config()
- node = (kwargs['mid1'] - 1) % kwargs['nodes'] + 1
- mid1 = kwargs['mid1']
- mid2 = kwargs['mid2']
- role1 = 'master'
- role2 = 'master' \
- if node == kwargs['nodes'] or node == kwargs['nodes'] and node == 1\
- else 'slave'
- kwargs['mid2'] = kwargs['mid2'] \
- if node == kwargs['nodes'] or node == kwargs['nodes'] and node == 1\
- else kwargs['mid2'] + 1
- vif1_mac = kwargs['tg_if1_mac'] \
- if (kwargs['mid1'] - 1) % kwargs['nodes'] + 1 == 1 \
- else '52:54:00:00:{0:02X}:02'.format(kwargs['mid1'] - 1)
- vif2_mac = kwargs['tg_if2_mac'] \
- if (kwargs['mid2'] - 1) % kwargs['nodes'] + 1 == kwargs['nodes'] \
- else '52:54:00:00:{0:02X}:01'.format(kwargs['mid2'] + 1)
- socket1 = '{guest_dir}/memif-{c.name}-{sid1}'.\
- format(c=self.engine.container, **kwargs) \
- if node == 1 else '{guest_dir}/memif-pipe-{mid1}'.\
- format(c=self.engine.container, **kwargs)
- socket2 = '{guest_dir}/memif-{c.name}-{sid2}'.\
- format(c=self.engine.container, **kwargs) \
- if node == 1 and kwargs['nodes'] == 1 or node == kwargs['nodes'] \
- else '{guest_dir}/memif-pipe-{mid2}'.\
- format(c=self.engine.container, **kwargs)
+ node = (kwargs[u"mid1"] - 1) % kwargs[u"nodes"] + 1
+ mid1 = kwargs[u"mid1"]
+ mid2 = kwargs[u"mid2"]
+ role1 = u"master"
+ role2 = u"master" if node in (kwargs[u"nodes"], 1) else u"slave"
+ kwargs[u"mid2"] = kwargs[u"mid2"] if node in (kwargs[u"nodes"], 1) \
+ else kwargs[u"mid2"] + 1
+ vif1_mac = kwargs[u"tg_if1_mac"] \
+ if (kwargs[u"mid1"] - 1) % kwargs[u"nodes"] + 1 == 1 \
+ else f"52:54:00:00:{(kwargs[u'mid1'] - 1):02X}:02"
+ vif2_mac = kwargs[u"tg_if2_mac"] \
+ if (kwargs[u"mid2"] - 1) % kwargs[u"nodes"] + 1 == kwargs[u"nodes"]\
+ else f"52:54:00:00:{(kwargs[u'mid2'] + 1):02X}:01"
+ socket1 = f"{kwargs[u'guest_dir']}/memif-{self.engine.container.name}-"\
+ f"{kwargs[u'sid1']}" if node == 1 \
+ else f"{kwargs[u'guest_dir']}/memif-pipe-{kwargs[u'mid1']}"
+ socket2 = f"{kwargs[u'guest_dir']}/memif-{self.engine.container.name}-"\
+ f"{kwargs[u'sid2']}" \
+ if node == 1 and kwargs[u"nodes"] == 1 or node == kwargs[u"nodes"] \
+ else f"{kwargs[u'guest_dir']}/memif-pipe-{kwargs[u'mid2']}"
self.engine.create_vpp_exec_config(
- 'memif_create_pipeline_ip4.exec',
- mid1=kwargs['mid1'], mid2=kwargs['mid2'],
- sid1=kwargs['sid1'], sid2=kwargs['sid2'],
+ u"memif_create_pipeline_ip4.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
socket1=socket1, socket2=socket2, role1=role1, role2=role2,
- mac1='52:54:00:00:{0:02X}:01'.format(mid1),
- mac2='52:54:00:00:{0:02X}:02'.format(mid2),
- vif1_mac=vif1_mac, vif2_mac=vif2_mac)
+ mac1=f"52:54:00:00:{mid1:02X}:01",
+ mac2=f"52:54:00:00:{mid2:02X}:02",
+ vif1_mac=vif1_mac, vif2_mac=vif2_mac
+ )
def stop_all_containers(self):
"""Stop all containers."""
@@ -341,7 +351,7 @@ class ContainerManager(object):
self.engine.destroy()
-class ContainerEngine(object):
+class ContainerEngine:
"""Abstract class for container engine."""
def __init__(self):
@@ -395,61 +405,67 @@ class ContainerEngine(object):
def install_supervisor(self):
"""Install supervisord inside a container."""
if isinstance(self, LXC):
- self.execute('sleep 3; apt-get update')
- self.execute('apt-get install -y supervisor')
- self.execute('echo "{config}" > {config_file} && '
- 'supervisord -c {config_file}'.
- format(
- config='[unix_http_server]\n'
- 'file = /tmp/supervisor.sock\n\n'
- '[rpcinterface:supervisor]\n'
- 'supervisor.rpcinterface_factory = supervisor.'
- 'rpcinterface:make_main_rpcinterface\n\n'
- '[supervisorctl]\n'
- 'serverurl = unix:///tmp/supervisor.sock\n\n'
- '[supervisord]\n'
- 'pidfile = /tmp/supervisord.pid\n'
- 'identifier = supervisor\n'
- 'directory = /tmp\n'
- 'logfile = /tmp/supervisord.log\n'
- 'loglevel = debug\n'
- 'nodaemon = false\n\n',
- config_file=SUPERVISOR_CONF))
+ self.execute(u"sleep 3; apt-get update")
+ self.execute(u"apt-get install -y supervisor")
+ config = \
+ u"[unix_http_server]\n" \
+ u"file = /tmp/supervisor.sock\n\n" \
+ u"[rpcinterface:supervisor]\n" \
+ u"supervisor.rpcinterface_factory = " \
+ u"supervisor.rpcinterface:make_main_rpcinterface\n\n" \
+ u"[supervisorctl]\n" \
+ u"serverurl = unix:///tmp/supervisor.sock\n\n" \
+ u"[supervisord]\n" \
+ u"pidfile = /tmp/supervisord.pid\n" \
+ u"identifier = supervisor\n" \
+ u"directory = /tmp\n" \
+ u"logfile = /tmp/supervisord.log\n" \
+ u"loglevel = debug\n" \
+ u"nodaemon = false\n\n"
+ self.execute(
+ f'echo "{config}" > {SUPERVISOR_CONF} && '
+ f'supervisord -c {SUPERVISOR_CONF}'
+ )
def start_vpp(self):
"""Start VPP inside a container."""
- self.execute('echo "{config}" >> {config_file} && '
- 'supervisorctl reload'.
- format(
- config='[program:vpp]\n'
- 'command = /usr/bin/vpp -c /etc/vpp/startup.conf\n'
- 'autostart = false\n'
- 'autorestart = false\n'
- 'redirect_stderr = true\n'
- 'priority = 1',
- config_file=SUPERVISOR_CONF))
- self.execute('supervisorctl start vpp')
+ config = \
+ u"[program:vpp]\n" \
+ u"command = /usr/bin/vpp -c /etc/vpp/startup.conf\n" \
+ u"autostart = false\n" \
+ u"autorestart = false\n" \
+ u"redirect_stderr = true\n" \
+ u"priority = 1"
+ self.execute(
+ f'echo "{config}" >> {SUPERVISOR_CONF} && supervisorctl reload'
+ )
+ self.execute(u"supervisorctl start vpp")
+
+ # pylint: disable=import-outside-toplevel
from robot.libraries.BuiltIn import BuiltIn
topo_instance = BuiltIn().get_library_instance(
- 'resources.libraries.python.topology.Topology')
+ u"resources.libraries.python.topology.Topology"
+ )
topo_instance.add_new_socket(
self.container.node,
SocketType.PAPI,
self.container.name,
- '{root}/tmp/vpp_sockets/{name}/api.sock'.
- format(root=self.container.root, name=self.container.name))
+ f"{self.container.root}/tmp/vpp_sockets/{self.container.name}/"
+ f"api.sock"
+ )
topo_instance.add_new_socket(
self.container.node,
SocketType.STATS,
self.container.name,
- '{root}/tmp/vpp_sockets/{name}/stats.sock'.
- format(root=self.container.root, name=self.container.name))
+ f"{self.container.root}/tmp/vpp_sockets/{self.container.name}/"
+ f"stats.sock"
+ )
def restart_vpp(self):
"""Restart VPP service inside a container."""
- self.execute('supervisorctl restart vpp')
- self.execute('cat /tmp/supervisord.log')
+ self.execute(u"supervisorctl restart vpp")
+ self.execute(u"cat /tmp/supervisord.log")
def create_base_vpp_startup_config(self):
"""Create base startup configuration of VPP on container.
@@ -464,14 +480,14 @@ class ContainerEngine(object):
vpp_config.set_node(self.container.node)
vpp_config.add_unix_cli_listen()
vpp_config.add_unix_nodaemon()
- vpp_config.add_unix_exec('/tmp/running.exec')
+ vpp_config.add_unix_exec(u"/tmp/running.exec")
vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH)
- vpp_config.add_statseg_per_node_counters(value='on')
+ vpp_config.add_statseg_per_node_counters(value=u"on")
# We will pop the first core from the list to be a main core
vpp_config.add_cpu_main_core(str(cpuset_cpus.pop(0)))
# If more cores in the list, the rest will be used as workers.
if cpuset_cpus:
- corelist_workers = ','.join(str(cpu) for cpu in cpuset_cpus)
+ corelist_workers = u",".join(str(cpu) for cpu in cpuset_cpus)
vpp_config.add_cpu_corelist_workers(corelist_workers)
return vpp_config
@@ -480,12 +496,14 @@ class ContainerEngine(object):
"""Create startup configuration of VPP without DPDK on container.
"""
vpp_config = self.create_base_vpp_startup_config()
- vpp_config.add_plugin('disable', 'dpdk_plugin.so')
+ vpp_config.add_plugin(u"disable", u"dpdk_plugin.so")
# Apply configuration
- self.execute('mkdir -p /etc/vpp/')
- self.execute('echo "{config}" | tee /etc/vpp/startup.conf'
- .format(config=vpp_config.get_config_str()))
+ self.execute(u"mkdir -p /etc/vpp/")
+ self.execute(
+ f'echo "{vpp_config.get_config_str()}" | '
+ f'tee /etc/vpp/startup.conf'
+ )
def create_vpp_startup_config_dpdk_dev(self, *devices):
"""Create startup configuration of VPP with DPDK on container.
@@ -496,15 +514,17 @@ class ContainerEngine(object):
vpp_config = self.create_base_vpp_startup_config()
vpp_config.add_dpdk_dev(*devices)
vpp_config.add_dpdk_no_tx_checksum_offload()
- vpp_config.add_dpdk_log_level('debug')
- vpp_config.add_plugin('disable', 'default')
- vpp_config.add_plugin('enable', 'dpdk_plugin.so')
- vpp_config.add_plugin('enable', 'memif_plugin.so')
+ vpp_config.add_dpdk_log_level(u"debug")
+ vpp_config.add_plugin(u"disable", u"default")
+ vpp_config.add_plugin(u"enable", u"dpdk_plugin.so")
+ vpp_config.add_plugin(u"enable", u"memif_plugin.so")
# Apply configuration
- self.execute('mkdir -p /etc/vpp/')
- self.execute('echo "{config}" | tee /etc/vpp/startup.conf'
- .format(config=vpp_config.get_config_str()))
+ self.execute(u"mkdir -p /etc/vpp/")
+ self.execute(
+ f'echo "{vpp_config.get_config_str()}" | '
+ f'tee /etc/vpp/startup.conf'
+ )
def create_vpp_startup_config_func_dev(self):
"""Create startup configuration of VPP on container for functional
@@ -515,15 +535,17 @@ class ContainerEngine(object):
vpp_config.set_node(self.container.node)
vpp_config.add_unix_cli_listen()
vpp_config.add_unix_nodaemon()
- vpp_config.add_unix_exec('/tmp/running.exec')
+ vpp_config.add_unix_exec(u"/tmp/running.exec")
vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH)
- vpp_config.add_statseg_per_node_counters(value='on')
- vpp_config.add_plugin('disable', 'dpdk_plugin.so')
+ vpp_config.add_statseg_per_node_counters(value=u"on")
+ vpp_config.add_plugin(u"disable", u"dpdk_plugin.so")
# Apply configuration
- self.execute('mkdir -p /etc/vpp/')
- self.execute('echo "{config}" | tee /etc/vpp/startup.conf'
- .format(config=vpp_config.get_config_str()))
+ self.execute(u"mkdir -p /etc/vpp/")
+ self.execute(
+ f'echo "{vpp_config.get_config_str()}" | '
+ f'tee /etc/vpp/startup.conf'
+ )
def create_vpp_exec_config(self, template_file, **kwargs):
"""Create VPP exec configuration on container.
@@ -533,15 +555,13 @@ class ContainerEngine(object):
:type template_file: str
:type kwargs: dict
"""
- running = '/tmp/running.exec'
+ running = u"/tmp/running.exec"
- template = '{res}/{tpl}'.format(
- res=Constants.RESOURCES_TPL_CONTAINER, tpl=template_file)
+ template = f"{Constants.RESOURCES_TPL_CONTAINER}/{template_file}"
- with open(template, 'r') as src_file:
+ with open(template, "r") as src_file:
src = Template(src_file.read())
- self.execute('echo "{out}" > {running}'.format(
- out=src.safe_substitute(**kwargs), running=running))
+ self.execute(f'echo "{src.safe_substitute(**kwargs)}" > {running}')
def is_container_running(self):
"""Check if container is running."""
@@ -566,29 +586,34 @@ class ContainerEngine(object):
:raises RuntimeError: If applying cgroup settings via cgset failed.
"""
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgset -r cpuset.cpu_exclusive=0 /')
+ u"cgset -r cpuset.cpu_exclusive=0 /"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to apply cgroup settings.')
+ raise RuntimeError(u"Failed to apply cgroup settings.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgset -r cpuset.mem_exclusive=0 /')
+ u"cgset -r cpuset.mem_exclusive=0 /"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to apply cgroup settings.')
+ raise RuntimeError(u"Failed to apply cgroup settings.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgcreate -g cpuset:/{name}'.format(name=name))
+ f"cgcreate -g cpuset:/{name}"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to copy cgroup settings from root.')
+ raise RuntimeError(u"Failed to copy cgroup settings from root.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgset -r cpuset.cpu_exclusive=0 /{name}'.format(name=name))
+ f"cgset -r cpuset.cpu_exclusive=0 /{name}"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to apply cgroup settings.')
+ raise RuntimeError(u"Failed to apply cgroup settings.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgset -r cpuset.mem_exclusive=0 /{name}'.format(name=name))
+ f"cgset -r cpuset.mem_exclusive=0 /{name}"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to apply cgroup settings.')
+ raise RuntimeError(u"Failed to apply cgroup settings.")
class LXC(ContainerEngine):
@@ -611,21 +636,21 @@ class LXC(ContainerEngine):
else:
return
- target_arch = 'arm64' \
- if Topology.get_node_arch(self.container.node) == 'aarch64' \
- else 'amd64'
+ target_arch = u"arm64" \
+ if Topology.get_node_arch(self.container.node) == u"aarch64" \
+ else u"amd64"
- image = self.container.image if self.container.image else\
- "-d ubuntu -r bionic -a {arch}".format(arch=target_arch)
+ image = self.container.image if self.container.image \
+ else f"-d ubuntu -r bionic -a {target_arch}"
- cmd = 'lxc-create -t download --name {c.name} -- {image} '\
- '--no-validate'.format(c=self.container, image=image)
+ cmd = f"lxc-create -t download --name {self.container.name} " \
+ f"-- {image} --no-validate"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd, timeout=1800)
if int(ret) != 0:
- raise RuntimeError('Failed to create container.')
+ raise RuntimeError(u"Failed to create container.")
- self._configure_cgroup('lxc')
+ self._configure_cgroup(u"lxc")
def create(self):
"""Create/deploy an application inside a container on system.
@@ -635,54 +660,61 @@ class LXC(ContainerEngine):
if self.container.mnt:
# LXC fix for tmpfs
# https://github.com/lxc/lxc/issues/434
+ mnt_e = u"lxc.mount.entry = tmpfs run tmpfs defaults"
ret, _, _ = self.container.ssh.exec_command_sudo(
- "sh -c 'echo \"{e}\" >> /var/lib/lxc/{c.name}/config'".
- format(e="lxc.mount.entry = tmpfs run tmpfs defaults",
- c=self.container))
+ f"sh -c \"echo '{mnt_e}' >> "
+ f"/var/lib/lxc/{self.container.name}/config\""
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to write {c.name} config.'.
- format(c=self.container))
+ raise RuntimeError(
+ f"Failed to write {self.container.name} config."
+ )
for mount in self.container.mnt:
- host_dir, guest_dir = mount.split(':')
- options = 'bind,create=dir' \
- if guest_dir.endswith('/') else 'bind,create=file'
- entry = 'lxc.mount.entry = {host_dir} {guest_dir} none ' \
- '{options} 0 0'.format(
- host_dir=host_dir, guest_dir=guest_dir[1:],
- options=options)
+ host_dir, guest_dir = mount.split(u":")
+ options = u"bind,create=dir" if guest_dir.endswith(u"/") \
+ else u"bind,create=file"
+ entry = f"lxc.mount.entry = {host_dir} {guest_dir[1:]} " \
+ f"none {options} 0 0"
self.container.ssh.exec_command_sudo(
- "sh -c 'mkdir -p {host_dir}'".format(host_dir=host_dir))
+ f"sh -c \"mkdir -p {host_dir}\""
+ )
ret, _, _ = self.container.ssh.exec_command_sudo(
- "sh -c 'echo \"{e}\" >> /var/lib/lxc/{c.name}/config'".
- format(e=entry, c=self.container))
+ f"sh -c \"echo '{entry}' "
+ f">> /var/lib/lxc/{self.container.name}/config\""
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to write {c.name} config.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to write {self.container.name} config."
+ )
- cpuset_cpus = '{0}'.format(
- ','.join('%s' % cpu for cpu in self.container.cpuset_cpus))\
- if self.container.cpuset_cpus else ''
+ cpuset_cpus = u",".join(
+ f"{cpu!s}" for cpu in self.container.cpuset_cpus) \
+ if self.container.cpuset_cpus else u""
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'lxc-start --name {c.name} --daemon'.format(c=self.container))
+ f"lxc-start --name {self.container.name} --daemon"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to start container {c.name}.'.
- format(c=self.container))
- self._lxc_wait('RUNNING')
+ raise RuntimeError(
+ f"Failed to start container {self.container.name}."
+ )
+ self._lxc_wait(u"RUNNING")
# Workaround for LXC to be able to allocate all cpus including isolated.
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'cgset --copy-from / lxc/')
+ u"cgset --copy-from / lxc/"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to copy cgroup to LXC')
+ raise RuntimeError(u"Failed to copy cgroup to LXC")
ret, _, _ = self.container.ssh.exec_command_sudo(
- 'lxc-cgroup --name {c.name} cpuset.cpus {cpus}'.
- format(c=self.container, cpus=cpuset_cpus))
+ f"lxc-cgroup --name {self.container.name} cpuset.cpus {cpuset_cpus}"
+ )
if int(ret) != 0:
- raise RuntimeError('Failed to set cpuset.cpus to container '
- '{c.name}.'.format(c=self.container))
+ raise RuntimeError(
+ f"Failed to set cpuset.cpus to container {self.container.name}."
+ )
def execute(self, command):
"""Start a process inside a running container.
@@ -694,65 +726,69 @@ class LXC(ContainerEngine):
:type command: str
:raises RuntimeError: If running the command failed.
"""
- env = '--keep-env {0}'.format(
- ' '.join('--set-var %s' % env for env in self.container.env))\
- if self.container.env else ''
+ env = u"--keep-env " + u" ".join(
+ f"--set-var {env!s}" for env in self.container.env) \
+ if self.container.env else u""
- cmd = "lxc-attach {env} --name {c.name} -- /bin/sh -c '{command}; "\
- "exit $?'".format(env=env, c=self.container, command=command)
+ cmd = f"lxc-attach {env} --name {self.container.name} " \
+ f"-- /bin/sh -c '{command}; exit $?'"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd, timeout=180)
if int(ret) != 0:
- raise RuntimeError('Failed to run command inside container '
- '{c.name}.'.format(c=self.container))
+ raise RuntimeError(
+ f"Failed to run command inside container {self.container.name}."
+ )
def stop(self):
"""Stop a container.
:raises RuntimeError: If stopping the container failed.
"""
- cmd = 'lxc-stop --name {c.name}'.format(c=self.container)
+ cmd = f"lxc-stop --name {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to stop container {c.name}.'
- .format(c=self.container))
- self._lxc_wait('STOPPED|FROZEN')
+ raise RuntimeError(
+ f"Failed to stop container {self.container.name}."
+ )
+ self._lxc_wait(u"STOPPED|FROZEN")
def destroy(self):
"""Destroy a container.
:raises RuntimeError: If destroying container failed.
"""
- cmd = 'lxc-destroy --force --name {c.name}'.format(c=self.container)
+ cmd = f"lxc-destroy --force --name {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to destroy container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to destroy container {self.container.name}."
+ )
def info(self):
"""Query and shows information about a container.
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'lxc-info --name {c.name}'.format(c=self.container)
+ cmd = f"lxc-info --name {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get info about container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to get info about container {self.container.name}."
+ )
def system_info(self):
"""Check the current kernel for LXC support.
:raises RuntimeError: If checking LXC support failed.
"""
- cmd = 'lxc-checkconfig'
+ cmd = u"lxc-checkconfig"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to check LXC support.')
+ raise RuntimeError(u"Failed to check LXC support.")
def is_container_running(self):
"""Check if container is running on node.
@@ -761,14 +797,14 @@ class LXC(ContainerEngine):
:rtype: bool
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'lxc-info --no-humanize --state --name {c.name}'\
- .format(c=self.container)
+ cmd = f"lxc-info --no-humanize --state --name {self.container.name}"
ret, stdout, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get info about container {c.name}.'
- .format(c=self.container))
- return True if 'RUNNING' in stdout else False
+ raise RuntimeError(
+ f"Failed to get info about container {self.container.name}."
+ )
+ return u"RUNNING" in stdout
def is_container_present(self):
"""Check if container is existing on node.
@@ -777,10 +813,10 @@ class LXC(ContainerEngine):
:rtype: bool
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'lxc-info --no-humanize --name {c.name}'.format(c=self.container)
+ cmd = f"lxc-info --no-humanize --name {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
- return False if int(ret) else True
+ return not ret
def _lxc_wait(self, state):
"""Wait for a specific container state.
@@ -789,13 +825,14 @@ class LXC(ContainerEngine):
:type state: str
:raises RuntimeError: If waiting for state of a container failed.
"""
- cmd = 'lxc-wait --name {c.name} --state "{s}"'\
- .format(c=self.container, s=state)
+ cmd = f"lxc-wait --name {self.container.name} --state '{state}'"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to wait for state "{s}" of container '
- '{c.name}.'.format(s=state, c=self.container))
+ raise RuntimeError(
+ f"Failed to wait for state '{state}' "
+ f"of container {self.container.name}."
+ )
class Docker(ContainerEngine):
@@ -818,61 +855,58 @@ class Docker(ContainerEngine):
if not self.container.image:
img = Constants.DOCKER_SUT_IMAGE_UBUNTU_ARM \
- if Topology.get_node_arch(self.container.node) == 'aarch64' \
+ if Topology.get_node_arch(self.container.node) == u"aarch64" \
else Constants.DOCKER_SUT_IMAGE_UBUNTU
- setattr(self.container, 'image', img)
+ setattr(self.container, u"image", img)
- cmd = 'docker pull {image}'.format(image=self.container.image)
+ cmd = f"docker pull {self.container.image}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd, timeout=1800)
if int(ret) != 0:
- raise RuntimeError('Failed to create container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to create container {self.container.name}."
+ )
if self.container.cpuset_cpus:
- self._configure_cgroup('docker')
+ self._configure_cgroup(u"docker")
def create(self):
"""Create/deploy container.
:raises RuntimeError: If creating a container failed.
"""
- cpuset_cpus = '--cpuset-cpus={0}'.format(
- ','.join('%s' % cpu for cpu in self.container.cpuset_cpus))\
- if self.container.cpuset_cpus else ''
+ cpuset_cpus = u"--cpuset-cpus=" + u",".join(
+ f"{cpu!s}" for cpu in self.container.cpuset_cpus) \
+ if self.container.cpuset_cpus else u""
- cpuset_mems = '--cpuset-mems={0}'.format(self.container.cpuset_mems)\
- if self.container.cpuset_mems is not None else ''
+ cpuset_mems = f"--cpuset-mems={self.container.cpuset_mems}" \
+ if self.container.cpuset_mems is not None else u""
# Temporary workaround - disabling due to bug in memif
- cpuset_mems = ''
+ cpuset_mems = u""
- env = '{0}'.format(
- ' '.join('--env %s' % env for env in self.container.env))\
- if self.container.env else ''
+ env = u" ".join(f"--env {env!s}" for env in self.container.env) \
+ if self.container.env else u""
- command = '{0}'.format(self.container.command)\
- if self.container.command else ''
+ command = str(self.container.command) if self.container.command else u""
- publish = '{0}'.format(
- ' '.join('--publish %s' % var for var in self.container.publish))\
- if self.container.publish else ''
+ publish = u" ".join(
+ f"--publish {var!s}" for var in self.container.publish
+ ) if self.container.publish else u""
- volume = '{0}'.format(
- ' '.join('--volume %s' % mnt for mnt in self.container.mnt))\
- if self.container.mnt else ''
+ volume = u" ".join(
+ f"--volume {mnt!s}" for mnt in self.container.mnt) \
+ if self.container.mnt else u""
- cmd = 'docker run '\
- '--privileged --detach --interactive --tty --rm '\
- '--cgroup-parent docker {cpuset_cpus} {cpuset_mems} {publish} '\
- '{env} {volume} --name {container.name} {container.image} '\
- '{command}'.format(cpuset_cpus=cpuset_cpus, cpuset_mems=cpuset_mems,
- container=self.container, command=command,
- env=env, publish=publish, volume=volume)
+ cmd = f"docker run --privileged --detach --interactive --tty --rm " \
+ f"--cgroup-parent docker {cpuset_cpus} {cpuset_mems} {publish} " \
+ f"{env} {volume} --name {self.container.name} " \
+ f"{self.container.image} {command}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to create container {c.name}'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to create container {self.container.name}"
+ )
self.info()
@@ -886,60 +920,64 @@ class Docker(ContainerEngine):
:type command: str
:raises RuntimeError: If running the command in a container failed.
"""
- cmd = "docker exec --interactive {c.name} /bin/sh -c '{command}; "\
- "exit $?'".format(c=self.container, command=command)
+ cmd = f"docker exec --interactive {self.container.name} " \
+ f"/bin/sh -c '{command}; exit $?'"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd, timeout=180)
if int(ret) != 0:
- raise RuntimeError('Failed to execute command in container '
- '{c.name}.'.format(c=self.container))
+ raise RuntimeError(
+ f"Failed to execute command in container {self.container.name}."
+ )
def stop(self):
"""Stop running container.
:raises RuntimeError: If stopping a container failed.
"""
- cmd = 'docker stop {c.name}'.format(c=self.container)
+ cmd = f"docker stop {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to stop container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to stop container {self.container.name}."
+ )
def destroy(self):
"""Remove a container.
:raises RuntimeError: If removing a container failed.
"""
- cmd = 'docker rm --force {c.name}'.format(c=self.container)
+ cmd = f"docker rm --force {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to destroy container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to destroy container {self.container.name}."
+ )
def info(self):
"""Return low-level information on Docker objects.
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'docker inspect {c.name}'.format(c=self.container)
+ cmd = f"docker inspect {self.container.name}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get info about container {c.name}.'
- .format(c=self.container))
+ raise RuntimeError(
+ f"Failed to get info about container {self.container.name}."
+ )
def system_info(self):
"""Display the docker system-wide information.
:raises RuntimeError: If displaying system information failed.
"""
- cmd = 'docker system info'
+ cmd = u"docker system info"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get system info.')
+ raise RuntimeError(u"Failed to get system info.")
def is_container_present(self):
"""Check if container is present on node.
@@ -948,14 +986,14 @@ class Docker(ContainerEngine):
:rtype: bool
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'docker ps --all --quiet --filter name={c.name}'\
- .format(c=self.container)
+ cmd = f"docker ps --all --quiet --filter name={self.container.name}"
ret, stdout, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get info about container {c.name}.'
- .format(c=self.container))
- return True if stdout else False
+ raise RuntimeError(
+ f"Failed to get info about container {self.container.name}."
+ )
+ return bool(stdout)
def is_container_running(self):
"""Check if container is running on node.
@@ -964,23 +1002,19 @@ class Docker(ContainerEngine):
:rtype: bool
:raises RuntimeError: If getting info about a container failed.
"""
- cmd = 'docker ps --quiet --filter name={c.name}'\
- .format(c=self.container)
+ cmd = f"docker ps --quiet --filter name={self.container.name}"
ret, stdout, _ = self.container.ssh.exec_command_sudo(cmd)
if int(ret) != 0:
- raise RuntimeError('Failed to get info about container {c.name}.'
- .format(c=self.container))
- return True if stdout else False
+ raise RuntimeError(
+ f"Failed to get info about container {self.container.name}."
+ )
+ return bool(stdout)
-class Container(object):
+class Container:
"""Container class."""
- def __init__(self):
- """Initialize Container object."""
- pass
-
def __getattr__(self, attr):
"""Get attribute custom implementation.
@@ -1007,9 +1041,9 @@ class Container(object):
self.__dict__[attr]
except KeyError:
# Creating new attribute
- if attr == 'node':
- self.__dict__['ssh'] = SSH()
- self.__dict__['ssh'].connect(value)
+ if attr == u"node":
+ self.__dict__[u"ssh"] = SSH()
+ self.__dict__[u"ssh"].connect(value)
self.__dict__[attr] = value
else:
# Updating attribute base of type
diff --git a/resources/libraries/python/Cop.py b/resources/libraries/python/Cop.py
index 24b0debdc4..29530b1277 100644
--- a/resources/libraries/python/Cop.py
+++ b/resources/libraries/python/Cop.py
@@ -17,7 +17,7 @@ from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import Topology
-class Cop(object):
+class Cop:
"""COP utilities."""
@staticmethod
@@ -38,17 +38,17 @@ class Cop(object):
:type default_cop: int
:raises ValueError: If parameter 'ip_version' has incorrect value.
"""
- if ip_version not in ('ip4', 'ip6'):
- raise ValueError('IP version is not in correct format')
+ if ip_version not in (u"ip4", u"ip6"):
+ raise ValueError(u"IP version is not in correct format")
- cmd = 'cop_whitelist_enable_disable'
- err_msg = 'Failed to add COP whitelist on interface {ifc} on host' \
- ' {host}'.format(ifc=interface, host=node['host'])
+ cmd = u"cop_whitelist_enable_disable"
+ err_msg = f"Failed to add COP whitelist on interface {interface} " \
+ f"on host {node[u'host']}"
args = dict(
sw_if_index=Topology.get_interface_sw_index(node, interface),
fib_id=int(fib_id),
- ip4=True if ip_version == 'ip4' else False,
- ip6=True if ip_version == 'ip6' else False,
+ ip4=bool(ip_version == u"ip4"),
+ ip6=bool(ip_version == u"ip6"),
default_cop=default_cop
)
@@ -68,14 +68,14 @@ class Cop(object):
:raises ValueError: If parameter 'state' has incorrect value.
"""
state = state.lower()
- if state in ('enable', 'disable'):
- enable = True if state == 'enable' else False
+ if state in (u"enable", u"disable"):
+ enable = bool(state == u"enable")
else:
- raise ValueError("Possible state values are 'enable' or 'disable'")
+ raise ValueError(u"Possible state values are 'enable' or 'disable'")
- cmd = 'cop_interface_enable_disable'
- err_msg = 'Failed to enable/disable COP on interface {ifc} on host' \
- ' {host}'.format(ifc=interface, host=node['host'])
+ cmd = u"cop_interface_enable_disable"
+ err_msg = f"Failed to enable/disable COP on interface {interface} " \
+ f"on host {node[u'host']}"
args = dict(
sw_if_index=Topology.get_interface_sw_index(node, interface),
enable_disable=enable
diff --git a/resources/libraries/python/CoreDumpUtil.py b/resources/libraries/python/CoreDumpUtil.py
index 63c6d92a4c..9d9369aa56 100644
--- a/resources/libraries/python/CoreDumpUtil.py
+++ b/resources/libraries/python/CoreDumpUtil.py
@@ -13,25 +13,23 @@
"""Core dump library."""
-from time import time
-
from resources.libraries.python.Constants import Constants
from resources.libraries.python.DUTSetup import DUTSetup
from resources.libraries.python.LimitUtil import LimitUtil
from resources.libraries.python.SysctlUtil import SysctlUtil
-from resources.libraries.python.ssh import exec_cmd_no_error, scp_node
+from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import NodeType
-__all__ = ["CoreDumpUtil"]
+__all__ = [u"CoreDumpUtil"]
-class CoreDumpUtil(object):
+class CoreDumpUtil:
"""Class contains methods for processing core dumps."""
# Use one instance of class for all tests. If the functionality should
# be enabled per suite or per test case, change the scope to "TEST SUITE" or
# "TEST CASE" respectively.
- ROBOT_LIBRARY_SCOPE = 'GLOBAL'
+ ROBOT_LIBRARY_SCOPE = u"GLOBAL"
def __init__(self):
"""Initialize CoreDumpUtil class."""
@@ -72,9 +70,9 @@ class CoreDumpUtil(object):
# environment, and either have a core dump pipe handler that knows
# to treat privileged core dumps with care, or specific directory
# defined for catching core dumps. If a core dump happens without a
- # pipe handler or fully qualifid path, a message will be emitted to
+ # pipe handler or fully qualified path, a message will be emitted to
# syslog warning about the lack of a correct setting.
- SysctlUtil.set_sysctl_value(node, 'fs.suid_dumpable', 2)
+ SysctlUtil.set_sysctl_value(node, u"fs.suid_dumpable", 2)
# Specify a core dumpfile pattern name (for the output filename).
# %p pid
@@ -84,8 +82,9 @@ class CoreDumpUtil(object):
# %t UNIX time of dump
# %h hostname
# %e executable filename (may be shortened)
- SysctlUtil.set_sysctl_value(node, 'kernel.core_pattern',
- Constants.KERNEL_CORE_PATTERN)
+ SysctlUtil.set_sysctl_value(
+ node, u"kernel.core_pattern", Constants.KERNEL_CORE_PATTERN
+ )
self._corekeeper_configured = True
@@ -100,10 +99,10 @@ class CoreDumpUtil(object):
"""
if isinstance(pid, list):
for item in pid:
- LimitUtil.set_pid_limit(node, item, 'core', 'unlimited')
+ LimitUtil.set_pid_limit(node, item, u"core", u"unlimited")
LimitUtil.get_pid_limit(node, item)
else:
- LimitUtil.set_pid_limit(node, pid, 'core', 'unlimited')
+ LimitUtil.set_pid_limit(node, pid, u"core", u"unlimited")
LimitUtil.get_pid_limit(node, pid)
def enable_coredump_limit_vpp_on_all_duts(self, nodes):
@@ -114,7 +113,7 @@ class CoreDumpUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT and self.is_core_limit_enabled():
+ if node[u"type"] == NodeType.DUT and self.is_core_limit_enabled():
vpp_pid = DUTSetup.get_vpp_pid(node)
self.enable_coredump_limit(node, vpp_pid)
@@ -129,18 +128,17 @@ class CoreDumpUtil(object):
:type disable_on_success: bool
"""
for node in nodes.values():
- command = ('for f in {dir}/*.core; do '
- 'sudo gdb /usr/bin/vpp ${{f}} '
- '--eval-command="set pagination off" '
- '--eval-command="thread apply all bt" '
- '--eval-command="quit"; '
- 'sudo rm -f ${{f}}; done'
- .format(dir=Constants.CORE_DUMP_DIR))
+ command = f"for f in {Constants.CORE_DUMP_DIR}/*.core; do " \
+ f"sudo gdb /usr/bin/vpp ${{f}} " \
+ f"--eval-command=\"set pagination off\" " \
+ f"--eval-command=\"thread apply all bt\" " \
+ f"--eval-command=\"quit\"; " \
+ f"sudo rm -f ${{f}}; done"
try:
exec_cmd_no_error(node, command, timeout=3600)
if disable_on_success:
self.set_core_limit_disabled()
except RuntimeError:
- # If compress was not sucessfull ignore error and skip further
+ # If compress was not successful ignore error and skip further
# processing.
continue
diff --git a/resources/libraries/python/CpuUtils.py b/resources/libraries/python/CpuUtils.py
index 91db83eb5c..842c16d7ef 100644
--- a/resources/libraries/python/CpuUtils.py
+++ b/resources/libraries/python/CpuUtils.py
@@ -19,10 +19,10 @@ from resources.libraries.python.Constants import Constants
from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import Topology
-__all__ = ["CpuUtils"]
+__all__ = [u"CpuUtils"]
-class CpuUtils(object):
+class CpuUtils:
"""CPU utilities"""
# Number of threads per core.
@@ -54,7 +54,7 @@ class CpuUtils(object):
:rtype: bool
"""
cpu_mems = [item[-4:] for item in cpu_info]
- cpu_mems_len = len(cpu_mems) / CpuUtils.NR_OF_THREADS
+ cpu_mems_len = len(cpu_mems) // CpuUtils.NR_OF_THREADS
count = 0
for cpu_mem in cpu_mems[:cpu_mems_len]:
if cpu_mem in cpu_mems[cpu_mems_len:]:
@@ -71,17 +71,18 @@ class CpuUtils(object):
:param nodes: DICT__nodes from Topology.DICT__nodes.
:type nodes: dict
:raises RuntimeError: If an ssh command retrieving cpu information
- fails.
+ fails.
"""
for node in nodes.values():
- stdout, _ = exec_cmd_no_error(node, 'uname -m')
- node['arch'] = stdout.strip()
- stdout, _ = exec_cmd_no_error(node, 'lscpu -p')
- node['cpuinfo'] = list()
- for line in stdout.split("\n"):
- if line and line[0] != "#":
- node['cpuinfo'].append([CpuUtils.__str2int(x) for x in
- line.split(",")])
+ stdout, _ = exec_cmd_no_error(node, u"uname -m")
+ node[u"arch"] = stdout.strip()
+ stdout, _ = exec_cmd_no_error(node, u"lscpu -p")
+ node[u"cpuinfo"] = list()
+ for line in stdout.split(u"\n"):
+ if line and line[0] != u"#":
+ node[u"cpuinfo"].append(
+ [CpuUtils.__str2int(x) for x in line.split(u",")]
+ )
@staticmethod
def cpu_node_count(node):
@@ -93,11 +94,11 @@ class CpuUtils(object):
:rtype: int
:raises RuntimeError: If node cpuinfo is not available.
"""
- cpu_info = node.get("cpuinfo")
+ cpu_info = node.get(u"cpuinfo")
if cpu_info is not None:
- return node["cpuinfo"][-1][3] + 1
- else:
- raise RuntimeError("Node cpuinfo not available.")
+ return node[u"cpuinfo"][-1][3] + 1
+
+ raise RuntimeError(u"Node cpuinfo not available.")
@staticmethod
def cpu_list_per_node(node, cpu_node, smt_used=False):
@@ -115,13 +116,13 @@ class CpuUtils(object):
or if SMT is not enabled.
"""
cpu_node = int(cpu_node)
- cpu_info = node.get("cpuinfo")
+ cpu_info = node.get(u"cpuinfo")
if cpu_info is None:
- raise RuntimeError("Node cpuinfo not available.")
+ raise RuntimeError(u"Node cpuinfo not available.")
smt_enabled = CpuUtils.is_smt_enabled(cpu_info)
if not smt_enabled and smt_used:
- raise RuntimeError("SMT is not enabled.")
+ raise RuntimeError(u"SMT is not enabled.")
cpu_list = []
for cpu in cpu_info:
@@ -133,13 +134,13 @@ class CpuUtils(object):
if smt_enabled and not smt_used:
cpu_list_len = len(cpu_list)
- cpu_list = cpu_list[:cpu_list_len / CpuUtils.NR_OF_THREADS]
+ cpu_list = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
return cpu_list
@staticmethod
- def cpu_slice_of_list_per_node(node, cpu_node, skip_cnt=0, cpu_cnt=0,
- smt_used=False):
+ def cpu_slice_of_list_per_node(
+ node, cpu_node, skip_cnt=0, cpu_cnt=0, smt_used=False):
"""Return string of node related list of CPU numbers.
:param node: Node dictionary with cpuinfo.
@@ -160,26 +161,25 @@ class CpuUtils(object):
cpu_list_len = len(cpu_list)
if cpu_cnt + skip_cnt > cpu_list_len:
- raise RuntimeError("cpu_cnt + skip_cnt > length(cpu list).")
+ raise RuntimeError(u"cpu_cnt + skip_cnt > length(cpu list).")
if cpu_cnt == 0:
cpu_cnt = cpu_list_len - skip_cnt
if smt_used:
- cpu_list_0 = cpu_list[:cpu_list_len / CpuUtils.NR_OF_THREADS]
- cpu_list_1 = cpu_list[cpu_list_len / CpuUtils.NR_OF_THREADS:]
- cpu_list = [cpu for cpu in cpu_list_0[skip_cnt:skip_cnt + cpu_cnt]]
- cpu_list_ex = [cpu for cpu in
- cpu_list_1[skip_cnt:skip_cnt + cpu_cnt]]
+ cpu_list_0 = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
+ cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS:]
+ cpu_list = cpu_list_0[skip_cnt:skip_cnt + cpu_cnt]
+ cpu_list_ex = cpu_list_1[skip_cnt:skip_cnt + cpu_cnt]
cpu_list.extend(cpu_list_ex)
else:
- cpu_list = [cpu for cpu in cpu_list[skip_cnt:skip_cnt + cpu_cnt]]
+ cpu_list = cpu_list[skip_cnt:skip_cnt + cpu_cnt]
return cpu_list
@staticmethod
- def cpu_list_per_node_str(node, cpu_node, skip_cnt=0, cpu_cnt=0, sep=",",
- smt_used=False):
+ def cpu_list_per_node_str(
+ node, cpu_node, skip_cnt=0, cpu_cnt=0, sep=u",", smt_used=False):
"""Return string of node related list of CPU numbers.
:param node: Node dictionary with cpuinfo.
@@ -197,15 +197,15 @@ class CpuUtils(object):
:returns: Cpu numbers related to numa from argument.
:rtype: str
"""
- cpu_list = CpuUtils.cpu_slice_of_list_per_node(node, cpu_node,
- skip_cnt=skip_cnt,
- cpu_cnt=cpu_cnt,
- smt_used=smt_used)
+ cpu_list = CpuUtils.cpu_slice_of_list_per_node(
+ node, cpu_node, skip_cnt=skip_cnt, cpu_cnt=cpu_cnt,
+ smt_used=smt_used
+ )
return sep.join(str(cpu) for cpu in cpu_list)
@staticmethod
- def cpu_range_per_node_str(node, cpu_node, skip_cnt=0, cpu_cnt=0, sep="-",
- smt_used=False):
+ def cpu_range_per_node_str(
+ node, cpu_node, skip_cnt=0, cpu_cnt=0, sep=u"-", smt_used=False):
"""Return string of node related range of CPU numbers, e.g. 0-4.
:param node: Node dictionary with cpuinfo.
@@ -223,27 +223,25 @@ class CpuUtils(object):
:returns: String of node related range of CPU numbers.
:rtype: str
"""
- cpu_list = CpuUtils.cpu_slice_of_list_per_node(node, cpu_node,
- skip_cnt=skip_cnt,
- cpu_cnt=cpu_cnt,
- smt_used=smt_used)
+ cpu_list = CpuUtils.cpu_slice_of_list_per_node(
+ node, cpu_node, skip_cnt=skip_cnt, cpu_cnt=cpu_cnt,
+ smt_used=smt_used
+ )
if smt_used:
cpu_list_len = len(cpu_list)
- cpu_list_0 = cpu_list[:cpu_list_len / CpuUtils.NR_OF_THREADS]
- cpu_list_1 = cpu_list[cpu_list_len / CpuUtils.NR_OF_THREADS:]
- cpu_range = "{}{}{},{}{}{}".format(cpu_list_0[0], sep,
- cpu_list_0[-1],
- cpu_list_1[0], sep,
- cpu_list_1[-1])
+ cpu_list_0 = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
+ cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS:]
+ cpu_range = f"{cpu_list_0[0]}{sep}{cpu_list_0[-1]}," \
+ f"{cpu_list_1[0]}{sep}{cpu_list_1[-1]}"
else:
- cpu_range = "{}{}{}".format(cpu_list[0], sep, cpu_list[-1])
+ cpu_range = f"{cpu_list[0]}{sep}{cpu_list[-1]}"
return cpu_range
@staticmethod
- def cpu_slice_of_list_for_nf(node, cpu_node, nf_chains=1, nf_nodes=1,
- nf_chain=1, nf_node=1, nf_dtc=1, nf_mtcr=2,
- nf_dtcr=1, skip_cnt=0):
+ def cpu_slice_of_list_for_nf(
+ node, cpu_node, nf_chains=1, nf_nodes=1, nf_chain=1, nf_node=1,
+ nf_dtc=1, nf_mtcr=2, nf_dtcr=1, skip_cnt=0):
"""Return list of DUT node related list of CPU numbers. The main
computing unit is physical core count.
@@ -253,9 +251,9 @@ class CpuUtils(object):
:param nf_nodes: Number of NF nodes in chain.
:param nf_chain: Chain number indexed from 1.
:param nf_node: Node number indexed from 1.
- :param nf_dtc: Amount of physical cores for NF dataplane.
+ :param nf_dtc: Amount of physical cores for NF data plane.
:param nf_mtcr: NF main thread per core ratio.
- :param nf_dtcr: NF dataplane thread per core ratio.
+ :param nf_dtcr: NF data plane thread per core ratio.
:param skip_cnt: Skip first "skip_cnt" CPUs.
:type node: dict
:param cpu_node: int.
@@ -273,18 +271,18 @@ class CpuUtils(object):
placement is not possible due to wrong parameters.
"""
if not 1 <= nf_chain <= nf_chains:
- raise RuntimeError("ChainID is out of range!")
+ raise RuntimeError(u"ChainID is out of range!")
if not 1 <= nf_node <= nf_nodes:
- raise RuntimeError("NodeID is out of range!")
+ raise RuntimeError(u"NodeID is out of range!")
- smt_used = CpuUtils.is_smt_enabled(node['cpuinfo'])
+ smt_used = CpuUtils.is_smt_enabled(node[u"cpuinfo"])
cpu_list = CpuUtils.cpu_list_per_node(node, cpu_node, smt_used)
# CPU thread sibling offset.
- sib = len(cpu_list) / CpuUtils.NR_OF_THREADS
+ sib = len(cpu_list) // CpuUtils.NR_OF_THREADS
dtc_is_integer = isinstance(nf_dtc, int)
if not smt_used and not dtc_is_integer:
- raise RuntimeError("Cannot allocate if SMT is not enabled!")
+ raise RuntimeError(u"Cannot allocate if SMT is not enabled!")
# TODO: Please reword the following todo if it is still relevant
# TODO: Workaround as we are using physical core as main unit, we must
# adjust number of physical dataplane cores in case of float for further
@@ -298,7 +296,7 @@ class CpuUtils(object):
dt_req = ((nf_chains * nf_nodes) + nf_dtcr - 1) // nf_dtcr
if (skip_cnt + mt_req + dt_req) > (sib if smt_used else len(cpu_list)):
- raise RuntimeError("Not enough CPU cores available for placement!")
+ raise RuntimeError(u"Not enough CPU cores available for placement!")
offset = (nf_node - 1) + (nf_chain - 1) * nf_nodes
mt_skip = skip_cnt + (offset % mt_req)
@@ -319,8 +317,9 @@ class CpuUtils(object):
return result
@staticmethod
- def get_affinity_nf(nodes, node, nf_chains=1, nf_nodes=1, nf_chain=1,
- nf_node=1, vs_dtc=1, nf_dtc=1, nf_mtcr=2, nf_dtcr=1):
+ def get_affinity_nf(
+ nodes, node, nf_chains=1, nf_nodes=1, nf_chain=1, nf_node=1,
+ vs_dtc=1, nf_dtc=1, nf_mtcr=2, nf_dtcr=1):
"""Get affinity of NF (network function). Result will be used to compute
the amount of CPUs and also affinity.
@@ -331,10 +330,10 @@ class CpuUtils(object):
:param nf_nodes: Number of NF nodes in chain.
:param nf_chain: Chain number indexed from 1.
:param nf_node: Node number indexed from 1.
- :param vs_dtc: Amount of physical cores for vswitch dataplane.
- :param nf_dtc: Amount of physical cores for NF dataplane.
+ :param vs_dtc: Amount of physical cores for vswitch data plane.
+ :param nf_dtc: Amount of physical cores for NF data plane.
:param nf_mtcr: NF main thread per core ratio.
- :param nf_dtcr: NF dataplane thread per core ratio.
+ :param nf_dtcr: NF data plane thread per core ratio.
:type nodes: dict
:type node: dict
:type nf_chains: int
@@ -350,11 +349,9 @@ class CpuUtils(object):
"""
skip_cnt = Constants.CPU_CNT_SYSTEM + Constants.CPU_CNT_MAIN + vs_dtc
- interface_list = []
- interface_list.append(
- BuiltIn().get_variable_value('${{{node}_if1}}'.format(node=node)))
- interface_list.append(
- BuiltIn().get_variable_value('${{{node}_if2}}'.format(node=node)))
+ interface_list = list()
+ interface_list.append(BuiltIn().get_variable_value(f"${{{node}_if1}}"))
+ interface_list.append(BuiltIn().get_variable_value(f"${{{node}_if2}}"))
cpu_node = Topology.get_interfaces_numa_node(
nodes[node], *interface_list)
@@ -362,5 +359,5 @@ class CpuUtils(object):
return CpuUtils.cpu_slice_of_list_for_nf(
node=nodes[node], cpu_node=cpu_node, nf_chains=nf_chains,
nf_nodes=nf_nodes, nf_chain=nf_chain, nf_node=nf_node,
- nf_mtcr=nf_mtcr, nf_dtcr=nf_dtcr, nf_dtc=nf_dtc, skip_cnt=skip_cnt)
-
+ nf_mtcr=nf_mtcr, nf_dtcr=nf_dtcr, nf_dtc=nf_dtc, skip_cnt=skip_cnt
+ )
diff --git a/resources/libraries/python/DMM/DMMConstants.py b/resources/libraries/python/DMM/DMMConstants.py
index 265320a1d8..c4899df84a 100644
--- a/resources/libraries/python/DMM/DMMConstants.py
+++ b/resources/libraries/python/DMM/DMMConstants.py
@@ -13,7 +13,7 @@
"""This file defines the constants variables for the DMM test."""
-class DMMConstants(object):
+class DMMConstants:
"""Define the directory path for the DMM test."""
# DMM testing directory location at topology nodes
diff --git a/resources/libraries/python/DMM/SetupDMMTest.py b/resources/libraries/python/DMM/SetupDMMTest.py
index 993e11924e..d84cbd544f 100644
--- a/resources/libraries/python/DMM/SetupDMMTest.py
+++ b/resources/libraries/python/DMM/SetupDMMTest.py
@@ -139,7 +139,7 @@ def setup_node(args):
logger.console('Setup of node {0} done'.format(node['host']))
return True
-class SetupDMMTest(object):
+class SetupDMMTest:
"""Setup suite run on topology nodes.
Many VAT/CLI based tests need the scripts at remote hosts before executing
diff --git a/resources/libraries/python/DMM/SingleCliSer.py b/resources/libraries/python/DMM/SingleCliSer.py
index 8d7b648ea4..aa77eaa445 100644
--- a/resources/libraries/python/DMM/SingleCliSer.py
+++ b/resources/libraries/python/DMM/SingleCliSer.py
@@ -25,7 +25,7 @@ from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
from resources.libraries.python.DMM.DMMConstants import DMMConstants as con
from resources.libraries.python.topology import Topology
-class SingleCliSer(object):
+class SingleCliSer:
"""Test DMM with single client-server topology."""
@staticmethod
diff --git a/resources/libraries/python/DPDK/DPDKTools.py b/resources/libraries/python/DPDK/DPDKTools.py
index d7a780b223..ecb23fb4c3 100644
--- a/resources/libraries/python/DPDK/DPDKTools.py
+++ b/resources/libraries/python/DPDK/DPDKTools.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,12 +16,12 @@
from robot.api import logger
-from resources.libraries.python.ssh import SSH, exec_cmd_no_error
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.ssh import SSH, exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
-class DPDKTools(object):
+class DPDKTools:
"""This class implements:
- Initialization of DPDK environment,
- Cleanup of DPDK environment.
@@ -41,7 +41,7 @@ class DPDKTools(object):
:type dut_if2: str
:raises RuntimeError: If it fails to bind the interfaces to igb_uio.
"""
- if dut_node['type'] == NodeType.DUT:
+ if dut_node[u"type"] == NodeType.DUT:
pci_address1 = Topology.get_interface_pci_addr(dut_node, dut_if1)
pci_address2 = Topology.get_interface_pci_addr(dut_node, dut_if2)
@@ -49,17 +49,15 @@ class DPDKTools(object):
ssh.connect(dut_node)
arch = Topology.get_node_arch(dut_node)
- cmd = '{fwdir}/tests/dpdk/dpdk_scripts/init_dpdk.sh '\
- '{pci1} {pci2} {arch}'.format(fwdir=Constants.REMOTE_FW_DIR,
- pci1=pci_address1,
- pci2=pci_address2,
- arch=arch)
+ cmd = f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts" \
+ f"/init_dpdk.sh {pci_address1} {pci_address2} {arch}"
ret_code, _, _ = ssh.exec_command_sudo(cmd, timeout=600)
if ret_code != 0:
- raise RuntimeError('Failed to bind the interfaces to igb_uio '
- 'at node {name}'.\
- format(name=dut_node['host']))
+ raise RuntimeError(
+ f"Failed to bind the interfaces to igb_uio at node "
+ f"{dut_node['host']}"
+ )
@staticmethod
def cleanup_dpdk_environment(dut_node, dut_if1, dut_if2):
@@ -75,7 +73,7 @@ class DPDKTools(object):
:type dut_if2: str
:raises RuntimeError: If it fails to cleanup the dpdk.
"""
- if dut_node['type'] == NodeType.DUT:
+ if dut_node[u"type"] == NodeType.DUT:
pci_address1 = Topology.get_interface_pci_addr(dut_node, dut_if1)
if1_driver = Topology.get_interface_driver(dut_node, dut_if1)
pci_address2 = Topology.get_interface_pci_addr(dut_node, dut_if2)
@@ -84,15 +82,15 @@ class DPDKTools(object):
ssh = SSH()
ssh.connect(dut_node)
- cmd = '{fwdir}/tests/dpdk/dpdk_scripts/cleanup_dpdk.sh ' \
- '{drv1} {pci1} {drv2} {pci2}'.\
- format(fwdir=Constants.REMOTE_FW_DIR, drv1=if1_driver,
- pci1=pci_address1, drv2=if2_driver, pci2=pci_address2)
+ cmd = f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts" \
+ f"/cleanup_dpdk.sh {if1_driver} {pci_address1} {if2_driver} " \
+ f"{pci_address2}"
ret_code, _, _ = ssh.exec_command_sudo(cmd, timeout=600)
if ret_code != 0:
- raise RuntimeError('Failed to cleanup the dpdk at node {name}'.
- format(name=dut_node['host']))
+ raise RuntimeError(
+ f"Failed to cleanup the dpdk at node {dut_node[u'host']}"
+ )
@staticmethod
def install_dpdk_test(node):
@@ -106,17 +104,16 @@ class DPDKTools(object):
"""
arch = Topology.get_node_arch(node)
- command = ('{fwdir}/tests/dpdk/dpdk_scripts/install_dpdk.sh {arch}'.
- format(fwdir=Constants.REMOTE_FW_DIR, arch=arch))
- message = 'Install the DPDK failed!'
+ command = f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts" \
+ f"/install_dpdk.sh {arch}"
+ message = u"Install the DPDK failed!"
exec_cmd_no_error(node, command, timeout=600, message=message)
- command = ('cat {fwdir}/dpdk*/VERSION'.
- format(fwdir=Constants.REMOTE_FW_DIR))
- message = 'Get DPDK version failed!'
+ command = f"cat {Constants.REMOTE_FW_DIR}/dpdk*/VERSION"
+ message = u"Get DPDK version failed!"
stdout, _ = exec_cmd_no_error(node, command, message=message)
- logger.info('DPDK Version: {version}'.format(version=stdout))
+ logger.info(f"DPDK Version: {stdout}")
@staticmethod
def install_dpdk_test_on_all_duts(nodes):
@@ -127,6 +124,6 @@ class DPDKTools(object):
:type nodes: dict
:returns: nothing
"""
- for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ for node in list(nodes.values()):
+ if node[u"type"] == NodeType.DUT:
DPDKTools.install_dpdk_test(node)
diff --git a/resources/libraries/python/DPDK/L2fwdTest.py b/resources/libraries/python/DPDK/L2fwdTest.py
index 70ca93c512..56a055cfc5 100644
--- a/resources/libraries/python/DPDK/L2fwdTest.py
+++ b/resources/libraries/python/DPDK/L2fwdTest.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -15,17 +15,17 @@
DUT nodes.
"""
-from resources.libraries.python.ssh import SSH
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.ssh import SSH
from resources.libraries.python.topology import NodeType, Topology
-class L2fwdTest(object):
+class L2fwdTest:
"""Setup the DPDK for l2fwd performance test."""
@staticmethod
- def start_the_l2fwd_test(dut_node, cpu_cores, nb_cores, queue_nums,
- jumbo_frames):
+ def start_the_l2fwd_test(
+ dut_node, cpu_cores, nb_cores, queue_nums, jumbo_frames):
"""
Execute the l2fwd on the dut_node.
@@ -42,19 +42,18 @@ class L2fwdTest(object):
:type jumbo_frames: bool
:raises RuntimeError: If the script "run_l2fwd.sh" fails.
"""
- if dut_node['type'] == NodeType.DUT:
+ if dut_node[u"type"] == NodeType.DUT:
ssh = SSH()
ssh.connect(dut_node)
arch = Topology.get_node_arch(dut_node)
- jumbo = 'yes' if jumbo_frames else 'no'
- cmd = '{fwdir}/tests/dpdk/dpdk_scripts/run_l2fwd.sh {cpu_cores} ' \
- '{nb_cores} {queues} {jumbo} {arch}'.\
- format(fwdir=Constants.REMOTE_FW_DIR, cpu_cores=cpu_cores,
- nb_cores=nb_cores, queues=queue_nums,
- jumbo=jumbo, arch=arch)
+ jumbo = u"yes" if jumbo_frames else u"no"
+ cmd = f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts" \
+ f"/run_l2fwd.sh {cpu_cores} {nb_cores} {queue_nums} {jumbo} " \
+ f"{arch}"
ret_code, _, _ = ssh.exec_command_sudo(cmd, timeout=600)
if ret_code != 0:
- raise RuntimeError('Failed to execute l2fwd test at node '
- '{name}'.format(name=dut_node['host']))
+ raise RuntimeError(
+ f"Failed to execute l2fwd test at node {dut_node['host']}"
+ )
diff --git a/resources/libraries/python/DPDK/L3fwdTest.py b/resources/libraries/python/DPDK/L3fwdTest.py
index 623075297b..0a045c01bf 100644
--- a/resources/libraries/python/DPDK/L3fwdTest.py
+++ b/resources/libraries/python/DPDK/L3fwdTest.py
@@ -15,17 +15,18 @@
This module exists to provide the l3fwd test for DPDK on topology nodes.
"""
-from resources.libraries.python.ssh import SSH
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.ssh import SSH
from resources.libraries.python.topology import NodeType, Topology
-class L3fwdTest(object):
+class L3fwdTest:
"""Test the DPDK l3fwd performance."""
@staticmethod
- def start_the_l3fwd_test(nodes_info, dut_node, dut_if1, dut_if2,
- nb_cores, lcores_list, queue_nums, jumbo_frames):
+ def start_the_l3fwd_test(
+ nodes_info, dut_node, dut_if1, dut_if2, nb_cores, lcores_list,
+ queue_nums, jumbo_frames):
"""
Execute the l3fwd on the dut_node.
@@ -47,11 +48,12 @@ class L3fwdTest(object):
:type queue_nums: str
:type jumbo_frames: bool
"""
- if dut_node['type'] == NodeType.DUT:
- adj_mac0, adj_mac1 = L3fwdTest.get_adj_mac(nodes_info, dut_node,
- dut_if1, dut_if2)
+ if dut_node[u"type"] == NodeType.DUT:
+ adj_mac0, adj_mac1 = L3fwdTest.get_adj_mac(
+ nodes_info, dut_node, dut_if1, dut_if2
+ )
- list_cores = [int(item) for item in lcores_list.split(',')]
+ list_cores = [int(item) for item in lcores_list.split(u",")]
# prepare the port config param
nb_cores = int(nb_cores)
@@ -60,23 +62,22 @@ class L3fwdTest(object):
for port in range(0, 2):
for queue in range(0, int(queue_nums)):
index = 0 if nb_cores == 1 else index
- port_config += '({port}, {queue}, {core}),'.\
- format(port=port, queue=queue, core=list_cores[index])
+ port_config += f"({port}, {queue}, {list_cores[index]}),"
index += 1
ssh = SSH()
ssh.connect(dut_node)
- cmd = '{fwdir}/tests/dpdk/dpdk_scripts/run_l3fwd.sh ' \
- '"{lcores}" "{ports}" {mac1} {mac2} {jumbo}'.\
- format(fwdir=Constants.REMOTE_FW_DIR, lcores=lcores_list,
- ports=port_config.rstrip(','), mac1=adj_mac0,
- mac2=adj_mac1, jumbo='yes' if jumbo_frames else 'no')
+ cmd = f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts" \
+ f"/run_l3fwd.sh \"{lcores_list}\" " \
+ f"\"{port_config.rstrip(u',')}\" " \
+ f"{adj_mac0} {adj_mac1} {u'yes' if jumbo_frames else u'no'}"
ret_code, _, _ = ssh.exec_command_sudo(cmd, timeout=600)
if ret_code != 0:
- raise Exception('Failed to execute l3fwd test at node {name}'
- .format(name=dut_node['host']))
+ raise Exception(
+ f"Failed to execute l3fwd test at node {dut_node[u'host']}"
+ )
@staticmethod
def get_adj_mac(nodes_info, dut_node, dut_if1, dut_if2):
@@ -102,12 +103,14 @@ class L3fwdTest(object):
# detect which is the port 0
if min(if_pci0, if_pci1) != if_pci0:
if_key0, if_key1 = if_key1, if_key0
- L3fwdTest.patch_l3fwd(dut_node, 'patch_l3fwd_flip_routes')
+ L3fwdTest.patch_l3fwd(dut_node, u"patch_l3fwd_flip_routes")
- adj_node0, adj_if_key0 = Topology.get_adjacent_node_and_interface( \
- nodes_info, dut_node, if_key0)
- adj_node1, adj_if_key1 = Topology.get_adjacent_node_and_interface( \
- nodes_info, dut_node, if_key1)
+ adj_node0, adj_if_key0 = Topology.get_adjacent_node_and_interface(
+ nodes_info, dut_node, if_key0
+ )
+ adj_node1, adj_if_key1 = Topology.get_adjacent_node_and_interface(
+ nodes_info, dut_node, if_key1
+ )
adj_mac0 = Topology.get_interface_mac(adj_node0, adj_if_key0)
adj_mac1 = Topology.get_interface_mac(adj_node1, adj_if_key1)
@@ -131,11 +134,10 @@ class L3fwdTest(object):
ssh.connect(node)
ret_code, _, _ = ssh.exec_command(
- '{fwdir}/tests/dpdk/dpdk_scripts/patch_l3fwd.sh {arch} '
- '{fwdir}/tests/dpdk/dpdk_scripts/{patch}'.
- format(fwdir=Constants.REMOTE_FW_DIR, arch=arch, patch=patch),
- timeout=600)
+ f"{Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts/patch_l3fwd.sh "
+ f"{arch} {Constants.REMOTE_FW_DIR}/tests/dpdk/dpdk_scripts/{patch}",
+ timeout=600
+ )
if ret_code != 0:
- raise RuntimeError('Patch of l3fwd failed.')
-
+ raise RuntimeError(u"Patch of l3fwd failed.")
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py
index 9ae06c138e..1cca974893 100644
--- a/resources/libraries/python/DUTSetup.py
+++ b/resources/libraries/python/DUTSetup.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -20,7 +20,7 @@ from resources.libraries.python.ssh import SSH, exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
-class DUTSetup(object):
+class DUTSetup:
"""Contains methods for setting up DUTs."""
@staticmethod
@@ -32,19 +32,16 @@ class DUTSetup(object):
:type node: dict
:type service: str
"""
- if DUTSetup.running_in_container(node):
- command = ('echo $(< /tmp/*supervisor*.log)')
- else:
- command = ('journalctl --no-pager --unit={name} '
- '--since="$(echo `systemctl show -p '
- 'ActiveEnterTimestamp {name}` | '
- 'awk \'{{print $2 $3}}\')"'.
- format(name=service))
- message = 'Node {host} failed to get logs from unit {name}'.\
- format(host=node['host'], name=service)
+ command = u"echo $(< /tmp/*supervisor*.log)"\
+ if DUTSetup.running_in_container(node) \
+ else f"journalctl --no-pager --unit={service} " \
+ f"--since=\"$(echo `systemctl show -p ActiveEnterTimestamp " \
+ f"{service}` | awk \'{{print $2 $3}}\')\""
+ message = f"Node {node[u'host']} failed to get logs from unit {service}"
- exec_cmd_no_error(node, command, timeout=30, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=30, sudo=True, message=message
+ )
@staticmethod
def get_service_logs_on_all_duts(nodes, service):
@@ -56,7 +53,7 @@ class DUTSetup(object):
:type service: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
DUTSetup.get_service_logs(node, service)
@staticmethod
@@ -68,15 +65,14 @@ class DUTSetup(object):
:type node: dict
:type service: str
"""
- if DUTSetup.running_in_container(node):
- command = 'supervisorctl restart {name}'.format(name=service)
- else:
- command = 'service {name} restart'.format(name=service)
- message = 'Node {host} failed to restart service {name}'.\
- format(host=node['host'], name=service)
+ command = f"supervisorctl restart {service}" \
+ if DUTSetup.running_in_container(node) \
+ else f"service {service} restart"
+ message = f"Node {node[u'host']} failed to restart service {service}"
exec_cmd_no_error(
- node, command, timeout=180, sudo=True, message=message)
+ node, command, timeout=180, sudo=True, message=message
+ )
DUTSetup.get_service_logs(node, service)
@@ -84,13 +80,13 @@ class DUTSetup(object):
def restart_service_on_all_duts(nodes, service):
"""Restart the named service on all DUTs.
- :param node: Nodes in the topology.
+ :param nodes: Nodes in the topology.
:param service: Service unit name.
- :type node: dict
+ :type nodes: dict
:type service: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
DUTSetup.restart_service(node, service)
@staticmethod
@@ -103,15 +99,14 @@ class DUTSetup(object):
:type service: str
"""
# TODO: change command to start once all parent function updated.
- if DUTSetup.running_in_container(node):
- command = 'supervisorctl restart {name}'.format(name=service)
- else:
- command = 'service {name} restart'.format(name=service)
- message = 'Node {host} failed to start service {name}'.\
- format(host=node['host'], name=service)
+ command = f"supervisorctl restart {service}" \
+ if DUTSetup.running_in_container(node) \
+ else f"service {service} restart"
+ message = f"Node {node[u'host']} failed to start service {service}"
exec_cmd_no_error(
- node, command, timeout=180, sudo=True, message=message)
+ node, command, timeout=180, sudo=True, message=message
+ )
DUTSetup.get_service_logs(node, service)
@@ -119,13 +114,13 @@ class DUTSetup(object):
def start_service_on_all_duts(nodes, service):
"""Start up the named service on all DUTs.
- :param node: Nodes in the topology.
+ :param nodes: Nodes in the topology.
:param service: Service unit name.
- :type node: dict
+ :type nodes: dict
:type service: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
DUTSetup.start_service(node, service)
@staticmethod
@@ -137,15 +132,14 @@ class DUTSetup(object):
:type node: dict
:type service: str
"""
- if DUTSetup.running_in_container(node):
- command = 'supervisorctl stop {name}'.format(name=service)
- else:
- command = 'service {name} stop'.format(name=service)
- message = 'Node {host} failed to stop service {name}'.\
- format(host=node['host'], name=service)
+ command = f"supervisorctl stop {service}" \
+ if DUTSetup.running_in_container(node) \
+ else f"service {service} stop"
+ message = f"Node {node[u'host']} failed to stop service {service}"
exec_cmd_no_error(
- node, command, timeout=180, sudo=True, message=message)
+ node, command, timeout=180, sudo=True, message=message
+ )
DUTSetup.get_service_logs(node, service)
@@ -153,13 +147,13 @@ class DUTSetup(object):
def stop_service_on_all_duts(nodes, service):
"""Stop the named service on all DUTs.
- :param node: Nodes in the topology.
+ :param nodes: Nodes in the topology.
:param service: Service unit name.
- :type node: dict
+ :type nodes: dict
:type service: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
DUTSetup.stop_service(node, service)
@staticmethod
@@ -175,28 +169,30 @@ class DUTSetup(object):
ssh = SSH()
ssh.connect(node)
+ retval = None
for i in range(3):
- logger.trace('Try {}: Get VPP PID'.format(i))
- ret_code, stdout, stderr = ssh.exec_command('pidof vpp')
+ logger.trace(f"Try {i}: Get VPP PID")
+ ret_code, stdout, stderr = ssh.exec_command(u"pidof vpp")
if int(ret_code):
- raise RuntimeError('Not possible to get PID of VPP process '
- 'on node: {0}\n {1}'.
- format(node['host'], stdout + stderr))
+ raise RuntimeError(
+ f"Not possible to get PID of VPP process on node: "
+ f"{node[u'host']}\n {stdout + stderr}"
+ )
pid_list = stdout.split()
if len(pid_list) == 1:
- return int(stdout)
+ retval = int(stdout)
elif not pid_list:
- logger.debug("No VPP PID found on node {0}".
- format(node['host']))
+ logger.debug(f"No VPP PID found on node {node[u'host']}")
continue
else:
- logger.debug("More then one VPP PID found on node {0}".
- format(node['host']))
- return [int(pid) for pid in pid_list]
+ logger.debug(
+ f"More then one VPP PID found on node {node[u'host']}"
+ )
+ retval = [int(pid) for pid in pid_list]
- return None
+ return retval
@staticmethod
def get_vpp_pids(nodes):
@@ -209,8 +205,8 @@ class DUTSetup(object):
"""
pids = dict()
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- pids[node['host']] = DUTSetup.get_vpp_pid(node)
+ if node[u"type"] == NodeType.DUT:
+ pids[node[u"host"]] = DUTSetup.get_vpp_pid(node)
return pids
@staticmethod
@@ -239,8 +235,9 @@ class DUTSetup(object):
# QAT is not initialized and we want to initialize with numvfs
DUTSetup.crypto_device_init(node, crypto_type, numvfs)
else:
- raise RuntimeError('QAT device failed to create VFs on {host}'.
- format(host=node['host']))
+ raise RuntimeError(
+ f"QAT device failed to create VFs on {node[u'host']}"
+ )
@staticmethod
def crypto_device_init(node, crypto_type, numvfs):
@@ -255,15 +252,16 @@ class DUTSetup(object):
:returns: nothing
:raises RuntimeError: If failed to stop VPP or QAT failed to initialize.
"""
- if crypto_type == "HW_DH895xcc":
- kernel_mod = "qat_dh895xcc"
- kernel_drv = "dh895xcc"
- elif crypto_type == "HW_C3xxx":
- kernel_mod = "qat_c3xxx"
- kernel_drv = "c3xxx"
+ if crypto_type == u"HW_DH895xcc":
+ kernel_mod = u"qat_dh895xcc"
+ kernel_drv = u"dh895xcc"
+ elif crypto_type == u"HW_C3xxx":
+ kernel_mod = u"qat_c3xxx"
+ kernel_drv = u"c3xxx"
else:
- raise RuntimeError('Unsupported crypto device type on {host}'.
- format(host=node['host']))
+ raise RuntimeError(
+ f"Unsupported crypto device type on {node[u'host']}"
+ )
pci_addr = Topology.get_cryptodev(node)
@@ -274,7 +272,8 @@ class DUTSetup(object):
DUTSetup.stop_service(node, Constants.VPP_UNIT)
current_driver = DUTSetup.get_pci_dev_driver(
- node, pci_addr.replace(':', r'\:'))
+ node, pci_addr.replace(u":", r"\:")
+ )
if current_driver is not None:
DUTSetup.pci_driver_unbind(node, pci_addr)
@@ -299,13 +298,13 @@ class DUTSetup(object):
:rtype: int
:raises RuntimeError: If failed to get Virtual Function PCI address.
"""
- command = "sh -c "\
- "'basename $(readlink /sys/bus/pci/devices/{pci}/virtfn{vf_id})'".\
- format(pci=pf_pci_addr, vf_id=vf_id)
- message = 'Failed to get virtual function PCI address.'
+ command = f"sh -c \"basename $(readlink " \
+ f"/sys/bus/pci/devices/{pf_pci_addr}/virtfn{vf_id})\""
+ message = u"Failed to get virtual function PCI address."
- stdout, _ = exec_cmd_no_error(node, command, timeout=30, sudo=True,
- message=message)
+ stdout, _ = exec_cmd_no_error(
+ node, command, timeout=30, sudo=True, message=message
+ )
return stdout.strip()
@@ -321,19 +320,20 @@ class DUTSetup(object):
:rtype: int
:raises RuntimeError: If PCI device is not SR-IOV capable.
"""
- command = 'cat /sys/bus/pci/devices/{pci}/sriov_numvfs'.\
- format(pci=pf_pci_addr.replace(':', r'\:'))
- message = 'PCI device {pci} is not a SR-IOV device.'.\
- format(pci=pf_pci_addr)
+ pci = pf_pci_addr.replace(u":", r"\:")
+ command = f"cat /sys/bus/pci/devices/{pci}/sriov_numvfs"
+ message = f"PCI device {pf_pci_addr} is not a SR-IOV device."
for _ in range(3):
- stdout, _ = exec_cmd_no_error(node, command, timeout=30, sudo=True,
- message=message)
+ stdout, _ = exec_cmd_no_error(
+ node, command, timeout=30, sudo=True, message=message
+ )
try:
sriov_numvfs = int(stdout)
except ValueError:
- logger.trace('Reading sriov_numvfs info failed on {host}'.
- format(host=node['host']))
+ logger.trace(
+ f"Reading sriov_numvfs info failed on {node[u'host']}"
+ )
else:
return sriov_numvfs
@@ -350,14 +350,15 @@ class DUTSetup(object):
:type numvfs: int
:raises RuntimeError: Failed to create VFs on PCI.
"""
- command = "sh -c "\
- "'echo {num} | tee /sys/bus/pci/devices/{pci}/sriov_numvfs'".\
- format(num=numvfs, pci=pf_pci_addr.replace(':', r'\:'))
- message = 'Failed to create {num} VFs on {pci} device on {host}'.\
- format(num=numvfs, pci=pf_pci_addr, host=node['host'])
+ pci = pf_pci_addr.replace(u":", r"\:")
+ command = f"sh -c \"echo {numvfs} | " \
+ f"tee /sys/bus/pci/devices/{pci}/sriov_numvfs\""
+ message = f"Failed to create {numvfs} VFs on {pf_pci_addr} device " \
+ f"on {node[u'host']}"
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
@staticmethod
def pci_driver_unbind(node, pci_addr):
@@ -369,14 +370,14 @@ class DUTSetup(object):
:type pci_addr: str
:raises RuntimeError: If PCI device unbind failed.
"""
- command = "sh -c "\
- "'echo {pci} | tee /sys/bus/pci/devices/{pcie}/driver/unbind'".\
- format(pci=pci_addr, pcie=pci_addr.replace(':', r'\:'))
- message = 'Failed to unbind PCI device {pci} on {host}'.\
- format(pci=pci_addr, host=node['host'])
+ pci = pci_addr.replace(u":", r"\:")
+ command = f"sh -c \"echo {pci_addr} | " \
+ f"tee /sys/bus/pci/devices/{pci}/driver/unbind\""
+ message = f"Failed to unbind PCI device {pci_addr} on {node[u'host']}"
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
@staticmethod
def pci_driver_bind(node, pci_addr, driver):
@@ -390,29 +391,29 @@ class DUTSetup(object):
:type driver: str
:raises RuntimeError: If PCI device bind failed.
"""
- message = 'Failed to bind PCI device {pci} to {driver} on host {host}'.\
- format(pci=pci_addr, driver=driver, host=node['host'])
-
- command = "sh -c "\
- "'echo {driver} | tee /sys/bus/pci/devices/{pci}/driver_override'".\
- format(driver=driver, pci=pci_addr.replace(':', r'\:'))
+ message = f"Failed to bind PCI device {pci_addr} to {driver} " \
+ f"on host {node[u'host']}"
+ pci = pci_addr.replace(u":", r"\:")
+ command = f"sh -c \"echo {driver} | " \
+ f"tee /sys/bus/pci/devices/{pci}/driver_override\""
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
- command = "sh -c "\
- "'echo {pci} | tee /sys/bus/pci/drivers/{driver}/bind'".\
- format(pci=pci_addr, driver=driver)
+ command = f"sh -c \"echo {pci_addr} | " \
+ f"tee /sys/bus/pci/drivers/{driver}/bind\""
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
- command = "sh -c "\
- "'echo | tee /sys/bus/pci/devices/{pci}/driver_override'".\
- format(pci=pci_addr.replace(':', r'\:'))
+ command = f"sh -c \"echo | " \
+ f"tee /sys/bus/pci/devices/{pci}/driver_override\""
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
@staticmethod
def pci_vf_driver_unbind(node, pf_pci_addr, vf_id):
@@ -427,18 +428,15 @@ class DUTSetup(object):
:raises RuntimeError: If Virtual Function unbind failed.
"""
vf_pci_addr = DUTSetup.get_virtfn_pci_addr(node, pf_pci_addr, vf_id)
- vf_path = "/sys/bus/pci/devices/{pf_pci_addr}/virtfn{vf_id}".\
- format(pf_pci_addr=pf_pci_addr.replace(':', r'\:'), vf_id=vf_id)
+ pf_pci = pf_pci_addr.replace(u":", r"\:")
+ vf_path = f"/sys/bus/pci/devices/{pf_pci}/virtfn{vf_id}"
- command = "sh -c "\
- "'echo {vf_pci_addr} | tee {vf_path}/driver/unbind'".\
- format(vf_pci_addr=vf_pci_addr, vf_path=vf_path)
+ command = f"sh -c \"echo {vf_pci_addr} | tee {vf_path}/driver/unbind\""
+ message = f"Failed to unbind VF {vf_pci_addr} on {node[u'host']}"
- message = 'Failed to unbind VF {vf_pci_addr} to on {host}'.\
- format(vf_pci_addr=vf_pci_addr, host=node['host'])
-
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
@staticmethod
def pci_vf_driver_bind(node, pf_pci_addr, vf_id, driver):
@@ -455,32 +453,29 @@ class DUTSetup(object):
:raises RuntimeError: If PCI device bind failed.
"""
vf_pci_addr = DUTSetup.get_virtfn_pci_addr(node, pf_pci_addr, vf_id)
- vf_path = "/sys/bus/pci/devices/{pf_pci_addr}/virtfn{vf_id}".\
- format(pf_pci_addr=pf_pci_addr.replace(':', r'\:'), vf_id=vf_id)
+ pf_pci = pf_pci_addr.replace(u":", r'\:')
+ vf_path = f"/sys/bus/pci/devices/{pf_pci}/virtfn{vf_id}"
- message = 'Failed to bind VF {vf_pci_addr} to {driver} on {host}'.\
- format(vf_pci_addr=vf_pci_addr, driver=driver, host=node['host'])
+ message = f"Failed to bind VF {vf_pci_addr} to {driver} " \
+ f"on {node[u'host']}"
+ command = f"sh -c \"echo {driver} | tee {vf_path}/driver_override\""
- command = "sh -c "\
- "'echo {driver} | tee {vf_path}/driver_override'".\
- format(driver=driver, vf_path=vf_path)
-
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
- command = "sh -c "\
- "'echo {vf_pci_addr} | tee /sys/bus/pci/drivers/{driver}/bind'".\
- format(vf_pci_addr=vf_pci_addr, driver=driver)
+ command = f"sh -c \"echo {vf_pci_addr} | " \
+ f"tee /sys/bus/pci/drivers/{driver}/bind\""
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
- command = "sh -c "\
- "'echo | tee {vf_path}/driver_override'".\
- format(vf_path=vf_path)
+ command = f"sh -c \"echo | tee {vf_path}/driver_override\""
- exec_cmd_no_error(node, command, timeout=120, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
@staticmethod
def get_pci_dev_driver(node, pci_addr):
@@ -510,13 +505,12 @@ class DUTSetup(object):
ssh.connect(node)
for i in range(3):
- logger.trace('Try number {0}: Get PCI device driver'.format(i))
+ logger.trace(f"Try number {i}: Get PCI device driver")
- cmd = 'lspci -vmmks {0}'.format(pci_addr)
+ cmd = f"lspci -vmmks {pci_addr}"
ret_code, stdout, _ = ssh.exec_command(cmd)
if int(ret_code):
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
for line in stdout.splitlines():
if not line:
@@ -524,21 +518,22 @@ class DUTSetup(object):
name = None
value = None
try:
- name, value = line.split("\t", 1)
+ name, value = line.split(u"\t", 1)
except ValueError:
- if name == "Driver:":
+ if name == u"Driver:":
return None
- if name == 'Driver:':
+ if name == u"Driver:":
return value
if i < 2:
- logger.trace('Driver for PCI device {} not found, executing '
- 'pci rescan and retrying'.format(pci_addr))
- cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
+ logger.trace(
+ f"Driver for PCI device {pci_addr} not found, "
+ f"executing pci rescan and retrying"
+ )
+ cmd = u"sh -c \"echo 1 > /sys/bus/pci/rescan\""
ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
return None
@@ -555,13 +550,14 @@ class DUTSetup(object):
:type force_load: bool
:raises RuntimeError: If module is not loaded or failed to load.
"""
- command = 'grep -w {module} /proc/modules'.format(module=module)
- message = 'Kernel module {module} is not loaded on host {host}'.\
- format(module=module, host=node['host'])
+ command = f"grep -w {module} /proc/modules"
+ message = f"Kernel module {module} is not loaded " \
+ f"on host {node[u'host']}"
try:
- exec_cmd_no_error(node, command, timeout=30, sudo=False,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=30, sudo=False, message=message
+ )
except RuntimeError:
if force_load:
# Module is not loaded and we want to load it
@@ -574,15 +570,15 @@ class DUTSetup(object):
"""Verify if kernel module is loaded on all DUTs. If parameter force
load is set to True, then try to load the modules.
- :param node: DUT nodes.
+ :param nodes: DUT nodes.
:param module: Module to verify.
:param force_load: If True then try to load module.
- :type node: dict
+ :type nodes: dict
:type module: str
:type force_load: bool
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
DUTSetup.verify_kernel_module(node, module, force_load)
@staticmethod
@@ -590,11 +586,11 @@ class DUTSetup(object):
"""Verify if uio driver kernel module is loaded on all DUTs. If module
is not present it will try to load it.
- :param node: DUT nodes.
- :type node: dict
+ :param nodes: DUT nodes.
+ :type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
uio_driver = Topology.get_uio_driver(node)
DUTSetup.verify_kernel_module(node, uio_driver, force_load=True)
@@ -609,9 +605,8 @@ class DUTSetup(object):
:returns: nothing
:raises RuntimeError: If loading failed.
"""
- command = 'modprobe {module}'.format(module=module)
- message = 'Failed to load {module} on host {host}'.\
- format(module=module, host=node['host'])
+ command = f"modprobe {module}"
+ message = f"Failed to load {module} on host {node[u'host']}"
exec_cmd_no_error(node, command, timeout=30, sudo=True, message=message)
@@ -627,31 +622,46 @@ class DUTSetup(object):
:raises RuntimeError: If failed to remove or install VPP.
"""
for node in nodes.values():
- message = 'Failed to install VPP on host {host}!'.\
- format(host=node['host'])
- if node['type'] == NodeType.DUT:
- command = 'ln -s /dev/null /etc/sysctl.d/80-vpp.conf || true'
+ message = f"Failed to install VPP on host {node[u'host']}!"
+ if node[u"type"] == NodeType.DUT:
+ command = u"ln -s /dev/null /etc/sysctl.d/80-vpp.conf || true"
exec_cmd_no_error(node, command, sudo=True)
- command = '. /etc/lsb-release; echo "${DISTRIB_ID}"'
+ command = u". /etc/lsb-release; echo \"${DISTRIB_ID}\""
stdout, _ = exec_cmd_no_error(node, command)
- if stdout.strip() == 'Ubuntu':
- exec_cmd_no_error(node, 'apt-get purge -y "*vpp*" || true',
- timeout=120, sudo=True)
- exec_cmd_no_error(node, 'dpkg -i --force-all {dir}*.deb'.
- format(dir=vpp_pkg_dir), timeout=120,
- sudo=True, message=message)
- exec_cmd_no_error(node, 'dpkg -l | grep vpp', sudo=True)
+ if stdout.strip() == u"Ubuntu":
+ exec_cmd_no_error(
+ node, u"apt-get purge -y '*vpp*' || true",
+ timeout=120, sudo=True
+ )
+ # workaround to avoid installation of vpp-api-python
+ exec_cmd_no_error(
+ node, u"rm -f {vpp_pkg_dir}vpp-api-python.deb",
+ timeout=120, sudo=True
+ )
+ exec_cmd_no_error(
+ node, f"dpkg -i --force-all {vpp_pkg_dir}*.deb",
+ timeout=120, sudo=True, message=message
+ )
+ exec_cmd_no_error(node, u"dpkg -l | grep vpp", sudo=True)
if DUTSetup.running_in_container(node):
DUTSetup.restart_service(node, Constants.VPP_UNIT)
else:
- exec_cmd_no_error(node, 'yum -y remove "*vpp*" || true',
- timeout=120, sudo=True)
- exec_cmd_no_error(node, 'rpm -ivh {dir}*.rpm'.
- format(dir=vpp_pkg_dir), timeout=120,
- sudo=True, message=message)
- exec_cmd_no_error(node, 'rpm -qai *vpp*', sudo=True)
+ exec_cmd_no_error(
+ node, u"yum -y remove '*vpp*' || true",
+ timeout=120, sudo=True
+ )
+ # workaround to avoid installation of vpp-api-python
+ exec_cmd_no_error(
+ node, u"rm -f {vpp_pkg_dir}vpp-api-python.rpm",
+ timeout=120, sudo=True
+ )
+ exec_cmd_no_error(
+ node, f"rpm -ivh {vpp_pkg_dir}*.rpm",
+ timeout=120, sudo=True, message=message
+ )
+ exec_cmd_no_error(node, u"rpm -qai *vpp*", sudo=True)
DUTSetup.restart_service(node, Constants.VPP_UNIT)
@staticmethod
@@ -661,14 +671,15 @@ class DUTSetup(object):
:param node: Topology node.
:type node: dict
:returns: True if running in docker container, false if not or failed
- to detect.
+ to detect.
:rtype: bool
"""
- command = "fgrep docker /proc/1/cgroup"
- message = 'Failed to get cgroup settings.'
+ command = u"fgrep docker /proc/1/cgroup"
+ message = u"Failed to get cgroup settings."
try:
- exec_cmd_no_error(node, command, timeout=30, sudo=False,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=30, sudo=False, message=message
+ )
except RuntimeError:
return False
return True
@@ -685,10 +696,9 @@ class DUTSetup(object):
:rtype: str
:raises RuntimeError: If getting output failed.
"""
- command = "docker inspect --format='"\
- "{{{{.GraphDriver.Data.MergedDir}}}}' {uuid}".format(uuid=uuid)
- message = 'Failed to get directory of {uuid} on host {host}'.\
- format(uuid=uuid, host=node['host'])
+ command = f"docker inspect " \
+ f"--format='{{{{.GraphDriver.Data.MergedDir}}}}' {uuid}"
+ message = f"Failed to get directory of {uuid} on host {node[u'host']}"
stdout, _ = exec_cmd_no_error(node, command, sudo=True, message=message)
return stdout.strip()
@@ -708,16 +718,17 @@ class DUTSetup(object):
for _ in range(3):
ret_code, stdout, _ = ssh.exec_command_sudo(
- "grep Hugepagesize /proc/meminfo | awk '{ print $2 }'")
+ u"grep Hugepagesize /proc/meminfo | awk '{ print $2 }'"
+ )
if ret_code == 0:
try:
huge_size = int(stdout)
except ValueError:
- logger.trace('Reading huge page size information failed')
+ logger.trace(u"Reading huge page size information failed")
else:
break
else:
- raise RuntimeError('Getting huge page size information failed.')
+ raise RuntimeError(u"Getting huge page size information failed.")
return huge_size
@staticmethod
@@ -738,17 +749,18 @@ class DUTSetup(object):
for _ in range(3):
ret_code, stdout, _ = ssh.exec_command_sudo(
- 'cat /sys/kernel/mm/hugepages/hugepages-{0}kB/free_hugepages'.
- format(huge_size))
+ f"cat /sys/kernel/mm/hugepages/hugepages-{huge_size}kB/"
+ f"free_hugepages"
+ )
if ret_code == 0:
try:
huge_free = int(stdout)
except ValueError:
- logger.trace('Reading free huge pages information failed')
+ logger.trace(u"Reading free huge pages information failed")
else:
break
else:
- raise RuntimeError('Getting free huge pages information failed.')
+ raise RuntimeError(u"Getting free huge pages information failed.")
return huge_free
@staticmethod
@@ -759,7 +771,6 @@ class DUTSetup(object):
:param huge_size: Size of hugepages.
:type node: dict
:type huge_size: int
-
:returns: Total number of huge pages in system.
:rtype: int
:raises RuntimeError: If reading failed for three times.
@@ -770,17 +781,18 @@ class DUTSetup(object):
for _ in range(3):
ret_code, stdout, _ = ssh.exec_command_sudo(
- 'cat /sys/kernel/mm/hugepages/hugepages-{0}kB/nr_hugepages'.
- format(huge_size))
+ f"cat /sys/kernel/mm/hugepages/hugepages-{huge_size}kB/"
+ f"nr_hugepages"
+ )
if ret_code == 0:
try:
huge_total = int(stdout)
except ValueError:
- logger.trace('Reading total huge pages information failed')
+ logger.trace(u"Reading total huge pages information failed")
else:
break
else:
- raise RuntimeError('Getting total huge pages information failed.')
+ raise RuntimeError(u"Getting total huge pages information failed.")
return huge_total
@staticmethod
@@ -796,9 +808,8 @@ class DUTSetup(object):
:type huge_mnt: str
:type mem_size: str
:type allocate: bool
-
:raises RuntimeError: Mounting hugetlbfs failed or not enough HugePages
- or increasing map count failed.
+ or increasing map count failed.
"""
# TODO: split function into smaller parts.
ssh = SSH()
@@ -809,7 +820,8 @@ class DUTSetup(object):
huge_free = DUTSetup.get_huge_page_free(node, huge_size)
huge_total = DUTSetup.get_huge_page_total(node, huge_size)
- # Check if memory reqested is available on host
+ # Check if memory requested is available on
+ mem_size = int(mem_size)
if (mem_size * 1024) > (huge_free * huge_size):
# If we want to allocate hugepage dynamically
if allocate:
@@ -818,43 +830,50 @@ class DUTSetup(object):
max_map_count = huge_to_allocate*4
# Increase maximum number of memory map areas a process may have
ret_code, _, _ = ssh.exec_command_sudo(
- 'echo "{0}" | sudo tee /proc/sys/vm/max_map_count'.
- format(max_map_count))
+ f"echo \"{max_map_count}\" | "
+ f"sudo tee /proc/sys/vm/max_map_count"
+ )
if int(ret_code) != 0:
- raise RuntimeError('Increase map count failed on {host}'.
- format(host=node['host']))
+ raise RuntimeError(
+ f"Increase map count failed on {node[u'host']}"
+ )
# Increase hugepage count
ret_code, _, _ = ssh.exec_command_sudo(
- 'echo "{0}" | sudo tee /proc/sys/vm/nr_hugepages'.
- format(huge_to_allocate))
+ f"echo \"{huge_to_allocate}\" | "
+ f"sudo tee /proc/sys/vm/nr_hugepages"
+ )
if int(ret_code) != 0:
- raise RuntimeError('Mount huge pages failed on {host}'.
- format(host=node['host']))
- # If we do not want to allocate dynamicaly end with error
+ raise RuntimeError(
+ f"Mount huge pages failed on {node[u'host']}"
+ )
+ # If we do not want to allocate dynamically end with error
else:
- raise RuntimeError('Not enough free huge pages: {0}, {1} MB'.
- format(huge_free, huge_free * huge_size))
+ raise RuntimeError(
+ f"Not enough free huge pages: {huge_free}, "
+ f"{huge_free * huge_size} MB"
+ )
# Check if huge pages mount point exist
has_huge_mnt = False
- ret_code, stdout, _ = ssh.exec_command('cat /proc/mounts')
+ ret_code, stdout, _ = ssh.exec_command(u"cat /proc/mounts")
if int(ret_code) == 0:
for line in stdout.splitlines():
# Try to find something like:
- # none /mnt/huge hugetlbfs rw,relatime,pagesize=2048k 0 0
+ # none /mnt/huge hugetlbfs rw,realtime,pagesize=2048k 0 0
mount = line.split()
- if mount[2] == 'hugetlbfs' and mount[1] == huge_mnt:
+ if mount[2] == u"hugetlbfs" and mount[1] == huge_mnt:
has_huge_mnt = True
break
# If huge page mount point not exist create one
if not has_huge_mnt:
- ret_code, _, _ = ssh.exec_command_sudo(
- 'mkdir -p {mnt}'.format(mnt=huge_mnt))
+ ret_code, _, _ = ssh.exec_command_sudo(f"mkdir -p {huge_mnt}")
if int(ret_code) != 0:
- raise RuntimeError('Create mount dir failed on {host}'.
- format(host=node['host']))
+ raise RuntimeError(
+ f"Create mount dir failed on {node[u'host']}"
+ )
ret_code, _, _ = ssh.exec_command_sudo(
- 'mount -t hugetlbfs -o pagesize=2048k none {mnt}'.
- format(mnt=huge_mnt))
+ f"mount -t hugetlbfs -o pagesize=2048k none {huge_mnt}"
+ )
if int(ret_code) != 0:
- raise RuntimeError('Mount huge pages failed on {host}'.
- format(host=node['host']))
+ raise RuntimeError(
+ f"Mount huge pages failed on {node[u'host']}"
+ )
diff --git a/resources/libraries/python/Dhcp.py b/resources/libraries/python/Dhcp.py
index e69ee0bcb8..ec2c895bc3 100644
--- a/resources/libraries/python/Dhcp.py
+++ b/resources/libraries/python/Dhcp.py
@@ -17,7 +17,7 @@
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-class DhcpProxy(object):
+class DhcpProxy:
"""DHCP Proxy utilities."""
@staticmethod
@@ -31,10 +31,9 @@ class DhcpProxy(object):
:returns: DHCP relay data.
:rtype: list
"""
- cmd = 'dhcp_proxy_dump'
- args = dict(is_ip6=1 if ip_version == 'ipv6' else 0)
- err_msg = 'Failed to get DHCP proxy dump on host {host}'.format(
- host=node['host'])
+ cmd = u"dhcp_proxy_dump"
+ args = dict(is_ip6=1 if ip_version == u"ipv6" else 0)
+ err_msg = f"Failed to get DHCP proxy dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
diff --git a/resources/libraries/python/DpdkUtil.py b/resources/libraries/python/DpdkUtil.py
index bbd6987be4..3a04cbd021 100644
--- a/resources/libraries/python/DpdkUtil.py
+++ b/resources/libraries/python/DpdkUtil.py
@@ -17,7 +17,7 @@ from resources.libraries.python.OptionString import OptionString
from resources.libraries.python.ssh import exec_cmd_no_error
-class DpdkUtil(object):
+class DpdkUtil:
"""Utilities for DPDK."""
@staticmethod
@@ -29,17 +29,19 @@ class DpdkUtil(object):
:returns: EAL parameters.
:rtype: OptionString
"""
- options = OptionString(prefix='-')
- options.add('v')
+ options = OptionString(prefix=u"-")
+ options.add(u"v")
# Set the hexadecimal bitmask of the cores to run on.
- options.add_with_value_from_dict('l', 'eal_corelist', kwargs)
+ options.add_with_value_from_dict(u"l", u"eal_corelist", kwargs)
# Set master core.
- options.add_with_value('-master-lcore', '0')
+ options.add_with_value(u"-master-lcore", u"0")
# Load an external driver. Multiple -d options are allowed.
options.add_with_value_if_from_dict(
- 'd', '/usr/lib/librte_pmd_virtio.so', 'eal_driver', kwargs, True)
+ u"d", u"/usr/lib/librte_pmd_virtio.so", u"eal_driver", kwargs, True
+ )
options.add_if_from_dict(
- '-in-memory', 'eal_in_memory', kwargs, False)
+ u"-in-memory", u"eal_in_memory", kwargs, False
+ )
return options
@staticmethod
@@ -51,50 +53,54 @@ class DpdkUtil(object):
:returns: PMD parameters.
:rtype: OptionString
"""
- options = OptionString(prefix='--')
+ options = OptionString(prefix=u"--")
# Set the forwarding mode: io, mac, mac_retry, mac_swap, flowgen,
# rxonly, txonly, csum, icmpecho, ieee1588
options.add_equals_from_dict(
- 'forward-mode', 'pmd_fwd_mode', kwargs, 'io')
+ u"forward-mode", u"pmd_fwd_mode", kwargs, u"io"
+ )
# Set the number of packets per burst to N.
- options.add_equals('burst', 64)
+ options.add_equals(u"burst", 64)
# Set the number of descriptors in the TX rings to N.
- options.add_equals_from_dict('txd', 'pmd_txd', kwargs, 1024)
+ options.add_equals_from_dict(u"txd", u"pmd_txd", kwargs, 1024)
# Set the number of descriptors in the RX rings to N.
- options.add_equals_from_dict('rxd', 'pmd_rxd', kwargs, 1024)
+ options.add_equals_from_dict(u"rxd", u"pmd_rxd", kwargs, 1024)
# Set the number of queues in the TX to N.
- options.add_equals_from_dict('txq', 'pmd_txq', kwargs, 1)
+ options.add_equals_from_dict(u"txq", u"pmd_txq", kwargs, 1)
# Set the number of queues in the RX to N.
- options.add_equals_from_dict('rxq', 'pmd_rxq', kwargs, 1)
+ options.add_equals_from_dict(u"rxq", u"pmd_rxq", kwargs, 1)
# Set the hexadecimal bitmask of offloads.
- options.add_equals_from_dict('tx-offloads', 'pmd_tx_offloads', kwargs)
+ options.add_equals_from_dict(u"tx-offloads", u"pmd_tx_offloads", kwargs)
# Set the number of mbufs to be allocated in the mbuf pools.
- options.add_equals_from_dict('total-num-mbufs', 'pmd_num_mbufs', kwargs)
+ options.add_equals_from_dict(
+ u"total-num-mbufs", u"pmd_num_mbufs", kwargs
+ )
# Disable hardware VLAN.
options.add_if_from_dict(
- 'disable-hw-vlan', 'pmd_disable_hw_vlan', kwargs, True)
+ u"disable-hw-vlan", u"pmd_disable_hw_vlan", kwargs, True
+ )
# Set the MAC address XX:XX:XX:XX:XX:XX of the peer port N
- options.add_equals_from_dict('eth-peer', 'pmd_eth_peer_0', kwargs)
- options.add_equals_from_dict('eth-peer', 'pmd_eth_peer_1', kwargs)
+ options.add_equals_from_dict(u"eth-peer", u"pmd_eth_peer_0", kwargs)
+ options.add_equals_from_dict(u"eth-peer", u"pmd_eth_peer_1", kwargs)
# Set the max packet length.
- options.add_equals_from_dict('max-pkt-len', 'pmd_max_pkt_len', kwargs)
+ options.add_equals_from_dict(u"max-pkt-len", u"pmd_max_pkt_len", kwargs)
# Set the number of forwarding cores based on coremask.
- options.add_equals_from_dict('nb-cores', 'pmd_nb_cores', kwargs)
+ options.add_equals_from_dict(u"nb-cores", u"pmd_nb_cores", kwargs)
return options
@staticmethod
def get_testpmd_cmdline(**kwargs):
"""Get DPDK testpmd command line arguments.
- :param args: Key-value testpmd parameters.
- :type args: dict
+ :param kwargs: Key-value testpmd parameters.
+ :type kwargs: dict
:returns: Command line string.
:rtype: OptionString
"""
options = OptionString()
- options.add('testpmd')
+ options.add(u"testpmd")
options.extend(DpdkUtil.get_eal_options(**kwargs))
- options.add('--')
+ options.add(u"--")
options.extend(DpdkUtil.get_pmd_options(**kwargs))
return options
@@ -103,14 +109,14 @@ class DpdkUtil(object):
"""Start DPDK testpmd app on VM node.
:param node: VM Node to start testpmd on.
- :param args: Key-value testpmd parameters.
+ :param kwargs: Key-value testpmd parameters.
:type node: dict
:type kwargs: dict
"""
cmd_options = OptionString()
- cmd_options.add("/start-testpmd.sh")
+ cmd_options.add(u"/start-testpmd.sh")
cmd_options.extend(DpdkUtil.get_eal_options(**kwargs))
- cmd_options.add('--')
+ cmd_options.add(u"--")
cmd_options.extend(DpdkUtil.get_pmd_options(**kwargs))
exec_cmd_no_error(node, cmd_options, sudo=True, disconnect=True)
@@ -122,5 +128,5 @@ class DpdkUtil(object):
:type node: dict
:returns: nothing
"""
- cmd = "/stop-testpmd.sh" # Completed string, simpler than OptionString.
+ cmd = u"/stop-testpmd.sh" # Completed string, simple one.
exec_cmd_no_error(node, cmd, sudo=True, disconnect=True)
diff --git a/resources/libraries/python/DropRateSearch.py b/resources/libraries/python/DropRateSearch.py
index e87ef95434..49e64d9219 100644
--- a/resources/libraries/python/DropRateSearch.py
+++ b/resources/libraries/python/DropRateSearch.py
@@ -20,7 +20,6 @@ from enum import Enum, unique
@unique
class SearchDirection(Enum):
"""Direction of linear search."""
-
TOP_DOWN = 1
BOTTOM_UP = 2
@@ -28,7 +27,6 @@ class SearchDirection(Enum):
@unique
class SearchResults(Enum):
"""Result of the drop rate search."""
-
SUCCESS = 1
FAILURE = 2
SUSPICIOUS = 3
@@ -37,7 +35,6 @@ class SearchResults(Enum):
@unique
class RateType(Enum):
"""Type of rate units."""
-
PERCENTAGE = 1
PACKETS_PER_SECOND = 2
BITS_PER_SECOND = 3
@@ -46,7 +43,6 @@ class RateType(Enum):
@unique
class LossAcceptanceType(Enum):
"""Type of the loss acceptance criteria."""
-
FRAMES = 1
PERCENTAGE = 2
@@ -54,16 +50,13 @@ class LossAcceptanceType(Enum):
@unique
class SearchResultType(Enum):
"""Type of search result evaluation."""
-
BEST_OF_N = 1
WORST_OF_N = 2
-class DropRateSearch(object):
+class DropRateSearch(metaclass=ABCMeta):
"""Abstract class with search algorithm implementation."""
- __metaclass__ = ABCMeta
-
def __init__(self):
# duration of traffic run (binary, linear)
self._duration = 60
@@ -86,8 +79,8 @@ class DropRateSearch(object):
# permitted values: LossAcceptanceType
self._loss_acceptance_type = LossAcceptanceType.FRAMES
# size of frames to send
- self._frame_size = "64"
- # binary convergence criterium type is self._rate_type
+ self._frame_size = u"64"
+ # binary convergence criterion type is self._rate_type
self._binary_convergence_threshold = 5000
# numbers of traffic runs during one rate step
self._max_attempts = 1
@@ -105,11 +98,11 @@ class DropRateSearch(object):
:returns: Latency stats.
:rtype: list
"""
- pass
@abstractmethod
- def measure_loss(self, rate, frame_size, loss_acceptance,
- loss_acceptance_type, traffic_profile, skip_warmup=False):
+ def measure_loss(
+ self, rate, frame_size, loss_acceptance, loss_acceptance_type,
+ traffic_profile, skip_warmup=False):
"""Send traffic from TG and measure count of dropped frames.
:param rate: Offered traffic load.
@@ -118,7 +111,7 @@ class DropRateSearch(object):
:param loss_acceptance_type: Type of permitted loss.
:param traffic_profile: Module name to use for traffic generation.
:param skip_warmup: Start TRex without warmup traffic if true.
- :type rate: int
+ :type rate: float
:type frame_size: str
:type loss_acceptance: float
:type loss_acceptance_type: LossAcceptanceType
@@ -127,7 +120,6 @@ class DropRateSearch(object):
:returns: Drop threshold exceeded? (True/False)
:rtype: bool
"""
- pass
def set_search_rate_boundaries(self, max_rate, min_rate):
"""Set search boundaries: min,max.
@@ -140,53 +132,55 @@ class DropRateSearch(object):
:raises ValueError: If min rate is lower than 0 or higher than max rate.
"""
if float(min_rate) <= 0:
- raise ValueError("min_rate must be higher than 0")
+ msg = u"min_rate must be higher than 0"
elif float(min_rate) > float(max_rate):
- raise ValueError("min_rate must be lower than max_rate")
+ msg = u"min_rate must be lower than max_rate"
else:
self._rate_max = float(max_rate)
self._rate_min = float(min_rate)
+ return
+ raise ValueError(msg)
def set_loss_acceptance(self, loss_acceptance):
- """Set loss acceptance treshold for PDR search.
+ """Set loss acceptance threshold for PDR search.
- :param loss_acceptance: Loss acceptance treshold for PDR search.
+ :param loss_acceptance: Loss acceptance threshold for PDR search.
:type loss_acceptance: str
:returns: nothing
:raises ValueError: If loss acceptance is lower than zero.
"""
- if float(loss_acceptance) < 0:
- raise ValueError("Loss acceptance must be higher or equal 0")
- else:
+ if float(loss_acceptance) >= 0:
self._loss_acceptance = float(loss_acceptance)
+ else:
+ raise ValueError(u"Loss acceptance must be higher or equal 0")
def get_loss_acceptance(self):
- """Return configured loss acceptance treshold.
+ """Return configured loss acceptance threshold.
- :returns: Loss acceptance treshold.
+ :returns: Loss acceptance threshold.
:rtype: float
"""
return self._loss_acceptance
def set_loss_acceptance_type_percentage(self):
- """Set loss acceptance treshold type to percentage.
+ """Set loss acceptance threshold type to percentage.
:returns: nothing
"""
self._loss_acceptance_type = LossAcceptanceType.PERCENTAGE
def set_loss_acceptance_type_frames(self):
- """Set loss acceptance treshold type to frames.
+ """Set loss acceptance threshold type to frames.
:returns: nothing
"""
self._loss_acceptance_type = LossAcceptanceType.FRAMES
def loss_acceptance_type_is_percentage(self):
- """Return true if loss acceptance treshold type is percentage,
+ """Return true if loss acceptance threshold type is percentage,
false otherwise.
- :returns: True if loss acceptance treshold type is percentage.
+ :returns: True if loss acceptance threshold type is percentage.
:rtype: boolean
"""
return self._loss_acceptance_type == LossAcceptanceType.PERCENTAGE
@@ -229,10 +223,10 @@ class DropRateSearch(object):
:returns: nothing
:raises Exception: If rate type is unknown.
"""
- if rate_type not in RateType:
- raise Exception("rate_type unknown: {}".format(rate_type))
- else:
+ if rate_type in RateType:
self._rate_type = rate_type
+ else:
+ raise Exception(f"rate_type unknown: {rate_type}")
def set_search_frame_size(self, frame_size):
"""Set size of frames to send.
@@ -263,7 +257,7 @@ class DropRateSearch(object):
def set_binary_convergence_threshold(self, convergence):
"""Set convergence for binary search.
- :param convergence: Treshold value number.
+ :param convergence: Threshold value number.
:type convergence: float
:returns: nothing
"""
@@ -272,7 +266,7 @@ class DropRateSearch(object):
def get_binary_convergence_threshold(self):
"""Get convergence for binary search.
- :returns: Treshold value number.
+ :returns: Threshold value number.
:rtype: float
"""
return self._binary_convergence_threshold
@@ -285,13 +279,14 @@ class DropRateSearch(object):
:raises ValueError: If rate type is unknown.
"""
if self._rate_type == RateType.PERCENTAGE:
- return "%"
+ retval = u"%"
elif self._rate_type == RateType.BITS_PER_SECOND:
- return "bps"
+ retval = u"bps"
elif self._rate_type == RateType.PACKETS_PER_SECOND:
- return "pps"
+ retval = u"pps"
else:
- raise ValueError("RateType unknown")
+ raise ValueError(u"RateType unknown")
+ return retval
def set_max_attempts(self, max_attempts):
"""Set maximum number of traffic runs during one rate step.
@@ -304,7 +299,7 @@ class DropRateSearch(object):
if int(max_attempts) > 0:
self._max_attempts = int(max_attempts)
else:
- raise ValueError("Max attempt must by greater than zero")
+ raise ValueError(u"Max attempt must by greater than zero")
def get_max_attempts(self):
"""Return maximum number of traffic runs during one rate step.
@@ -336,10 +331,10 @@ class DropRateSearch(object):
:returns: nothing
:raises ValueError: If search type is unknown.
"""
- if search_type not in SearchResultType:
- raise ValueError("search_type unknown: {}".format(search_type))
- else:
+ if search_type in SearchResultType:
self._search_result_type = search_type
+ else:
+ raise ValueError(f"search_type unknown: {search_type}")
@staticmethod
def _get_best_of_n(res_list):
@@ -375,11 +370,12 @@ class DropRateSearch(object):
:raises ValueError: If search result type is unknown.
"""
if self._search_result_type == SearchResultType.BEST_OF_N:
- return self._get_best_of_n(res_list)
+ retval = self._get_best_of_n(res_list)
elif self._search_result_type == SearchResultType.WORST_OF_N:
- return self._get_worst_of_n(res_list)
+ retval = self._get_worst_of_n(res_list)
else:
- raise ValueError("Unknown search result type")
+ raise ValueError(u"Unknown search result type")
+ return retval
def linear_search(self, start_rate, traffic_profile):
"""Linear search of rate with loss below acceptance criteria.
@@ -391,9 +387,8 @@ class DropRateSearch(object):
:returns: nothing
:raises ValueError: If start rate is not in range.
"""
-
if not self._rate_min <= float(start_rate) <= self._rate_max:
- raise ValueError("Start rate is not in min,max range")
+ raise ValueError(u"Start rate is not in min,max range")
rate = float(start_rate)
# the last but one step
@@ -403,9 +398,12 @@ class DropRateSearch(object):
while True:
res = []
for dummy in range(self._max_attempts):
- res.append(self.measure_loss(
- rate, self._frame_size, self._loss_acceptance,
- self._loss_acceptance_type, traffic_profile))
+ res.append(
+ self.measure_loss(
+ rate, self._frame_size, self._loss_acceptance,
+ self._loss_acceptance_type, traffic_profile
+ )
+ )
res = self._get_res_based_on_search_type(res)
@@ -419,21 +417,19 @@ class DropRateSearch(object):
# one last step with rate set to _rate_min
rate = self._rate_min
continue
- else:
- self._search_result = SearchResults.FAILURE
- self._search_result_rate = None
- return
- else:
- continue
+ self._search_result = SearchResults.FAILURE
+ self._search_result_rate = None
+ return
+ continue
# no loss => non/partial drop rate found
elif res:
self._search_result = SearchResults.SUCCESS
self._search_result_rate = rate
return
else:
- raise RuntimeError("Unknown search result")
+ raise RuntimeError(u"Unknown search result")
else:
- raise Exception("Unknown search direction")
+ raise Exception(u"Unknown search direction")
def verify_search_result(self):
"""Fail if search was not successful.
@@ -442,13 +438,14 @@ class DropRateSearch(object):
:rtype: tuple
:raises Exception: If search failed.
"""
- if self._search_result in [
- SearchResults.SUCCESS, SearchResults.SUSPICIOUS]:
+ if self._search_result in \
+ [SearchResults.SUCCESS, SearchResults.SUSPICIOUS]:
return self._search_result_rate, self.get_latency()
- raise Exception('Search FAILED')
+ raise Exception(u"Search FAILED")
- def binary_search(self, b_min, b_max, traffic_profile, skip_max_rate=False,
- skip_warmup=False):
+ def binary_search(
+ self, b_min, b_max, traffic_profile, skip_max_rate=False,
+ skip_warmup=False):
"""Binary search of rate with loss below acceptance criteria.
:param b_min: Min range rate.
@@ -464,13 +461,12 @@ class DropRateSearch(object):
:returns: nothing
:raises ValueError: If input values are not valid.
"""
-
if not self._rate_min <= float(b_min) <= self._rate_max:
- raise ValueError("Min rate is not in min,max range")
+ raise ValueError(u"Min rate is not in min,max range")
if not self._rate_min <= float(b_max) <= self._rate_max:
- raise ValueError("Max rate is not in min,max range")
+ raise ValueError(u"Max rate is not in min,max range")
if float(b_max) < float(b_min):
- raise ValueError("Min rate is greater than max rate")
+ raise ValueError(u"Min rate is greater than max rate")
# rate is half of interval + start of interval if not using max rate
rate = ((float(b_max) - float(b_min)) / 2) + float(b_min) \
@@ -492,7 +488,8 @@ class DropRateSearch(object):
res.append(self.measure_loss(
rate, self._frame_size, self._loss_acceptance,
self._loss_acceptance_type, traffic_profile,
- skip_warmup=skip_warmup))
+ skip_warmup=skip_warmup
+ ))
res = self._get_res_based_on_search_type(res)
@@ -514,11 +511,10 @@ class DropRateSearch(object):
:returns: nothing
:raises RuntimeError: If linear search failed.
"""
-
self.linear_search(start_rate, traffic_profile)
- if self._search_result in [SearchResults.SUCCESS,
- SearchResults.SUSPICIOUS]:
+ if self._search_result in \
+ [SearchResults.SUCCESS, SearchResults.SUSPICIOUS]:
b_min = self._search_result_rate
b_max = self._search_result_rate + self._rate_linear_step
@@ -537,15 +533,16 @@ class DropRateSearch(object):
# we will use binary search to refine search in one linear step
self.binary_search(b_min, b_max, traffic_profile, True)
- # linear and binary search succeed
- if self._search_result == SearchResults.SUCCESS:
- return
+
# linear search succeed but binary failed or suspicious
- else:
+ if self._search_result != SearchResults.SUCCESS:
self._search_result = SearchResults.SUSPICIOUS
self._search_result_rate = temp_rate
+ # linear and binary search succeed
+ else:
+ return
else:
- raise RuntimeError("Linear search FAILED")
+ raise RuntimeError(u"Linear search FAILED")
@staticmethod
def floats_are_close_equal(num_a, num_b, rel_tol=1e-9, abs_tol=0.0):
@@ -553,23 +550,24 @@ class DropRateSearch(object):
:param num_a: First number to compare.
:param num_b: Second number to compare.
- :param rel_tol=1e-9: The relative tolerance.
- :param abs_tol=0.0: The minimum absolute tolerance level.
+ :param rel_tol: The relative tolerance.
+ :param abs_tol: The minimum absolute tolerance level. (Optional,
+ default value: 0.0)
:type num_a: float
:type num_b: float
:type rel_tol: float
:type abs_tol: float
:returns: Returns True if num_a is close in value to num_b or equal.
- False otherwise.
+ False otherwise.
:rtype: boolean
:raises ValueError: If input values are not valid.
"""
-
if num_a == num_b:
return True
if rel_tol < 0.0 or abs_tol < 0.0:
- raise ValueError('Error tolerances must be non-negative')
+ raise ValueError(u"Error tolerances must be non-negative")
- return abs(num_b - num_a) <= max(rel_tol * max(abs(num_a), abs(num_b)),
- abs_tol)
+ return abs(num_b - num_a) <= max(
+ rel_tol * max(abs(num_a), abs(num_b)), abs_tol
+ )
diff --git a/resources/libraries/python/FilteredLogger.py b/resources/libraries/python/FilteredLogger.py
index a04eb67476..3df5714837 100644
--- a/resources/libraries/python/FilteredLogger.py
+++ b/resources/libraries/python/FilteredLogger.py
@@ -26,17 +26,18 @@ Logger.console() is not supported.
import logging
_LEVELS = {
- "TRACE": logging.DEBUG // 2,
- "DEBUG": logging.DEBUG,
- "INFO": logging.INFO,
- "HTML": logging.INFO,
- "WARN": logging.WARN,
- "ERROR": logging.ERROR,
- "CRITICAL": logging.CRITICAL,
- "NONE": logging.CRITICAL,
+ u"TRACE": logging.DEBUG // 2,
+ u"DEBUG": logging.DEBUG,
+ u"INFO": logging.INFO,
+ u"HTML": logging.INFO,
+ u"WARN": logging.WARN,
+ u"ERROR": logging.ERROR,
+ u"CRITICAL": logging.CRITICAL,
+ u"NONE": logging.CRITICAL,
}
-class FilteredLogger(object):
+
+class FilteredLogger:
"""Instances of this class have the similar API to robot.api.logger.
TODO: Support html argument?
@@ -57,7 +58,7 @@ class FilteredLogger(object):
self.logger_module = logger_module
self.min_level_num = _LEVELS[min_level.upper()]
- def write(self, message, farg=None, level="INFO"):
+ def write(self, message, farg=None, level=u"INFO"):
"""Forwards the message to logger if min_level is reached.
Formatting using '%' operator is used when farg argument is suplied.
@@ -76,20 +77,20 @@ class FilteredLogger(object):
def trace(self, message, farg=None):
"""Forward the message using the ``TRACE`` level."""
- self.write(message, farg=farg, level="TRACE")
+ self.write(message, farg=farg, level=u"TRACE")
def debug(self, message, farg=None):
"""Forward the message using the ``DEBUG`` level."""
- self.write(message, farg=farg, level="DEBUG")
+ self.write(message, farg=farg, level=u"DEBUG")
def info(self, message, farg=None):
"""Forward the message using the ``INFO`` level."""
- self.write(message, farg=farg, level="INFO")
+ self.write(message, farg=farg, level=u"INFO")
def warn(self, message, farg=None):
"""Forward the message using the ``WARN`` level."""
- self.write(message, farg=farg, level="WARN")
+ self.write(message, farg=farg, level=u"WARN")
def error(self, message, farg=None):
"""Forward the message using the ``ERROR`` level."""
- self.write(message, farg=farg, level="ERROR")
+ self.write(message, farg=farg, level=u"ERROR")
diff --git a/resources/libraries/python/GBP.py b/resources/libraries/python/GBP.py
index 3625640853..3d4d249b10 100644
--- a/resources/libraries/python/GBP.py
+++ b/resources/libraries/python/GBP.py
@@ -14,6 +14,7 @@
"""GBP utilities library."""
from enum import IntEnum
+
from ipaddress import ip_address
from resources.libraries.python.IPUtil import IPUtil
@@ -68,7 +69,7 @@ class GBPHashMode(IntEnum):
GBP_API_HASH_MODE_SYMETRIC = 3
-class GBP(object):
+class GBP:
"""GBP utilities."""
@staticmethod
@@ -90,9 +91,8 @@ class GBP(object):
:type ip4_uu_sw_if_index: int
:type ip6_uu_sw_if_index: int
"""
- cmd = 'gbp_route_domain_add'
- err_msg = 'Failed to add GBP route domain on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_route_domain_add"
+ err_msg = f"Failed to add GBP route domain on {node[u'host']}!"
args_in = dict(
rd=dict(
@@ -126,14 +126,14 @@ class GBP(object):
:type uu_fwd_sw_if_index: int
:type bm_flood_sw_if_index: int
"""
- cmd = 'gbp_bridge_domain_add'
- err_msg = 'Failed to add GBP bridge domain on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_bridge_domain_add"
+ err_msg = f"Failed to add GBP bridge domain on {node[u'host']}!"
args_in = dict(
bd=dict(
flags=getattr(
- GBPBridgeDomainFlags, 'GBP_BD_API_FLAG_NONE').value,
+ GBPBridgeDomainFlags, u"GBP_BD_API_FLAG_NONE"
+ ).value,
bvi_sw_if_index=bvi_sw_if_index,
uu_fwd_sw_if_index=uu_fwd_sw_if_index,
bm_flood_sw_if_index=bm_flood_sw_if_index,
@@ -166,9 +166,8 @@ class GBP(object):
:type uplink_sw_if_index: int
:type remote_ep_timeout: int
"""
- cmd = 'gbp_endpoint_group_add'
- err_msg = 'Failed to add GBP endpoint group on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_endpoint_group_add"
+ err_msg = f"Failed to add GBP endpoint group on {node[u'host']}!"
args_in = dict(
epg=dict(
@@ -201,17 +200,13 @@ class GBP(object):
:type mac_addr: str
:type sclass: int
"""
- cmd = 'gbp_endpoint_add'
- err_msg = 'Failed to add GBP endpoint on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_endpoint_add"
+ err_msg = f"Failed to add GBP endpoint on {node[u'host']}!"
ips = list()
- ips.append(IPUtil.create_ip_address_object(
- ip_address(unicode(ip_addr))))
- tun_src = IPUtil.create_ip_address_object(
- ip_address(unicode('0.0.0.0')))
- tun_dst = IPUtil.create_ip_address_object(
- ip_address(unicode('0.0.0.0')))
+ ips.append(IPUtil.create_ip_address_object(ip_address(ip_addr)))
+ tun_src = IPUtil.create_ip_address_object(ip_address(u"0.0.0.0"))
+ tun_dst = IPUtil.create_ip_address_object(ip_address(u"0.0.0.0"))
args_in = dict(
endpoint=dict(
@@ -221,7 +216,8 @@ class GBP(object):
mac=L2Util.mac_to_bin(mac_addr),
sclass=sclass,
flags=getattr(
- GBPEndpointFlags, 'GBP_API_ENDPOINT_FLAG_EXTERNAL').value,
+ GBPEndpointFlags, u"GBP_API_ENDPOINT_FLAG_EXTERNAL"
+ ).value,
tun=dict(
src=tun_src,
dst=tun_dst
@@ -245,9 +241,8 @@ class GBP(object):
:type bd_id: int
:type rd_id: int
"""
- cmd = 'gbp_ext_itf_add_del'
- err_msg = 'Failed to add external GBP interface on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_ext_itf_add_del"
+ err_msg = u"Failed to add external GBP interface on {node[u'host']}!"
args_in = dict(
is_add=1,
@@ -255,7 +250,7 @@ class GBP(object):
sw_if_index=sw_if_index,
bd_id=bd_id,
rd_id=rd_id,
- flags=getattr(GBPExtItfFlags, 'GBP_API_EXT_ITF_F_NONE').value
+ flags=getattr(GBPExtItfFlags, u"GBP_API_EXT_ITF_F_NONE").value
)
)
@@ -281,19 +276,19 @@ class GBP(object):
:type rd_id: int
:type sw_if_index: int
"""
- cmd = 'gbp_subnet_add_del'
- err_msg = 'Failed to add GBP subnet on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_subnet_add_del"
+ err_msg = f"Failed to add GBP subnet on {node[u'host']}!"
args_in = dict(
is_add=1,
subnet=dict(
- type=getattr(GBPSubnetType, 'GBP_API_SUBNET_L3_OUT').value,
+ type=getattr(GBPSubnetType, u"GBP_API_SUBNET_L3_OUT").value,
sw_if_index=sw_if_index,
sclass=sclass,
prefix=dict(
address=IPUtil.create_ip_address_object(
- ip_address(unicode(address))),
+ ip_address(address)
+ ),
len=int(subnet_length)
),
rd_id=rd_id
@@ -318,14 +313,13 @@ class GBP(object):
:type acl_index: int
:type hash_mode: str
"""
- cmd = 'gbp_contract_add_del'
- err_msg = 'Failed to add GBP contract on {node}!'\
- .format(node=node['host'])
+ cmd = u"gbp_contract_add_del"
+ err_msg = f"Failed to add GBP contract on {node[u'host']}!"
- hash_mode = 'GBP_API_HASH_MODE_SRC_IP' if hash_mode is None \
+ hash_mode = u"GBP_API_HASH_MODE_SRC_IP" if hash_mode is None \
else hash_mode
rule_permit = dict(
- action=getattr(GBPRuleAction, 'GBP_API_RULE_PERMIT').value,
+ action=getattr(GBPRuleAction, u"GBP_API_RULE_PERMIT").value,
nh_set=dict(
hash_mode=getattr(GBPHashMode, hash_mode).value,
n_nhs=8,
diff --git a/resources/libraries/python/HTTPRequest.py b/resources/libraries/python/HTTPRequest.py
deleted file mode 100644
index 0f650a89a1..0000000000
--- a/resources/libraries/python/HTTPRequest.py
+++ /dev/null
@@ -1,333 +0,0 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Implementation of HTTP requests GET, PUT, POST and DELETE used in
-communication with Honeycomb.
-
-The HTTP requests are implemented in the class HTTPRequest which uses
-requests.request.
-"""
-
-from ipaddress import IPv6Address, AddressValueError
-from enum import IntEnum, unique
-
-from robot.api.deco import keyword
-from robot.api import logger
-from robot.libraries.BuiltIn import BuiltIn
-
-from requests import request, RequestException, Timeout, TooManyRedirects, \
- HTTPError, ConnectionError
-from requests.auth import HTTPBasicAuth
-
-
-@unique
-class HTTPCodes(IntEnum):
- """HTTP status codes"""
- OK = 200 # HTTP standard code name. # pylint: disable=invalid-name
- ACCEPTED = 201
- UNAUTHORIZED = 401
- FORBIDDEN = 403
- NOT_FOUND = 404
- CONFLICT = 409
- INTERNAL_SERVER_ERROR = 500
- SERVICE_UNAVAILABLE = 503
-
-
-class HTTPRequestError(Exception):
- """Exception raised by HTTPRequest objects.
-
- When raising this exception, put this information to the message in this
- order:
-
- - short description of the encountered problem,
- - relevant messages if there are any collected, e.g., from caught
- exception,
- - relevant data if there are any collected.
-
- The logging is performed on two levels: 1. error - short description of the
- problem; 2. debug - detailed information.
- """
-
- def __init__(self, msg, details='', enable_logging=True):
- """Sets the exception message and enables / disables logging.
-
- It is not wanted to log errors when using these keywords together
- with keywords like "Wait until keyword succeeds". So you can disable
- logging by setting enable_logging to False.
-
- :param msg: Message to be displayed and logged.
- :param enable_logging: When True, logging is enabled, otherwise
- logging is disabled.
- :type msg: str
- :type enable_logging: bool
- """
- super(HTTPRequestError, self).__init__()
- self._msg = "{0}: {1}".format(self.__class__.__name__, msg)
- self._details = details
- if enable_logging:
- logger.info(self._msg)
- logger.debug(self._details)
-
- def __repr__(self):
- return repr(self._msg)
-
- def __str__(self):
- return str(self._msg)
-
-
-class HTTPRequest(object):
- """A class implementing HTTP requests GET, PUT, POST and DELETE used in
- communication with Honeycomb.
-
- The communication with Honeycomb and processing of all exceptions is done in
- the method _http_request which uses requests.request to send requests and
- receive responses. The received status code and content of response are
- logged on the debug level.
- All possible exceptions raised by requests.request are also processed there.
-
- The other methods (get, put, post and delete) use _http_request to send
- corresponding request.
-
- These methods must not be used as keywords in tests. Use keywords
- implemented in the module HoneycombAPIKeywords instead.
- """
-
- def __init__(self):
- pass
-
- @staticmethod
- def create_full_url(ip_addr, port, path):
- """Creates full url including host, port, and path to data.
-
- :param ip_addr: Server IP.
- :param port: Communication port.
- :param path: Path to data.
- :type ip_addr: str
- :type port: str or int
- :type path: str
- :returns: Full url.
- :rtype: str
- """
-
- try:
- IPv6Address(unicode(ip_addr))
- # IPv6 address must be in brackets
- ip_addr = "[{0}]".format(ip_addr)
- except (AttributeError, AddressValueError):
- pass
-
- return "http://{ip}:{port}{path}".format(ip=ip_addr, port=port,
- path=path)
-
- @staticmethod
- def _http_request(method, node, path, enable_logging=True, **kwargs):
- """Sends specified HTTP request and returns status code and response
- content.
-
- :param method: The method to be performed on the resource identified by
- the given request URI.
- :param node: Honeycomb node.
- :param path: URL path, e.g. /index.html.
- :param enable_logging: Used to suppress errors when checking Honeycomb
- state during suite setup and teardown.
- :param kwargs: Named parameters accepted by request.request:
- params -- (optional) Dictionary or bytes to be sent in the query
- string for the Request.
- data -- (optional) Dictionary, bytes, or file-like object to
- send in the body of the Request.
- json -- (optional) json data to send in the body of the Request.
- headers -- (optional) Dictionary of HTTP Headers to send with
- the Request.
- cookies -- (optional) Dict or CookieJar object to send with the
- Request.
- files -- (optional) Dictionary of 'name': file-like-objects
- (or {'name': ('filename', fileobj)}) for multipart encoding upload.
- timeout (float or tuple) -- (optional) How long to wait for the
- server to send data before giving up, as a float, or a (connect
- timeout, read timeout) tuple.
- allow_redirects (bool) -- (optional) Boolean. Set to True if POST/
- PUT/DELETE redirect following is allowed.
- proxies -- (optional) Dictionary mapping protocol to the URL of
- the proxy.
- verify -- (optional) whether the SSL cert will be verified.
- A CA_BUNDLE path can also be provided. Defaults to True.
- stream -- (optional) if False, the response content will be
- immediately downloaded.
- cert -- (optional) if String, path to ssl client cert file (.pem).
- If Tuple, ('cert', 'key') pair.
- :type method: str
- :type node: dict
- :type path: str
- :type enable_logging: bool
- :type kwargs: dict
- :returns: Status code and content of response.
- :rtype: tuple
- :raises HTTPRequestError: If
- 1. it is not possible to connect,
- 2. invalid HTTP response comes from server,
- 3. request exceeded the configured number of maximum re-directions,
- 4. request timed out,
- 5. there is any other unexpected HTTP request exception.
- """
- timeout = kwargs["timeout"]
-
- use_odl = BuiltIn().get_variable_value("${use_odl_client}")
-
- if use_odl:
- port = 8181
- # Using default ODL Restconf port
- # TODO: add node["honeycomb"]["odl_port"] to topology, use it here
- odl_url_part = "/network-topology:network-topology/topology/" \
- "topology-netconf/node/vpp/yang-ext:mount"
- else:
- port = node["honeycomb"]["port"]
- odl_url_part = ""
-
- try:
- path = path.format(odl_url_part=odl_url_part)
- except KeyError:
- pass
-
- url = HTTPRequest.create_full_url(node['host'],
- port,
- path)
- try:
- auth = HTTPBasicAuth(node['honeycomb']['user'],
- node['honeycomb']['passwd'])
- rsp = request(method, url, auth=auth, verify=False, **kwargs)
-
- logger.debug("Status code: {0}".format(rsp.status_code))
- logger.debug("Response: {0}".format(rsp.content))
-
- return rsp.status_code, rsp.content
-
- except ConnectionError as err:
- # Switching the logging on / off is needed only for
- # "requests.ConnectionError"
- raise HTTPRequestError("Not possible to connect to {0}:{1}.".
- format(node['host'],
- node['honeycomb']['port']),
- repr(err), enable_logging=enable_logging)
- except HTTPError as err:
- raise HTTPRequestError("Invalid HTTP response from {0}.".
- format(node['host']), repr(err))
- except TooManyRedirects as err:
- raise HTTPRequestError("Request exceeded the configured number "
- "of maximum re-directions.", repr(err))
- except Timeout as err:
- raise HTTPRequestError("Request timed out. Timeout is set to {0}.".
- format(timeout), repr(err))
- except RequestException as err:
- raise HTTPRequestError("Unexpected HTTP request exception.",
- repr(err))
-
- @staticmethod
- @keyword(name="HTTP Get")
- def get(node, path, headers=None, timeout=15, enable_logging=True):
- """Sends a GET request and returns the response and status code.
-
- :param node: Honeycomb node.
- :param path: URL path, e.g. /index.html.
- :param headers: Dictionary of HTTP Headers to send with the Request.
- :param timeout: How long to wait for the server to send data before
- giving up, as a float, or a (connect timeout, read timeout) tuple.
- :param enable_logging: Used to suppress errors when checking Honeycomb
- state during suite setup and teardown. When True,
- logging is enabled, otherwise logging is disabled.
- :type node: dict
- :type path: str
- :type headers: dict
- :type timeout: float or tuple
- :type enable_logging: bool
- :returns: Status code and content of response.
- :rtype: tuple
- """
-
- return HTTPRequest._http_request('GET', node, path,
- enable_logging=enable_logging,
- headers=headers, timeout=timeout)
-
- @staticmethod
- @keyword(name="HTTP Put")
- def put(node, path, headers=None, payload=None, json=None, timeout=15):
- """Sends a PUT request and returns the response and status code.
-
- :param node: Honeycomb node.
- :param path: URL path, e.g. /index.html.
- :param headers: Dictionary of HTTP Headers to send with the Request.
- :param payload: Dictionary, bytes, or file-like object to send in
- the body of the Request.
- :param json: JSON formatted string to send in the body of the Request.
- :param timeout: How long to wait for the server to send data before
- giving up, as a float, or a (connect timeout, read timeout) tuple.
- :type node: dict
- :type path: str
- :type headers: dict
- :type payload: dict, bytes, or file-like object
- :type json: str
- :type timeout: float or tuple
- :returns: Status code and content of response.
- :rtype: tuple
- """
- return HTTPRequest._http_request('PUT', node, path, headers=headers,
- data=payload, json=json,
- timeout=timeout)
-
- @staticmethod
- @keyword(name="HTTP Post")
- def post(node, path, headers=None, payload=None, json=None, timeout=15,
- enable_logging=True):
- """Sends a POST request and returns the response and status code.
-
- :param node: Honeycomb node.
- :param path: URL path, e.g. /index.html.
- :param headers: Dictionary of HTTP Headers to send with the Request.
- :param payload: Dictionary, bytes, or file-like object to send in
- the body of the Request.
- :param json: JSON formatted string to send in the body of the Request.
- :param timeout: How long to wait for the server to send data before
- giving up, as a float, or a (connect timeout, read timeout) tuple.
- :param enable_logging: Used to suppress errors when checking ODL
- state during suite setup and teardown. When True,
- logging is enabled, otherwise logging is disabled.
- :type node: dict
- :type path: str
- :type headers: dict
- :type payload: dict, bytes, or file-like object
- :type json: str
- :type timeout: float or tuple
- :type enable_logging: bool
- :returns: Status code and content of response.
- :rtype: tuple
- """
- return HTTPRequest._http_request('POST', node, path,
- enable_logging=enable_logging,
- headers=headers, data=payload,
- json=json, timeout=timeout)
-
- @staticmethod
- @keyword(name="HTTP Delete")
- def delete(node, path, timeout=15):
- """Sends a DELETE request and returns the response and status code.
-
- :param node: Honeycomb node.
- :param path: URL path, e.g. /index.html.
- :param timeout: How long to wait for the server to send data before
- giving up, as a float, or a (connect timeout, read timeout) tuple.
- :type node: dict
- :type path: str
- :type timeout: float or tuple
- :returns: Status code and content of response.
- :rtype: tuple
- """
- return HTTPRequest._http_request('DELETE', node, path, timeout=timeout)
diff --git a/resources/libraries/python/IPUtil.py b/resources/libraries/python/IPUtil.py
index de018b9565..f99deb1e08 100644
--- a/resources/libraries/python/IPUtil.py
+++ b/resources/libraries/python/IPUtil.py
@@ -16,6 +16,7 @@
import re
from enum import IntEnum
+
from ipaddress import ip_address
from resources.libraries.python.Constants import Constants
@@ -55,7 +56,7 @@ class FibPathType(IntEnum):
class FibPathFlags(IntEnum):
"""FIB path flags."""
FIB_PATH_FLAG_NONE = 0
- FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED = 1 #pylint: disable=invalid-name
+ FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED = 1 # pylint: disable=invalid-name
FIB_PATH_FLAG_RESOLVE_VIA_HOST = 2
@@ -68,7 +69,7 @@ class FibPathNhProto(IntEnum):
FIB_PATH_NH_PROTO_BIER = 4
-class IPUtil(object):
+class IPUtil:
"""Common IP utilities"""
@staticmethod
@@ -81,7 +82,7 @@ class IPUtil(object):
:returns: Integer representation of IP address.
:rtype: int
"""
- return int(ip_address(unicode(ip_str)))
+ return int(ip_address(ip_str))
@staticmethod
def int_to_ip(ip_int):
@@ -115,13 +116,14 @@ class IPUtil(object):
if not sw_if_index:
return list()
- is_ipv6 = 1 if ip_version == 'ipv6' else 0
+ is_ipv6 = 1 if ip_version == u"ipv6" else 0
- cmd = 'ip_address_dump'
- args = dict(sw_if_index=sw_if_index,
- is_ipv6=is_ipv6)
- err_msg = 'Failed to get L2FIB dump on host {host}'.format(
- host=node['host'])
+ cmd = u"ip_address_dump"
+ args = dict(
+ sw_if_index=sw_if_index,
+ is_ipv6=is_ipv6
+ )
+ err_msg = f"Failed to get L2FIB dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
@@ -138,11 +140,10 @@ class IPUtil(object):
:param node: VPP node.
:type node: dict
"""
-
- PapiSocketExecutor.run_cli_cmd(node, 'show ip fib')
- PapiSocketExecutor.run_cli_cmd(node, 'show ip fib summary')
- PapiSocketExecutor.run_cli_cmd(node, 'show ip6 fib')
- PapiSocketExecutor.run_cli_cmd(node, 'show ip6 fib summary')
+ PapiSocketExecutor.run_cli_cmd(node, u"show ip fib")
+ PapiSocketExecutor.run_cli_cmd(node, u"show ip fib summary")
+ PapiSocketExecutor.run_cli_cmd(node, u"show ip6 fib")
+ PapiSocketExecutor.run_cli_cmd(node, u"show ip6 fib summary")
@staticmethod
def vpp_get_ip_tables_prefix(node, address):
@@ -153,13 +154,12 @@ class IPUtil(object):
:type node: dict
:type address: str
"""
- addr = ip_address(unicode(address))
+ addr = ip_address(address)
+ ip_ver = u"ip6" if addr.version == 6 else u"ip"
PapiSocketExecutor.run_cli_cmd(
- node, 'show {ip_ver} fib {addr}/{addr_len}'.format(
- ip_ver='ip6' if addr.version == 6 else 'ip',
- addr=addr,
- addr_len=addr.max_prefixlen))
+ node, f"show {ip_ver} fib {addr}/{addr.max_prefixlen}"
+ )
@staticmethod
def get_interface_vrf_table(node, interface, ip_version='ipv4'):
@@ -176,18 +176,17 @@ class IPUtil(object):
"""
sw_if_index = InterfaceUtil.get_interface_index(node, interface)
- cmd = 'sw_interface_get_table'
+ cmd = u"sw_interface_get_table"
args = dict(
sw_if_index=sw_if_index,
- is_ipv6=True if ip_version == 'ipv6' else False
+ is_ipv6=bool(ip_version == u"ipv6")
)
- err_msg = 'Failed to get VRF id assigned to interface {ifc}'.format(
- ifc=interface)
+ err_msg = f"Failed to get VRF id assigned to interface {interface}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)
- return reply['vrf_id']
+ return reply[u"vrf_id"]
@staticmethod
def vpp_ip_source_check_setup(node, if_name):
@@ -198,14 +197,13 @@ class IPUtil(object):
:type node: dict
:type if_name: str
"""
- cmd = 'ip_source_check_interface_add_del'
+ cmd = u"ip_source_check_interface_add_del"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, if_name),
is_add=1,
loose=0
)
- err_msg = 'Failed to enable source check on interface {ifc}'.format(
- ifc=if_name)
+ err_msg = f"Failed to enable source check on interface {if_name}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -220,12 +218,12 @@ class IPUtil(object):
:type interface: str
:type addr: str
"""
- cmd = 'ip_probe_neighbor'
+ cmd = u"ip_probe_neighbor"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
- dst=str(addr))
- err_msg = 'VPP ip probe {dev} {ip} failed on {h}'.format(
- dev=interface, ip=addr, h=node['host'])
+ dst=str(addr)
+ )
+ err_msg = f"VPP ip probe {interface} {addr} failed on {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -239,16 +237,15 @@ class IPUtil(object):
:type ip1: str
:type ip2: str
"""
- addr1 = ip_address(unicode(ip1))
- addr2 = ip_address(unicode(ip2))
+ addr1 = ip_address(ip1)
+ addr2 = ip_address(ip2)
if addr1 != addr2:
- raise AssertionError('IP addresses are not equal: {0} != {1}'.
- format(ip1, ip2))
+ raise AssertionError(f"IP addresses are not equal: {ip1} != {ip2}")
@staticmethod
- def setup_network_namespace(node, namespace_name, interface_name,
- ip_addr, prefix):
+ def setup_network_namespace(
+ node, namespace_name, interface_name, ip_addr, prefix):
"""Setup namespace on given node and attach interface and IP to
this namespace. Applicable also on TG node.
@@ -263,19 +260,18 @@ class IPUtil(object):
:type ip_addr: str
:type prefix: int
"""
- cmd = ('ip netns add {0}'.format(namespace_name))
+ cmd = f"ip netns add {namespace_name}"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = ('ip link set dev {0} up netns {1}'.format(interface_name,
- namespace_name))
+ cmd = f"ip link set dev {interface_name} up netns {namespace_name}"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = ('ip netns exec {0} ip addr add {1}/{2} dev {3}'.format(
- namespace_name, ip_addr, prefix, interface_name))
+ cmd = f"ip netns exec {namespace_name} ip addr add {ip_addr}/{prefix}" \
+ f" dev {interface_name}"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def linux_enable_forwarding(node, ip_ver='ipv4'):
+ def linux_enable_forwarding(node, ip_ver=u"ipv4"):
"""Enable forwarding on a Linux node, e.g. VM.
:param node: VPP node.
@@ -283,7 +279,7 @@ class IPUtil(object):
:type node: dict
:type ip_ver: str
"""
- cmd = 'sysctl -w net.{0}.ip_forward=1'.format(ip_ver)
+ cmd = f"sysctl -w net.{ip_ver}.ip_forward=1"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
@@ -298,15 +294,16 @@ class IPUtil(object):
:rtype: str
:raises RuntimeError: If cannot get the information about interfaces.
"""
- regex_intf_info = r"pci@" \
- r"([0-9a-f]{4}:[0-9a-f]{2}:[0-9a-f]{2}.[0-9a-f])\s*" \
- r"([a-zA-Z0-9]*)\s*network"
+ regex_intf_info = \
+ r"pci@([0-9a-f]{4}:[0-9a-f]{2}:[0-9a-f]{2}.[0-9a-f])\s" \
+ r"*([a-zA-Z0-9]*)\s*network"
- cmd = "lshw -class network -businfo"
+ cmd = u"lshw -class network -businfo"
ret_code, stdout, stderr = exec_cmd(node, cmd, timeout=30, sudo=True)
if ret_code != 0:
- raise RuntimeError('Could not get information about interfaces:\n'
- '{err}'.format(err=stderr))
+ raise RuntimeError(
+ f"Could not get information about interfaces:\n{stderr}"
+ )
for line in stdout.splitlines()[2:]:
try:
@@ -326,12 +323,12 @@ class IPUtil(object):
:type interface: str
:raises RuntimeError: If the interface could not be set up.
"""
- cmd = "ip link set {0} up".format(interface)
+ cmd = f"ip link set {interface} up"
exec_cmd_no_error(node, cmd, timeout=30, sudo=True)
@staticmethod
- def set_linux_interface_ip(node, interface, ip_addr, prefix,
- namespace=None):
+ def set_linux_interface_ip(
+ node, interface, ip_addr, prefix, namespace=None):
"""Set IP address to interface in linux.
:param node: VPP/TG node.
@@ -347,11 +344,10 @@ class IPUtil(object):
:raises RuntimeError: IP could not be set.
"""
if namespace is not None:
- cmd = 'ip netns exec {ns} ip addr add {ip}/{p} dev {dev}'.format(
- ns=namespace, ip=ip_addr, p=prefix, dev=interface)
+ cmd = f"ip netns exec {namespace} ip addr add {ip_addr}/{prefix}" \
+ f" dev {interface}"
else:
- cmd = 'ip addr add {ip}/{p} dev {dev}'.format(
- ip=ip_addr, p=prefix, dev=interface)
+ cmd = f"ip addr add {ip_addr}/{prefix} dev {interface}"
exec_cmd_no_error(node, cmd, timeout=5, sudo=True)
@@ -371,15 +367,16 @@ class IPUtil(object):
:type namespace: str
"""
if namespace is not None:
- cmd = 'ip netns exec {} ip route add {}/{} via {}'.format(
- namespace, ip_addr, prefix, gateway)
+ cmd = f"ip netns exec {namespace} ip route add {ip_addr}/{prefix}" \
+ f" via {gateway}"
else:
- cmd = 'ip route add {}/{} via {}'.format(ip_addr, prefix, gateway)
+ cmd = f"ip route add {ip_addr}/{prefix} via {gateway}"
+
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def vpp_interface_set_ip_address(node, interface, address,
- prefix_length=None):
+ def vpp_interface_set_ip_address(
+ node, interface, address, prefix_length=None):
"""Set IP address to VPP interface.
:param node: VPP node.
@@ -391,9 +388,9 @@ class IPUtil(object):
:type address: str
:type prefix_length: int
"""
- ip_addr = ip_address(unicode(address))
+ ip_addr = ip_address(address)
- cmd = 'sw_interface_add_del_address'
+ cmd = u"sw_interface_add_del_address"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
is_add=True,
@@ -401,10 +398,11 @@ class IPUtil(object):
prefix=IPUtil.create_prefix_object(
ip_addr,
prefix_length if prefix_length else 128
- if ip_addr.version == 6 else 32)
+ if ip_addr.version == 6 else 32
+ )
)
- err_msg = 'Failed to add IP address on interface {ifc}'.format(
- ifc=interface)
+ err_msg = f"Failed to add IP address on interface {interface}"
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -421,19 +419,21 @@ class IPUtil(object):
:type ip_addr: str
:type mac_address: str
"""
- dst_ip = ip_address(unicode(ip_addr))
+ dst_ip = ip_address(ip_addr)
neighbor = dict(
sw_if_index=Topology.get_interface_sw_index(node, iface_key),
flags=0,
mac_address=str(mac_address),
- ip_address=str(dst_ip))
- cmd = 'ip_neighbor_add_del'
+ ip_address=str(dst_ip)
+ )
+ cmd = u"ip_neighbor_add_del"
args = dict(
is_add=1,
- neighbor=neighbor)
- err_msg = 'Failed to add IP neighbor on interface {ifc}'.format(
- ifc=iface_key)
+ neighbor=neighbor
+ )
+ err_msg = f"Failed to add IP neighbor on interface {iface_key}"
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -460,9 +460,11 @@ class IPUtil(object):
"""
return dict(
af=getattr(
- AddressFamily, 'ADDRESS_IP6' if ip_addr.version == 6
- else 'ADDRESS_IP4').value,
- un=IPUtil.union_addr(ip_addr))
+ AddressFamily, u"ADDRESS_IP6" if ip_addr.version == 6
+ else u"ADDRESS_IP4"
+ ).value,
+ un=IPUtil.union_addr(ip_addr)
+ )
@staticmethod
def create_prefix_object(ip_addr, addr_len):
@@ -508,36 +510,37 @@ class IPUtil(object):
:returns: route parameter basic structure
:rtype: dict
"""
- interface = kwargs.get('interface', '')
- gateway = kwargs.get('gateway', '')
+ interface = kwargs.get(u"interface", u"")
+ gateway = kwargs.get(u"gateway", u"")
- net_addr = ip_address(unicode(network))
+ net_addr = ip_address(network)
prefix = IPUtil.create_prefix_object(net_addr, prefix_len)
paths = list()
n_hop = dict(
- address=IPUtil.union_addr(ip_address(unicode(gateway))) if gateway
- else 0,
+ address=IPUtil.union_addr(ip_address(gateway)) if gateway else 0,
via_label=MPLS_LABEL_INVALID,
obj_id=Constants.BITWISE_NON_ZERO
)
path = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface)
if interface else Constants.BITWISE_NON_ZERO,
- table_id=int(kwargs.get('lookup_vrf', 0)),
+ table_id=int(kwargs.get(u"lookup_vrf", 0)),
rpf_id=Constants.BITWISE_NON_ZERO,
- weight=int(kwargs.get('weight', 1)),
+ weight=int(kwargs.get(u"weight", 1)),
preference=1,
type=getattr(
- FibPathType, 'FIB_PATH_TYPE_LOCAL'
- if kwargs.get('local', False)
- else 'FIB_PATH_TYPE_NORMAL').value,
- flags=getattr(FibPathFlags, 'FIB_PATH_FLAG_NONE').value,
+ FibPathType, u"FIB_PATH_TYPE_LOCAL"
+ if kwargs.get(u"local", False)
+ else u"FIB_PATH_TYPE_NORMAL"
+ ).value,
+ flags=getattr(FibPathFlags, u"FIB_PATH_FLAG_NONE").value,
proto=getattr(
- FibPathNhProto, 'FIB_PATH_NH_PROTO_IP6'
+ FibPathNhProto, u"FIB_PATH_NH_PROTO_IP6"
if net_addr.version == 6
- else 'FIB_PATH_NH_PROTO_IP4').value,
+ else u"FIB_PATH_NH_PROTO_IP4"
+ ).value,
nh=n_hop,
n_labels=0,
label_stack=list(0 for _ in range(16))
@@ -545,7 +548,7 @@ class IPUtil(object):
paths.append(path)
route = dict(
- table_id=int(kwargs.get('vrf', 0)),
+ table_id=int(kwargs.get(u"vrf", 0)),
prefix=prefix,
n_paths=len(paths),
paths=paths
@@ -576,43 +579,45 @@ class IPUtil(object):
:type prefix_len: int
:type kwargs: dict
"""
- count = kwargs.get("count", 1)
+ count = kwargs.get(u"count", 1)
if count > 100:
- gateway = kwargs.get("gateway", '')
- interface = kwargs.get("interface", '')
- vrf = kwargs.get("vrf", None)
- multipath = kwargs.get("multipath", False)
+ gateway = kwargs.get(u"gateway", '')
+ interface = kwargs.get(u"interface", '')
+ vrf = kwargs.get(u"vrf", None)
+ multipath = kwargs.get(u"multipath", False)
with VatTerminal(node, json_param=False) as vat:
+
vat.vat_terminal_exec_cmd_from_template(
- 'vpp_route_add.vat',
+ u"vpp_route_add.vat",
network=network,
prefix_length=prefix_len,
- via='via {}'.format(gateway) if gateway else '',
- sw_if_index='sw_if_index {}'.format(
- InterfaceUtil.get_interface_index(node, interface))
- if interface else '',
- vrf='vrf {}'.format(vrf) if vrf else '',
- count='count {}'.format(count) if count else '',
- multipath='multipath' if multipath else '')
+ via=f"via {gateway}" if gateway else u"",
+ sw_if_index=f"sw_if_index "
+ f"{InterfaceUtil.get_interface_index(node, interface)}"
+ if interface else u"",
+ vrf=f"vrf {vrf}" if vrf else u"",
+ count=f"count {count}" if count else u"",
+ multipath=u"multipath" if multipath else u""
+ )
return
- net_addr = ip_address(unicode(network))
- cmd = 'ip_route_add_del'
+ net_addr = ip_address(network)
+ cmd = u"ip_route_add_del"
args = dict(
is_add=1,
- is_multipath=int(kwargs.get('multipath', False)),
+ is_multipath=int(kwargs.get(u"multipath", False)),
route=None
)
+ err_msg = f"Failed to add route(s) on host {node[u'host']}"
- err_msg = 'Failed to add route(s) on host {host}'.format(
- host=node['host'])
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(kwargs.get('count', 1)):
- args['route'] = IPUtil.compose_vpp_route_structure(
- node, net_addr + i, prefix_len, **kwargs)
- history = False if 1 < i < kwargs.get('count', 1) else True
+ for i in range(kwargs.get(u"count", 1)):
+ args[u"route"] = IPUtil.compose_vpp_route_structure(
+ node, net_addr + i, prefix_len, **kwargs
+ )
+ history = bool(not 1 < i < kwargs.get(u"count", 1))
papi_exec.add(cmd, history=history, **args)
papi_exec.get_replies(err_msg)
@@ -625,14 +630,14 @@ class IPUtil(object):
:type node: dict
:type interface: str
"""
- cmd = 'sw_interface_add_del_address'
+ cmd = u"sw_interface_add_del_address"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
is_add=False,
del_all=True
)
- err_msg = 'Failed to flush IP address on interface {ifc}'.format(
- ifc=interface)
+ err_msg = f"Failed to flush IP address on interface {interface}"
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -647,14 +652,16 @@ class IPUtil(object):
:type table_id: int
:type ipv6: bool
"""
- cmd = 'ip_table_add_del'
+ cmd = u"ip_table_add_del"
table = dict(
table_id=int(table_id),
- is_ip6=int(ipv6))
+ is_ip6=int(ipv6)
+ )
args = dict(
table=table,
- is_add=1)
- err_msg = 'Failed to add FIB table on host {host}'.format(
- host=node['host'])
+ is_add=1
+ )
+ err_msg = f"Failed to add FIB table on host {node[u'host']}"
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
diff --git a/resources/libraries/python/IPsecUtil.py b/resources/libraries/python/IPsecUtil.py
index 4578b43987..9237769d45 100644
--- a/resources/libraries/python/IPsecUtil.py
+++ b/resources/libraries/python/IPsecUtil.py
@@ -15,10 +15,11 @@
import os
+from enum import Enum, IntEnum
+from io import open
from random import choice
-from string import letters
+from string import ascii_letters
-from enum import Enum, IntEnum
from ipaddress import ip_network, ip_address
from resources.libraries.python.IPUtil import IPUtil
@@ -35,16 +36,18 @@ def gen_key(length):
:param length: Length of generated payload.
:type length: int
:returns: The generated payload.
- :rtype: str
+ :rtype: bytes
"""
- return ''.join(choice(letters) for _ in range(length))
+ return u"".join(
+ choice(ascii_letters) for _ in range(length)
+ ).encode(encoding=u"utf-8")
class PolicyAction(Enum):
"""Policy actions."""
- BYPASS = ('bypass', 0)
- DISCARD = ('discard', 1)
- PROTECT = ('protect', 3)
+ BYPASS = (u"bypass", 0)
+ DISCARD = (u"discard", 1)
+ PROTECT = (u"protect", 3)
def __init__(self, policy_name, policy_int_repr):
self.policy_name = policy_name
@@ -53,10 +56,10 @@ class PolicyAction(Enum):
class CryptoAlg(Enum):
"""Encryption algorithms."""
- AES_CBC_128 = ('aes-cbc-128', 1, 'AES-CBC', 16)
- AES_CBC_256 = ('aes-cbc-256', 3, 'AES-CBC', 32)
- AES_GCM_128 = ('aes-gcm-128', 7, 'AES-GCM', 16)
- AES_GCM_256 = ('aes-gcm-256', 9, 'AES-GCM', 32)
+ AES_CBC_128 = (u"aes-cbc-128", 1, u"AES-CBC", 16)
+ AES_CBC_256 = (u"aes-cbc-256", 3, u"AES-CBC", 32)
+ AES_GCM_128 = (u"aes-gcm-128", 7, u"AES-GCM", 16)
+ AES_GCM_256 = (u"aes-gcm-256", 9, u"AES-GCM", 32)
def __init__(self, alg_name, alg_int_repr, scapy_name, key_len):
self.alg_name = alg_name
@@ -67,8 +70,8 @@ class CryptoAlg(Enum):
class IntegAlg(Enum):
"""Integrity algorithm."""
- SHA_256_128 = ('sha-256-128', 4, 'SHA2-256-128', 32)
- SHA_512_256 = ('sha-512-256', 6, 'SHA2-512-256', 64)
+ SHA_256_128 = (u"sha-256-128", 4, u"SHA2-256-128", 32)
+ SHA_512_256 = (u"sha-512-256", 6, u"SHA2-512-256", 64)
def __init__(self, alg_name, alg_int_repr, scapy_name, key_len):
self.alg_name = alg_name
@@ -90,7 +93,7 @@ class IPsecSadFlags(IntEnum):
IPSEC_API_SAD_FLAG_IS_TUNNEL_V6 = 8
-class IPsecUtil(object):
+class IPsecUtil:
"""IPsec utilities."""
@staticmethod
@@ -249,9 +252,8 @@ class IPsecUtil(object):
:raises RuntimeError: If failed to select IPsec backend or if no API
reply received.
"""
- cmd = 'ipsec_select_backend'
- err_msg = 'Failed to select IPsec backend on host {host}'.format(
- host=node['host'])
+ cmd = u"ipsec_select_backend"
+ err_msg = f"Failed to select IPsec backend on host {node[u'host']}"
args = dict(
protocol=protocol,
index=index
@@ -266,15 +268,14 @@ class IPsecUtil(object):
:param node: VPP node to dump IPsec backend on.
:type node: dict
"""
- err_msg = 'Failed to dump IPsec backends on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to dump IPsec backends on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add('ipsec_backend_dump').get_details(err_msg)
+ papi_exec.add(u"ipsec_backend_dump").get_details(err_msg)
@staticmethod
def vpp_ipsec_add_sad_entry(
node, sad_id, spi, crypto_alg, crypto_key, integ_alg=None,
- integ_key='', tunnel_src=None, tunnel_dst=None):
+ integ_key=u"", tunnel_src=None, tunnel_dst=None):
"""Create Security Association Database entry on the VPP node.
:param node: VPP node to add SAD entry on.
@@ -298,6 +299,10 @@ class IPsecUtil(object):
:type tunnel_src: str
:type tunnel_dst: str
"""
+ if isinstance(crypto_key, str):
+ crypto_key = crypto_key.encode(encoding=u"utf-8")
+ if isinstance(integ_key, str):
+ integ_key = integ_key.encode(encoding=u"utf-8")
ckey = dict(
length=len(crypto_key),
data=crypto_key
@@ -310,18 +315,18 @@ class IPsecUtil(object):
flags = int(IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE)
if tunnel_src and tunnel_dst:
flags = flags | int(IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL)
- src_addr = ip_address(unicode(tunnel_src))
- dst_addr = ip_address(unicode(tunnel_dst))
+ src_addr = ip_address(tunnel_src)
+ dst_addr = ip_address(tunnel_dst)
if src_addr.version == 6:
flags = \
flags | int(IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6)
else:
- src_addr = ''
- dst_addr = ''
+ src_addr = u""
+ dst_addr = u""
- cmd = 'ipsec_sad_entry_add_del'
- err_msg = 'Failed to add Security Association Database entry on ' \
- 'host {host}'.format(host=node['host'])
+ cmd = u"ipsec_sad_entry_add_del"
+ err_msg = f"Failed to add Security Association Database entry " \
+ f"on host {node[u'host']}"
sad_entry = dict(
sad_id=int(sad_id),
spi=int(spi),
@@ -344,7 +349,7 @@ class IPsecUtil(object):
@staticmethod
def vpp_ipsec_add_sad_entries(
node, n_entries, sad_id, spi, crypto_alg, crypto_key,
- integ_alg=None, integ_key='', tunnel_src=None, tunnel_dst=None):
+ integ_alg=None, integ_key=u"", tunnel_src=None, tunnel_dst=None):
"""Create multiple Security Association Database entries on VPP node.
:param node: VPP node to add SAD entry on.
@@ -372,46 +377,41 @@ class IPsecUtil(object):
:type tunnel_src: str
:type tunnel_dst: str
"""
+ if isinstance(crypto_key, str):
+ crypto_key = crypto_key.encode(encoding=u"utf-8")
+ if isinstance(integ_key, str):
+ integ_key = integ_key.encode(encoding=u"utf-8")
if tunnel_src and tunnel_dst:
- src_addr = ip_address(unicode(tunnel_src))
- dst_addr = ip_address(unicode(tunnel_dst))
+ src_addr = ip_address(tunnel_src)
+ dst_addr = ip_address(tunnel_dst)
else:
- src_addr = ''
- dst_addr = ''
+ src_addr = u""
+ dst_addr = u""
addr_incr = 1 << (128 - 96) if src_addr.version == 6 \
else 1 << (32 - 24)
if int(n_entries) > 10:
- tmp_filename = '/tmp/ipsec_sad_{0}_add_del_entry.script'.\
- format(sad_id)
+ tmp_filename = f"/tmp/ipsec_sad_{sad_id}_add_del_entry.script"
with open(tmp_filename, 'w') as tmp_file:
- for i in xrange(n_entries):
- integ = (
- 'integ-alg {integ_alg} integ-key {integ_key}'.format(
- integ_alg=integ_alg.alg_name,
- integ_key=integ_key.encode('hex'))
- if integ_alg else '')
- tunnel = (
- 'tunnel-src {laddr} tunnel-dst {raddr}'.format(
- laddr=src_addr + i * addr_incr,
- raddr=dst_addr + i * addr_incr)
- if tunnel_src and tunnel_dst else '')
- conf = (
- 'exec ipsec sa add {sad_id} esp spi {spi} '
- 'crypto-alg {crypto_alg} crypto-key {crypto_key} '
- '{integ} {tunnel}\n'.format(
- sad_id=sad_id + i,
- spi=spi + i,
- crypto_alg=crypto_alg.alg_name,
- crypto_key=crypto_key.encode('hex'),
- integ=integ,
- tunnel=tunnel))
+ for i in range(n_entries):
+ integ = f"integ-alg {integ_alg.alg_name} " \
+ f"integ-key {integ_key.hex()}" \
+ if integ_alg else u""
+ tunnel = f"tunnel-src {src_addr + i * addr_incr} " \
+ f"tunnel-dst {dst_addr + i * addr_incr}" \
+ if tunnel_src and tunnel_dst else u""
+ conf = f"exec ipsec sa add {sad_id + i} esp spi {spi + i} "\
+ f"crypto-alg {crypto_alg.alg_name} " \
+ f"crypto-key {crypto_key.hex()} " \
+ f"{integ} {tunnel}\n"
tmp_file.write(conf)
vat = VatExecutor()
- vat.execute_script(tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True)
+ vat.execute_script(
+ tmp_filename, node, timeout=300, json_out=False,
+ copy_on_execute=True
+ )
os.remove(tmp_filename)
return
@@ -429,11 +429,12 @@ class IPsecUtil(object):
flags = flags | int(IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL)
if src_addr.version == 6:
flags = flags | int(
- IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6)
+ IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6
+ )
- cmd = 'ipsec_sad_entry_add_del'
- err_msg = 'Failed to add Security Association Database entry on ' \
- 'host {host}'.format(host=node['host'])
+ cmd = u"ipsec_sad_entry_add_del"
+ err_msg = f"Failed to add Security Association Database entry " \
+ f"on host {node[u'host']}"
sad_entry = dict(
sad_id=int(sad_id),
@@ -452,14 +453,14 @@ class IPsecUtil(object):
entry=sad_entry
)
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(n_entries):
- args['entry']['sad_id'] = int(sad_id) + i
- args['entry']['spi'] = int(spi) + i
- args['entry']['tunnel_src'] = str(src_addr + i * addr_incr) \
+ for i in range(n_entries):
+ args[u"entry"][u"sad_id"] = int(sad_id) + i
+ args[u"entry"][u"spi"] = int(spi) + i
+ args[u"entry"][u"tunnel_src"] = str(src_addr + i * addr_incr) \
if tunnel_src and tunnel_dst else src_addr
- args['entry']['tunnel_dst'] = str(dst_addr + i * addr_incr) \
+ args[u"entry"][u"tunnel_dst"] = str(dst_addr + i * addr_incr) \
if tunnel_src and tunnel_dst else dst_addr
- history = False if 1 < i < n_entries - 1 else True
+ history = bool(not 1 < i < n_entries - 2)
papi_exec.add(cmd, history=history, **args)
papi_exec.get_replies(err_msg)
@@ -486,65 +487,59 @@ class IPsecUtil(object):
:type interface: str
:type raddr_range: int
"""
- laddr = ip_address(unicode(tunnel_src))
- raddr = ip_address(unicode(tunnel_dst))
- taddr = ip_address(unicode(traffic_addr))
+ laddr = ip_address(tunnel_src)
+ raddr = ip_address(tunnel_dst)
+ taddr = ip_address(traffic_addr)
addr_incr = 1 << (128 - raddr_range) if laddr.version == 6 \
else 1 << (32 - raddr_range)
if int(n_tunnels) > 10:
- tmp_filename = '/tmp/ipsec_set_ip.script'
+ tmp_filename = u"/tmp/ipsec_set_ip.script"
with open(tmp_filename, 'w') as tmp_file:
- for i in xrange(n_tunnels):
- conf = (
- 'exec set interface ip address {interface} '
- '{laddr}/{laddr_l}\n'
- 'exec ip route add {taddr}/{taddr_l} via {raddr} '
- '{interface}\n'.format(
- interface=Topology.get_interface_name(
- node, interface),
- laddr=laddr + i * addr_incr,
- laddr_l=raddr_range,
- raddr=raddr + i * addr_incr,
- taddr=taddr + i,
- taddr_l=128 if taddr.version == 6 else 32))
+ if_name = Topology.get_interface_name(node, interface)
+ for i in range(n_tunnels):
+ conf = f"exec set interface ip address {if_name} " \
+ f"{laddr + i * addr_incr}/{raddr_range}\n" \
+ f"exec ip route add {taddr + i}/" \
+ f"{128 if taddr.version == 6 else 32} " \
+ f"via {raddr + i * addr_incr} {if_name}\n"
tmp_file.write(conf)
vat = VatExecutor()
- vat.execute_script(tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True)
+ vat.execute_script(
+ tmp_filename, node, timeout=300, json_out=False,
+ copy_on_execute=True
+ )
os.remove(tmp_filename)
return
- cmd1 = 'sw_interface_add_del_address'
+ cmd1 = u"sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
is_add=True,
del_all=False,
prefix=None
)
- cmd2 = 'ip_route_add_del'
+ cmd2 = u"ip_route_add_del"
args2 = dict(
is_add=1,
is_multipath=0,
route=None
)
- err_msg = 'Failed to configure IP addresses and IP routes on ' \
- 'interface {ifc} on host {host}'.\
- format(ifc=interface, host=node['host'])
+ err_msg = f"Failed to configure IP addresses and IP routes " \
+ f"on interface {interface} on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(n_tunnels):
- args1['prefix'] = IPUtil.create_prefix_object(
- laddr + i * addr_incr, raddr_range)
- args2['route'] = IPUtil.compose_vpp_route_structure(
- node,
- taddr + i,
+ for i in range(n_tunnels):
+ args1[u"prefix"] = IPUtil.create_prefix_object(
+ laddr + i * addr_incr, raddr_range
+ )
+ args2[u"route"] = IPUtil.compose_vpp_route_structure(
+ node, taddr + i,
prefix_len=128 if taddr.version == 6 else 32,
- interface=interface,
- gateway=raddr + i * addr_incr
+ interface=interface, gateway=raddr + i * addr_incr
)
- history = False if 1 < i < n_tunnels - 1 else True
+ history = bool(not 1 < i < n_tunnels - 2)
papi_exec.add(cmd1, history=history, **args1).\
add(cmd2, history=history, **args2)
papi_exec.get_replies(err_msg)
@@ -558,9 +553,9 @@ class IPsecUtil(object):
:type node: dict
:type spd_id: int
"""
- cmd = 'ipsec_spd_add_del'
- err_msg = 'Failed to add Security Policy Database on host {host}'.\
- format(host=node['host'])
+ cmd = u"ipsec_spd_add_del"
+ err_msg = f"Failed to add Security Policy Database " \
+ f"on host {node[u'host']}"
args = dict(
is_add=1,
spd_id=int(spd_id)
@@ -579,10 +574,9 @@ class IPsecUtil(object):
:type spd_id: int
:type interface: str or int
"""
- cmd = 'ipsec_interface_add_del_spd'
- err_msg = 'Failed to add interface {ifc} to Security Policy Database ' \
- '{spd} on host {host}'.\
- format(ifc=interface, spd=spd_id, host=node['host'])
+ cmd = u"ipsec_interface_add_del_spd"
+ err_msg = f"Failed to add interface {interface} to Security Policy " \
+ f"Database {spd_id} on host {node[u'host']}"
args = dict(
is_add=1,
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
@@ -631,16 +625,15 @@ class IPsecUtil(object):
:type rport_range: string
:type is_ipv6: bool
"""
-
if laddr_range is None:
- laddr_range = '::/0' if is_ipv6 else '0.0.0.0/0'
+ laddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
if raddr_range is None:
- raddr_range = '::/0' if is_ipv6 else '0.0.0.0/0'
+ raddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
- cmd = 'ipsec_spd_entry_add_del'
- err_msg = 'Failed to add entry to Security Policy Database ' \
- '{spd} on host {host}'.format(spd=spd_id, host=node['host'])
+ cmd = u"ipsec_spd_entry_add_del"
+ err_msg = f"Failed to add entry to Security Policy Database {spd_id} " \
+ f"on host {node[u'host']}"
spd_entry = dict(
spd_id=int(spd_id),
@@ -650,23 +643,24 @@ class IPsecUtil(object):
policy=action.policy_int_repr,
protocol=int(proto) if proto else 0,
remote_address_start=IPUtil.create_ip_address_object(
- ip_network(unicode(raddr_range), strict=False).network_address),
+ ip_network(raddr_range, strict=False).network_address
+ ),
remote_address_stop=IPUtil.create_ip_address_object(
- ip_network(
- unicode(raddr_range), strict=False).broadcast_address),
+ ip_network(raddr_range, strict=False).broadcast_address
+ ),
local_address_start=IPUtil.create_ip_address_object(
- ip_network(
- unicode(laddr_range), strict=False).network_address),
+ ip_network(laddr_range, strict=False).network_address
+ ),
local_address_stop=IPUtil.create_ip_address_object(
- ip_network(
- unicode(laddr_range), strict=False).broadcast_address),
- remote_port_start=int(rport_range.split('-')[0]) if rport_range
+ ip_network(laddr_range, strict=False).broadcast_address
+ ),
+ remote_port_start=int(rport_range.split(u"-")[0]) if rport_range
else 0,
- remote_port_stop=int(rport_range.split('-')[1]) if rport_range
+ remote_port_stop=int(rport_range.split(u"-")[1]) if rport_range
else 65535,
- local_port_start=int(lport_range.split('-')[0]) if lport_range
+ local_port_start=int(lport_range.split(u"-")[0]) if lport_range
else 0,
- local_port_stop=int(lport_range.split('-')[1]) if rport_range
+ local_port_stop=int(lport_range.split(u"-")[1]) if rport_range
else 65535
)
args = dict(
@@ -678,7 +672,8 @@ class IPsecUtil(object):
@staticmethod
def vpp_ipsec_spd_add_entries(
- node, n_entries, spd_id, priority, inbound, sa_id, raddr_ip):
+ node, n_entries, spd_id, priority, inbound, sa_id, raddr_ip,
+ raddr_range=0):
"""Create multiple Security Policy Database entries on the VPP node.
:param node: VPP node to add SPD entries on.
@@ -693,47 +688,42 @@ class IPsecUtil(object):
entry. Remote IPv4 end address will be calculated depending on
raddr_range parameter. Each subsequent entry will have start address
next after IPv4 end address of previous entry.
+ :param raddr_range: Required IP addres range.
:type node: dict
:type n_entries: int
:type spd_id: int
:type priority: int
:type inbound: bool
:type sa_id: int
- :type raddr_ip: string
+ :type raddr_ip: str
+ :type raddr_range: int
"""
+ raddr_ip = ip_address(raddr_ip)
if int(n_entries) > 10:
- tmp_filename = '/tmp/ipsec_spd_{0}_add_del_entry.script'.\
- format(sa_id)
+ tmp_filename = f"/tmp/ipsec_spd_{sa_id}_add_del_entry.script"
with open(tmp_filename, 'w') as tmp_file:
- for i in xrange(n_entries):
- raddr_s = ip_address(unicode(raddr_ip)) + i
- raddr_e = ip_address(unicode(raddr_ip)) + (i + 1) - 1
- tunnel = (
- 'exec ipsec policy add spd {spd_id} '
- 'priority {priority} {direction} action protect '
- 'sa {sa_id} remote-ip-range {raddr_s} - {raddr_e} '
- 'local-ip-range 0.0.0.0 - 255.255.255.255\n'.
- format(
- spd_id=spd_id,
- priority=priority,
- direction='inbound' if inbound else 'outbound',
- sa_id=sa_id+i,
- raddr_s=raddr_s,
- raddr_e=raddr_e))
+ for i in range(n_entries):
+ direction = u'inbound' if inbound else u'outbound'
+ tunnel = f"exec ipsec policy add spd {spd_id} " \
+ f"priority {priority} {direction} " \
+ f"action protect sa {sa_id+i} " \
+ f"remote-ip-range {raddr_ip + i * (raddr_range + 1)} " \
+ f"- {raddr_ip + (i + 1) * raddr_range + i} " \
+ f"local-ip-range 0.0.0.0 - 255.255.255.255\n"
tmp_file.write(tunnel)
VatExecutor().execute_script(
tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True)
+ copy_on_execute=True
+ )
os.remove(tmp_filename)
return
- raddr_ip = ip_address(unicode(raddr_ip))
- laddr_range = '::/0' if raddr_ip.version == 6 else '0.0.0.0/0'
+ laddr_range = u"::/0" if raddr_ip.version == 6 else u"0.0.0.0/0"
- cmd = 'ipsec_spd_entry_add_del'
- err_msg = 'Failed to add entry to Security Policy Database ' \
- '{spd} on host {host}'.format(spd=spd_id, host=node['host'])
+ cmd = u"ipsec_spd_entry_add_del"
+ err_msg = f"ailed to add entry to Security Policy Database '{spd_id} " \
+ f"on host {node[u'host']}"
spd_entry = dict(
spd_id=int(spd_id),
@@ -745,10 +735,11 @@ class IPsecUtil(object):
remote_address_start=IPUtil.create_ip_address_object(raddr_ip),
remote_address_stop=IPUtil.create_ip_address_object(raddr_ip),
local_address_start=IPUtil.create_ip_address_object(
- ip_network(unicode(laddr_range), strict=False).network_address),
+ ip_network(laddr_range, strict=False).network_address
+ ),
local_address_stop=IPUtil.create_ip_address_object(
- ip_network(
- unicode(laddr_range), strict=False).broadcast_address),
+ ip_network(laddr_range, strict=False).broadcast_address
+ ),
remote_port_start=0,
remote_port_stop=65535,
local_port_start=0,
@@ -760,12 +751,12 @@ class IPsecUtil(object):
)
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(n_entries):
- args['entry']['remote_address_start']['un'] = \
+ for i in range(n_entries):
+ args[u"entry"][u"remote_address_start"][u"un"] = \
IPUtil.union_addr(raddr_ip + i)
- args['entry']['remote_address_stop']['un'] = \
+ args[u"entry"][u"remote_address_stop"][u"un"] = \
IPUtil.union_addr(raddr_ip + i)
- history = False if 1 < i < n_entries - 1 else True
+ history = bool(not 1 < i < n_entries - 2)
papi_exec.add(cmd, history=history, **args)
papi_exec.get_replies(err_msg)
@@ -805,187 +796,158 @@ class IPsecUtil(object):
n_tunnels = int(n_tunnels)
spi_1 = 100000
spi_2 = 200000
- if1_ip = ip_address(unicode(if1_ip_addr))
- if2_ip = ip_address(unicode(if2_ip_addr))
- raddr_ip1 = ip_address(unicode(raddr_ip1))
- raddr_ip2 = ip_address(unicode(raddr_ip2))
+ if1_ip = ip_address(if1_ip_addr)
+ if2_ip = ip_address(if2_ip_addr)
+ raddr_ip1 = ip_address(raddr_ip1)
+ raddr_ip2 = ip_address(raddr_ip2)
addr_incr = 1 << (128 - raddr_range) if if1_ip.version == 6 \
else 1 << (32 - raddr_range)
if n_tunnels > 10:
- tmp_fn1 = '/tmp/ipsec_create_tunnel_dut1.config'
- tmp_fn2 = '/tmp/ipsec_create_tunnel_dut2.config'
+ tmp_fn1 = u"/tmp/ipsec_create_tunnel_dut1.config"
+ tmp_fn2 = u"/tmp/ipsec_create_tunnel_dut2.config"
+ if1_n = Topology.get_interface_name(nodes[u"DUT1"], if1_key)
+ if2_n = Topology.get_interface_name(nodes[u"DUT2"], if2_key)
+ mask = 96 if if2_ip.version == 6 else 24
+ mask2 = 128 if if2_ip.version == 6 else 32
vat = VatExecutor()
with open(tmp_fn1, 'w') as tmp_f1, open(tmp_fn2, 'w') as tmp_f2:
+ rmac = Topology.get_interface_mac(nodes[u"DUT2"], if2_key)
tmp_f1.write(
- 'exec create loopback interface\n'
- 'exec set interface state loop0 up\n'
- 'exec set interface ip address {uifc} {iaddr}/{mask}\n'
- 'exec set ip arp {uifc} {raddr}/32 {rmac} static\n'
- .format(
- iaddr=if2_ip - 1,
- raddr=if2_ip,
- uifc=Topology.get_interface_name(
- nodes['DUT1'], if1_key),
- rmac=Topology.get_interface_mac(
- nodes['DUT2'], if2_key),
- mask=96 if if2_ip.version == 6 else 24))
+ f"exec create loopback interface\n"
+ f"exec set interface state loop0 up\n"
+ f"exec set interface ip address "
+ f"{if1_n} {if2_ip - 1}/{mask}\n"
+ f"exec set ip arp {if1_n} {if2_ip}/{mask2} {rmac} static\n"
+ )
tmp_f2.write(
- 'exec set interface ip address {uifc} {iaddr}/{mask}\n'
- .format(
- iaddr=if2_ip,
- uifc=Topology.get_interface_name(
- nodes['DUT2'], if2_key),
- mask=96 if if2_ip.version == 6 else 24))
- for i in xrange(n_tunnels):
- ckey = gen_key(IPsecUtil.get_crypto_alg_key_len(
- crypto_alg)).encode('hex')
+ f"exec set interface ip address {if2_n} {if2_ip}/{mask}\n"
+ )
+ for i in range(n_tunnels):
+ ckey = gen_key(
+ IPsecUtil.get_crypto_alg_key_len(crypto_alg)
+ ).hex()
if integ_alg:
- ikey = gen_key(IPsecUtil.get_integ_alg_key_len(
- integ_alg)).encode('hex')
- integ = (
- 'integ_alg {integ_alg} '
- 'local_integ_key {local_integ_key} '
- 'remote_integ_key {remote_integ_key} '
- .format(
- integ_alg=integ_alg.alg_name,
- local_integ_key=ikey,
- remote_integ_key=ikey))
+ ikey = gen_key(
+ IPsecUtil.get_integ_alg_key_len(integ_alg)
+ ).hex()
+ integ = f"integ_alg {integ_alg.alg_name} " \
+ f"local_integ_key {ikey} remote_integ_key {ikey} "
else:
- integ = ''
+ integ = u""
tmp_f1.write(
- 'exec set interface ip address loop0 {laddr}/32\n'
- 'ipsec_tunnel_if_add_del '
- 'local_spi {local_spi} '
- 'remote_spi {remote_spi} '
- 'crypto_alg {crypto_alg} '
- 'local_crypto_key {local_crypto_key} '
- 'remote_crypto_key {remote_crypto_key} '
- '{integ} '
- 'local_ip {laddr} '
- 'remote_ip {raddr}\n'
- .format(
- local_spi=spi_1 + i,
- remote_spi=spi_2 + i,
- crypto_alg=crypto_alg.alg_name,
- local_crypto_key=ckey,
- remote_crypto_key=ckey,
- integ=integ,
- laddr=if1_ip + i * addr_incr,
- raddr=if2_ip))
+ f"exec set interface ip address loop0 "
+ f"{if1_ip + i * addr_incr}/32\n"
+ f"ipsec_tunnel_if_add_del "
+ f"local_spi {spi_1 + i} remote_spi {spi_2 + i} "
+ f"crypto_alg {crypto_alg.alg_name} "
+ f"local_crypto_key {ckey} remote_crypto_key {ckey} "
+ f"{integ} "
+ f"local_ip {if1_ip + i * addr_incr} "
+ f"remote_ip {if2_ip}\n"
+ )
tmp_f2.write(
- 'ipsec_tunnel_if_add_del '
- 'local_spi {local_spi} '
- 'remote_spi {remote_spi} '
- 'crypto_alg {crypto_alg} '
- 'local_crypto_key {local_crypto_key} '
- 'remote_crypto_key {remote_crypto_key} '
- '{integ} '
- 'local_ip {laddr} '
- 'remote_ip {raddr}\n'
- .format(
- local_spi=spi_2 + i,
- remote_spi=spi_1 + i,
- crypto_alg=crypto_alg.alg_name,
- local_crypto_key=ckey,
- remote_crypto_key=ckey,
- integ=integ,
- laddr=if2_ip,
- raddr=if1_ip + i * addr_incr))
+ f"ipsec_tunnel_if_add_del "
+ f"local_spi {spi_2 + i} remote_spi {spi_1 + i} "
+ f"crypto_alg {crypto_alg.alg_name} "
+ f"local_crypto_key {ckey} remote_crypto_key {ckey} "
+ f"{integ} "
+ f"local_ip {if2_ip} "
+ f"remote_ip {if1_ip + i * addr_incr}\n"
+ )
vat.execute_script(
- tmp_fn1, nodes['DUT1'], timeout=1800, json_out=False,
+ tmp_fn1, nodes[u"DUT1"], timeout=1800, json_out=False,
copy_on_execute=True,
- history=False if n_tunnels > 100 else True)
+ history=bool(n_tunnels < 100)
+ )
vat.execute_script(
- tmp_fn2, nodes['DUT2'], timeout=1800, json_out=False,
+ tmp_fn2, nodes[u"DUT2"], timeout=1800, json_out=False,
copy_on_execute=True,
- history=False if n_tunnels > 100 else True)
+ history=bool(n_tunnels < 100)
+ )
os.remove(tmp_fn1)
os.remove(tmp_fn2)
with open(tmp_fn1, 'w') as tmp_f1, open(tmp_fn2, 'w') as tmp_f2:
+ raddr = ip_network(if1_ip_addr + u"/8", False)
tmp_f2.write(
- 'exec ip route add {raddr} via {uifc} {iaddr}\n'
- .format(
- raddr=ip_network(unicode(if1_ip_addr+'/8'), False),
- iaddr=if2_ip - 1,
- uifc=Topology.get_interface_name(
- nodes['DUT2'], if2_key)))
- for i in xrange(n_tunnels):
+ f"exec ip route add {raddr} via {if2_n} {if2_ip - 1}\n"
+ )
+ for i in range(n_tunnels):
tmp_f1.write(
- 'exec set interface unnumbered ipsec{i} use {uifc}\n'
- 'exec set interface state ipsec{i} up\n'
- 'exec ip route add {taddr}/{mask} via ipsec{i}\n'
- .format(
- taddr=raddr_ip2 + i,
- i=i,
- uifc=Topology.get_interface_name(nodes['DUT1'],
- if1_key),
- mask=128 if if2_ip.version == 6 else 32))
+ f"exec set interface unnumbered ipsec{i} use {if1_n}\n"
+ f"exec set interface state ipsec{i} up\n"
+ f"exec ip route add {raddr_ip2 + i}/{mask2} "
+ f"via ipsec{i}\n"
+ )
tmp_f2.write(
- 'exec set interface unnumbered ipsec{i} use {uifc}\n'
- 'exec set interface state ipsec{i} up\n'
- 'exec ip route add {taddr}/{mask} via ipsec{i}\n'
- .format(
- taddr=raddr_ip1 + i,
- i=i,
- uifc=Topology.get_interface_name(nodes['DUT2'],
- if2_key),
- mask=128 if if2_ip.version == 6 else 32))
+ f"exec set interface unnumbered ipsec{i} use {if2_n}\n"
+ f"exec set interface state ipsec{i} up\n"
+ f"exec ip route add {raddr_ip1 + i}/{mask2} "
+ f"via ipsec{i}\n"
+ )
vat.execute_script(
- tmp_fn1, nodes['DUT1'], timeout=1800, json_out=False,
+ tmp_fn1, nodes[u"DUT1"], timeout=1800, json_out=False,
copy_on_execute=True,
- history=False if n_tunnels > 100 else True)
+ history=bool(n_tunnels < 100)
+ )
vat.execute_script(
- tmp_fn2, nodes['DUT2'], timeout=1800, json_out=False,
+ tmp_fn2, nodes[u"DUT2"], timeout=1800, json_out=False,
copy_on_execute=True,
- history=False if n_tunnels > 100 else True)
+ history=bool(n_tunnels < 100)
+ )
os.remove(tmp_fn1)
os.remove(tmp_fn2)
return
- with PapiSocketExecutor(nodes['DUT1']) as papi_exec:
+ with PapiSocketExecutor(nodes[u"DUT1"]) as papi_exec:
# Create loopback interface on DUT1, set it to up state
- cmd1 = 'create_loopback'
- args1 = dict(mac_address=0)
- err_msg = 'Failed to create loopback interface on host {host}'.\
- format(host=nodes['DUT1']['host'])
+ cmd1 = u"create_loopback"
+ args1 = dict(
+ mac_address=0
+ )
+ err_msg = f"Failed to create loopback interface " \
+ f"on host {nodes[u'DUT1'][u'host']}"
loop_sw_if_idx = papi_exec.add(cmd1, **args1).\
get_sw_if_index(err_msg)
- cmd1 = 'sw_interface_set_flags'
+ cmd1 = u"sw_interface_set_flags"
args1 = dict(
sw_if_index=loop_sw_if_idx,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value)
- err_msg = 'Failed to set loopback interface state up on host ' \
- '{host}'.format(host=nodes['DUT1']['host'])
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ )
+ err_msg = f"Failed to set loopback interface state up " \
+ f"on host {nodes[u'DUT1'][u'host']}"
papi_exec.add(cmd1, **args1).get_reply(err_msg)
# Set IP address on VPP node 1 interface
- cmd1 = 'sw_interface_add_del_address'
+ cmd1 = u"sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(
- nodes['DUT1'], if1_key),
+ nodes[u"DUT1"], if1_key
+ ),
is_add=True,
del_all=False,
prefix=IPUtil.create_prefix_object(
- if2_ip - 1, 96 if if2_ip.version == 6 else 24)
+ if2_ip - 1, 96 if if2_ip.version == 6 else 24
+ )
)
- err_msg = 'Failed to set IP address on interface {ifc} on host ' \
- '{host}'.format(ifc=if1_key, host=nodes['DUT1']['host'])
+ err_msg = f"Failed to set IP address on interface {if1_key} " \
+ f"on host {nodes[u'DUT1'][u'host']}"
papi_exec.add(cmd1, **args1).get_reply(err_msg)
- cmd4 = 'ip_neighbor_add_del'
+ cmd4 = u"ip_neighbor_add_del"
args4 = dict(
is_add=1,
neighbor=dict(
sw_if_index=Topology.get_interface_sw_index(
- nodes['DUT1'], if1_key),
+ nodes[u"DUT1"], if1_key
+ ),
flags=1,
mac_address=str(
- Topology.get_interface_mac(nodes['DUT2'], if2_key)),
- ip_address=str(ip_address(unicode(if2_ip_addr)))
+ Topology.get_interface_mac(nodes[u"DUT2"], if2_key)
+ ),
+ ip_address=str(ip_address(if2_ip_addr))
)
)
- err_msg = 'Failed to add IP neighbor on interface {ifc}'.format(
- ifc=if1_key)
+ err_msg = f"Failed to add IP neighbor on interface {if1_key}"
papi_exec.add(cmd4, **args4).get_reply(err_msg)
# Configure IPsec tunnel interfaces
args1 = dict(
@@ -994,7 +956,7 @@ class IPsecUtil(object):
del_all=False,
prefix=None
)
- cmd2 = 'ipsec_tunnel_if_add_del'
+ cmd2 = u"ipsec_tunnel_if_add_del"
args2 = dict(
is_add=1,
local_ip=None,
@@ -1013,91 +975,98 @@ class IPsecUtil(object):
remote_integ_key=None,
tx_table_id=0
)
- err_msg = 'Failed to add IPsec tunnel interfaces on host {host}'.\
- format(host=nodes['DUT1']['host'])
+ err_msg = f"Failed to add IPsec tunnel interfaces " \
+ f"on host {nodes[u'DUT1'][u'host']}"
ipsec_tunnels = list()
ckeys = list()
ikeys = list()
- for i in xrange(n_tunnels):
+ for i in range(n_tunnels):
ckeys.append(
- gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg)))
+ gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg))
+ )
if integ_alg:
ikeys.append(
- gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg)))
- args1['prefix'] = IPUtil.create_prefix_object(
- if1_ip + i * addr_incr, 128 if if1_ip.version == 6 else 32)
- args2['local_spi'] = spi_1 + i
- args2['remote_spi'] = spi_2 + i
- args2['local_ip'] = IPUtil.create_ip_address_object(
- if1_ip + i * addr_incr)
- args2['remote_ip'] = IPUtil.create_ip_address_object(if2_ip)
- args2['local_crypto_key_len'] = len(ckeys[i])
- args2['local_crypto_key'] = ckeys[i]
- args2['remote_crypto_key_len'] = len(ckeys[i])
- args2['remote_crypto_key'] = ckeys[i]
+ gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg))
+ )
+ args1[u"prefix"] = IPUtil.create_prefix_object(
+ if1_ip + i * addr_incr, 128 if if1_ip.version == 6 else 32
+ )
+ args2[u"local_spi"] = spi_1 + i
+ args2[u"remote_spi"] = spi_2 + i
+ args2[u"local_ip"] = IPUtil.create_ip_address_object(
+ if1_ip + i * addr_incr
+ )
+ args2[u"remote_ip"] = IPUtil.create_ip_address_object(if2_ip)
+ args2[u"local_crypto_key_len"] = len(ckeys[i])
+ args2[u"local_crypto_key"] = ckeys[i]
+ args2[u"remote_crypto_key_len"] = len(ckeys[i])
+ args2[u"remote_crypto_key"] = ckeys[i]
if integ_alg:
- args2['local_integ_key_len'] = len(ikeys[i])
- args2['local_integ_key'] = ikeys[i]
- args2['remote_integ_key_len'] = len(ikeys[i])
- args2['remote_integ_key'] = ikeys[i]
- history = False if 1 < i < n_tunnels - 1 else True
+ args2[u"local_integ_key_len"] = len(ikeys[i])
+ args2[u"local_integ_key"] = ikeys[i]
+ args2[u"remote_integ_key_len"] = len(ikeys[i])
+ args2[u"remote_integ_key"] = ikeys[i]
+ history = bool(not 1 < i < n_tunnels - 2)
papi_exec.add(cmd1, history=history, **args1).\
add(cmd2, history=history, **args2)
replies = papi_exec.get_replies(err_msg)
for reply in replies:
- if 'sw_if_index' in reply:
- ipsec_tunnels.append(reply["sw_if_index"])
+ if u"sw_if_index" in reply:
+ ipsec_tunnels.append(reply[u"sw_if_index"])
# Configure IP routes
- cmd1 = 'sw_interface_set_unnumbered'
+ cmd1 = u"sw_interface_set_unnumbered"
args1 = dict(
is_add=True,
sw_if_index=InterfaceUtil.get_interface_index(
- nodes['DUT1'], if1_key),
+ nodes[u"DUT1"], if1_key
+ ),
unnumbered_sw_if_index=0
)
- cmd2 = 'sw_interface_set_flags'
+ cmd2 = u"sw_interface_set_flags"
args2 = dict(
sw_if_index=0,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value)
- cmd3 = 'ip_route_add_del'
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ )
+ cmd3 = u"ip_route_add_del"
args3 = dict(
is_add=1,
is_multipath=0,
route=None
)
- err_msg = 'Failed to add IP routes on host {host}'.format(
- host=nodes['DUT1']['host'])
- for i in xrange(n_tunnels):
- args1['unnumbered_sw_if_index'] = ipsec_tunnels[i]
- args2['sw_if_index'] = ipsec_tunnels[i]
- args3['route'] = IPUtil.compose_vpp_route_structure(
- nodes['DUT1'],
- (raddr_ip2 + i).compressed,
+ err_msg = f"Failed to add IP routes " \
+ f"on host {nodes[u'DUT1'][u'host']}"
+ for i in range(n_tunnels):
+ args1[u"unnumbered_sw_if_index"] = ipsec_tunnels[i]
+ args2[u"sw_if_index"] = ipsec_tunnels[i]
+ args3[u"route"] = IPUtil.compose_vpp_route_structure(
+ nodes[u"DUT1"], (raddr_ip2 + i).compressed,
prefix_len=128 if raddr_ip2.version == 6 else 32,
interface=ipsec_tunnels[i]
)
- history = False if 1 < i < n_tunnels - 1 else True
+ history = bool(not 1 < i < n_tunnels - 2)
papi_exec.add(cmd1, history=history, **args1).\
add(cmd2, history=history, **args2).\
add(cmd3, history=history, **args3)
papi_exec.get_replies(err_msg)
- with PapiSocketExecutor(nodes['DUT2']) as papi_exec:
+ with PapiSocketExecutor(nodes[u"DUT2"]) as papi_exec:
# Set IP address on VPP node 2 interface
- cmd1 = 'sw_interface_add_del_address'
+ cmd1 = u"sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(
- nodes['DUT2'], if2_key),
+ nodes[u"DUT2"], if2_key
+ ),
is_add=True,
del_all=False,
prefix=IPUtil.create_prefix_object(
- if2_ip, 96 if if2_ip.version == 6 else 24)
+ if2_ip, 96 if if2_ip.version == 6 else 24
+ )
)
- err_msg = 'Failed to set IP address on interface {ifc} on host ' \
- '{host}'.format(ifc=if2_key, host=nodes['DUT2']['host'])
+ err_msg = f"Failed to set IP address on interface {if2_key} " \
+ f"on host {nodes[u'DUT2'][u'host']}"
papi_exec.add(cmd1, **args1).get_reply(err_msg)
# Configure IPsec tunnel interfaces
- cmd2 = 'ipsec_tunnel_if_add_del'
+ cmd2 = u"ipsec_tunnel_if_add_del"
args2 = dict(
is_add=1,
local_ip=IPUtil.create_ip_address_object(if2_ip),
@@ -1116,34 +1085,34 @@ class IPsecUtil(object):
remote_integ_key=None,
tx_table_id=0
)
- err_msg = 'Failed to add IPsec tunnel interfaces on host {host}'. \
- format(host=nodes['DUT2']['host'])
+ err_msg = f"Failed to add IPsec tunnel interfaces " \
+ f"on host {nodes[u'DUT2'][u'host']}"
ipsec_tunnels = list()
- for i in xrange(n_tunnels):
- args2['local_spi'] = spi_2 + i
- args2['remote_spi'] = spi_1 + i
- args2['local_ip'] = IPUtil.create_ip_address_object(if2_ip)
- args2['remote_ip'] = IPUtil.create_ip_address_object(
+ for i in range(n_tunnels):
+ args2[u"local_spi"] = spi_2 + i
+ args2[u"remote_spi"] = spi_1 + i
+ args2[u"local_ip"] = IPUtil.create_ip_address_object(if2_ip)
+ args2[u"remote_ip"] = IPUtil.create_ip_address_object(
if1_ip + i * addr_incr)
- args2['local_crypto_key_len'] = len(ckeys[i])
- args2['local_crypto_key'] = ckeys[i]
- args2['remote_crypto_key_len'] = len(ckeys[i])
- args2['remote_crypto_key'] = ckeys[i]
+ args2[u"local_crypto_key_len"] = len(ckeys[i])
+ args2[u"local_crypto_key"] = ckeys[i]
+ args2[u"remote_crypto_key_len"] = len(ckeys[i])
+ args2[u"remote_crypto_key"] = ckeys[i]
if integ_alg:
- args2['local_integ_key_len'] = len(ikeys[i])
- args2['local_integ_key'] = ikeys[i]
- args2['remote_integ_key_len'] = len(ikeys[i])
- args2['remote_integ_key'] = ikeys[i]
- history = False if 1 < i < n_tunnels - 1 else True
+ args2[u"local_integ_key_len"] = len(ikeys[i])
+ args2[u"local_integ_key"] = ikeys[i]
+ args2[u"remote_integ_key_len"] = len(ikeys[i])
+ args2[u"remote_integ_key"] = ikeys[i]
+ history = bool(not 1 < i < n_tunnels - 2)
papi_exec.add(cmd2, history=history, **args2)
replies = papi_exec.get_replies(err_msg)
for reply in replies:
- if 'sw_if_index' in reply:
- ipsec_tunnels.append(reply["sw_if_index"])
+ if u"sw_if_index" in reply:
+ ipsec_tunnels.append(reply[u"sw_if_index"])
# Configure IP routes
- cmd1 = 'ip_route_add_del'
+ cmd1 = u"ip_route_add_del"
route = IPUtil.compose_vpp_route_structure(
- nodes['DUT2'], if1_ip.compressed,
+ nodes[u"DUT2"], if1_ip.compressed,
prefix_len=32 if if1_ip.version == 6 else 8,
interface=if2_key,
gateway=(if2_ip - 1).compressed
@@ -1154,35 +1123,36 @@ class IPsecUtil(object):
route=route
)
papi_exec.add(cmd1, **args1)
- cmd1 = 'sw_interface_set_unnumbered'
+ cmd1 = u"sw_interface_set_unnumbered"
args1 = dict(
is_add=True,
sw_if_index=InterfaceUtil.get_interface_index(
- nodes['DUT2'], if2_key),
+ nodes[u"DUT2"], if2_key
+ ),
unnumbered_sw_if_index=0
)
- cmd2 = 'sw_interface_set_flags'
+ cmd2 = u"sw_interface_set_flags"
args2 = dict(
sw_if_index=0,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value)
- cmd3 = 'ip_route_add_del'
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ )
+ cmd3 = u"ip_route_add_del"
args3 = dict(
is_add=1,
is_multipath=0,
route=None
)
- err_msg = 'Failed to add IP routes on host {host}'.format(
- host=nodes['DUT2']['host'])
- for i in xrange(n_tunnels):
- args1['unnumbered_sw_if_index'] = ipsec_tunnels[i]
- args2['sw_if_index'] = ipsec_tunnels[i]
- args3['route'] = IPUtil.compose_vpp_route_structure(
- nodes['DUT1'],
- (raddr_ip1 + i).compressed,
+ err_msg = f"Failed to add IP routes " \
+ f"on host {nodes[u'DUT2'][u'host']}"
+ for i in range(n_tunnels):
+ args1[u"unnumbered_sw_if_index"] = ipsec_tunnels[i]
+ args2[u"sw_if_index"] = ipsec_tunnels[i]
+ args3[u"route"] = IPUtil.compose_vpp_route_structure(
+ nodes[u"DUT1"], (raddr_ip1 + i).compressed,
prefix_len=128 if raddr_ip1.version == 6 else 32,
interface=ipsec_tunnels[i]
)
- history = False if 1 < i < n_tunnels - 1 else True
+ history = bool(not 1 < i < n_tunnels - 2)
papi_exec.add(cmd1, history=history, **args1). \
add(cmd2, history=history, **args2). \
add(cmd3, history=history, **args3)
@@ -1228,66 +1198,75 @@ class IPsecUtil(object):
spi_1 = 300000
spi_2 = 400000
- crypto_key = gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg))
- integ_key = gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg)) \
- if integ_alg else ''
+ crypto_key = gen_key(
+ IPsecUtil.get_crypto_alg_key_len(crypto_alg)
+ ).decode()
+ integ_key = gen_key(
+ IPsecUtil.get_integ_alg_key_len(integ_alg)
+ ).decode() if integ_alg else u""
IPsecUtil.vpp_ipsec_set_ip_route(
- nodes['DUT1'], n_tunnels, tunnel_ip1, raddr_ip2, tunnel_ip2,
+ nodes[u"DUT1"], n_tunnels, tunnel_ip1, raddr_ip2, tunnel_ip2,
interface1, raddr_range)
IPsecUtil.vpp_ipsec_set_ip_route(
- nodes['DUT2'], n_tunnels, tunnel_ip2, raddr_ip1, tunnel_ip1,
+ nodes[u"DUT2"], n_tunnels, tunnel_ip2, raddr_ip1, tunnel_ip1,
interface2, raddr_range)
- IPsecUtil.vpp_ipsec_add_spd(
- nodes['DUT1'], spd_id)
- IPsecUtil.vpp_ipsec_spd_add_if(
- nodes['DUT1'], spd_id, interface1)
+ IPsecUtil.vpp_ipsec_add_spd(nodes[u"DUT1"], spd_id)
+ IPsecUtil.vpp_ipsec_spd_add_if(nodes[u"DUT1"], spd_id, interface1)
IPsecUtil.vpp_ipsec_policy_add(
- nodes['DUT1'], spd_id, p_hi, PolicyAction.BYPASS, inbound=False,
- proto=50, laddr_range='100.0.0.0/8', raddr_range='100.0.0.0/8')
+ nodes[u"DUT1"], spd_id, p_hi, PolicyAction.BYPASS, inbound=False,
+ proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+ )
IPsecUtil.vpp_ipsec_policy_add(
- nodes['DUT1'], spd_id, p_hi, PolicyAction.BYPASS, inbound=True,
- proto=50, laddr_range='100.0.0.0/8', raddr_range='100.0.0.0/8')
+ nodes[u"DUT1"], spd_id, p_hi, PolicyAction.BYPASS, inbound=True,
+ proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+ )
- IPsecUtil.vpp_ipsec_add_spd(
- nodes['DUT2'], spd_id)
- IPsecUtil.vpp_ipsec_spd_add_if(
- nodes['DUT2'], spd_id, interface2)
+ IPsecUtil.vpp_ipsec_add_spd(nodes[u"DUT2"], spd_id)
+ IPsecUtil.vpp_ipsec_spd_add_if(nodes[u"DUT2"], spd_id, interface2)
IPsecUtil.vpp_ipsec_policy_add(
- nodes['DUT2'], spd_id, p_hi, PolicyAction.BYPASS, inbound=False,
- proto=50, laddr_range='100.0.0.0/8', raddr_range='100.0.0.0/8')
+ nodes[u"DUT2"], spd_id, p_hi, PolicyAction.BYPASS, inbound=False,
+ proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+ )
IPsecUtil.vpp_ipsec_policy_add(
- nodes['DUT2'], spd_id, p_hi, PolicyAction.BYPASS, inbound=True,
- proto=50, laddr_range='100.0.0.0/8', raddr_range='100.0.0.0/8')
+ nodes[u"DUT2"], spd_id, p_hi, PolicyAction.BYPASS, inbound=True,
+ proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+ )
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes['DUT1'], n_tunnels, sa_id_1, spi_1, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip1, tunnel_ip2)
-
+ nodes[u"DUT1"], n_tunnels, sa_id_1, spi_1, crypto_alg, crypto_key,
+ integ_alg, integ_key, tunnel_ip1, tunnel_ip2
+ )
IPsecUtil.vpp_ipsec_spd_add_entries(
- nodes['DUT1'], n_tunnels, spd_id, p_lo, False, sa_id_1, raddr_ip2)
+ nodes[u"DUT1"], n_tunnels, spd_id, p_lo, False, sa_id_1, raddr_ip2
+ )
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes['DUT2'], n_tunnels, sa_id_1, spi_1, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip1, tunnel_ip2)
-
+ nodes[u"DUT2"], n_tunnels, sa_id_1, spi_1, crypto_alg, crypto_key,
+ integ_alg, integ_key, tunnel_ip1, tunnel_ip2
+ )
IPsecUtil.vpp_ipsec_spd_add_entries(
- nodes['DUT2'], n_tunnels, spd_id, p_lo, True, sa_id_1, raddr_ip2)
+ nodes[u"DUT2"], n_tunnels, spd_id, p_lo, True, sa_id_1, raddr_ip2
+ )
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes['DUT2'], n_tunnels, sa_id_2, spi_2, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip2, tunnel_ip1)
+ nodes[u"DUT2"], n_tunnels, sa_id_2, spi_2, crypto_alg, crypto_key,
+ integ_alg, integ_key, tunnel_ip2, tunnel_ip1
+ )
IPsecUtil.vpp_ipsec_spd_add_entries(
- nodes['DUT2'], n_tunnels, spd_id, p_lo, False, sa_id_2, raddr_ip1)
+ nodes[u"DUT2"], n_tunnels, spd_id, p_lo, False, sa_id_2, raddr_ip1
+ )
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes['DUT1'], n_tunnels, sa_id_2, spi_2, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip2, tunnel_ip1)
+ nodes[u"DUT1"], n_tunnels, sa_id_2, spi_2, crypto_alg, crypto_key,
+ integ_alg, integ_key, tunnel_ip2, tunnel_ip1
+ )
IPsecUtil.vpp_ipsec_spd_add_entries(
- nodes['DUT1'], n_tunnels, spd_id, p_lo, True, sa_id_2, raddr_ip1)
+ nodes[u"DUT1"], n_tunnels, spd_id, p_lo, True, sa_id_2, raddr_ip1
+ )
@staticmethod
def vpp_ipsec_show(node):
@@ -1296,4 +1275,4 @@ class IPsecUtil(object):
:param node: Node to run command on.
:type node: dict
"""
- PapiSocketExecutor.run_cli_cmd(node, 'show ipsec')
+ PapiSocketExecutor.run_cli_cmd(node, u"show ipsec")
diff --git a/resources/libraries/python/IPv6Util.py b/resources/libraries/python/IPv6Util.py
index aacf0fb5f7..683f892f62 100644
--- a/resources/libraries/python/IPv6Util.py
+++ b/resources/libraries/python/IPv6Util.py
@@ -19,7 +19,7 @@ from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import NodeType
-class IPv6Util(object):
+class IPv6Util:
"""IPv6 utilities"""
@staticmethod
@@ -31,12 +31,13 @@ class IPv6Util(object):
:type node: dict
:type interface: str
"""
- cmd = 'sw_interface_ip6nd_ra_config'
+ cmd = u"sw_interface_ip6nd_ra_config"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
- suppress=1)
- err_msg = 'Failed to suppress ICMPv6 router advertisement message on ' \
- 'interface {ifc}'.format(ifc=interface)
+ suppress=1
+ )
+ err_msg = f"Failed to suppress ICMPv6 router advertisement message " \
+ f"on interface {interface}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -53,12 +54,13 @@ class IPv6Util(object):
:type interface: str
:type interval: int
"""
- cmd = 'sw_interface_ip6nd_ra_config'
+ cmd = u"sw_interface_ip6nd_ra_config"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
- initial_interval=int(interval))
- err_msg = 'Failed to set router advertisement interval on ' \
- 'interface {ifc}'.format(ifc=interface)
+ initial_interval=int(interval)
+ )
+ err_msg = f"Failed to set router advertisement interval " \
+ f"on interface {interface}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -72,10 +74,11 @@ class IPv6Util(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.TG:
+ if node[u"type"] == NodeType.TG:
continue
- for port_k in node['interfaces'].keys():
+ for port_k in node[u"interfaces"].keys():
ip6_addr_list = IPUtil.vpp_get_interface_ip_addresses(
- node, port_k, 'ipv6')
+ node, port_k, u"ipv6"
+ )
if ip6_addr_list:
IPv6Util.vpp_ra_suppress_link_layer(node, port_k)
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index a15507454a..fa6a33197c 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -14,8 +14,8 @@
"""Interface util library."""
from time import sleep
-
from enum import IntEnum
+
from ipaddress import ip_address
from robot.api import logger
@@ -103,10 +103,10 @@ class LinkBondMode(IntEnum):
BOND_API_MODE_LACP = 5
-class InterfaceUtil(object):
+class InterfaceUtil:
"""General utilities for managing interfaces"""
- __UDEV_IF_RULES_FILE = '/etc/udev/rules.d/10-network.rules'
+ __UDEV_IF_RULES_FILE = u"/etc/udev/rules.d/10-network.rules"
@staticmethod
def pci_to_int(pci_str):
@@ -118,28 +118,28 @@ class InterfaceUtil(object):
:returns: Integer representation of PCI address.
:rtype: int
"""
- pci = list(pci_str.split(':')[0:2])
- pci.extend(pci_str.split(':')[2].split('.'))
+ pci = list(pci_str.split(u":")[0:2])
+ pci.extend(pci_str.split(u":")[2].split(u"."))
return (int(pci[0], 16) | int(pci[1], 16) << 16 |
int(pci[2], 16) << 24 | int(pci[3], 16) << 29)
@staticmethod
def pci_to_eth(node, pci_str):
- """Convert PCI address to Linux ethernet name.
+ """Convert PCI address on DUT to Linux ethernet name.
+ :param node: DUT node
:param pci_str: PCI address.
+ :type node: dict
:type pci_str: str
:returns: Ethernet name.
:rtype: str
"""
- cmd = ('basename /sys/bus/pci/devices/{pci_str}/net/*'.
- format(pci_str=pci_str))
+ cmd = f"basename /sys/bus/pci/devices/{pci_str}/net/*"
try:
stdout, _ = exec_cmd_no_error(node, cmd)
except RuntimeError:
- raise RuntimeError("Cannot convert {pci_str} to ethernet name!".
- format(pci_str=pci_str))
+ raise RuntimeError(f"Cannot convert {pci_str} to ethernet name!")
return stdout.strip()
@@ -162,13 +162,12 @@ class InterfaceUtil(object):
sw_if_index = \
Topology.get_interface_sw_index_by_name(node, interface)
except TypeError as err:
- raise TypeError('Wrong interface format {ifc}: {err}'.format(
- ifc=interface, err=err.message))
+ raise TypeError(f"Wrong interface format {interface}") from err
return sw_if_index
@staticmethod
- def set_interface_state(node, interface, state, if_type='key'):
+ def set_interface_state(node, interface, state, if_type=u"key"):
"""Set interface state on a node.
Function can be used for DUTs as well as for TGs.
@@ -186,43 +185,42 @@ class InterfaceUtil(object):
:raises ValueError: If the state of interface is unexpected.
:raises ValueError: If the node has an unknown node type.
"""
- if if_type == 'key':
- if isinstance(interface, basestring):
+ if if_type == u"key":
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
iface_name = Topology.get_interface_name(node, interface)
else:
sw_if_index = interface
- elif if_type == 'name':
+ elif if_type == u"name":
iface_key = Topology.get_interface_by_name(node, interface)
if iface_key is not None:
sw_if_index = Topology.get_interface_sw_index(node, iface_key)
iface_name = interface
else:
- raise ValueError('Unknown if_type: {type}'.format(type=if_type))
+ raise ValueError(f"Unknown if_type: {if_type}")
- if node['type'] == NodeType.DUT:
- if state == 'up':
+ if node[u"type"] == NodeType.DUT:
+ if state == u"up":
flags = InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
- elif state == 'down':
+ elif state == u"down":
flags = 0
else:
- raise ValueError('Unexpected interface state: {state}'.format(
- state=state))
- cmd = 'sw_interface_set_flags'
- err_msg = 'Failed to set interface state on host {host}'.format(
- host=node['host'])
+ raise ValueError(f"Unexpected interface state: {state}")
+ cmd = u"sw_interface_set_flags"
+ err_msg = f"Failed to set interface state on host {node[u'host']}"
args = dict(
sw_if_index=int(sw_if_index),
- flags=flags)
+ flags=flags
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
- elif node['type'] == NodeType.TG or node['type'] == NodeType.VM:
- cmd = 'ip link set {ifc} {state}'.format(
- ifc=iface_name, state=state)
+ elif node[u"type"] == NodeType.TG or node[u"type"] == NodeType.VM:
+ cmd = f"ip link set {iface_name} {state}"
exec_cmd_no_error(node, cmd, sudo=True)
else:
- raise ValueError('Node {} has unknown NodeType: "{}"'
- .format(node['host'], node['type']))
+ raise ValueError(
+ f"Node {node[u'host']} has unknown NodeType: {node[u'type']}"
+ )
@staticmethod
def set_interface_ethernet_mtu(node, iface_key, mtu):
@@ -240,16 +238,17 @@ class InterfaceUtil(object):
:raises ValueError: If the node type is "DUT".
:raises ValueError: If the node has an unknown node type.
"""
- if node['type'] == NodeType.DUT:
- raise ValueError('Node {}: Setting Ethernet MTU for interface '
- 'on DUT nodes not supported', node['host'])
- elif node['type'] == NodeType.TG:
+ if node[u"type"] == NodeType.DUT:
+ msg = f"Node {node[u'host']}: Setting Ethernet MTU for interface " \
+ f"on DUT nodes not supported"
+ elif node[u"type"] != NodeType.TG:
+ msg = f"Node {node[u'host']} has unknown NodeType: {node[u'type']}"
+ else:
iface_name = Topology.get_interface_name(node, iface_key)
- cmd = 'ip link set {} mtu {}'.format(iface_name, mtu)
+ cmd = f"ip link set {iface_name} mtu {mtu}"
exec_cmd_no_error(node, cmd, sudo=True)
- else:
- raise ValueError('Node {} has unknown NodeType: "{}"'
- .format(node['host'], node['type']))
+ return
+ raise ValueError(msg)
@staticmethod
def set_default_ethernet_mtu_on_all_interfaces_on_node(node):
@@ -261,7 +260,7 @@ class InterfaceUtil(object):
:type node: dict
:returns: Nothing.
"""
- for ifc in node['interfaces']:
+ for ifc in node[u"interfaces"]:
InterfaceUtil.set_interface_ethernet_mtu(node, ifc, 1500)
@staticmethod
@@ -275,23 +274,23 @@ class InterfaceUtil(object):
:type interface: str or int
:type mtu: int
"""
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
- cmd = 'hw_interface_set_mtu'
- err_msg = 'Failed to set interface MTU on host {host}'.format(
- host=node['host'])
- args = dict(sw_if_index=sw_if_index,
- mtu=int(mtu))
+ cmd = u"hw_interface_set_mtu"
+ err_msg = f"Failed to set interface MTU on host {node[u'host']}"
+ args = dict(
+ sw_if_index=sw_if_index,
+ mtu=int(mtu)
+ )
try:
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
except AssertionError as err:
# TODO: Make failure tolerance optional.
- logger.debug("Setting MTU failed. Expected?\n{err}".format(
- err=err))
+ logger.debug(f"Setting MTU failed. Expected?\n{err}")
@staticmethod
def vpp_set_interfaces_mtu_on_node(node, mtu=9200):
@@ -302,7 +301,7 @@ class InterfaceUtil(object):
:type node: dict
:type mtu: int
"""
- for interface in node['interfaces']:
+ for interface in node[u"interfaces"]:
InterfaceUtil.vpp_set_interface_mtu(node, interface, mtu)
@staticmethod
@@ -315,7 +314,7 @@ class InterfaceUtil(object):
:type mtu: int
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
InterfaceUtil.vpp_set_interfaces_mtu_on_node(node, mtu)
@staticmethod
@@ -331,21 +330,22 @@ class InterfaceUtil(object):
:raises RuntimeError: If any interface is not in link-up state after
defined number of retries.
"""
- for _ in xrange(0, retries):
+ for _ in range(0, retries):
not_ready = list()
out = InterfaceUtil.vpp_get_interface_data(node)
for interface in out:
- if interface.get('flags') == 1:
- not_ready.append(interface.get('interface_name'))
- if not not_ready:
- break
- else:
- logger.debug('Interfaces still not in link-up state:\n{ifs} '
- '\nWaiting...'.format(ifs=not_ready))
+ if interface.get(u"flags") == 1:
+ not_ready.append(interface.get(u"interface_name"))
+ if not_ready:
+ logger.debug(
+ f"Interfaces still not in link-up state:\n{not_ready}"
+ )
sleep(1)
+ else:
+ break
else:
- err = 'Timeout, interfaces not up:\n{ifs}'.format(ifs=not_ready) \
- if 'not_ready' in locals() else 'No check executed!'
+ err = f"Timeout, interfaces not up:\n{not_ready}" \
+ if u"not_ready" in locals() else u"No check executed!"
raise RuntimeError(err)
@staticmethod
@@ -361,7 +361,7 @@ class InterfaceUtil(object):
:returns: Nothing.
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
InterfaceUtil.vpp_node_interfaces_ready_wait(node, retries)
@staticmethod
@@ -388,49 +388,48 @@ class InterfaceUtil(object):
:returns: Processed interface dump.
:rtype: dict
"""
- if_dump['l2_address'] = str(if_dump['l2_address'])
- if_dump['b_dmac'] = str(if_dump['b_dmac'])
- if_dump['b_smac'] = str(if_dump['b_smac'])
- if_dump['flags'] = if_dump['flags'].value
- if_dump['type'] = if_dump['type'].value
- if_dump['link_duplex'] = if_dump['link_duplex'].value
- if_dump['sub_if_flags'] = if_dump['sub_if_flags'].value \
- if hasattr(if_dump['sub_if_flags'], 'value') \
- else int(if_dump['sub_if_flags'])
+ if_dump[u"l2_address"] = str(if_dump[u"l2_address"])
+ if_dump[u"b_dmac"] = str(if_dump[u"b_dmac"])
+ if_dump[u"b_smac"] = str(if_dump[u"b_smac"])
+ if_dump[u"flags"] = if_dump[u"flags"].value
+ if_dump[u"type"] = if_dump[u"type"].value
+ if_dump[u"link_duplex"] = if_dump[u"link_duplex"].value
+ if_dump[u"sub_if_flags"] = if_dump[u"sub_if_flags"].value \
+ if hasattr(if_dump[u"sub_if_flags"], u"value") \
+ else int(if_dump[u"sub_if_flags"])
return if_dump
if interface is not None:
- if isinstance(interface, basestring):
- param = 'interface_name'
+ if isinstance(interface, str):
+ param = u"interface_name"
elif isinstance(interface, int):
- param = 'sw_if_index'
+ param = u"sw_if_index"
else:
- raise TypeError('Wrong interface format {ifc}'.format(
- ifc=interface))
+ raise TypeError(f"Wrong interface format {interface}")
else:
- param = ''
+ param = u""
- cmd = 'sw_interface_dump'
+ cmd = u"sw_interface_dump"
args = dict(
name_filter_valid=False,
- name_filter=''
+ name_filter=u""
)
- err_msg = 'Failed to get interface dump on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to get interface dump on host {node[u'host']}"
+
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
- logger.debug('Received data:\n{d!r}'.format(d=details))
+ logger.debug(f"Received data:\n{details!r}")
data = list() if interface is None else dict()
for dump in details:
if interface is None:
data.append(process_if_dump(dump))
- elif str(dump.get(param)).rstrip('\x00') == str(interface):
+ elif str(dump.get(param)).rstrip(u"\x00") == str(interface):
data = process_if_dump(dump)
break
- logger.debug('Interface data:\n{if_data}'.format(if_data=data))
+ logger.debug(f"Interface data:\n{data}")
return data
@staticmethod
@@ -446,11 +445,12 @@ class InterfaceUtil(object):
:rtype: str
"""
if_data = InterfaceUtil.vpp_get_interface_data(node, sw_if_index)
- if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
+ if if_data[u"sup_sw_if_index"] != if_data[u"sw_if_index"]:
if_data = InterfaceUtil.vpp_get_interface_data(
- node, if_data['sup_sw_if_index'])
+ node, if_data[u"sup_sw_if_index"]
+ )
- return if_data.get('interface_name')
+ return if_data.get(u"interface_name")
@staticmethod
def vpp_get_interface_sw_index(node, interface_name):
@@ -466,7 +466,7 @@ class InterfaceUtil(object):
"""
if_data = InterfaceUtil.vpp_get_interface_data(node, interface_name)
- return if_data.get('sw_if_index')
+ return if_data.get(u"sw_if_index")
@staticmethod
def vpp_get_interface_mac(node, interface):
@@ -480,11 +480,11 @@ class InterfaceUtil(object):
:rtype: str
"""
if_data = InterfaceUtil.vpp_get_interface_data(node, interface)
- if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
+ if if_data[u"sup_sw_if_index"] != if_data[u"sw_if_index"]:
if_data = InterfaceUtil.vpp_get_interface_data(
- node, if_data['sup_sw_if_index'])
+ node, if_data[u"sup_sw_if_index"])
- return if_data.get('l2_address')
+ return if_data.get(u"l2_address")
@staticmethod
def tg_set_interface_driver(node, pci_addr, driver):
@@ -508,20 +508,17 @@ class InterfaceUtil(object):
# Unbind from current driver
if old_driver is not None:
- cmd = 'sh -c "echo {0} > /sys/bus/pci/drivers/{1}/unbind"'\
- .format(pci_addr, old_driver)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ cmd = f"sh -c \"echo {pci_addr} > " \
+ f"/sys/bus/pci/drivers/{old_driver}/unbind\""
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
# Bind to the new driver
- cmd = 'sh -c "echo {0} > /sys/bus/pci/drivers/{1}/bind"'\
- .format(pci_addr, driver)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ cmd = f"sh -c \"echo {pci_addr} > /sys/bus/pci/drivers/{driver}/bind\""
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
@staticmethod
def tg_get_interface_driver(node, pci_addr):
@@ -557,24 +554,23 @@ class InterfaceUtil(object):
ssh = SSH()
ssh.connect(node)
- cmd = 'rm -f {0}'.format(InterfaceUtil.__UDEV_IF_RULES_FILE)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ cmd = f"rm -f {InterfaceUtil.__UDEV_IF_RULES_FILE}"
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
-
- for interface in node['interfaces'].values():
- rule = 'SUBSYSTEM==\\"net\\", ACTION==\\"add\\", ATTR{address}' + \
- '==\\"' + interface['mac_address'] + '\\", NAME=\\"' + \
- interface['name'] + '\\"'
- cmd = 'sh -c "echo \'{0}\' >> {1}"'.format(
- rule, InterfaceUtil.__UDEV_IF_RULES_FILE)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
+
+ for interface in node[u"interfaces"].values():
+ rule = u'SUBSYSTEM==\\"net\\", ACTION==\\"add\\", ATTR{address}' + \
+ u'==\\"' + interface[u"mac_address"] + u'\\", NAME=\\"' + \
+ interface[u"name"] + u'\\"'
+ cmd = f"sh -c \"echo '{rule}'\" >> " \
+ f"{InterfaceUtil.__UDEV_IF_RULES_FILE}'"
+
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ raise RuntimeError(f"'{cmd}' failed on '{node[u'host']}'")
- cmd = '/etc/init.d/udev restart'
+ cmd = u"/etc/init.d/udev restart"
ssh.exec_command_sudo(cmd)
@staticmethod
@@ -584,10 +580,10 @@ class InterfaceUtil(object):
:param node: Node to setup interfaces driver on (must be TG node).
:type node: dict
"""
- for interface in node['interfaces'].values():
- InterfaceUtil.tg_set_interface_driver(node,
- interface['pci_address'],
- interface['driver'])
+ for interface in node[u"interfaces"].values():
+ InterfaceUtil.tg_set_interface_driver(
+ node, interface[u"pci_address"], interface[u"driver"]
+ )
@staticmethod
def update_vpp_interface_data_on_node(node):
@@ -605,20 +601,24 @@ class InterfaceUtil(object):
interface_list = InterfaceUtil.vpp_get_interface_data(node)
interface_dict = dict()
for ifc in interface_list:
- interface_dict[ifc['l2_address']] = ifc
+ interface_dict[ifc[u"l2_address"]] = ifc
- for if_name, if_data in node['interfaces'].items():
- ifc_dict = interface_dict.get(if_data['mac_address'])
+ for if_name, if_data in node[u"interfaces"].items():
+ ifc_dict = interface_dict.get(if_data[u"mac_address"])
if ifc_dict is not None:
- if_data['name'] = ifc_dict['interface_name']
- if_data['vpp_sw_index'] = ifc_dict['sw_if_index']
- if_data['mtu'] = ifc_dict['mtu'][0]
- logger.trace('Interface {ifc} found by MAC {mac}'.format(
- ifc=if_name, mac=if_data['mac_address']))
+ if_data[u"name"] = ifc_dict[u"interface_name"]
+ if_data[u"vpp_sw_index"] = ifc_dict[u"sw_if_index"]
+ if_data[u"mtu"] = ifc_dict[u"mtu"][0]
+ logger.trace(
+ f"Interface {if_name} found by MAC "
+ f"{if_data[u'mac_address']}"
+ )
else:
- logger.trace('Interface {ifc} not found by MAC {mac}'.format(
- ifc=if_name, mac=if_data['mac_address']))
- if_data['vpp_sw_index'] = None
+ logger.trace(
+ f"Interface {if_name} not found by MAC "
+ f"{if_data[u'mac_address']}"
+ )
+ if_data[u"vpp_sw_index"] = None
@staticmethod
def update_nic_interface_names(node):
@@ -629,24 +629,22 @@ class InterfaceUtil(object):
:param node: Node dictionary.
:type node: dict
"""
- for ifc in node['interfaces'].values():
- if_pci = ifc['pci_address'].replace('.', ':').split(':')
- bus = '{:x}'.format(int(if_pci[1], 16))
- dev = '{:x}'.format(int(if_pci[2], 16))
- fun = '{:x}'.format(int(if_pci[3], 16))
- loc = '{bus}/{dev}/{fun}'.format(bus=bus, dev=dev, fun=fun)
- if ifc['model'] == 'Intel-XL710':
- ifc['name'] = 'FortyGigabitEthernet{loc}'.format(loc=loc)
- elif ifc['model'] == 'Intel-X710':
- ifc['name'] = 'TenGigabitEthernet{loc}'.format(loc=loc)
- elif ifc['model'] == 'Intel-X520-DA2':
- ifc['name'] = 'TenGigabitEthernet{loc}'.format(loc=loc)
- elif ifc['model'] == 'Cisco-VIC-1385':
- ifc['name'] = 'FortyGigabitEthernet{loc}'.format(loc=loc)
- elif ifc['model'] == 'Cisco-VIC-1227':
- ifc['name'] = 'TenGigabitEthernet{loc}'.format(loc=loc)
+ for ifc in node[u"interfaces"].values():
+ if_pci = ifc[u"pci_address"].replace(u".", u":").split(u":")
+ loc = f"{int(if_pci[1], 16):x}/{int(if_pci[2], 16):x}/" \
+ f"{int(if_pci[3], 16):x}"
+ if ifc[u"model"] == u"Intel-XL710":
+ ifc[u"name"] = f"FortyGigabitEthernet{loc}"
+ elif ifc[u"model"] == u"Intel-X710":
+ ifc[u"name"] = f"TenGigabitEthernet{loc}"
+ elif ifc[u"model"] == u"Intel-X520-DA2":
+ ifc[u"name"] = f"TenGigabitEthernet{loc}"
+ elif ifc[u"model"] == u"Cisco-VIC-1385":
+ ifc[u"name"] = f"FortyGigabitEthernet{loc}"
+ elif ifc[u"model"] == u"Cisco-VIC-1227":
+ ifc[u"name"] = f"TenGigabitEthernet{loc}"
else:
- ifc['name'] = 'UnknownEthernet{loc}'.format(loc=loc)
+ ifc[u"name"] = f"UnknownEthernet{loc}"
@staticmethod
def update_nic_interface_names_on_all_duts(nodes):
@@ -658,7 +656,7 @@ class InterfaceUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
InterfaceUtil.update_nic_interface_names(node)
@staticmethod
@@ -686,19 +684,20 @@ class InterfaceUtil(object):
ssh = SSH()
ssh.connect(node)
- cmd = ('for dev in `ls /sys/class/net/`; do echo "\\"`cat '
- '/sys/class/net/$dev/address`\\": \\"$dev\\""; done;')
+ cmd = u'for dev in `ls /sys/class/net/`; do echo "\\"`cat ' \
+ u'/sys/class/net/$dev/address`\\": \\"$dev\\""; done;'
- (ret_code, stdout, _) = ssh.exec_command(cmd)
+ ret_code, stdout, _ = ssh.exec_command(cmd)
if int(ret_code) != 0:
- raise RuntimeError('Get interface name and MAC failed')
- tmp = "{" + stdout.rstrip().replace('\n', ',') + "}"
+ raise RuntimeError(u"Get interface name and MAC failed")
+ tmp = u"{" + stdout.rstrip().replace(u"\n", u",") + u"}"
+
interfaces = JsonParser().parse_data(tmp)
- for interface in node['interfaces'].values():
- name = interfaces.get(interface['mac_address'])
+ for interface in node[u"interfaces"].values():
+ name = interfaces.get(interface[u"mac_address"])
if name is None:
continue
- interface['name'] = name
+ interface[u"name"] = name
# Set udev rules for interfaces
if not skip_tg_udev:
@@ -713,33 +712,37 @@ class InterfaceUtil(object):
:type node: dict
:returns: Nothing.
:raises ValueError: If numa node ia less than 0.
- :raises RuntimeError: If update of numa node failes.
+ :raises RuntimeError: If update of numa node failed.
"""
+ def check_cpu_node_count(node_n, val):
+ val = int(val)
+ if val < 0:
+ if CpuUtils.cpu_node_count(node_n) == 1:
+ val = 0
+ else:
+ raise ValueError
+ return val
ssh = SSH()
for if_key in Topology.get_node_interfaces(node):
if_pci = Topology.get_interface_pci_addr(node, if_key)
ssh.connect(node)
- cmd = "cat /sys/bus/pci/devices/{}/numa_node".format(if_pci)
+ cmd = f"cat /sys/bus/pci/devices/{if_pci}/numa_node"
for _ in range(3):
- (ret, out, _) = ssh.exec_command(cmd)
+ ret, out, _ = ssh.exec_command(cmd)
if ret == 0:
try:
- numa_node = int(out)
- if numa_node < 0:
- if CpuUtils.cpu_node_count(node) == 1:
- numa_node = 0
- else:
- raise ValueError
+ numa_node = check_cpu_node_count(node, out)
except ValueError:
- logger.trace('Reading numa location failed for: {0}'
- .format(if_pci))
+ logger.trace(
+ f"Reading numa location failed for: {if_pci}"
+ )
else:
- Topology.set_interface_numa_node(node, if_key,
- numa_node)
+ Topology.set_interface_numa_node(
+ node, if_key, numa_node
+ )
break
else:
- raise RuntimeError('Update numa node failed for: {0}'
- .format(if_pci))
+ raise RuntimeError(f"Update numa node failed for: {if_pci}")
@staticmethod
def update_all_numa_nodes(nodes, skip_tg=False):
@@ -753,15 +756,14 @@ class InterfaceUtil(object):
:returns: Nothing.
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
InterfaceUtil.iface_update_numa_node(node)
- elif node['type'] == NodeType.TG and not skip_tg:
+ elif node[u"type"] == NodeType.TG and not skip_tg:
InterfaceUtil.iface_update_numa_node(node)
@staticmethod
- def update_all_interface_data_on_all_nodes(nodes, skip_tg=False,
- skip_tg_udev=False,
- numa_node=False):
+ def update_all_interface_data_on_all_nodes(
+ nodes, skip_tg=False, skip_tg_udev=False, numa_node=False):
"""Update interface names on all nodes in DICT__nodes.
This method updates the topology dictionary by querying interface lists
@@ -777,16 +779,16 @@ class InterfaceUtil(object):
:type numa_node: bool
"""
for node_data in nodes.values():
- if node_data['type'] == NodeType.DUT:
+ if node_data[u"type"] == NodeType.DUT:
InterfaceUtil.update_vpp_interface_data_on_node(node_data)
- elif node_data['type'] == NodeType.TG and not skip_tg:
+ elif node_data[u"type"] == NodeType.TG and not skip_tg:
InterfaceUtil.update_tg_interface_data_on_node(
node_data, skip_tg_udev)
if numa_node:
- if node_data['type'] == NodeType.DUT:
+ if node_data[u"type"] == NodeType.DUT:
InterfaceUtil.iface_update_numa_node(node_data)
- elif node_data['type'] == NodeType.TG and not skip_tg:
+ elif node_data[u"type"] == NodeType.TG and not skip_tg:
InterfaceUtil.iface_update_numa_node(node_data)
@staticmethod
@@ -807,22 +809,22 @@ class InterfaceUtil(object):
"""
sw_if_index = InterfaceUtil.get_interface_index(node, interface)
- cmd = 'create_vlan_subif'
+ cmd = u"create_vlan_subif"
args = dict(
sw_if_index=sw_if_index,
vlan_id=int(vlan)
)
- err_msg = 'Failed to create VLAN sub-interface on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to create VLAN sub-interface on host {node[u'host']}"
+
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'vlan_subif')
+ if_key = Topology.add_new_port(node, u"vlan_subif")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
Topology.update_interface_name(node, if_key, ifc_name)
- return '{ifc}.{vlan}'.format(ifc=interface, vlan=vlan), sw_if_index
+ return f"{interface}.{vlan}", sw_if_index
@staticmethod
def create_vxlan_interface(node, vni, source_ip, destination_ip):
@@ -841,25 +843,27 @@ class InterfaceUtil(object):
:raises RuntimeError: if it is unable to create VxLAN interface on the
node.
"""
- src_address = ip_address(unicode(source_ip))
- dst_address = ip_address(unicode(destination_ip))
-
- cmd = 'vxlan_add_del_tunnel'
- args = dict(is_add=1,
- is_ipv6=1 if src_address.version == 6 else 0,
- instance=Constants.BITWISE_NON_ZERO,
- src_address=src_address.packed,
- dst_address=dst_address.packed,
- mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
- encap_vrf_id=0,
- decap_next_index=Constants.BITWISE_NON_ZERO,
- vni=int(vni))
- err_msg = 'Failed to create VXLAN tunnel interface on host {host}'.\
- format(host=node['host'])
+ src_address = ip_address(source_ip)
+ dst_address = ip_address(destination_ip)
+
+ cmd = u"vxlan_add_del_tunnel"
+ args = dict(
+ is_add=1,
+ is_ipv6=1 if src_address.version == 6 else 0,
+ instance=Constants.BITWISE_NON_ZERO,
+ src_address=src_address.packed,
+ dst_address=dst_address.packed,
+ mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
+ encap_vrf_id=0,
+ decap_next_index=Constants.BITWISE_NON_ZERO,
+ vni=int(vni)
+ )
+ err_msg = f"Failed to create VXLAN tunnel interface " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'vxlan_tunnel')
+ if_key = Topology.add_new_port(node, u"vxlan_tunnel")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
Topology.update_interface_name(node, if_key, ifc_name)
@@ -884,12 +888,14 @@ class InterfaceUtil(object):
"""
sw_if_index = InterfaceUtil.get_interface_index(node, interface)
- cmd = 'sw_interface_set_vxlan_bypass'
- args = dict(is_ipv6=0,
- sw_if_index=sw_if_index,
- enable=1)
- err_msg = 'Failed to set VXLAN bypass on interface on host {host}'.\
- format(host=node['host'])
+ cmd = u"sw_interface_set_vxlan_bypass"
+ args = dict(
+ is_ipv6=0,
+ sw_if_index=sw_if_index,
+ enable=1
+ )
+ err_msg = f"Failed to set VXLAN bypass on interface " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_replies(err_msg)
@@ -916,16 +922,16 @@ class InterfaceUtil(object):
:returns: Processed vxlan interface dump.
:rtype: dict
"""
- if vxlan_dump['is_ipv6']:
- vxlan_dump['src_address'] = \
- ip_address(unicode(vxlan_dump['src_address']))
- vxlan_dump['dst_address'] = \
- ip_address(unicode(vxlan_dump['dst_address']))
+ if vxlan_dump[u"is_ipv6"]:
+ vxlan_dump[u"src_address"] = \
+ ip_address(vxlan_dump[u"src_address"])
+ vxlan_dump[u"dst_address"] = \
+ ip_address(vxlan_dump[u"dst_address"])
else:
- vxlan_dump['src_address'] = \
- ip_address(unicode(vxlan_dump['src_address'][0:4]))
- vxlan_dump['dst_address'] = \
- ip_address(unicode(vxlan_dump['dst_address'][0:4]))
+ vxlan_dump[u"src_address"] = \
+ ip_address(vxlan_dump[u"src_address"][0:4])
+ vxlan_dump[u"dst_address"] = \
+ ip_address(vxlan_dump[u"dst_address"][0:4])
return vxlan_dump
if interface is not None:
@@ -933,10 +939,12 @@ class InterfaceUtil(object):
else:
sw_if_index = int(Constants.BITWISE_NON_ZERO)
- cmd = 'vxlan_tunnel_dump'
- args = dict(sw_if_index=sw_if_index)
- err_msg = 'Failed to get VXLAN dump on host {host}'.format(
- host=node['host'])
+ cmd = u"vxlan_tunnel_dump"
+ args = dict(
+ sw_if_index=sw_if_index
+ )
+ err_msg = f"Failed to get VXLAN dump on host {node[u'host']}"
+
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
@@ -944,55 +952,17 @@ class InterfaceUtil(object):
for dump in details:
if interface is None:
data.append(process_vxlan_dump(dump))
- elif dump['sw_if_index'] == sw_if_index:
+ elif dump[u"sw_if_index"] == sw_if_index:
data = process_vxlan_dump(dump)
break
- logger.debug('VXLAN data:\n{vxlan_data}'.format(vxlan_data=data))
+ logger.debug(f"VXLAN data:\n{data}")
return data
@staticmethod
- def vhost_user_dump(node):
- """Get vhost-user data for the given node.
-
- TODO: Move to VhostUser.py
-
- :param node: VPP node to get interface data from.
- :type node: dict
- :returns: List of dictionaries with all vhost-user interfaces.
- :rtype: list
- """
- def process_vhost_dump(vhost_dump):
- """Process vhost dump.
-
- :param vhost_dump: Vhost interface dump.
- :type vhost_dump: dict
- :returns: Processed vhost interface dump.
- :rtype: dict
- """
- vhost_dump['interface_name'] = \
- vhost_dump['interface_name'].rstrip('\x00')
- vhost_dump['sock_filename'] = \
- vhost_dump['sock_filename'].rstrip('\x00')
- return vhost_dump
-
- cmd = 'sw_interface_vhost_user_dump'
- err_msg = 'Failed to get vhost-user dump on host {host}'.format(
- host=node['host'])
- with PapiSocketExecutor(node) as papi_exec:
- details = papi_exec.add(cmd).get_details(err_msg)
-
- for dump in details:
- # In-place edits.
- process_vhost_dump(dump)
-
- logger.debug('Vhost-user details:\n{vhost_details}'.format(
- vhost_details=details))
- return details
-
- @staticmethod
- def create_subinterface(node, interface, sub_id, outer_vlan_id=None,
- inner_vlan_id=None, type_subif=None):
+ def create_subinterface(
+ node, interface, sub_id, outer_vlan_id=None, inner_vlan_id=None,
+ type_subif=None):
"""Create sub-interface on node. It is possible to set required
sub-interface type and VLAN tag(s).
@@ -1017,41 +987,41 @@ class InterfaceUtil(object):
subif_types = type_subif.split()
flags = 0
- if 'no_tags' in subif_types:
+ if u"no_tags" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_NO_TAGS
- if 'one_tag' in subif_types:
+ if u"one_tag" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_ONE_TAG
- if 'two_tags' in subif_types:
+ if u"two_tags" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_TWO_TAGS
- if 'dot1ad' in subif_types:
+ if u"dot1ad" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_DOT1AD
- if 'exact_match' in subif_types:
+ if u"exact_match" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_EXACT_MATCH
- if 'default_sub' in subif_types:
+ if u"default_sub" in subif_types:
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_DEFAULT
- if type_subif == 'default_sub':
+ if type_subif == u"default_sub":
flags = flags | SubInterfaceFlags.SUB_IF_API_FLAG_INNER_VLAN_ID_ANY\
| SubInterfaceFlags.SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY
- cmd = 'create_subif'
+ cmd = u"create_subif"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
sub_id=int(sub_id),
- sub_if_flags=flags.value if hasattr(flags, 'value') else int(flags),
+ sub_if_flags=flags.value if hasattr(flags, u"value")
+ else int(flags),
outer_vlan_id=int(outer_vlan_id) if outer_vlan_id else 0,
inner_vlan_id=int(inner_vlan_id) if inner_vlan_id else 0
)
- err_msg = 'Failed to create sub-interface on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to create sub-interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'subinterface')
+ if_key = Topology.add_new_port(node, u"subinterface")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
Topology.update_interface_name(node, if_key, ifc_name)
- return '{ifc}.{s_id}'.format(ifc=interface, s_id=sub_id), sw_if_index
+ return f"{interface}.{sub_id}", sw_if_index
@staticmethod
def create_gre_tunnel_interface(node, source_ip, destination_ip):
@@ -1067,21 +1037,25 @@ class InterfaceUtil(object):
:rtype: tuple
:raises RuntimeError: If unable to create GRE tunnel interface.
"""
- cmd = 'gre_tunnel_add_del'
- tunnel = dict(type=0,
- instance=Constants.BITWISE_NON_ZERO,
- src=str(source_ip),
- dst=str(destination_ip),
- outer_fib_id=0,
- session_id=0)
- args = dict(is_add=1,
- tunnel=tunnel)
- err_msg = 'Failed to create GRE tunnel interface on host {host}'.format(
- host=node['host'])
+ cmd = u"gre_tunnel_add_del"
+ tunnel = dict(
+ type=0,
+ instance=Constants.BITWISE_NON_ZERO,
+ src=str(source_ip),
+ dst=str(destination_ip),
+ outer_fib_id=0,
+ session_id=0
+ )
+ args = dict(
+ is_add=1,
+ tunnel=tunnel
+ )
+ err_msg = f"Failed to create GRE tunnel interface " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'gre_tunnel')
+ if_key = Topology.add_new_port(node, u"gre_tunnel")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
Topology.update_interface_name(node, if_key, ifc_name)
@@ -1101,14 +1075,15 @@ class InterfaceUtil(object):
:raises RuntimeError: If it is not possible to create loopback on the
node.
"""
- cmd = 'create_loopback'
- args = dict(mac_address=L2Util.mac_to_bin(mac) if mac else 0)
- err_msg = 'Failed to create loopback interface on host {host}'.format(
- host=node['host'])
+ cmd = u"create_loopback"
+ args = dict(
+ mac_address=L2Util.mac_to_bin(mac) if mac else 0
+ )
+ err_msg = f"Failed to create loopback interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'loopback')
+ if_key = Topology.add_new_port(node, u"loopback")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
Topology.update_interface_name(node, if_key, ifc_name)
@@ -1136,25 +1111,28 @@ class InterfaceUtil(object):
:raises RuntimeError: If it is not possible to create bond interface on
the node.
"""
- cmd = 'bond_create'
+ cmd = u"bond_create"
args = dict(
id=int(Constants.BITWISE_NON_ZERO),
- use_custom_mac=False if mac is None else True,
+ use_custom_mac=bool(mac is not None),
mac_address=L2Util.mac_to_bin(mac) if mac else None,
- mode=getattr(LinkBondMode, 'BOND_API_MODE_{md}'.format(
- md=mode.replace('-', '_').upper())).value,
+ mode=getattr(
+ LinkBondMode,
+ f"BOND_API_MODE_{mode.replace(u'-', u'_').upper()}"
+ ).value,
lb=0 if load_balance is None else getattr(
- LinkBondLoadBalanceAlgo, 'BOND_API_LB_ALGO_{lb}'.format(
- lb=load_balance.upper())).value,
+ LinkBondLoadBalanceAlgo,
+ f"BOND_API_LB_ALGO_{load_balance.upper()}"
+ ).value,
numa_only=False
)
- err_msg = 'Failed to create bond interface on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to create bond interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
InterfaceUtil.add_eth_interface(
- node, sw_if_index=sw_if_index, ifc_pfx='eth_bond')
+ node, sw_if_index=sw_if_index, ifc_pfx=u"eth_bond"
+ )
if_key = Topology.get_interface_by_sw_index(node, sw_if_index)
return if_key
@@ -1200,21 +1178,24 @@ class InterfaceUtil(object):
the node.
"""
PapiSocketExecutor.run_cli_cmd(
- node, 'set logging class avf level debug')
-
- cmd = 'avf_create'
- args = dict(pci_addr=InterfaceUtil.pci_to_int(vf_pci_addr),
- enable_elog=0,
- rxq_num=int(num_rx_queues) if num_rx_queues else 0,
- rxq_size=0,
- txq_size=0)
- err_msg = 'Failed to create AVF interface on host {host}'.format(
- host=node['host'])
+ node, u"set logging class avf level debug"
+ )
+
+ cmd = u"avf_create"
+ args = dict(
+ pci_addr=InterfaceUtil.pci_to_int(vf_pci_addr),
+ enable_elog=0,
+ rxq_num=int(num_rx_queues) if num_rx_queues else 0,
+ rxq_size=0,
+ txq_size=0
+ )
+ err_msg = f"Failed to create AVF interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
InterfaceUtil.add_eth_interface(
- node, sw_if_index=sw_if_index, ifc_pfx='eth_avf')
+ node, sw_if_index=sw_if_index, ifc_pfx=u"eth_avf"
+ )
if_key = Topology.get_interface_by_sw_index(node, sw_if_index)
return if_key
@@ -1234,19 +1215,21 @@ class InterfaceUtil(object):
:raises RuntimeError: If it is not possible to create RDMA interface on
the node.
"""
- cmd = 'rdma_create'
- args = dict(name=InterfaceUtil.pci_to_eth(node, pci_addr),
- host_if=InterfaceUtil.pci_to_eth(node, pci_addr),
- rxq_num=int(num_rx_queues) if num_rx_queues else 0,
- rxq_size=0,
- txq_size=0)
- err_msg = 'Failed to create RDMA interface on host {host}'.format(
- host=node['host'])
+ cmd = u"rdma_create"
+ args = dict(
+ name=InterfaceUtil.pci_to_eth(node, pci_addr),
+ host_if=InterfaceUtil.pci_to_eth(node, pci_addr),
+ rxq_num=int(num_rx_queues) if num_rx_queues else 0,
+ rxq_size=0,
+ txq_size=0
+ )
+ err_msg = f"Failed to create RDMA interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
InterfaceUtil.add_eth_interface(
- node, sw_if_index=sw_if_index, ifc_pfx='eth_rdma')
+ node, sw_if_index=sw_if_index, ifc_pfx=u"eth_rdma"
+ )
if_key = Topology.get_interface_by_sw_index(node, sw_if_index)
return if_key
@@ -1264,17 +1247,15 @@ class InterfaceUtil(object):
:raises RuntimeError: If it is not possible to enslave physical
interface to bond interface on the node.
"""
- cmd = 'bond_enslave'
+ cmd = u"bond_enslave"
args = dict(
sw_if_index=Topology.get_interface_sw_index(node, interface),
bond_sw_if_index=Topology.get_interface_sw_index(node, bond_if),
is_passive=False,
is_long_timeout=False
)
- err_msg = 'Failed to enslave physical interface {ifc} to bond ' \
- 'interface {bond} on host {host}'.format(ifc=interface,
- bond=bond_if,
- host=node['host'])
+ err_msg = f"Failed to enslave physical interface {interface} to bond " \
+ f"interface {bond_if} on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -1287,35 +1268,37 @@ class InterfaceUtil(object):
:type node: dict
:type verbose: bool
"""
- cmd = 'sw_interface_bond_dump'
- err_msg = 'Failed to get bond interface dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sw_interface_bond_dump"
+ err_msg = f"Failed to get bond interface dump on host {node[u'host']}"
- data = ('Bond data on node {host}:\n'.format(host=node['host']))
+ data = f"Bond data on node {node[u'host']}:\n"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details(err_msg)
for bond in details:
- data += ('{b}\n'.format(b=bond['interface_name']))
- data += (' mode: {m}\n'.format(
- m=bond['mode'].name.replace('BOND_API_MODE_', '').lower()))
- data += (' load balance: {lb}\n'.format(
- lb=bond['lb'].name.replace('BOND_API_LB_ALGO_', '').lower()))
- data += (' number of active slaves: {n}\n'.format(
- n=bond['active_slaves']))
+ data += f"{bond[u'interface_name']}\n"
+ data += u" mode: {m}\n".format(
+ m=bond[u"mode"].name.replace(u"BOND_API_MODE_", u"").lower()
+ )
+ data += u" load balance: {lb}\n".format(
+ lb=bond[u"lb"].name.replace(u"BOND_API_LB_ALGO_", u"").lower()
+ )
+ data += f" number of active slaves: {bond[u'active_slaves']}\n"
if verbose:
slave_data = InterfaceUtil.vpp_bond_slave_dump(
node, Topology.get_interface_by_sw_index(
- node, bond['sw_if_index']))
+ node, bond[u"sw_if_index"]
+ )
+ )
for slave in slave_data:
- if not slave['is_passive']:
- data += (' {s}\n'.format(s=slave['interface_name']))
- data += (' number of slaves: {n}\n'.format(n=bond['slaves']))
+ if not slave[u"is_passive"]:
+ data += f" {slave[u'interface_name']}\n"
+ data += f" number of slaves: {bond[u'slaves']}\n"
if verbose:
for slave in slave_data:
- data += (' {s}\n'.format(s=slave['interface_name']))
- data += (' interface id: {i}\n'.format(i=bond['id']))
- data += (' sw_if_index: {i}\n'.format(i=bond['sw_if_index']))
+ data += f" {slave[u'interface_name']}\n"
+ data += f" interface id: {bond[u'id']}\n"
+ data += f" sw_if_index: {bond[u'sw_if_index']}\n"
logger.info(data)
@staticmethod
@@ -1329,16 +1312,16 @@ class InterfaceUtil(object):
:returns: Bond slave interface data.
:rtype: dict
"""
- cmd = 'sw_interface_slave_dump'
- args = dict(sw_if_index=Topology.get_interface_sw_index(
- node, interface))
- err_msg = 'Failed to get slave dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sw_interface_slave_dump"
+ args = dict(
+ sw_if_index=Topology.get_interface_sw_index(node, interface)
+ )
+ err_msg = f"Failed to get slave dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
- logger.debug('Slave data:\n{slave_data}'.format(slave_data=details))
+ logger.debug(f"Slave data:\n{details}")
return details
@staticmethod
@@ -1351,12 +1334,12 @@ class InterfaceUtil(object):
:type verbose: bool
"""
for node_data in nodes.values():
- if node_data['type'] == NodeType.DUT:
+ if node_data[u"type"] == NodeType.DUT:
InterfaceUtil.vpp_show_bond_data_on_node(node_data, verbose)
@staticmethod
- def vpp_enable_input_acl_interface(node, interface, ip_version,
- table_index):
+ def vpp_enable_input_acl_interface(
+ node, interface, ip_version, table_index):
"""Enable input acl on interface.
:param node: VPP node to setup interface for input acl.
@@ -1368,18 +1351,17 @@ class InterfaceUtil(object):
:type ip_version: str
:type table_index: int
"""
- cmd = 'input_acl_set_interface'
+ cmd = u"input_acl_set_interface"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
- ip4_table_index=table_index if ip_version == 'ip4'
+ ip4_table_index=table_index if ip_version == u"ip4"
else Constants.BITWISE_NON_ZERO,
- ip6_table_index=table_index if ip_version == 'ip6'
+ ip6_table_index=table_index if ip_version == u"ip6"
else Constants.BITWISE_NON_ZERO,
- l2_table_index=table_index if ip_version == 'l2'
+ l2_table_index=table_index if ip_version == u"l2"
else Constants.BITWISE_NON_ZERO,
is_add=1)
- err_msg = 'Failed to enable input acl on interface {ifc}'.format(
- ifc=interface)
+ err_msg = f"Failed to enable input acl on interface {interface}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -1396,15 +1378,16 @@ class InterfaceUtil(object):
:returns: Classify table name.
:rtype: str
"""
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
else:
sw_if_index = interface
- cmd = 'classify_table_by_interface'
- args = dict(sw_if_index=sw_if_index)
- err_msg = 'Failed to get classify table name by interface {ifc}'.format(
- ifc=interface)
+ cmd = u"classify_table_by_interface"
+ args = dict(
+ sw_if_index=sw_if_index
+ )
+ err_msg = f"Failed to get classify table name by interface {interface}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -1422,8 +1405,9 @@ class InterfaceUtil(object):
:rtype: str
"""
interface_data = InterfaceUtil.vpp_get_interface_data(
- node, interface=interface_name)
- return interface_data.get('sw_if_index')
+ node, interface=interface_name
+ )
+ return interface_data.get(u"sw_if_index")
@staticmethod
def vxlan_gpe_dump(node, interface_name=None):
@@ -1447,28 +1431,26 @@ class InterfaceUtil(object):
:returns: Processed vxlan_gpe interface dump.
:rtype: dict
"""
- if vxlan_dump['is_ipv6']:
- vxlan_dump['local'] = \
- ip_address(unicode(vxlan_dump['local']))
- vxlan_dump['remote'] = \
- ip_address(unicode(vxlan_dump['remote']))
+ if vxlan_dump[u"is_ipv6"]:
+ vxlan_dump[u"local"] = ip_address(vxlan_dump[u"local"])
+ vxlan_dump[u"remote"] = ip_address(vxlan_dump[u"remote"])
else:
- vxlan_dump['local'] = \
- ip_address(unicode(vxlan_dump['local'][0:4]))
- vxlan_dump['remote'] = \
- ip_address(unicode(vxlan_dump['remote'][0:4]))
+ vxlan_dump[u"local"] = ip_address(vxlan_dump[u"local"][0:4])
+ vxlan_dump[u"remote"] = ip_address(vxlan_dump[u"remote"][0:4])
return vxlan_dump
if interface_name is not None:
sw_if_index = InterfaceUtil.get_interface_index(
- node, interface_name)
+ node, interface_name
+ )
else:
sw_if_index = int(Constants.BITWISE_NON_ZERO)
- cmd = 'vxlan_gpe_tunnel_dump'
- args = dict(sw_if_index=sw_if_index)
- err_msg = 'Failed to get VXLAN-GPE dump on host {host}'.format(
- host=node['host'])
+ cmd = u"vxlan_gpe_tunnel_dump"
+ args = dict(
+ sw_if_index=sw_if_index
+ )
+ err_msg = f"Failed to get VXLAN-GPE dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
@@ -1476,12 +1458,11 @@ class InterfaceUtil(object):
for dump in details:
if interface_name is None:
data.append(process_vxlan_gpe_dump(dump))
- elif dump['sw_if_index'] == sw_if_index:
+ elif dump[u"sw_if_index"] == sw_if_index:
data = process_vxlan_gpe_dump(dump)
break
- logger.debug('VXLAN-GPE data:\n{vxlan_gpe_data}'.format(
- vxlan_gpe_data=data))
+ logger.debug(f"VXLAN-GPE data:\n{data}")
return data
@staticmethod
@@ -1497,19 +1478,19 @@ class InterfaceUtil(object):
:type table_id: int
:type ipv6: bool
"""
- cmd = 'sw_interface_set_table'
+ cmd = u"sw_interface_set_table"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
is_ipv6=ipv6,
- vrf_id=int(table_id))
- err_msg = 'Failed to assign interface {ifc} to FIB table'.format(
- ifc=interface)
+ vrf_id=int(table_id)
+ )
+ err_msg = f"Failed to assign interface {interface} to FIB table"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def set_linux_interface_mac(node, interface, mac, namespace=None,
- vf_id=None):
+ def set_linux_interface_mac(
+ node, interface, mac, namespace=None, vf_id=None):
"""Set MAC address for interface in linux.
:param node: Node where to execute command.
@@ -1523,17 +1504,16 @@ class InterfaceUtil(object):
:type namespace: str
:type vf_id: int
"""
- mac_str = 'vf {vf_id} mac {mac}'.format(vf_id=vf_id, mac=mac) \
- if vf_id is not None else 'address {mac}'.format(mac=mac)
- ns_str = 'ip netns exec {ns}'.format(ns=namespace) if namespace else ''
+ mac_str = f"vf {vf_id} mac {mac}" if vf_id is not None \
+ else f"address {mac}"
+ ns_str = f"ip netns exec {namespace}" if namespace else u""
- cmd = ('{ns} ip link set {interface} {mac}'.
- format(ns=ns_str, interface=interface, mac=mac_str))
+ cmd = f"{ns_str} ip link set {interface} {mac_str}"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def set_linux_interface_trust_on(node, interface, namespace=None,
- vf_id=None):
+ def set_linux_interface_trust_on(
+ node, interface, namespace=None, vf_id=None):
"""Set trust on (promisc) for interface in linux.
:param node: Node where to execute command.
@@ -1545,17 +1525,15 @@ class InterfaceUtil(object):
:type namespace: str
:type vf_id: int
"""
- trust_str = 'vf {vf_id} trust on'.format(vf_id=vf_id) \
- if vf_id is not None else 'trust on'
- ns_str = 'ip netns exec {ns}'.format(ns=namespace) if namespace else ''
+ trust_str = f"vf {vf_id} trust on" if vf_id is not None else u"trust on"
+ ns_str = f"ip netns exec {namespace}" if namespace else u""
- cmd = ('{ns} ip link set dev {interface} {trust}'.
- format(ns=ns_str, interface=interface, trust=trust_str))
+ cmd = f"{ns_str} ip link set dev {interface} {trust_str}"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def set_linux_interface_spoof_off(node, interface, namespace=None,
- vf_id=None):
+ def set_linux_interface_spoof_off(
+ node, interface, namespace=None, vf_id=None):
"""Set spoof off for interface in linux.
:param node: Node where to execute command.
@@ -1567,16 +1545,15 @@ class InterfaceUtil(object):
:type namespace: str
:type vf_id: int
"""
- spoof_str = 'vf {vf_id} spoof off'.format(vf_id=vf_id) \
- if vf_id is not None else 'spoof off'
- ns_str = 'ip netns exec {ns}'.format(ns=namespace) if namespace else ''
+ spoof_str = f"vf {vf_id} spoof off" if vf_id is not None \
+ else u"spoof off"
+ ns_str = f"ip netns exec {namespace}" if namespace else u""
- cmd = ('{ns} ip link set dev {interface} {spoof}'.
- format(ns=ns_str, interface=interface, spoof=spoof_str))
+ cmd = f"{ns_str} ip link set dev {interface} {spoof_str}"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def init_avf_interface(node, ifc_key, numvfs=1, osi_layer='L2'):
+ def init_avf_interface(node, ifc_key, numvfs=1, osi_layer=u"L2"):
"""Init PCI device by creating VIFs and bind them to vfio-pci for AVF
driver testing on DUT.
@@ -1598,13 +1575,13 @@ class InterfaceUtil(object):
pf_mac_addr = Topology.get_interface_mac(node, ifc_key).split(":")
uio_driver = Topology.get_uio_driver(node)
kernel_driver = Topology.get_interface_driver(node, ifc_key)
- if kernel_driver not in ("i40e", "i40evf"):
+ if kernel_driver not in (u"i40e", u"i40evf"):
raise RuntimeError(
- "AVF needs i40e-compatible driver, not {driver} at node {host}"
- " ifc {ifc}".format(
- driver=kernel_driver, host=node["host"], ifc=ifc_key))
+ f"AVF needs i40e-compatible driver, not {kernel_driver} "
+ f"at node {node[u'host']} ifc {ifc_key}"
+ )
current_driver = DUTSetup.get_pci_dev_driver(
- node, pf_pci_addr.replace(':', r'\:'))
+ node, pf_pci_addr.replace(u":", r"\:"))
VPPUtil.stop_vpp_service(node)
if current_driver != kernel_driver:
@@ -1622,29 +1599,33 @@ class InterfaceUtil(object):
vf_ifc_keys = []
# Set MAC address and bind each virtual function to uio driver.
for vf_id in range(numvfs):
- vf_mac_addr = ":".join([pf_mac_addr[0], pf_mac_addr[2],
- pf_mac_addr[3], pf_mac_addr[4],
- pf_mac_addr[5], "{:02x}".format(vf_id)])
+ vf_mac_addr = u":".join(
+ [pf_mac_addr[0], pf_mac_addr[2], pf_mac_addr[3], pf_mac_addr[4],
+ pf_mac_addr[5], f"{vf_id:02x}"
+ ]
+ )
- pf_dev = '`basename /sys/bus/pci/devices/{pci}/net/*`'.\
- format(pci=pf_pci_addr)
+ pf_dev = f"`basename /sys/bus/pci/devices/{pf_pci_addr}/net/*`"
InterfaceUtil.set_linux_interface_trust_on(node, pf_dev,
vf_id=vf_id)
- if osi_layer == 'L2':
- InterfaceUtil.set_linux_interface_spoof_off(node, pf_dev,
- vf_id=vf_id)
- InterfaceUtil.set_linux_interface_mac(node, pf_dev, vf_mac_addr,
- vf_id=vf_id)
+ if osi_layer == u"L2":
+ InterfaceUtil.set_linux_interface_spoof_off(
+ node, pf_dev, vf_id=vf_id
+ )
+ InterfaceUtil.set_linux_interface_mac(
+ node, pf_dev, vf_mac_addr, vf_id=vf_id
+ )
DUTSetup.pci_vf_driver_unbind(node, pf_pci_addr, vf_id)
DUTSetup.pci_vf_driver_bind(node, pf_pci_addr, vf_id, uio_driver)
# Add newly created ports into topology file
- vf_ifc_name = '{pf_if_key}_vif'.format(pf_if_key=ifc_key)
+ vf_ifc_name = f"{ifc_key}_vif"
vf_pci_addr = DUTSetup.get_virtfn_pci_addr(node, pf_pci_addr, vf_id)
vf_ifc_key = Topology.add_new_port(node, vf_ifc_name)
- Topology.update_interface_name(node, vf_ifc_key,
- vf_ifc_name+str(vf_id+1))
+ Topology.update_interface_name(
+ node, vf_ifc_key, vf_ifc_name+str(vf_id+1)
+ )
Topology.update_interface_mac_address(node, vf_ifc_key, vf_mac_addr)
Topology.update_interface_pci_address(node, vf_ifc_key, vf_pci_addr)
vf_ifc_keys.append(vf_ifc_key)
@@ -1660,19 +1641,18 @@ class InterfaceUtil(object):
:returns: Thread mapping information as a list of dictionaries.
:rtype: list
"""
- cmd = 'sw_interface_rx_placement_dump'
- err_msg = "Failed to run '{cmd}' PAPI command on host {host}!".format(
- cmd=cmd, host=node['host'])
+ cmd = u"sw_interface_rx_placement_dump"
+ err_msg = f"Failed to run '{cmd}' PAPI command on host {node[u'host']}!"
with PapiSocketExecutor(node) as papi_exec:
- for ifc in node['interfaces'].values():
- if ifc['vpp_sw_index'] is not None:
- papi_exec.add(cmd, sw_if_index=ifc['vpp_sw_index'])
+ for ifc in node[u"interfaces"].values():
+ if ifc[u"vpp_sw_index"] is not None:
+ papi_exec.add(cmd, sw_if_index=ifc[u"vpp_sw_index"])
details = papi_exec.get_details(err_msg)
- return sorted(details, key=lambda k: k['sw_if_index'])
+ return sorted(details, key=lambda k: k[u"sw_if_index"])
@staticmethod
- def vpp_sw_interface_set_rx_placement(node, sw_if_index, queue_id,
- worker_id):
+ def vpp_sw_interface_set_rx_placement(
+ node, sw_if_index, queue_id, worker_id):
"""Set interface RX placement to worker on node.
:param node: Node to run command on.
@@ -1686,9 +1666,9 @@ class InterfaceUtil(object):
:raises RuntimeError: If failed to run command on host or if no API
reply received.
"""
- cmd = 'sw_interface_set_rx_placement'
- err_msg = "Failed to set interface RX placement to worker on host " \
- "{host}!".format(host=node['host'])
+ cmd = u"sw_interface_set_rx_placement"
+ err_msg = f"Failed to set interface RX placement to worker " \
+ f"on host {node[u'host']}!"
args = dict(
sw_if_index=sw_if_index,
queue_id=queue_id,
@@ -1713,12 +1693,13 @@ class InterfaceUtil(object):
if not worker_cnt:
return
for placement in InterfaceUtil.vpp_sw_interface_rx_placement_dump(node):
- for interface in node['interfaces'].values():
- if placement['sw_if_index'] == interface['vpp_sw_index'] \
- and prefix in interface['name']:
+ for interface in node[u"interfaces"].values():
+ if placement[u"sw_if_index"] == interface[u"vpp_sw_index"] \
+ and prefix in interface[u"name"]:
InterfaceUtil.vpp_sw_interface_set_rx_placement(
- node, placement['sw_if_index'], placement['queue_id'],
- worker_id % worker_cnt)
+ node, placement[u"sw_if_index"], placement[u"queue_id"],
+ worker_id % worker_cnt
+ )
worker_id += 1
@staticmethod
@@ -1732,5 +1713,5 @@ class InterfaceUtil(object):
:type prefix: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
InterfaceUtil.vpp_round_robin_rx_placement(node, prefix)
diff --git a/resources/libraries/python/KubernetesUtils.py b/resources/libraries/python/KubernetesUtils.py
index 029d635c72..d0d72a39a1 100644
--- a/resources/libraries/python/KubernetesUtils.py
+++ b/resources/libraries/python/KubernetesUtils.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -13,25 +13,27 @@
"""Library to control Kubernetes kubectl."""
+from functools import reduce
+from io import open
from time import sleep
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.topology import NodeType
-from resources.libraries.python.ssh import SSH, exec_cmd_no_error
from resources.libraries.python.CpuUtils import CpuUtils
+from resources.libraries.python.ssh import SSH, exec_cmd_no_error
+from resources.libraries.python.topology import NodeType
from resources.libraries.python.VppConfigGenerator import VppConfigGenerator
-__all__ = ["KubernetesUtils"]
+__all__ = [u"KubernetesUtils"]
# Maximum number of retries to check if PODs are running or deleted.
MAX_RETRY = 48
-class KubernetesUtils(object):
+
+class KubernetesUtils:
"""Kubernetes utilities class."""
def __init__(self):
"""Initialize KubernetesUtils class."""
- pass
@staticmethod
def load_docker_image_on_node(node, image_path):
@@ -43,20 +45,18 @@ class KubernetesUtils(object):
:type image_path: str
:raises RuntimeError: If loading image failed on node.
"""
- command = 'docker load -i {image_path}'.\
- format(image_path=image_path)
- message = 'Failed to load Docker image on {node}.'.\
- format(node=node['host'])
- exec_cmd_no_error(node, command, timeout=240, sudo=True,
- message=message)
-
- command = "docker rmi $(sudo docker images -f 'dangling=true' -q)".\
- format(image_path=image_path)
- message = 'Failed to clean Docker images on {node}.'.\
- format(node=node['host'])
+ command = f"docker load -i {image_path}"
+ message = f"Failed to load Docker image on {node[u'host']}."
+ exec_cmd_no_error(
+ node, command, timeout=240, sudo=True, message=message
+ )
+
+ command = u"docker rmi $(sudo docker images -f 'dangling=true' -q)"
+ message = f"Failed to clean Docker images on {node[u'host']}."
try:
- exec_cmd_no_error(node, command, timeout=240, sudo=True,
- message=message)
+ exec_cmd_no_error(
+ node, command, timeout=240, sudo=True, message=message
+ )
except RuntimeError:
pass
@@ -70,7 +70,7 @@ class KubernetesUtils(object):
:type image_path: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.load_docker_image_on_node(node, image_path)
@staticmethod
@@ -84,16 +84,17 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- cmd = '{dir}/{lib}/k8s_setup.sh deploy_calico'\
- .format(dir=Constants.REMOTE_FW_DIR,
- lib=Constants.RESOURCES_LIB_SH)
- (ret_code, _, _) = ssh.exec_command(cmd, timeout=240)
+ cmd = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}/" \
+ f"k8s_setup.sh deploy_calico"
+ ret_code, _, _ = ssh.exec_command(cmd, timeout=240)
if int(ret_code) != 0:
- raise RuntimeError('Failed to setup Kubernetes on {node}.'
- .format(node=node['host']))
+ raise RuntimeError(
+ "Failed to setup Kubernetes on {node[u'host']}."
+ )
- KubernetesUtils.wait_for_kubernetes_pods_on_node(node,
- nspace='kube-system')
+ KubernetesUtils.wait_for_kubernetes_pods_on_node(
+ node, nspace=u"kube-system"
+ )
@staticmethod
def setup_kubernetes_on_all_duts(nodes):
@@ -103,7 +104,7 @@ class KubernetesUtils(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.setup_kubernetes_on_node(node)
@staticmethod
@@ -117,13 +118,14 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- cmd = '{dir}/{lib}/k8s_setup.sh destroy'\
- .format(dir=Constants.REMOTE_FW_DIR,
- lib=Constants.RESOURCES_LIB_SH)
- (ret_code, _, _) = ssh.exec_command(cmd, timeout=120)
+ cmd = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}/" \
+ f"k8s_setup.sh destroy"
+
+ ret_code, _, _ = ssh.exec_command(cmd, timeout=120)
if int(ret_code) != 0:
- raise RuntimeError('Failed to destroy Kubernetes on {node}.'
- .format(node=node['host']))
+ raise RuntimeError(
+ f"Failed to destroy Kubernetes on {node[u'host']}."
+ )
@staticmethod
def destroy_kubernetes_on_all_duts(nodes):
@@ -133,7 +135,7 @@ class KubernetesUtils(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.destroy_kubernetes_on_node(node)
@staticmethod
@@ -151,19 +153,20 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- fqn_file = '{tpl}/{yaml}'.format(tpl=Constants.RESOURCES_TPL_K8S,
- yaml=yaml_file)
+ fqn_file = f"{Constants.RESOURCES_TPL_K8S}/{yaml_file}"
with open(fqn_file, 'r') as src_file:
stream = src_file.read()
- data = reduce(lambda a, kv: a.replace(*kv), kwargs.iteritems(),
- stream)
- cmd = 'cat <<EOF | kubectl apply -f - \n{data}\nEOF'.format(
- data=data)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ data = reduce(
+ lambda a, kv: a.replace(*kv), list(kwargs.items()), stream
+ )
+ cmd = f"cat <<EOF | kubectl apply -f - \n{data}\nEOF"
+
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError('Failed to apply Kubernetes template {yaml} '
- 'on {node}.'.format(yaml=yaml_file,
- node=node['host']))
+ raise RuntimeError(
+ f"Failed to apply Kubernetes template {yaml_file} "
+ f"on {node[u'host']}."
+ )
@staticmethod
def apply_kubernetes_resource_on_all_duts(nodes, yaml_file, **kwargs):
@@ -177,10 +180,10 @@ class KubernetesUtils(object):
:type kwargs: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- KubernetesUtils.apply_kubernetes_resource_on_node(node,
- yaml_file,
- **kwargs)
+ if node[u"type"] == NodeType.DUT:
+ KubernetesUtils.apply_kubernetes_resource_on_node(
+ node, yaml_file, **kwargs
+ )
@staticmethod
def create_kubernetes_cm_from_file_on_node(node, nspace, name, **kwargs):
@@ -199,21 +202,21 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- nspace = '-n {nspace}'.format(nspace=nspace) if nspace else ''
-
- from_file = '{0}'.format(' '.join('--from-file={0}={1} '\
- .format(key, kwargs[key]) for key in kwargs))
+ nspace = f"-n {nspace}" if nspace else u""
+ from_file = u" ".join(
+ f"--from-file={key}={kwargs[key]} " for key in kwargs
+ )
+ cmd = f"kubectl create {nspace} configmap {name} {from_file}"
- cmd = 'kubectl create {nspace} configmap {name} {from_file}'\
- .format(nspace=nspace, name=name, from_file=from_file)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError('Failed to create Kubernetes ConfigMap '
- 'on {node}.'.format(node=node['host']))
+ raise RuntimeError(
+ f"Failed to create Kubernetes ConfigMap on {node[u'host']}."
+ )
@staticmethod
- def create_kubernetes_cm_from_file_on_all_duts(nodes, nspace, name,
- **kwargs):
+ def create_kubernetes_cm_from_file_on_all_duts(
+ nodes, nspace, name, **kwargs):
"""Create Kubernetes ConfigMap from file on all DUTs.
:param nodes: Topology nodes.
@@ -226,15 +229,14 @@ class KubernetesUtils(object):
:param kwargs: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- KubernetesUtils.create_kubernetes_cm_from_file_on_node(node,
- nspace,
- name,
- **kwargs)
+ if node[u"type"] == NodeType.DUT:
+ KubernetesUtils.create_kubernetes_cm_from_file_on_node(
+ node, nspace, name, **kwargs
+ )
@staticmethod
- def delete_kubernetes_resource_on_node(node, nspace, name=None,
- rtype='po,cm,deploy,rs,rc,svc'):
+ def delete_kubernetes_resource_on_node(
+ node, nspace, name=None, rtype=u"po,cm,deploy,rs,rc,svc"):
"""Delete Kubernetes resource on node.
:param node: DUT node.
@@ -251,27 +253,28 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- name = '{name}'.format(name=name) if name else '--all'
- nspace = '-n {nspace}'.format(nspace=nspace) if nspace else ''
+ name = f"{name}" if name else u"--all"
+ nspace = f"-n {nspace}" if nspace else u""
+ cmd = f"kubectl delete {nspace} {rtype} {name}"
- cmd = 'kubectl delete {nspace} {rtype} {name}'\
- .format(nspace=nspace, rtype=rtype, name=name)
- (ret_code, _, _) = ssh.exec_command_sudo(cmd, timeout=120)
+ ret_code, _, _ = ssh.exec_command_sudo(cmd, timeout=120)
if int(ret_code) != 0:
- raise RuntimeError('Failed to delete Kubernetes resources '
- 'on {node}.'.format(node=node['host']))
+ raise RuntimeError(
+ f"Failed to delete Kubernetes resources on {node[u'host']}."
+ )
- cmd = 'kubectl get {nspace} pods --no-headers'\
- .format(nspace=nspace)
+ cmd = f"kubectl get {nspace} pods --no-headers"
for _ in range(MAX_RETRY):
- (ret_code, stdout, stderr) = ssh.exec_command_sudo(cmd)
+ ret_code, stdout, stderr = ssh.exec_command_sudo(cmd)
if int(ret_code) != 0:
- raise RuntimeError('Failed to retrieve Kubernetes resources on '
- '{node}.'.format(node=node['host']))
- if name == '--all':
+ raise RuntimeError(
+ f"Failed to retrieve Kubernetes resources "
+ f"on {node[u'host']}."
+ )
+ if name == u"--all":
ready = False
for line in stderr.splitlines():
- if 'No resources found.' in line:
+ if u"No resources found." in line:
ready = True
if ready:
break
@@ -279,9 +282,10 @@ class KubernetesUtils(object):
ready = False
for line in stdout.splitlines():
try:
- state = line.split()[1].split('/')
- ready = True if 'Running' in line and\
- state == state[::-1] else False
+ state = line.split()[1].split(u"/")
+ ready = bool(
+ u"Running" in line and state == state[::-1]
+ )
if not ready:
break
except (ValueError, IndexError):
@@ -290,12 +294,13 @@ class KubernetesUtils(object):
break
sleep(5)
else:
- raise RuntimeError('Failed to delete Kubernetes resources on '
- '{node}.'.format(node=node['host']))
+ raise RuntimeError(
+ f"Failed to delete Kubernetes resources on {node[u'host']}."
+ )
@staticmethod
- def delete_kubernetes_resource_on_all_duts(nodes, nspace, name=None,
- rtype='po,cm,deploy,rs,rc,svc'):
+ def delete_kubernetes_resource_on_all_duts(
+ nodes, nspace, name=None, rtype=u"po,cm,deploy,rs,rc,svc"):
"""Delete all Kubernetes resource on all DUTs.
:param nodes: Topology nodes.
@@ -308,9 +313,10 @@ class KubernetesUtils(object):
:type name: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- KubernetesUtils.delete_kubernetes_resource_on_node(node, nspace,
- name, rtype)
+ if node[u"type"] == NodeType.DUT:
+ KubernetesUtils.delete_kubernetes_resource_on_node(
+ node, nspace, name, rtype
+ )
@staticmethod
def describe_kubernetes_resource_on_node(node, nspace):
@@ -324,9 +330,9 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- nspace = '-n {nspace}'.format(nspace=nspace) if nspace else ''
+ nspace = f"-n {nspace}" if nspace else u""
+ cmd = f"kubectl describe {nspace} all"
- cmd = 'kubectl describe {nspace} all'.format(nspace=nspace)
ssh.exec_command_sudo(cmd)
@staticmethod
@@ -339,9 +345,10 @@ class KubernetesUtils(object):
:type nspace: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- KubernetesUtils.describe_kubernetes_resource_on_node(node,
- nspace)
+ if node[u"type"] == NodeType.DUT:
+ KubernetesUtils.describe_kubernetes_resource_on_node(
+ node, nspace
+ )
@staticmethod
def get_kubernetes_logs_on_node(node, nspace):
@@ -355,15 +362,16 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- nspace = '-n {nspace}'.format(nspace=nspace) if nspace else ''
+ nspace = f"-n {nspace}" if nspace else u""
+ cmd = f"for p in $(kubectl get pods {nspace} " \
+ f"-o jsonpath='{{.items[*].metadata.name}}'); do echo $p; " \
+ f"kubectl logs {nspace} $p; done"
- cmd = "for p in $(kubectl get pods {nspace} -o jsonpath="\
- "'{{.items[*].metadata.name}}'); do echo $p; kubectl logs "\
- "{nspace} $p; done".format(nspace=nspace)
ssh.exec_command(cmd)
- cmd = "kubectl exec {nspace} etcdv3 -- etcdctl --endpoints "\
- "\"localhost:22379\" get \"/\" --prefix=true".format(nspace=nspace)
+ cmd = f"kubectl exec {nspace} etcdv3 -- etcdctl " \
+ f"--endpoints \"localhost:22379\" get \"/\" --prefix=true"
+
ssh.exec_command(cmd)
@staticmethod
@@ -376,7 +384,7 @@ class KubernetesUtils(object):
:type nspace: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.get_kubernetes_logs_on_node(node, nspace)
@staticmethod
@@ -392,20 +400,19 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- nspace = '-n {nspace}'.format(nspace=nspace) if nspace \
- else '--all-namespaces'
+ nspace = f"-n {nspace}" if nspace else u"--all-namespaces"
+ cmd = f"kubectl get {nspace} pods --no-headers"
- cmd = 'kubectl get {nspace} pods --no-headers' \
- .format(nspace=nspace)
for _ in range(MAX_RETRY):
- (ret_code, stdout, _) = ssh.exec_command_sudo(cmd)
+ ret_code, stdout, _ = ssh.exec_command_sudo(cmd)
if int(ret_code) == 0:
ready = False
for line in stdout.splitlines():
try:
- state = line.split()[1].split('/')
- ready = True if 'Running' in line and \
- state == state[::-1] else False
+ state = line.split()[1].split(u"/")
+ ready = bool(
+ u"Running" in line and state == state[::-1]
+ )
if not ready:
break
except (ValueError, IndexError):
@@ -414,8 +421,9 @@ class KubernetesUtils(object):
break
sleep(5)
else:
- raise RuntimeError('Kubernetes PODs are not running on {node}.'
- .format(node=node['host']))
+ raise RuntimeError(
+ f"Kubernetes PODs are not running on {node[u'host']}."
+ )
@staticmethod
def wait_for_kubernetes_pods_on_all_duts(nodes, nspace):
@@ -427,7 +435,7 @@ class KubernetesUtils(object):
:type nspace: str
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.wait_for_kubernetes_pods_on_node(node, nspace)
@staticmethod
@@ -440,9 +448,9 @@ class KubernetesUtils(object):
ssh = SSH()
ssh.connect(node)
- cmd = '{dir}/{lib}/k8s_setup.sh affinity_non_vpp'\
- .format(dir=Constants.REMOTE_FW_DIR,
- lib=Constants.RESOURCES_LIB_SH)
+ cmd = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}/" \
+ f"k8s_setup.sh affinity_non_vpp"
+
ssh.exec_command(cmd)
@staticmethod
@@ -453,7 +461,7 @@ class KubernetesUtils(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
KubernetesUtils.set_kubernetes_pods_affinity_on_node(node)
@staticmethod
@@ -463,44 +471,40 @@ class KubernetesUtils(object):
:param kwargs: Key-value pairs used to create configuration.
:param kwargs: dict
"""
- smt_used = CpuUtils.is_smt_enabled(kwargs['node']['cpuinfo'])
-
- cpuset_cpus = \
- CpuUtils.cpu_slice_of_list_per_node(node=kwargs['node'],
- cpu_node=kwargs['cpu_node'],
- skip_cnt=2,
- cpu_cnt=kwargs['phy_cores'],
- smt_used=smt_used)
- cpuset_main = \
- CpuUtils.cpu_slice_of_list_per_node(node=kwargs['node'],
- cpu_node=kwargs['cpu_node'],
- skip_cnt=1,
- cpu_cnt=1,
- smt_used=smt_used)
+ smt_used = CpuUtils.is_smt_enabled(kwargs[u"node"][u"cpuinfo"])
+
+ cpuset_cpus = CpuUtils.cpu_slice_of_list_per_node(
+ node=kwargs[u"node"], cpu_node=kwargs[u"cpu_node"], skip_cnt=2,
+ cpu_cnt=kwargs[u"phy_cores"], smt_used=smt_used
+ )
+ cpuset_main = CpuUtils.cpu_slice_of_list_per_node(
+ node=kwargs[u"node"], cpu_node=kwargs[u"cpu_node"], skip_cnt=1,
+ cpu_cnt=1, smt_used=smt_used
+ )
# Create config instance
vpp_config = VppConfigGenerator()
- vpp_config.set_node(kwargs['node'])
- vpp_config.add_unix_cli_listen(value='0.0.0.0:5002')
+ vpp_config.set_node(kwargs[u"node"])
+ vpp_config.add_unix_cli_listen(value=u"0.0.0.0:5002")
vpp_config.add_unix_nodaemon()
vpp_config.add_socksvr()
- vpp_config.add_heapsize('4G')
- vpp_config.add_ip_heap_size('4G')
- vpp_config.add_ip6_heap_size('4G')
- vpp_config.add_ip6_hash_buckets('2000000')
- if not kwargs['jumbo']:
+ vpp_config.add_heapsize(u"4G")
+ vpp_config.add_ip_heap_size(u"4G")
+ vpp_config.add_ip6_heap_size(u"4G")
+ vpp_config.add_ip6_hash_buckets(u"2000000")
+ if not kwargs[u"jumbo"]:
vpp_config.add_dpdk_no_multi_seg()
vpp_config.add_dpdk_no_tx_checksum_offload()
- vpp_config.add_dpdk_dev_default_rxq(kwargs['rxq_count_int'])
- vpp_config.add_dpdk_dev(kwargs['if1'], kwargs['if2'])
- vpp_config.add_buffers_per_numa(kwargs['buffers_per_numa'])
+ vpp_config.add_dpdk_dev_default_rxq(kwargs[u"rxq_count_int"])
+ vpp_config.add_dpdk_dev(kwargs[u"if1"], kwargs[u"if2"])
+ vpp_config.add_buffers_per_numa(kwargs[u"buffers_per_numa"])
# We will pop first core from list to be main core
vpp_config.add_cpu_main_core(str(cpuset_main.pop(0)))
# if this is not only core in list, the rest will be used as workers.
if cpuset_cpus:
- corelist_workers = ','.join(str(cpu) for cpu in cpuset_cpus)
+ corelist_workers = u",".join(str(cpu) for cpu in cpuset_cpus)
vpp_config.add_cpu_corelist_workers(corelist_workers)
- vpp_config.write_config(filename=kwargs['filename'])
+ vpp_config.write_config(filename=kwargs[u"filename"])
@staticmethod
def create_kubernetes_vnf_startup_config(**kwargs):
@@ -509,32 +513,28 @@ class KubernetesUtils(object):
:param kwargs: Key-value pairs used to create configuration.
:param kwargs: dict
"""
- smt_used = CpuUtils.is_smt_enabled(kwargs['node']['cpuinfo'])
- skip_cnt = kwargs['cpu_skip'] + (kwargs['i'] - 1) * \
- (kwargs['phy_cores'] - 1)
- cpuset_cpus = \
- CpuUtils.cpu_slice_of_list_per_node(node=kwargs['node'],
- cpu_node=kwargs['cpu_node'],
- skip_cnt=skip_cnt,
- cpu_cnt=kwargs['phy_cores']-1,
- smt_used=smt_used)
- cpuset_main = \
- CpuUtils.cpu_slice_of_list_per_node(node=kwargs['node'],
- cpu_node=kwargs['cpu_node'],
- skip_cnt=1,
- cpu_cnt=1,
- smt_used=smt_used)
+ smt_used = CpuUtils.is_smt_enabled(kwargs[u"node"][u"cpuinfo"])
+ skip_cnt = kwargs[u"cpu_skip"] + (kwargs[u"i"] - 1) * \
+ (kwargs[u"phy_cores"] - 1)
+ cpuset_cpus = CpuUtils.cpu_slice_of_list_per_node(
+ node=kwargs[u"node"], cpu_node=kwargs[u"cpu_node"],
+ skip_cnt=skip_cnt, cpu_cnt=kwargs[u"phy_cores"]-1, smt_used=smt_used
+ )
+ cpuset_main = CpuUtils.cpu_slice_of_list_per_node(
+ node=kwargs[u"node"], cpu_node=kwargs[u"cpu_node"], skip_cnt=1,
+ cpu_cnt=1, smt_used=smt_used
+ )
# Create config instance
vpp_config = VppConfigGenerator()
- vpp_config.set_node(kwargs['node'])
- vpp_config.add_unix_cli_listen(value='0.0.0.0:5002')
+ vpp_config.set_node(kwargs[u"node"])
+ vpp_config.add_unix_cli_listen(value=u"0.0.0.0:5002")
vpp_config.add_unix_nodaemon()
vpp_config.add_socksvr()
# We will pop first core from list to be main core
vpp_config.add_cpu_main_core(str(cpuset_main.pop(0)))
# if this is not only core in list, the rest will be used as workers.
if cpuset_cpus:
- corelist_workers = ','.join(str(cpu) for cpu in cpuset_cpus)
+ corelist_workers = u",".join(str(cpu) for cpu in cpuset_cpus)
vpp_config.add_cpu_corelist_workers(corelist_workers)
- vpp_config.add_plugin('disable', 'dpdk_plugin.so')
- vpp_config.write_config(filename=kwargs['filename'])
+ vpp_config.add_plugin(u"disable", [u"dpdk_plugin.so"])
+ vpp_config.write_config(filename=kwargs[u"filename"])
diff --git a/resources/libraries/python/L2Util.py b/resources/libraries/python/L2Util.py
index 4ca0c47308..a49c556653 100644
--- a/resources/libraries/python/L2Util.py
+++ b/resources/libraries/python/L2Util.py
@@ -13,9 +13,6 @@
"""L2 Utilities Library."""
-import binascii
-from textwrap import wrap
-
from enum import IntEnum
from resources.libraries.python.Constants import Constants
@@ -37,7 +34,7 @@ class L2VtrOp(IntEnum):
L2_VTR_TRANSLATE_2_2 = 8
-class L2Util(object):
+class L2Util:
"""Utilities for l2 configuration."""
@staticmethod
@@ -50,7 +47,7 @@ class L2Util(object):
:returns: Integer representation of MAC address.
:rtype: int
"""
- return int(mac_str.replace(':', ''), 16)
+ return int(mac_str.replace(u":", u""), 16)
@staticmethod
def int_to_mac(mac_int):
@@ -62,7 +59,9 @@ class L2Util(object):
:returns: String representation of MAC address.
:rtype: str
"""
- return ':'.join(wrap("{:012x}".format(mac_int), width=2))
+ return u":".join(
+ f"{hex(mac_int)[2:]:0>12}"[i:i+2] for i in range(0, 12, 2)
+ )
@staticmethod
def mac_to_bin(mac_str):
@@ -72,9 +71,9 @@ class L2Util(object):
:param mac_str: MAC address in string representation.
:type mac_str: str
:returns: Binary representation of MAC address.
- :rtype: binary
+ :rtype: bytes
"""
- return binascii.unhexlify(mac_str.replace(':', ''))
+ return bytes.fromhex(mac_str.replace(u":", u""))
@staticmethod
def bin_to_mac(mac_bin):
@@ -82,17 +81,15 @@ class L2Util(object):
(\x01\x02\x03\x04\x05\x06) to string format (e.g. 01:02:03:04:05:06).
:param mac_bin: MAC address in binary representation.
- :type mac_bin: binary
+ :type mac_bin: bytes
:returns: String representation of MAC address.
:rtype: str
"""
- mac_str = ':'.join(binascii.hexlify(mac_bin)[i:i + 2]
- for i in range(0, 12, 2))
- return str(mac_str.decode('ascii'))
+ return u":".join(mac_bin.hex()[i:i + 2] for i in range(0, 12, 2))
@staticmethod
- def vpp_add_l2fib_entry(node, mac, interface, bd_id, static_mac=1,
- filter_mac=0, bvi_mac=0):
+ def vpp_add_l2fib_entry(
+ node, mac, interface, bd_id, static_mac=1, filter_mac=0, bvi_mac=0):
""" Create a static L2FIB entry on a VPP node.
:param node: Node to add L2FIB entry on.
@@ -113,28 +110,29 @@ class L2Util(object):
:type filter_mac: int or str
:type bvi_mac: int or str
"""
-
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
- cmd = 'l2fib_add_del'
- err_msg = 'Failed to add L2FIB entry on host {host}'.format(
- host=node['host'])
- args = dict(mac=L2Util.mac_to_bin(mac),
- bd_id=int(bd_id),
- sw_if_index=sw_if_index,
- is_add=1,
- static_mac=int(static_mac),
- filter_mac=int(filter_mac),
- bvi_mac=int(bvi_mac))
+ cmd = u"l2fib_add_del"
+ err_msg = f"Failed to add L2FIB entry on host {node[u'host']}"
+ args = dict(
+ mac=L2Util.mac_to_bin(mac),
+ bd_id=int(bd_id),
+ sw_if_index=sw_if_index,
+ is_add=1,
+ static_mac=int(static_mac),
+ filter_mac=int(filter_mac),
+ bvi_mac=int(bvi_mac)
+
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def create_l2_bd(node, bd_id, flood=1, uu_flood=1, forward=1, learn=1,
- arp_term=0):
+ def create_l2_bd(
+ node, bd_id, flood=1, uu_flood=1, forward=1, learn=1, arp_term=0):
"""Create an L2 bridge domain on a VPP node.
:param node: Node where we wish to crate the L2 bridge domain.
@@ -157,17 +155,17 @@ class L2Util(object):
:type learn: int or str
:type arp_term: int or str
"""
-
- cmd = 'bridge_domain_add_del'
- err_msg = 'Failed to create L2 bridge domain on host {host}'.format(
- host=node['host'])
- args = dict(bd_id=int(bd_id),
- flood=int(flood),
- uu_flood=int(uu_flood),
- forward=int(forward),
- learn=int(learn),
- arp_term=int(arp_term),
- is_add=1)
+ cmd = u"bridge_domain_add_del"
+ err_msg = f"Failed to create L2 bridge domain on host {node[u'host']}"
+ args = dict(
+ bd_id=int(bd_id),
+ flood=int(flood),
+ uu_flood=int(uu_flood),
+ forward=int(forward),
+ learn=int(learn),
+ arp_term=int(arp_term),
+ is_add=1
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -189,17 +187,19 @@ class L2Util(object):
:type shg: int or str
:type port_type: int or str
"""
-
sw_if_index = Topology.get_interface_sw_index(node, interface)
- cmd = 'sw_interface_set_l2_bridge'
- err_msg = 'Failed to add interface {ifc} to L2 bridge domain on host ' \
- '{host}'.format(ifc=interface, host=node['host'])
- args = dict(rx_sw_if_index=sw_if_index,
- bd_id=int(bd_id),
- shg=int(shg),
- port_type=int(port_type),
- enable=1)
+ cmd = u"sw_interface_set_l2_bridge"
+ err_msg = f"Failed to add interface {interface} to L2 bridge domain " \
+ f"on host {node[u'host']}"
+ args = dict(
+ rx_sw_if_index=sw_if_index,
+ bd_id=int(bd_id),
+ shg=int(shg),
+ port_type=int(port_type),
+ enable=1
+ )
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -218,35 +218,40 @@ class L2Util(object):
:type port_2: str
:type learn: bool
"""
-
sw_if_index1 = Topology.get_interface_sw_index(node, port_1)
sw_if_index2 = Topology.get_interface_sw_index(node, port_2)
learn_int = 1 if learn else 0
- cmd1 = 'bridge_domain_add_del'
- args1 = dict(bd_id=int(bd_id),
- flood=1,
- uu_flood=1,
- forward=1,
- learn=learn_int,
- arp_term=0,
- is_add=1)
-
- cmd2 = 'sw_interface_set_l2_bridge'
- args2 = dict(rx_sw_if_index=sw_if_index1,
- bd_id=int(bd_id),
- shg=0,
- port_type=0,
- enable=1)
-
- args3 = dict(rx_sw_if_index=sw_if_index2,
- bd_id=int(bd_id),
- shg=0,
- port_type=0,
- enable=1)
-
- err_msg = 'Failed to add L2 bridge domain with 2 interfaces on host' \
- ' {host}'.format(host=node['host'])
+ cmd1 = u"bridge_domain_add_del"
+ args1 = dict(
+ bd_id=int(bd_id),
+ flood=1,
+ uu_flood=1,
+ forward=1,
+ learn=learn_int,
+ arp_term=0,
+ is_add=1
+ )
+
+ cmd2 = u"sw_interface_set_l2_bridge"
+ args2 = dict(
+ rx_sw_if_index=sw_if_index1,
+ bd_id=int(bd_id),
+ shg=0,
+ port_type=0,
+ enable=1
+ )
+
+ args3 = dict(
+ rx_sw_if_index=sw_if_index2,
+ bd_id=int(bd_id),
+ shg=0,
+ port_type=0,
+ enable=1
+ )
+
+ err_msg = f"Failed to add L2 bridge domain with 2 interfaces " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd1, **args1).add(cmd2, **args2).add(cmd2, **args3)
@@ -263,27 +268,29 @@ class L2Util(object):
:type interface1: str or int
:type interface2: str or int
"""
-
- if isinstance(interface1, basestring):
+ if isinstance(interface1, str):
sw_iface1 = Topology().get_interface_sw_index(node, interface1)
else:
sw_iface1 = interface1
- if isinstance(interface2, basestring):
+ if isinstance(interface2, str):
sw_iface2 = Topology().get_interface_sw_index(node, interface2)
else:
sw_iface2 = interface2
- cmd = 'sw_interface_set_l2_xconnect'
- args1 = dict(rx_sw_if_index=sw_iface1,
- tx_sw_if_index=sw_iface2,
- enable=1)
- args2 = dict(rx_sw_if_index=sw_iface2,
- tx_sw_if_index=sw_iface1,
- enable=1)
-
- err_msg = 'Failed to add L2 cross-connect between two interfaces on' \
- ' host {host}'.format(host=node['host'])
+ cmd = u"sw_interface_set_l2_xconnect"
+ args1 = dict(
+ rx_sw_if_index=sw_iface1,
+ tx_sw_if_index=sw_iface2,
+ enable=1
+ )
+ args2 = dict(
+ rx_sw_if_index=sw_iface2,
+ tx_sw_if_index=sw_iface1,
+ enable=1
+ )
+ err_msg = f"Failed to add L2 cross-connect between two interfaces " \
+ f"on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args1).add(cmd, **args2).get_replies(err_msg)
@@ -299,27 +306,29 @@ class L2Util(object):
:type interface1: str or int
:type interface2: str or int
"""
-
- if isinstance(interface1, basestring):
+ if isinstance(interface1, str):
sw_iface1 = Topology().get_interface_sw_index(node, interface1)
else:
sw_iface1 = interface1
- if isinstance(interface2, basestring):
+ if isinstance(interface2, str):
sw_iface2 = Topology().get_interface_sw_index(node, interface2)
else:
sw_iface2 = interface2
- cmd = 'l2_patch_add_del'
- args1 = dict(rx_sw_if_index=sw_iface1,
- tx_sw_if_index=sw_iface2,
- is_add=1)
- args2 = dict(rx_sw_if_index=sw_iface2,
- tx_sw_if_index=sw_iface1,
- is_add=1)
-
- err_msg = 'Failed to add L2 patch between two interfaces on' \
- ' host {host}'.format(host=node['host'])
+ cmd = u"l2_patch_add_del"
+ args1 = dict(
+ rx_sw_if_index=sw_iface1,
+ tx_sw_if_index=sw_iface2,
+ is_add=1
+ )
+ args2 = dict(
+ rx_sw_if_index=sw_iface2,
+ tx_sw_if_index=sw_iface1,
+ is_add=1
+ )
+ err_msg = f"Failed to add L2 patch between two interfaces " \
+ f"on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args1).add(cmd, **args2).get_replies(err_msg)
@@ -340,15 +349,17 @@ class L2Util(object):
:type if_2: str
:type set_up: bool
"""
-
- cmd = 'brctl addbr {0}'.format(br_name)
+ cmd = f"brctl addbr {br_name}"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = 'brctl addif {0} {1}'.format(br_name, if_1)
+
+ cmd = f"brctl addif {br_name} {if_1}"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = 'brctl addif {0} {1}'.format(br_name, if_2)
+
+ cmd = f"brctl addif {br_name} {if_2}"
exec_cmd_no_error(node, cmd, sudo=True)
+
if set_up:
- cmd = 'ip link set dev {0} up'.format(br_name)
+ cmd = f"ip link set dev {br_name} up"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
@@ -366,15 +377,15 @@ class L2Util(object):
:type br_name: str
:type set_down: bool
"""
-
if set_down:
- cmd = 'ip link set dev {0} down'.format(br_name)
+ cmd = f"ip link set dev {br_name} down"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = 'brctl delbr {0}'.format(br_name)
+
+ cmd = f"brctl delbr {br_name}"
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def vpp_get_bridge_domain_data(node, bd_id=0xffffffff):
+ def vpp_get_bridge_domain_data(node, bd_id=Constants.BITWISE_NON_ZERO):
"""Get all bridge domain data from a VPP node. If a domain ID number is
provided, return only data for the matching bridge domain.
@@ -386,23 +397,27 @@ class L2Util(object):
or a single dictionary for the specified bridge domain.
:rtype: list or dict
"""
+ cmd = u"bridge_domain_dump"
+ args = dict(
+ bd_id=int(bd_id)
+ )
+ err_msg = f"Failed to get L2FIB dump on host {node[u'host']}"
- cmd = 'bridge_domain_dump'
- args = dict(bd_id=int(bd_id))
- err_msg = 'Failed to get L2FIB dump on host {host}'.format(
- host=node['host'])
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
- if bd_id == Constants.BITWISE_NON_ZERO:
- return details
+ retval = details if bd_id == Constants.BITWISE_NON_ZERO else None
+
for bridge_domain in details:
- if bridge_domain['bd_id'] == bd_id:
- return bridge_domain
+ if bridge_domain[u"bd_id"] == bd_id:
+ retval = bridge_domain
+
+ return retval
@staticmethod
- def l2_vlan_tag_rewrite(node, interface, tag_rewrite_method,
- push_dot1q=True, tag1_id=None, tag2_id=None):
+ def l2_vlan_tag_rewrite(
+ node, interface, tag_rewrite_method, push_dot1q=True, tag1_id=None,
+ tag2_id=None):
"""Rewrite tags in ethernet frame.
:param node: Node to rewrite tags.
@@ -419,27 +434,29 @@ class L2Util(object):
:type tag1_id: int
:type tag2_id: int
"""
-
tag1_id = int(tag1_id) if tag1_id else 0
tag2_id = int(tag2_id) if tag2_id else 0
- vtr_oper = getattr(L2VtrOp, 'L2_VTR_{}'.format(
- tag_rewrite_method.replace('-', '_').upper()))
+ vtr_oper = getattr(
+ L2VtrOp, f"L2_VTR_{tag_rewrite_method.replace(u'-', u'_').upper()}"
+ )
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
iface_key = Topology.get_interface_by_name(node, interface)
sw_if_index = Topology.get_interface_sw_index(node, iface_key)
else:
sw_if_index = interface
- cmd = 'l2_interface_vlan_tag_rewrite'
- args = dict(sw_if_index=sw_if_index,
- vtr_op=int(vtr_oper),
- push_dot1q=int(push_dot1q),
- tag1=tag1_id,
- tag2=tag2_id)
- err_msg = 'Failed to set VLAN TAG rewrite on host {host}'.format(
- host=node['host'])
+ cmd = u"l2_interface_vlan_tag_rewrite"
+ args = dict(
+ sw_if_index=sw_if_index,
+ vtr_op=int(vtr_oper),
+ push_dot1q=int(push_dot1q),
+ tag1=tag1_id,
+ tag2=tag2_id
+ )
+ err_msg = f"Failed to set VLAN TAG rewrite on host {node['host']}"
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -454,16 +471,17 @@ class L2Util(object):
:returns: L2 FIB table.
:rtype: list
"""
+ cmd = u"l2_fib_table_dump"
+ args = dict(
+ bd_id=int(bd_id)
+ )
+ err_msg = f"Failed to get L2FIB dump on host {node['host']}"
- cmd = 'l2_fib_table_dump'
- args = dict(bd_id=int(bd_id))
- err_msg = 'Failed to get L2FIB dump on host {host}'.format(
- host=node['host'])
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
for fib_item in details:
- fib_item['mac'] = L2Util.bin_to_mac(fib_item['mac'])
+ fib_item[u"mac"] = L2Util.bin_to_mac(fib_item[u"mac"])
return details
@@ -480,13 +498,12 @@ class L2Util(object):
:returns: L2 FIB entry
:rtype: dict
"""
-
bd_data = L2Util.vpp_get_bridge_domain_data(node)
- bd_id = bd_data[bd_index-1]['bd_id']
+ bd_id = bd_data[bd_index-1][u"bd_id"]
table = L2Util.get_l2_fib_table(node, bd_id)
for entry in table:
- if entry['mac'] == mac:
+ if entry[u"mac"] == mac:
return entry
return {}
diff --git a/resources/libraries/python/LimitUtil.py b/resources/libraries/python/LimitUtil.py
index 45aeaff5a0..c34109c2b7 100644
--- a/resources/libraries/python/LimitUtil.py
+++ b/resources/libraries/python/LimitUtil.py
@@ -15,10 +15,10 @@
from resources.libraries.python.ssh import exec_cmd_no_error
-__all__ = ["LimitUtil"]
+__all__ = [u"LimitUtil"]
-class LimitUtil(object):
+class LimitUtil:
"""Class contains methods for getting or setting process resource limits."""
@staticmethod
@@ -30,10 +30,8 @@ class LimitUtil(object):
:type node: dict
:type pid: int
"""
- command = 'prlimit --noheadings --pid={pid}'.format(pid=pid)
-
- message = 'Node {host} failed to run: {command}'.\
- format(host=node['host'], command=command)
+ command = f"prlimit --noheadings --pid={pid}"
+ message = f"Node {node[u'host']} failed to run: {command}"
exec_cmd_no_error(node, command, sudo=True, message=message)
@@ -50,11 +48,7 @@ class LimitUtil(object):
:type resource: str
:type limit: str
"""
- command = 'prlimit --{resource}={limit} --pid={pid}'.format(
- resource=resource, limit=limit, pid=pid)
-
- message = 'Node {host} failed to run: {command}'.\
- format(host=node['host'], command=command)
+ command = f"prlimit --{resource}={limit} --pid={pid}"
+ message = f"Node {node[u'host']} failed to run: {command}"
exec_cmd_no_error(node, command, sudo=True, message=message)
-
diff --git a/resources/libraries/python/LispSetup.py b/resources/libraries/python/LispSetup.py
index 5fee5db87d..666b6e636d 100644
--- a/resources/libraries/python/LispSetup.py
+++ b/resources/libraries/python/LispSetup.py
@@ -15,15 +15,13 @@
from ipaddress import ip_address
-from resources.libraries.python.topology import NodeType
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.L2Util import L2Util
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+from resources.libraries.python.topology import NodeType
-class LispStatus(object):
- """Class for lisp API."""
- def __init__(self):
- pass
+class LispStatus:
+ """Class for lisp API."""
@staticmethod
def vpp_lisp_enable_disable(node, state):
@@ -34,25 +32,21 @@ class LispStatus(object):
:type node: dict
:type state: str
"""
+ args = dict(is_en=0 if state == u"disable" else 1)
- args = dict(is_en=0 if state == 'disable' else 1)
-
- cmd = 'lisp_enable_disable'
- err_msg = "Failed to set LISP status on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_enable_disable"
+ err_msg = f"Failed to set LISP status on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispRemoteMapping(object):
+class LispRemoteMapping:
"""Class for lisp remote mapping API."""
- def __init__(self):
- pass
-
@staticmethod
- def vpp_add_lisp_remote_mapping(node, vni, deid, deid_prefix, seid,
- seid_prefix, rloc, is_mac=False):
+ def vpp_add_lisp_remote_mapping(
+ node, vni, deid, deid_prefix, seid, seid_prefix, rloc,
+ is_mac=False):
"""Add lisp remote mapping on the VPP node in topology.
:param node: VPP node.
@@ -72,11 +66,10 @@ class LispRemoteMapping(object):
:type rloc: str
:type is_mac: bool
"""
-
if not is_mac:
- eid_type = 0 if ip_address(unicode(deid)).version == 4 else 1
- eid_packed = ip_address(unicode(deid)).packed
- seid_packed = ip_address(unicode(seid)).packed
+ eid_type = 0 if ip_address(deid).version == 4 else 1
+ eid_packed = ip_address(deid).packed
+ seid_packed = ip_address(seid).packed
eid_len = deid_prefix
seid_len = seid_prefix
else:
@@ -86,30 +79,35 @@ class LispRemoteMapping(object):
eid_len = 0
seid_len = 0
- rlocs = [dict(is_ip4=1 if ip_address(unicode(rloc)).version == 4 else 0,
- addr=ip_address(unicode(rloc)).packed)]
-
- args = dict(is_add=1,
- is_src_dst=1,
- vni=int(vni),
- eid_type=eid_type,
- eid=eid_packed,
- eid_len=eid_len,
- seid=seid_packed,
- seid_len=seid_len,
- rloc_num=1,
- rlocs=rlocs)
-
- cmd = 'lisp_add_del_remote_mapping'
- err_msg = "Failed to add remote mapping on host {host}".format(
- host=node['host'])
+ rlocs = [
+ dict(
+ is_ip4=1 if ip_address(rloc).version == 4 else 0,
+ addr=ip_address(rloc).packed
+ )
+ ]
+
+ args = dict(
+ is_add=1,
+ is_src_dst=1,
+ vni=int(vni),
+ eid_type=eid_type,
+ eid=eid_packed,
+ eid_len=eid_len,
+ seid=seid_packed,
+ seid_len=seid_len,
+ rloc_num=1,
+ rlocs=rlocs
+ )
+
+ cmd = u"lisp_add_del_remote_mapping"
+ err_msg = f"Failed to add remote mapping on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def vpp_del_lisp_remote_mapping(node, vni, deid, deid_prefix, seid,
- seid_prefix, rloc):
+ def vpp_del_lisp_remote_mapping(
+ node, vni, deid, deid_prefix, seid, seid_prefix, rloc):
"""Delete lisp remote mapping on the VPP node in topology.
:param node: VPP node.
@@ -127,14 +125,13 @@ class LispRemoteMapping(object):
:type seid_prefix: int
:type rloc: str
"""
-
# used only with IPs
is_mac = False
if not is_mac:
- eid_type = 0 if ip_address(unicode(deid)).version == 4 else 1
- eid_packed = ip_address(unicode(deid)).packed
- seid_packed = ip_address(unicode(seid)).packed
+ eid_type = 0 if ip_address(deid).version == 4 else 1
+ eid_packed = ip_address(deid).packed
+ seid_packed = ip_address(seid).packed
eid_len = deid_prefix
seid_len = seid_prefix
else:
@@ -144,36 +141,38 @@ class LispRemoteMapping(object):
eid_len = 0
seid_len = 0
- rlocs = [dict(is_ip4=1 if ip_address(unicode(rloc)).version == 4 else 0,
- addr=ip_address(unicode(rloc)).packed)]
-
- args = dict(is_add=0,
- is_src_dst=1,
- vni=int(vni),
- eid_type=eid_type,
- eid=eid_packed,
- eid_len=eid_len,
- seid=seid_packed,
- seid_len=seid_len,
- rloc_num=1,
- rlocs=rlocs)
-
- cmd = 'lisp_add_del_remote_mapping'
- err_msg = "Failed to delete remote mapping on host {host}".format(
- host=node['host'])
+ rlocs = [
+ dict(
+ is_ip4=1 if ip_address(str(rloc)).version == 4 else 0,
+ addr=ip_address(str(rloc)).packed
+ )
+ ]
+
+ args = dict(
+ is_add=0,
+ is_src_dst=1,
+ vni=int(vni),
+ eid_type=eid_type,
+ eid=eid_packed,
+ eid_len=eid_len,
+ seid=seid_packed,
+ seid_len=seid_len,
+ rloc_num=1,
+ rlocs=rlocs
+ )
+
+ cmd = u"lisp_add_del_remote_mapping"
+ err_msg = f"Failed to delete remote mapping on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispAdjacency(object):
+class LispAdjacency:
"""Class for lisp adjacency API."""
- def __init__(self):
- pass
-
@staticmethod
- def vpp_add_lisp_adjacency(node, vni, deid, deid_prefix, seid,
- seid_prefix, is_mac=False):
+ def vpp_add_lisp_adjacency(
+ node, vni, deid, deid_prefix, seid, seid_prefix, is_mac=False):
"""Add lisp adjacency on the VPP node in topology.
:param node: VPP node.
@@ -191,11 +190,10 @@ class LispAdjacency(object):
:type seid_prefix: int
:type is_mac: bool
"""
-
if not is_mac:
- eid_type = 0 if ip_address(unicode(deid)).version == 4 else 1
- reid = ip_address(unicode(deid)).packed
- leid = ip_address(unicode(seid)).packed
+ eid_type = 0 if ip_address(deid).version == 4 else 1
+ reid = ip_address(deid).packed
+ leid = ip_address(seid).packed
reid_len = deid_prefix
leid_len = seid_prefix
else:
@@ -205,24 +203,25 @@ class LispAdjacency(object):
reid_len = 0
leid_len = 0
- args = dict(is_add=1,
- vni=int(vni),
- eid_type=eid_type,
- reid=reid,
- reid_len=reid_len,
- leid=leid,
- leid_len=leid_len)
+ args = dict(
+ is_add=1,
+ vni=int(vni),
+ eid_type=eid_type,
+ reid=reid,
+ reid_len=reid_len,
+ leid=leid,
+ leid_len=leid_len
+ )
- cmd = 'lisp_add_del_adjacency'
- err_msg = "Failed to add lisp adjacency on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_adjacency"
+ err_msg = f"Failed to add lisp adjacency on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def vpp_del_lisp_adjacency(node, vni, deid, deid_prefix, seid,
- seid_prefix):
+ def vpp_del_lisp_adjacency(
+ node, vni, deid, deid_prefix, seid, seid_prefix):
"""Delete lisp adjacency on the VPP node in topology.
:param node: VPP node.
@@ -238,14 +237,13 @@ class LispAdjacency(object):
:type seid: str
:type seid_prefix: int
"""
-
# used only with IPs
is_mac = False
if not is_mac:
- eid_type = 0 if ip_address(unicode(deid)).version == 4 else 1
- reid = ip_address(unicode(deid)).packed
- leid = ip_address(unicode(seid)).packed
+ eid_type = 0 if ip_address(deid).version == 4 else 1
+ reid = ip_address(deid).packed
+ leid = ip_address(seid).packed
reid_len = deid_prefix
leid_len = seid_prefix
else:
@@ -255,27 +253,25 @@ class LispAdjacency(object):
reid_len = 0
leid_len = 0
- args = dict(is_add=0,
- vni=int(vni),
- eid_type=eid_type,
- reid=reid,
- reid_len=reid_len,
- leid=leid,
- leid_len=leid_len)
+ args = dict(
+ is_add=0,
+ vni=int(vni),
+ eid_type=eid_type,
+ reid=reid,
+ reid_len=reid_len,
+ leid=leid,
+ leid_len=leid_len
+ )
- cmd = 'lisp_add_del_adjacency'
- err_msg = "Failed to delete lisp adjacency on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_adjacency"
+ err_msg = f"Failed to delete lisp adjacency on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispGpeStatus(object):
+class LispGpeStatus:
"""Clas for LISP GPE status manipulation."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_lisp_gpe_enable_disable(node, state):
"""Change the state of LISP GPE - enable or disable.
@@ -285,45 +281,35 @@ class LispGpeStatus(object):
:type node: dict
:type state: str
"""
+ args = dict(is_en=0 if state == u"disable" else 1)
- args = dict(is_en=0 if state == 'disable' else 1)
-
- cmd = 'gpe_enable_disable'
- err_msg = "Failed to set LISP GPE status on host {host}".format(
- host=node['host'])
+ cmd = u"gpe_enable_disable"
+ err_msg = f"Failed to set LISP GPE status on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispGpeForwardEntry(object):
+class LispGpeForwardEntry:
"""The functionality needed for these methods is not implemented in VPP
(VAT). Bug https://jira.fd.io/browse/VPP-334 was open to cover this issue.
TODO: Implement when VPP-334 is fixed.
"""
- def __init__(self):
- pass
-
@staticmethod
def add_lisp_gpe_forward_entry(node, *args):
"""Not implemented"""
# TODO: Implement when VPP-334 is fixed.
- pass
@staticmethod
def del_lisp_gpe_forward_entry(node, *args):
"""Not implemented"""
# TODO: Implement when VPP-334 is fixed.
- pass
-class LispMapResolver(object):
+class LispMapResolver:
"""Class for Lisp map resolver API."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_add_map_resolver(node, map_resolver_ip):
"""Set lisp map resolver on the VPP node in topology.
@@ -333,15 +319,14 @@ class LispMapResolver(object):
:type node: dict
:type map_resolver_ip: str
"""
+ args = dict(
+ is_add=1,
+ is_ipv6=0 if ip_address(map_resolver_ip).version == 4 else 1,
+ ip_address=ip_address(map_resolver_ip).packed
+ )
- args = dict(is_add=1,
- is_ipv6=0 if ip_address(unicode(map_resolver_ip)).version \
- == 4 else 1,
- ip_address=ip_address(unicode(map_resolver_ip)).packed)
-
- cmd = 'lisp_add_del_map_resolver'
- err_msg = "Failed to add map resolver on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_map_resolver"
+ err_msg = f"Failed to add map resolver on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -355,28 +340,24 @@ class LispMapResolver(object):
:type node: dict
:type map_resolver_ip: str
"""
+ args = dict(
+ is_add=0,
+ is_ipv6=0 if ip_address(map_resolver_ip).version == 4 else 1,
+ ip_address=ip_address(map_resolver_ip).packed
+ )
- args = dict(is_add=0,
- is_ipv6=0 if ip_address(unicode(map_resolver_ip)).version \
- == 4 else 1,
- ip_address=ip_address(unicode(map_resolver_ip)).packed)
-
- cmd = 'lisp_add_del_map_resolver'
- err_msg = "Failed to delete map resolver on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_map_resolver"
+ err_msg = f"Failed to delete map resolver on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispLocalEid(object):
+class LispLocalEid:
"""Class for Lisp local eid API."""
- def __init__(self):
- pass
-
@staticmethod
- def vpp_add_lisp_local_eid(node, locator_set_name, vni, eid,
- prefix_len=None):
+ def vpp_add_lisp_local_eid(
+ node, locator_set_name, vni, eid, prefix_len=None):
"""Set lisp eid address on the VPP node in topology.
:param node: VPP node.
@@ -390,31 +371,31 @@ class LispLocalEid(object):
:type eid: str
:type prefix_len: int
"""
-
if prefix_len:
- eid_type = 0 if ip_address(unicode(eid)).version == 4 else 1
- eid_packed = ip_address(unicode(eid)).packed
+ eid_type = 0 if ip_address(eid).version == 4 else 1
+ eid_packed = ip_address(eid).packed
else:
eid_type = 2
eid_packed = L2Util.mac_to_bin(eid)
- args = dict(is_add=1,
- eid_type=eid_type,
- eid=eid_packed,
- prefix_len=prefix_len,
- locator_set_name=locator_set_name,
- vni=int(vni))
+ args = dict(
+ is_add=1,
+ eid_type=eid_type,
+ eid=eid_packed,
+ prefix_len=prefix_len,
+ locator_set_name=locator_set_name,
+ vni=int(vni)
+ )
- cmd = 'lisp_add_del_local_eid'
- err_msg = "Failed to add local eid on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_local_eid"
+ err_msg = f"Failed to add local eid on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def vpp_del_lisp_local_eid(node, locator_set_name, vni, eid,
- prefix_len=None):
+ def vpp_del_lisp_local_eid(
+ node, locator_set_name, vni, eid, prefix_len=None):
"""Set lisp eid addres on the VPP node in topology.
:param node: VPP node.
@@ -428,34 +409,31 @@ class LispLocalEid(object):
:type eid: str
:type prefix_len: int
"""
-
if prefix_len:
- eid_type = 0 if ip_address(unicode(eid)).version == 4 else 1
- eid_packed = ip_address(unicode(eid)).packed
+ eid_type = 0 if ip_address(eid).version == 4 else 1
+ eid_packed = ip_address(eid).packed
else:
eid_type = 2
eid_packed = L2Util.mac_to_bin(eid)
- args = dict(is_add=0,
- eid_type=eid_type,
- eid=eid_packed,
- prefix_len=prefix_len,
- locator_set_name=locator_set_name,
- vni=int(vni))
+ args = dict(
+ is_add=0,
+ eid_type=eid_type,
+ eid=eid_packed,
+ prefix_len=prefix_len,
+ locator_set_name=locator_set_name,
+ vni=int(vni)
+ )
- cmd = 'lisp_add_del_local_eid'
- err_msg = "Failed to delete local eid on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_local_eid"
+ err_msg = f"Failed to delete local eid on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispLocator(object):
+class LispLocator:
"""Class for the Lisp Locator API."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_add_lisp_locator(node, locator_name, sw_if_index, priority, weight):
"""Set lisp locator on the VPP node in topology.
@@ -472,15 +450,16 @@ class LispLocator(object):
:type weight: int
"""
- args = dict(is_add=1,
- locator_set_name=locator_name,
- sw_if_index=sw_if_index,
- priority=priority,
- weight=weight)
+ args = dict(
+ is_add=1,
+ locator_set_name=locator_name,
+ sw_if_index=sw_if_index,
+ priority=priority,
+ weight=weight
+ )
- cmd = 'lisp_add_del_locator'
- err_msg = "Failed to add locator on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_locator"
+ err_msg = f"Failed to add locator on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -500,26 +479,23 @@ class LispLocator(object):
:type priority: int
:type weight: int
"""
+ args = dict(
+ is_add=0,
+ locator_set_name=locator_name,
+ sw_if_index=sw_if_index,
+ priority=priority,
+ weight=weight
+ )
- args = dict(is_add=0,
- locator_set_name=locator_name,
- sw_if_index=sw_if_index,
- priority=priority,
- weight=weight)
-
- cmd = 'lisp_add_del_locator'
- err_msg = "Failed to delete locator on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_locator"
+ err_msg = f"Failed to delete locator on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispLocatorSet(object):
+class LispLocatorSet:
"""Class for Lisp Locator Set API."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_add_lisp_locator_set(node, name):
"""Add lisp locator_set on VPP.
@@ -529,15 +505,15 @@ class LispLocatorSet(object):
:type node: dict
:type name: str
"""
+ args = dict(
+ is_add=1,
+ locator_set_name=name,
+ locator_num=0,
+ locators=[]
+ )
- args = dict(is_add=1,
- locator_set_name=name,
- locator_num=0,
- locators=[])
-
- cmd = 'lisp_add_del_locator_set'
- err_msg = "Failed to add locator set on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_locator_set"
+ err_msg = f"Failed to add locator set on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -551,25 +527,22 @@ class LispLocatorSet(object):
:type node: dict
:type name: str
"""
+ args = dict(
+ is_add=0,
+ locator_set_name=name,
+ locator_num=0,
+ locators=[]
+ )
- args = dict(is_add=0,
- locator_set_name=name,
- locator_num=0,
- locators=[])
-
- cmd = 'lisp_add_del_locator_set'
- err_msg = "Failed to delete locator set on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_add_del_locator_set"
+ err_msg = f"Failed to delete locator set on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
-class LispSetup(object):
+class LispSetup:
"""Lisp setup in topology."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_set_lisp_locator_set(node, locator_set_list):
"""Set lisp locator_sets on VPP node in topology.
@@ -580,25 +553,22 @@ class LispSetup(object):
:type locator_set_list: list
"""
- if node['type'] != NodeType.DUT:
- raise ValueError('Node is not DUT')
+ if node[u"type"] != NodeType.DUT:
+ raise ValueError(u"Node is not DUT")
lisp_locator = LispLocator()
lisp_locator_set = LispLocatorSet()
for locator_set in locator_set_list:
- locator_set_name = locator_set.get('locator-set')
- locator_list = locator_set.get('locator')
- lisp_locator_set.vpp_add_lisp_locator_set(node,
- locator_set_name)
+ locator_set_name = locator_set.get(u"locator-set")
+ locator_list = locator_set.get(u"locator")
+ lisp_locator_set.vpp_add_lisp_locator_set(node, locator_set_name)
for locator in locator_list:
- sw_if_index = locator.get('locator-index')
- priority = locator.get('priority')
- weight = locator.get('weight')
- lisp_locator.vpp_add_lisp_locator(node,
- locator_set_name,
- sw_if_index,
- priority,
- weight)
+ sw_if_index = locator.get(u"locator-index")
+ priority = locator.get(u"priority")
+ weight = locator.get(u"weight")
+ lisp_locator.vpp_add_lisp_locator(
+ node, locator_set_name, sw_if_index, priority, weight
+ )
@staticmethod
def vpp_unset_lisp_locator_set(node, locator_set_list):
@@ -609,27 +579,23 @@ class LispSetup(object):
:type node: dict
:type locator_set_list: list
"""
-
- if node['type'] != NodeType.DUT:
- raise ValueError('Lisp locator set, node is not DUT')
+ if node[u"type"] != NodeType.DUT:
+ raise ValueError(u"Lisp locator set, node is not DUT")
lisp_locator = LispLocator()
lisp_locator_set = LispLocatorSet()
for locator_set in locator_set_list:
- locator_set_name = locator_set.get('locator-set')
- locator_list = locator_set.get('locator')
+ locator_set_name = locator_set.get(u"locator-set")
+ locator_list = locator_set.get(u"locator")
for locator in locator_list:
- sw_if_index = locator.get('locator-index')
- priority = locator.get('priority')
- weight = locator.get('weight')
- lisp_locator.vpp_del_lisp_locator(node,
- locator_set_name,
- sw_if_index,
- priority,
- weight)
-
- lisp_locator_set.vpp_del_lisp_locator_set(node,
- locator_set_name)
+ sw_if_index = locator.get(u"locator-index")
+ priority = locator.get(u"priority")
+ weight = locator.get(u"weight")
+ lisp_locator.vpp_del_lisp_locator(
+ node, locator_set_name, sw_if_index, priority, weight
+ )
+
+ lisp_locator_set.vpp_del_lisp_locator_set(node, locator_set_name)
@staticmethod
def vpp_set_lisp_eid_table(node, eid_table):
@@ -640,23 +606,20 @@ class LispSetup(object):
:type node: dict
:type eid_table: dict
"""
-
- if node['type'] != NodeType.DUT:
- raise ValueError('Node is not DUT')
+ if node[u"type"] != NodeType.DUT:
+ raise ValueError(u"Node is not DUT")
lisp_locator_set = LispLocatorSet()
lisp_eid = LispLocalEid()
for eid in eid_table:
- vni = eid.get('vni')
- eid_address = eid.get('eid')
- eid_prefix_len = eid.get('eid-prefix-len')
- locator_set_name = eid.get('locator-set')
+ vni = eid.get(u"vni")
+ eid_address = eid.get(u"eid")
+ eid_prefix_len = eid.get(u"eid-prefix-len")
+ locator_set_name = eid.get(u"locator-set")
lisp_locator_set.vpp_add_lisp_locator_set(node, locator_set_name)
- lisp_eid.vpp_add_lisp_local_eid(node,
- locator_set_name,
- vni,
- eid_address,
- eid_prefix_len)
+ lisp_eid.vpp_add_lisp_local_eid(
+ node, locator_set_name, vni, eid_address, eid_prefix_len
+ )
@staticmethod
def vpp_unset_lisp_eid_table(node, eid_table):
@@ -667,26 +630,23 @@ class LispSetup(object):
:type node: dict
:type eid_table: dict
"""
-
- if node['type'] != NodeType.DUT:
- raise ValueError('Node is not DUT')
+ if node[u"type"] != NodeType.DUT:
+ raise ValueError(u"Node is not DUT")
locator_set_list = []
lisp_locator_set = LispLocatorSet()
lisp_eid = LispLocalEid()
for eid in eid_table:
- vni = eid.get('vni')
- eid_address = eid.get('eid')
- eid_prefix_len = eid.get('eid-prefix-len')
- locator_set_name = eid.get('locator-set')
+ vni = eid.get(u"vni")
+ eid_address = eid.get(u"eid")
+ eid_prefix_len = eid.get(u"eid-prefix-len")
+ locator_set_name = eid.get(u"locator-set")
if locator_set_name not in locator_set_list:
locator_set_list.append(locator_set_name)
- lisp_eid.vpp_del_lisp_local_eid(node,
- locator_set_name,
- vni,
- eid_address,
- eid_prefix_len)
+ lisp_eid.vpp_del_lisp_local_eid(
+ node, locator_set_name, vni, eid_address, eid_prefix_len
+ )
for locator_set_name in locator_set_list:
lisp_locator_set.vpp_del_lisp_locator_set(node, locator_set_name)
@@ -700,10 +660,9 @@ class LispSetup(object):
:type node: dict
:type map_resolver: dict
"""
-
lisp_map_res = LispMapResolver()
for map_ip in map_resolver:
- lisp_map_res.vpp_add_map_resolver(node, map_ip.get('map resolver'))
+ lisp_map_res.vpp_add_map_resolver(node, map_ip.get(u"map resolver"))
@staticmethod
def vpp_unset_lisp_map_resolver(node, map_resolver):
@@ -714,12 +673,11 @@ class LispSetup(object):
:type node: dict
:type map_resolver: dict
"""
-
lisp_map_res = LispMapResolver()
for map_ip in map_resolver:
- lisp_map_res.vpp_del_map_resolver(node, map_ip.get('map resolver'))
+ lisp_map_res.vpp_del_map_resolver(node, map_ip.get(u"map resolver"))
-class LispEidTableMap(object):
+class LispEidTableMap:
"""
Class for EID table map.
"""
@@ -738,7 +696,6 @@ class LispEidTableMap(object):
:type bd_id: int
:type vrf: int
"""
-
# adding default mapping vni=0, vrf=0 needs to be skipped
skip = False
@@ -752,14 +709,15 @@ class LispEidTableMap(object):
if (int(vrf) == 0) and (int(vni) == 0):
skip = True
- args = dict(is_add=1,
- vni=int(vni),
- dp_table=int(dp_table),
- is_l2=is_l2)
+ args = dict(
+ is_add=1,
+ vni=int(vni),
+ dp_table=int(dp_table),
+ is_l2=is_l2
+ )
- cmd = 'lisp_eid_table_add_del_map'
- err_msg = "Failed to add eid table map on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_eid_table_add_del_map"
+ err_msg = f"Failed to add eid table map on host {node[u'host']}"
if not skip:
with PapiSocketExecutor(node) as papi_exec:
diff --git a/resources/libraries/python/LispUtil.py b/resources/libraries/python/LispUtil.py
index 114cd72202..a77f4ad854 100644
--- a/resources/libraries/python/LispUtil.py
+++ b/resources/libraries/python/LispUtil.py
@@ -13,19 +13,16 @@
"""Lisp utilities library."""
-from robot.api import logger
from ipaddress import IPv4Address, IPv6Address
+from robot.api import logger
-from resources.libraries.python.topology import Topology
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.L2Util import L2Util
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+from resources.libraries.python.topology import Topology
-class LispUtil(object):
+class LispUtil:
"""Implements keywords for Lisp tests."""
- def __init__(self):
- pass
-
@staticmethod
def vpp_show_lisp_state(node):
"""Get lisp state from VPP node.
@@ -35,17 +32,17 @@ class LispUtil(object):
:returns: Lisp gpe state.
:rtype: dict
"""
- cmd = 'show_lisp_status'
- err_msg = "Failed to get LISP status on host {host}".format(
- host=node['host'])
+ cmd = u"show_lisp_status"
+ err_msg = f"Failed to get LISP status on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["feature_status"] = "enabled" if reply["feature_status"] else \
- "disabled"
- data["gpe_status"] = "enabled" if reply["gpe_status"] else "disabled"
+ data[u"feature_status"] = u"enabled" if reply[u"feature_status"] \
+ else u"disabled"
+ data[u"gpe_status"] = u"enabled" if reply[u"gpe_status"] \
+ else u"disabled"
return data
@staticmethod
@@ -60,24 +57,27 @@ class LispUtil(object):
:returns: Lisp locator_set data as python list.
:rtype: list
"""
+ ifilter = {u"_": 0, u"_local": 1, u"_remote": 2}
+ args = dict(
+ filter=ifilter[u"_" + items_filter]
+ )
- ifilter = {"_": 0, "_local": 1, "_remote": 2}
- args = dict(filter=ifilter["_" + items_filter])
-
- cmd = 'lisp_locator_set_dump'
- err_msg = "Failed to get LISP locator set on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_locator_set_dump"
+ err_msg = f"Failed to get LISP locator set on host {node['host']}"
try:
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
- data = []
+ data = list()
for locator in details:
- data.append({"ls_name": locator["ls_name"].rstrip('\x00'),
- "ls_index": locator["ls_index"]})
+ data.append(
+ {u"ls_name": locator[u"ls_name"].rstrip(b'\0'),
+ u"ls_index": locator[u"ls_index"]}
+ )
return data
- except (ValueError, LookupError):
- return []
+ except (ValueError, LookupError) as err:
+ logger.warn(f"Failed to get LISP locator set {err}")
+ return list()
@staticmethod
def vpp_show_lisp_eid_table(node):
@@ -88,31 +88,34 @@ class LispUtil(object):
:returns: Lisp eid table as python list.
:rtype: list
"""
-
- cmd = 'lisp_eid_table_dump'
- err_msg = "Failed to get LISP eid table on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_eid_table_dump"
+ err_msg = f"Failed to get LISP eid table on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details(err_msg)
- data = []
+ data = list()
for eid_details in details:
- eid = 'Bad eid type'
- if eid_details["eid_type"] == 0:
- prefix = str(eid_details["eid_prefix_len"])
- eid = str(IPv4Address(eid_details["eid"][0:4])) + "/" + prefix
- elif eid_details["eid_type"] == 1:
- prefix = str(eid_details["eid_prefix_len"])
- eid = str(IPv6Address(eid_details["eid"])) + "/" + prefix
- elif eid_details["eid_type"] == 2:
- eid = str(L2Util.bin_to_mac(eid_details["eid"][0:6]))
- data.append({"action": eid_details["action"],
- "is_local": eid_details["is_local"],
- "eid": eid,
- "vni": eid_details["vni"],
- "ttl": eid_details["ttl"],
- "authoritative": eid_details["authoritative"]})
+ eid = u"Bad eid type"
+ if eid_details[u"eid_type"] == 0:
+ prefix = str(eid_details[u"eid_prefix_len"])
+ eid = str(IPv4Address(eid_details[u"eid"][0:4])) + u"/" + \
+ prefix
+ elif eid_details[u"eid_type"] == 1:
+ prefix = str(eid_details[u"eid_prefix_len"])
+ eid = str(IPv6Address(eid_details[u"eid"])) + u"/" + prefix
+ elif eid_details[u"eid_type"] == 2:
+ eid = str(L2Util.bin_to_mac(eid_details[u"eid"][0:6]))
+ data.append(
+ {
+ u"action": eid_details[u"action"],
+ u"is_local": eid_details[u"is_local"],
+ u"eid": eid,
+ u"vni": eid_details[u"vni"],
+ u"ttl": eid_details[u"ttl"],
+ u"authoritative": eid_details[u"authoritative"]
+ }
+ )
return data
@staticmethod
@@ -124,22 +127,20 @@ class LispUtil(object):
:returns: Lisp map resolver as python list.
:rtype: list
"""
-
- cmd = 'lisp_map_resolver_dump'
- err_msg = "Failed to get LISP map resolver on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_map_resolver_dump"
+ err_msg = f"Failed to get LISP map resolver on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details(err_msg)
- data = []
+ data = list()
for resolver in details:
- address = 'Bad is_ipv6 flag'
- if resolver["is_ipv6"] == 0:
- address = str(IPv4Address(resolver["ip_address"][0:4]))
- elif resolver["is_ipv6"] == 1:
- address = str(IPv6Address(resolver["ip_address"]))
- data.append({"map resolver": address})
+ address = u"Bad is_ipv6 flag"
+ if resolver[u"is_ipv6"] == 0:
+ address = str(IPv4Address(resolver[u"ip_address"][0:4]))
+ elif resolver[u"is_ipv6"] == 1:
+ address = str(IPv6Address(resolver[u"ip_address"]))
+ data.append({u"map resolver": address})
return data
@staticmethod
@@ -151,16 +152,15 @@ class LispUtil(object):
:returns: LISP Map Register as python dict.
:rtype: dict
"""
-
- cmd = 'show_lisp_map_register_state'
- err_msg = "Failed to get LISP map register state on host {host}".format(
- host=node['host'])
+ cmd = u"show_lisp_map_register_state"
+ err_msg = f"Failed to get LISP map register state on host " \
+ f"{node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["state"] = "enabled" if reply["is_enabled"] else "disabled"
+ data[u"state"] = u"enabled" if reply[u"is_enabled"] else u"disabled"
logger.info(data)
return data
@@ -173,16 +173,15 @@ class LispUtil(object):
:returns: LISP Map Request mode as python dict.
:rtype: dict
"""
-
- cmd = 'show_lisp_map_request_mode'
- err_msg = "Failed to get LISP map request mode on host {host}".format(
- host=node['host'])
+ cmd = u"show_lisp_map_request_mode"
+ err_msg = f"Failed to get LISP map request mode on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["map_request_mode"] = "src-dst" if reply["mode"] else "dst-only"
+ data[u"map_request_mode"] = u"src-dst" if reply[u"mode"] \
+ else u"dst-only"
logger.info(data)
return data
@@ -195,22 +194,20 @@ class LispUtil(object):
:returns: LISP Map Server as python list.
:rtype: list
"""
-
- cmd = 'lisp_map_server_dump'
- err_msg = "Failed to get LISP map server on host {host}".format(
- host=node['host'])
+ cmd = u"lisp_map_server_dump"
+ err_msg = f"Failed to get LISP map server on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details(err_msg)
- data = []
+ data = list()
for server in details:
- address = 'Bad is_ipv6 flag'
- if server["is_ipv6"] == 0:
- address = str(IPv4Address(server["ip_address"][0:4]))
- elif server["is_ipv6"] == 1:
- address = str(IPv6Address(server["ip_address"]))
- data.append({"map-server": address})
+ address = u"Bad is_ipv6 flag"
+ if server[u"is_ipv6"] == 0:
+ address = str(IPv4Address(server[u"ip_address"][0:4]))
+ elif server[u"is_ipv6"] == 1:
+ address = str(IPv6Address(server[u"ip_address"]))
+ data.append({u"map-server": address})
logger.info(data)
return data
@@ -223,24 +220,21 @@ class LispUtil(object):
:returns: LISP PETR configuration as python dict.
:rtype: dict
"""
-
-# Note: VAT is returning ipv6 address instead of ipv4
-
- cmd = 'show_lisp_use_petr'
- err_msg = "Failed to get LISP petr config on host {host}".format(
- host=node['host'])
+ # Note: VAT is returning ipv6 address instead of ipv4
+ cmd = u"show_lisp_use_petr"
+ err_msg = f"Failed to get LISP petr config on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["status"] = "enabled" if reply["status"] else "disabled"
- address = 'Bad is_ip4 flag'
- if reply["is_ip4"] == 0:
- address = str(IPv6Address(reply["address"]))
- elif reply["is_ip4"] == 1:
- address = str(IPv4Address(reply["address"][0:4]))
- data["address"] = address
+ data[u"status"] = u"enabled" if reply[u"status"] else u"disabled"
+ address = u"Bad is_ip4 flag"
+ if reply[u"is_ip4"] == 0:
+ address = str(IPv6Address(reply[u"address"]))
+ elif reply[u"is_ip4"] == 1:
+ address = str(IPv4Address(reply[u"address"][0:4]))
+ data[u"address"] = address
logger.info(data)
return data
@@ -253,16 +247,14 @@ class LispUtil(object):
:returns: LISP RLOC configuration as python dict.
:rtype: dict
"""
-
- cmd = 'show_lisp_rloc_probe_state'
- err_msg = "Failed to get LISP rloc config on host {host}".format(
- host=node['host'])
+ cmd = u"show_lisp_rloc_probe_state"
+ err_msg = f"Failed to get LISP rloc config on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["state"] = "enabled" if reply["is_enabled"] else "disabled"
+ data[u"state"] = u"enabled" if reply[u"is_enabled"] else u"disabled"
logger.info(data)
return data
@@ -275,16 +267,14 @@ class LispUtil(object):
:returns: Lisp PITR config data.
:rtype: dict
"""
-
- cmd = 'show_lisp_pitr'
- err_msg = "Failed to get LISP pitr on host {host}".format(
- host=node['host'])
+ cmd = u"show_lisp_pitr"
+ err_msg = f"Failed to get LISP pitr on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
data = dict()
- data["status"] = "enabled" if reply["status"] else "disabled"
+ data[u"status"] = u"enabled" if reply[u"status"] else u"disabled"
return data
@staticmethod
@@ -296,19 +286,20 @@ class LispUtil(object):
:type lisp_val1: list
:type lisp_val2: list
"""
-
len1 = len(lisp_val1)
len2 = len(lisp_val2)
+
if len1 != len2:
- raise RuntimeError('Values are not same. '
- 'Value 1 {} \n'
- 'Value 2 {}.'.format(lisp_val1,
- lisp_val2))
+ raise RuntimeError(
+ f"Values are not same. Value 1 {lisp_val1} \n"
+ f"Value 2 {lisp_val2}."
+ )
for tmp in lisp_val1:
if tmp not in lisp_val2:
- raise RuntimeError('Value {} not found in vpp:\n'
- '{}'.format(tmp, lisp_val2))
+ raise RuntimeError(
+ f"Value {tmp} not found in vpp:\n{lisp_val2}"
+ )
def lisp_locator_s_should_be_equal(self, locator_set1, locator_set2):
"""Fail if the lisp values are not equal.
@@ -318,11 +309,12 @@ class LispUtil(object):
:type locator_set1: list
:type locator_set2: list
"""
+ locator_set_list = list()
- locator_set_list = []
for item in locator_set1:
if item not in locator_set_list:
locator_set_list.append(item)
+
self.lisp_should_be_equal(locator_set_list, locator_set2)
@staticmethod
@@ -338,16 +330,15 @@ class LispUtil(object):
from VAT.
:rtype: tuple
"""
-
topo = Topology()
+ locator_set_list = list()
+ locator_set_list_vat = list()
- locator_set_list = []
- locator_set_list_vat = []
i = 0
for num in range(0, int(locator_set_number)):
- locator_list = []
- for interface in node['interfaces'].values():
- link = interface.get('link')
+ locator_list = list()
+ for interface in list(node[u"interfaces"].values()):
+ link = interface.get(u"link")
i += 1
if link is None:
continue
@@ -355,18 +346,24 @@ class LispUtil(object):
if_name = topo.get_interface_by_link_name(node, link)
sw_if_index = topo.get_interface_sw_index(node, if_name)
if if_name is not None:
- locator = {'locator-index': sw_if_index,
- 'priority': i,
- 'weight': i}
+ locator = {
+ u"locator-index": sw_if_index,
+ u"priority": i,
+ u"weight": i
+ }
locator_list.append(locator)
- l_name = 'ls{0}'.format(num)
- locator_set = {'locator-set': l_name,
- 'locator': locator_list}
+ l_name = f"ls{num}"
+ locator_set = {
+ u"locator-set": l_name,
+ u"locator": locator_list
+ }
locator_set_list.append(locator_set)
- locator_set_vat = {"ls_name": l_name,
- "ls_index": num}
+ locator_set_vat = {
+ u"ls_name": l_name,
+ u"ls_index": num
+ }
locator_set_list_vat.append(locator_set_vat)
return locator_set_list, locator_set_list_vat
@@ -384,15 +381,15 @@ class LispUtil(object):
from VAT.
:rtype: tuple
"""
-
topo = Topology()
- locator_set_list = []
- locator_set_list_vat = []
+ locator_set_list = list()
+ locator_set_list_vat = list()
+
i = 0
for num in range(0, int(locator_set_number)):
locator_list = []
- for interface in node['interfaces'].values():
- link = interface.get('link')
+ for interface in list(node[u"interfaces"].values()):
+ link = interface.get(u"link")
i += 1
if link is None:
continue
@@ -400,17 +397,23 @@ class LispUtil(object):
if_name = topo.get_interface_by_link_name(node, link)
sw_if_index = topo.get_interface_sw_index(node, if_name)
if if_name is not None:
- l_name = 'ls{0}'.format(num)
- locator = {'locator-index': sw_if_index,
- 'priority': i,
- 'weight': i}
+ l_name = f"ls{num}"
+ locator = {
+ u"locator-index": sw_if_index,
+ u"priority": i,
+ u"weight": i
+ }
locator_list.append(locator)
- locator_set = {'locator-set': l_name,
- 'locator': locator_list}
+ locator_set = {
+ u"locator-set": l_name,
+ u"locator": locator_list
+ }
locator_set_list.append(locator_set)
- locator_set_vat = {"ls_name": l_name,
- "ls_index": num}
+ locator_set_vat = {
+ u"ls_name": l_name,
+ u"ls_index": num
+ }
locator_set_list_vat.append(locator_set_vat)
return locator_set_list, locator_set_list_vat
@@ -421,5 +424,4 @@ class LispUtil(object):
:param lisp_params: Should be empty list.
:type lisp_params: list
"""
-
self.lisp_should_be_equal([], lisp_params)
diff --git a/resources/libraries/python/LoadBalancerUtil.py b/resources/libraries/python/LoadBalancerUtil.py
index 77f6412973..c8e6c0ddd7 100644
--- a/resources/libraries/python/LoadBalancerUtil.py
+++ b/resources/libraries/python/LoadBalancerUtil.py
@@ -13,12 +13,14 @@
"""Loadbalancer util library."""
-from socket import htonl
from ipaddress import ip_address
+from socket import htonl
+
from resources.libraries.python.topology import NodeType, Topology
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-class LoadBalancerUtil(object):
+
+class LoadBalancerUtil:
"""Basic Loadbalancer parameter configuration."""
@staticmethod
@@ -43,28 +45,33 @@ class LoadBalancerUtil(object):
:returns: Nothing.
:raises ValueError: If the node has an unknown node type.
"""
- if node['type'] == NodeType.DUT:
- ip4_src_addr = ip_address(unicode(kwargs.pop('ip4_src_addr',
- '255.255.255.255')))
- ip6_src_addr = ip_address(unicode(kwargs.pop('ip6_src_addr',\
- 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')))
- flow_timeout = kwargs.pop('flow_timeout', 40)
- sticky_buckets_per_core = kwargs.pop('buckets_per_core', 1024)
-
- cmd = 'lb_conf'
- err_msg = 'Failed to set lb conf on host {host}'.format(
- host=node['host'])
-
- args = dict(ip4_src_address=str(ip4_src_addr),
- ip6_src_address=str(ip6_src_addr),
- sticky_buckets_per_core=sticky_buckets_per_core,
- flow_timeout=flow_timeout)
+ if node[u"type"] == NodeType.DUT:
+ ip4_src_addr = ip_address(
+ kwargs.pop(u"ip4_src_addr", u"255.255.255.255")
+ )
+ ip6_src_addr = ip_address(
+ kwargs.pop(
+ u"ip6_src_addr", u"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
+ )
+ )
+ flow_timeout = kwargs.pop(u"flow_timeout", 40)
+ sticky_buckets_per_core = kwargs.pop(u"buckets_per_core", 1024)
+
+ cmd = u"lb_conf"
+ err_msg = f"Failed to set lb conf on host {node[u'host']}"
+ args = dict(
+ ip4_src_address=str(ip4_src_addr),
+ ip6_src_address=str(ip6_src_addr),
+ sticky_buckets_per_core=sticky_buckets_per_core,
+ flow_timeout=flow_timeout
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
else:
- raise ValueError('Node {host} has unknown NodeType: "{type}"'
- .format(host=node['host'], type=node['type']))
+ raise ValueError(
+ f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'"
+ )
@staticmethod
def vpp_lb_add_del_vip(node, **kwargs):
@@ -91,40 +98,44 @@ class LoadBalancerUtil(object):
:returns: Nothing.
:raises ValueError: If the node has an unknown node type.
"""
- if node['type'] == NodeType.DUT:
- vip_addr = kwargs.pop('vip_addr', '0.0.0.0')
- protocol = kwargs.pop('protocol', 255)
- port = kwargs.pop('port', 0)
- encap = kwargs.pop('encap', 0)
- dscp = kwargs.pop('dscp', 0)
- srv_type = kwargs.pop('srv_type', 0)
- target_port = kwargs.pop('target_port', 0)
- node_port = kwargs.pop('node_port', 0)
- new_len = kwargs.pop('new_len', 1024)
- is_del = kwargs.pop('is_del', 0)
-
- cmd = 'lb_add_del_vip'
- err_msg = 'Failed to add vip on host {host}'.format(
- host=node['host'])
-
- vip_addr = ip_address(unicode(vip_addr)).packed
- args = dict(pfx={'len': 128,
- 'address': {'un': {'ip4': vip_addr}, 'af': 0}},
- protocol=protocol,
- port=port,
- encap=htonl(encap),
- dscp=dscp,
- type=srv_type,
- target_port=target_port,
- node_port=node_port,
- new_flows_table_length=int(new_len),
- is_del=is_del)
+ if node[u"type"] == NodeType.DUT:
+ vip_addr = kwargs.pop(u"vip_addr", "0.0.0.0")
+ protocol = kwargs.pop(u"protocol", 255)
+ port = kwargs.pop(u"port", 0)
+ encap = kwargs.pop(u"encap", 0)
+ dscp = kwargs.pop(u"dscp", 0)
+ srv_type = kwargs.pop(u"srv_type", 0)
+ target_port = kwargs.pop(u"target_port", 0)
+ node_port = kwargs.pop(u"node_port", 0)
+ new_len = kwargs.pop(u"new_len", 1024)
+ is_del = kwargs.pop(u"is_del", 0)
+
+ cmd = u"lb_add_del_vip"
+ err_msg = f"Failed to add vip on host {node[u'host']}"
+
+ vip_addr = ip_address(vip_addr).packed
+ args = dict(
+ pfx={
+ u"len": 128,
+ u"address": {u"un": {u"ip": vip_addr}, u"af": 0}
+ },
+ protocol=protocol,
+ port=port,
+ encap=htonl(encap),
+ dscp=dscp,
+ type=srv_type,
+ target_port=target_port,
+ node_port=node_port,
+ new_flows_table_length=int(new_len),
+ is_del=is_del
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
else:
- raise ValueError('Node {host} has unknown NodeType: "{type}"'
- .format(host=node['host'], type=node['type']))
+ raise ValueError(
+ f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'"
+ )
@staticmethod
def vpp_lb_add_del_as(node, **kwargs):
@@ -146,34 +157,38 @@ class LoadBalancerUtil(object):
:returns: Nothing.
:raises ValueError: If the node has an unknown node type.
"""
- if node['type'] == NodeType.DUT:
- cmd = 'lb_add_del_as'
- err_msg = 'Failed to add lb as on host {host}'.format(
- host=node['host'])
-
- vip_addr = kwargs.pop('vip_addr', '0.0.0.0')
- protocol = kwargs.pop('protocol', 255)
- port = kwargs.pop('port', 0)
- as_addr = kwargs.pop('as_addr', '0.0.0.0')
- is_del = kwargs.pop('is_del', 0)
- is_flush = kwargs.pop('is_flush', 0)
-
- vip_addr = ip_address(unicode(vip_addr)).packed
- as_addr = ip_address(unicode(as_addr)).packed
-
- args = dict(pfx={'len': 128,
- 'address': {'un': {'ip4': vip_addr}, 'af': 0}},
- protocol=protocol,
- port=port,
- as_address={'un': {'ip4': as_addr}, 'af': 0},
- is_del=is_del,
- is_flush=is_flush)
+ if node[u"type"] == NodeType.DUT:
+ cmd = u"lb_add_del_as"
+ err_msg = f"Failed to add lb as on host {node[u'host']}"
+
+ vip_addr = kwargs.pop(u"vip_addr", "0.0.0.0")
+ protocol = kwargs.pop(u"protocol", 255)
+ port = kwargs.pop(u"port", 0)
+ as_addr = kwargs.pop(u"as_addr", u"0.0.0.0")
+ is_del = kwargs.pop(u"is_del", 0)
+ is_flush = kwargs.pop(u"is_flush", 0)
+
+ vip_addr = ip_address(vip_addr).packed
+ as_addr = ip_address(as_addr).packed
+
+ args = dict(
+ pfx={
+ u"len": 128,
+ u"address": {u"un": {u"ip": vip_addr}, u"af": 0}
+ },
+ protocol=protocol,
+ port=port,
+ as_address={u"un": {u"ip": as_addr}, u"af": 0},
+ is_del=is_del,
+ is_flush=is_flush
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
else:
- raise ValueError('Node {host} has unknown NodeType: "{type}"'
- .format(host=node['host'], type=node['type']))
+ raise ValueError(
+ f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'"
+ )
@staticmethod
def vpp_lb_add_del_intf_nat4(node, **kwargs):
@@ -190,18 +205,21 @@ class LoadBalancerUtil(object):
:returns: Nothing.
:raises ValueError: If the node has an unknown node type.
"""
- if node['type'] == NodeType.DUT:
- cmd = 'lb_add_del_intf_nat4'
- err_msg = 'Failed to add interface nat4 on host {host}'.format(
- host=node['host'])
+ if node[u"type"] == NodeType.DUT:
+ cmd = u"lb_add_del_intf_nat4"
+ err_msg = f"Failed to add interface nat4 on host {node[u'host']}"
- is_add = kwargs.pop('is_add', True)
- interface = kwargs.pop('interface', 0)
+ is_add = kwargs.pop(u"is_add", True)
+ interface = kwargs.pop(u"interface", 0)
sw_if_index = Topology.get_interface_sw_index(node, interface)
- args = dict(is_add=is_add, sw_if_index=sw_if_index)
+ args = dict(
+ is_add=is_add,
+ sw_if_index=sw_if_index
+ )
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
else:
- raise ValueError('Node {host} has unknown NodeType: "{type}"'
- .format(host=node['host'], type=node['type']))
+ raise ValueError(
+ f"Node {node[u'host']} has unknown NodeType: '{node[u'type']}'"
+ )
diff --git a/resources/libraries/python/LocalExecution.py b/resources/libraries/python/LocalExecution.py
index f9a7b94d8e..ea40156404 100644
--- a/resources/libraries/python/LocalExecution.py
+++ b/resources/libraries/python/LocalExecution.py
@@ -34,13 +34,13 @@ from robot.api import logger
from resources.libraries.python.OptionString import OptionString
-__all__ = ["run"]
+__all__ = [u"run"]
-MESSAGE_TEMPLATE = "Command {com} ended with RC {ret} and output:\n{out}"
+MESSAGE_TEMPLATE = u"Command {com} ended with RC {ret} and output:\n{out}"
-def run(command, msg="", check=True, log=False, console=False):
+def run(command, msg=u"", check=True, log=False, console=False):
"""Wrapper around subprocess.check_output that can tolerates nonzero RCs.
Stderr is redirected to stdout, so it is part of output
@@ -73,24 +73,24 @@ def run(command, msg="", check=True, log=False, console=False):
"""
if isinstance(command, OptionString):
command = command.parts
- if not hasattr(command, "__iter__"):
+ if not hasattr(command, u"__iter__"):
# Strings are indexable, but turning into iterator is not supported.
- raise TypeError("Command {cmd!r} is not an iterable.".format(
- cmd=command))
+ raise TypeError(f"Command {command!r} is not an iterable.")
ret_code = 0
- output = ""
+ output = u""
try:
output = subprocess.check_output(command, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as err:
output = err.output
ret_code = err.returncode
if check:
- raise RuntimeError(MESSAGE_TEMPLATE.format(
- com=err.cmd, ret=ret_code, out=output))
+ raise RuntimeError(
+ MESSAGE_TEMPLATE.format(com=err.cmd, ret=ret_code, out=output)
+ )
if log:
message = MESSAGE_TEMPLATE.format(com=command, ret=ret_code, out=output)
if msg:
- message = msg + ": " + message
+ message = f"{msg}: {message}"
if console:
logger.console(message)
else:
diff --git a/resources/libraries/python/MLRsearch/AbstractMeasurer.py b/resources/libraries/python/MLRsearch/AbstractMeasurer.py
index c9b5987124..622b8fdba6 100644
--- a/resources/libraries/python/MLRsearch/AbstractMeasurer.py
+++ b/resources/libraries/python/MLRsearch/AbstractMeasurer.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,11 +16,9 @@
from abc import ABCMeta, abstractmethod
-class AbstractMeasurer(object):
+class AbstractMeasurer(metaclass=ABCMeta):
"""Abstract class defining common API for measurement providers."""
- __metaclass__ = ABCMeta
-
@abstractmethod
def measure(self, duration, transmit_rate):
"""Perform trial measurement and return the result.
@@ -32,4 +30,3 @@ class AbstractMeasurer(object):
:returns: Structure containing the result of the measurement.
:rtype: ReceiveRateMeasurement.ReceiveRateMeasurement
"""
- pass
diff --git a/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py b/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py
index 08f8b7e0a9..f4f2d3f096 100644
--- a/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py
+++ b/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,11 +16,9 @@
from abc import ABCMeta, abstractmethod
-class AbstractSearchAlgorithm(object):
+class AbstractSearchAlgorithm(metaclass=ABCMeta):
"""Abstract class defining common API for search algorithms."""
- __metaclass__ = ABCMeta
-
def __init__(self, measurer):
"""Store the rate provider.
@@ -48,4 +46,3 @@ class AbstractSearchAlgorithm(object):
:rtype: NdrPdrResult.NdrPdrResult
"""
# TODO: Do we agree on arguments related to precision or trial duration?
- pass
diff --git a/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py b/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py
index 1ecd42e7dd..29b72505de 100644
--- a/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py
+++ b/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -79,7 +79,7 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
TODO: Support configurable number of Packet Loss Ratios.
"""
- class ProgressState(object):
+ class ProgressState:
"""Structure containing data to be passed around in recursion."""
def __init__(
@@ -113,9 +113,10 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
self.minimum_transmit_rate = float(minimum_transmit_rate)
self.maximum_transmit_rate = float(maximum_transmit_rate)
- def __init__(self, measurer, final_relative_width=0.005,
- final_trial_duration=30.0, initial_trial_duration=1.0,
- number_of_intermediate_phases=2, timeout=600.0, doublings=1):
+ def __init__(
+ self, measurer, final_relative_width=0.005,
+ final_trial_duration=30.0, initial_trial_duration=1.0,
+ number_of_intermediate_phases=2, timeout=600.0, doublings=1):
"""Store the measurer object and additional arguments.
:param measurer: Rate provider to use by this search object.
@@ -147,7 +148,6 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
self.timeout = float(timeout)
self.doublings = int(doublings)
-
@staticmethod
def double_relative_width(relative_width):
"""Return relative width corresponding to double logarithmic width.
@@ -173,8 +173,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
:rtype: float
"""
return current_bound * (
- 1.0 - MultipleLossRatioSearch.double_relative_width(
- relative_width))
+ 1.0 - MultipleLossRatioSearch.double_relative_width(relative_width)
+ )
@staticmethod
def expand_down(relative_width, doublings, current_bound):
@@ -191,7 +191,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
"""
for _ in range(doublings):
relative_width = MultipleLossRatioSearch.double_relative_width(
- relative_width)
+ relative_width
+ )
return current_bound * (1.0 - relative_width)
@staticmethod
@@ -206,8 +207,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
:rtype: float
"""
return current_bound / (
- 1.0 - MultipleLossRatioSearch.double_relative_width(
- relative_width))
+ 1.0 - MultipleLossRatioSearch.double_relative_width(relative_width)
+ )
@staticmethod
def expand_up(relative_width, doublings, current_bound):
@@ -224,7 +225,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
"""
for _ in range(doublings):
relative_width = MultipleLossRatioSearch.double_relative_width(
- relative_width)
+ relative_width
+ )
return current_bound / (1.0 - relative_width)
@staticmethod
@@ -250,7 +252,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
:rtype: float
"""
return current_bound / (
- 1.0 - MultipleLossRatioSearch.half_relative_width(relative_width))
+ 1.0 - MultipleLossRatioSearch.half_relative_width(relative_width)
+ )
def narrow_down_ndr_and_pdr(
self, minimum_transmit_rate, maximum_transmit_rate,
@@ -278,31 +281,32 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
initial_width_goal = self.double_relative_width(initial_width_goal)
max_lo = maximum_transmit_rate * (1.0 - initial_width_goal)
mrr = max(
- minimum_transmit_rate,
- min(max_lo, line_measurement.receive_rate))
+ minimum_transmit_rate, min(max_lo, line_measurement.receive_rate)
+ )
mrr_measurement = self.measurer.measure(
- self.initial_trial_duration, mrr)
+ self.initial_trial_duration, mrr
+ )
# Attempt to get narrower width.
if mrr_measurement.loss_fraction > 0.0:
max2_lo = mrr * (1.0 - initial_width_goal)
mrr2 = min(max2_lo, mrr_measurement.receive_rate)
else:
mrr2 = mrr / (1.0 - initial_width_goal)
- if mrr2 > minimum_transmit_rate and mrr2 < maximum_transmit_rate:
+ if minimum_transmit_rate < mrr2 < maximum_transmit_rate:
line_measurement = mrr_measurement
mrr_measurement = self.measurer.measure(
self.initial_trial_duration, mrr2)
if mrr2 > mrr:
- buf = line_measurement
- line_measurement = mrr_measurement
- mrr_measurement = buf
+ line_measurement, mrr_measurement = \
+ (mrr_measurement, line_measurement)
starting_interval = ReceiveRateInterval(
mrr_measurement, line_measurement)
starting_result = NdrPdrResult(starting_interval, starting_interval)
state = self.ProgressState(
starting_result, self.number_of_intermediate_phases,
self.final_trial_duration, self.final_relative_width,
- packet_loss_ratio, minimum_transmit_rate, maximum_transmit_rate)
+ packet_loss_ratio, minimum_transmit_rate, maximum_transmit_rate
+ )
state = self.ndrpdr(state)
return state.result
@@ -318,15 +322,18 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
"""
# TODO: Implement https://stackoverflow.com/a/24683360
# to avoid the string manipulation if log verbosity is too low.
- logging.info("result before update: %s", state.result)
+ logging.info(f"result before update: {state.result}")
logging.debug(
- "relative widths in goals: %s", state.result.width_in_goals(
- self.final_relative_width))
+ f"relative widths in goals: "
+ f"{state.result.width_in_goals(self.final_relative_width)}"
+ )
measurement = self.measurer.measure(state.duration, transmit_rate)
ndr_interval = self._new_interval(
- state.result.ndr_interval, measurement, 0.0)
+ state.result.ndr_interval, measurement, 0.0
+ )
pdr_interval = self._new_interval(
- state.result.pdr_interval, measurement, state.packet_loss_ratio)
+ state.result.pdr_interval, measurement, state.packet_loss_ratio
+ )
state.result = NdrPdrResult(ndr_interval, pdr_interval)
return state
@@ -387,11 +394,13 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
# "invalid upper bound at maximal rate" case.
new_lo = measurement
- return ReceiveRateInterval(old_lo if new_lo is None else new_lo,
- old_hi if new_hi is None else new_hi)
+ return ReceiveRateInterval(
+ old_lo if new_lo is None else new_lo,
+ old_hi if new_hi is None else new_hi
+ )
def ndrpdr(self, state):
- """Pefrom trials for this phase. Return the new state when done.
+ """Perform trials for this phase. Return the new state when done.
:param state: State before this phase.
:type state: ProgressState
@@ -409,7 +418,8 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
duration_multiplier = state.duration / self.initial_trial_duration
phase_exponent = float(state.phases) / saved_phases
state.duration = self.initial_trial_duration * math.pow(
- duration_multiplier, phase_exponent)
+ duration_multiplier, phase_exponent
+ )
# Shorter durations do not need that narrow widths.
saved_width = state.width_goal
state.width_goal = self.double_relative_width(state.width_goal)
@@ -421,11 +431,12 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
state.phases = saved_phases # Not needed, but just in case.
logging.info(
- "starting iterations with duration %s and relative width goal %s",
- state.duration, state.width_goal)
+ f"starting iterations with duration {state.duration} and relative "
+ f"width goal {state.width_goal}"
+ )
while 1:
if time.time() > start_time + self.timeout:
- raise RuntimeError("Optimized search takes too long.")
+ raise RuntimeError(u"Optimized search takes too long.")
# Order of priorities: invalid bounds (nl, pl, nh, ph),
# then narrowing relative Tr widths.
# Durations are not priorities yet,
@@ -435,14 +446,17 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
pdr_lo = state.result.pdr_interval.measured_low
pdr_hi = state.result.pdr_interval.measured_high
ndr_rel_width = max(
- state.width_goal, state.result.ndr_interval.rel_tr_width)
+ state.width_goal, state.result.ndr_interval.rel_tr_width
+ )
pdr_rel_width = max(
- state.width_goal, state.result.pdr_interval.rel_tr_width)
+ state.width_goal, state.result.pdr_interval.rel_tr_width
+ )
# If we are hitting maximal or minimal rate, we cannot shift,
# but we can re-measure.
- new_tr = self._ndrpdr_loss_fraction(state,
- ndr_lo, ndr_hi, pdr_lo, pdr_hi,
- ndr_rel_width, pdr_rel_width)
+ new_tr = self._ndrpdr_loss_fraction(
+ state, ndr_lo, ndr_hi, pdr_lo, pdr_hi, ndr_rel_width,
+ pdr_rel_width
+ )
if new_tr is not None:
state = self._measure_and_update_state(state, new_tr)
@@ -461,8 +475,9 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
and pdr_lo.loss_fraction > state.packet_loss_ratio):
pdr_rel_width = 0.0
- new_tr = self._ndrpdr_width_goal(state, ndr_lo, pdr_lo,
- ndr_rel_width, pdr_rel_width)
+ new_tr = self._ndrpdr_width_goal(
+ state, ndr_lo, pdr_lo, ndr_rel_width, pdr_rel_width
+ )
if new_tr is not None:
state = self._measure_and_update_state(state, new_tr)
@@ -470,9 +485,10 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
# We do not need to improve width, but there still might be
# some measurements with smaller duration.
- new_tr = self._ndrpdr_duration(state,
- ndr_lo, ndr_hi, pdr_lo, pdr_hi,
- ndr_rel_width, pdr_rel_width)
+ new_tr = self._ndrpdr_duration(
+ state, ndr_lo, ndr_hi, pdr_lo, pdr_hi, ndr_rel_width,
+ pdr_rel_width
+ )
if new_tr is not None:
state = self._measure_and_update_state(state, new_tr)
@@ -480,12 +496,13 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
# Widths are narrow (or lower bound minimal), bound measurements
# are long enough, we can return.
- logging.info("phase done")
+ logging.info(u"phase done")
break
return state
- def _ndrpdr_loss_fraction(self, state, ndr_lo, ndr_hi, pdr_lo, pdr_hi,
- ndr_rel_width, pdr_rel_width):
+ def _ndrpdr_loss_fraction(
+ self, state, ndr_lo, ndr_hi, pdr_lo, pdr_hi, ndr_rel_width,
+ pdr_rel_width):
"""Perform loss_fraction-based trials within a ndrpdr phase
:param state: current state
@@ -509,50 +526,54 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
if ndr_lo.loss_fraction > 0.0:
if ndr_lo.target_tr > state.minimum_transmit_rate:
result = max(
- state.minimum_transmit_rate,
- self.expand_down(
- ndr_rel_width, self.doublings, ndr_lo.target_tr))
- logging.info("ndr lo external %s", result)
+ state.minimum_transmit_rate, self.expand_down(
+ ndr_rel_width, self.doublings, ndr_lo.target_tr
+ )
+ )
+ logging.info(f"ndr lo external {result}")
elif ndr_lo.duration < state.duration:
result = state.minimum_transmit_rate
- logging.info("ndr lo minimal re-measure")
+ logging.info(u"ndr lo minimal re-measure")
if result is None and pdr_lo.loss_fraction > state.packet_loss_ratio:
if pdr_lo.target_tr > state.minimum_transmit_rate:
result = max(
- state.minimum_transmit_rate,
- self.expand_down(
- pdr_rel_width, self.doublings, pdr_lo.target_tr))
- logging.info("pdr lo external %s", result)
+ state.minimum_transmit_rate, self.expand_down(
+ pdr_rel_width, self.doublings, pdr_lo.target_tr
+ )
+ )
+ logging.info(f"pdr lo external {result}")
elif pdr_lo.duration < state.duration:
result = state.minimum_transmit_rate
- logging.info("pdr lo minimal re-measure")
+ logging.info(u"pdr lo minimal re-measure")
if result is None and ndr_hi.loss_fraction <= 0.0:
if ndr_hi.target_tr < state.maximum_transmit_rate:
result = min(
- state.maximum_transmit_rate,
- self.expand_up(
- ndr_rel_width, self.doublings, ndr_hi.target_tr))
- logging.info("ndr hi external %s", result)
+ state.maximum_transmit_rate, self.expand_up(
+ ndr_rel_width, self.doublings, ndr_hi.target_tr
+ )
+ )
+ logging.info(f"ndr hi external {result}")
elif ndr_hi.duration < state.duration:
result = state.maximum_transmit_rate
- logging.info("ndr hi maximal re-measure")
+ logging.info(u"ndr hi maximal re-measure")
if result is None and pdr_hi.loss_fraction <= state.packet_loss_ratio:
if pdr_hi.target_tr < state.maximum_transmit_rate:
result = min(
- state.maximum_transmit_rate,
- self.expand_up(
- pdr_rel_width, self.doublings, pdr_hi.target_tr))
- logging.info("pdr hi external %s", result)
+ state.maximum_transmit_rate, self.expand_up(
+ pdr_rel_width, self.doublings, pdr_hi.target_tr
+ )
+ )
+ logging.info(f"pdr hi external {result}")
elif pdr_hi.duration < state.duration:
result = state.maximum_transmit_rate
- logging.info("ndr hi maximal re-measure")
+ logging.info(u"ndr hi maximal re-measure")
return result
- def _ndrpdr_width_goal(self, state, ndr_lo, pdr_lo,
- ndr_rel_width, pdr_rel_width):
+ def _ndrpdr_width_goal(
+ self, state, ndr_lo, pdr_lo, ndr_rel_width, pdr_rel_width):
"""Perform width_goal-based trials within a ndrpdr phase
:param state: current state
@@ -573,18 +594,19 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
# We have to narrow NDR width first, as NDR internal search
# can invalidate PDR (but not vice versa).
result = self.half_step_up(ndr_rel_width, ndr_lo.target_tr)
- logging.info("Bisecting for NDR at %s", result)
+ logging.info(f"Bisecting for NDR at {result}")
elif pdr_rel_width > state.width_goal:
- # PDR iternal search.
+ # PDR internal search.
result = self.half_step_up(pdr_rel_width, pdr_lo.target_tr)
- logging.info("Bisecting for PDR at %s", result)
+ logging.info(f"Bisecting for PDR at {result}")
else:
result = None
return result
@staticmethod
- def _ndrpdr_duration(state, ndr_lo, pdr_lo, ndr_hi, pdr_hi,
- ndr_rel_width, pdr_rel_width):
+ def _ndrpdr_duration(
+ state, ndr_lo, pdr_lo, ndr_hi, pdr_hi, ndr_rel_width,
+ pdr_rel_width):
"""Perform duration-based trials within a ndrpdr phase
:param state: current state
@@ -608,18 +630,18 @@ class MultipleLossRatioSearch(AbstractSearchAlgorithm):
# creating invalid bounds to resolve (thus broadening width).
if ndr_lo.duration < state.duration:
result = ndr_lo.target_tr
- logging.info("re-measuring NDR lower bound")
+ logging.info(u"re-measuring NDR lower bound")
elif pdr_lo.duration < state.duration:
result = pdr_lo.target_tr
- logging.info("re-measuring PDR lower bound")
+ logging.info(u"re-measuring PDR lower bound")
# Except when lower bounds have high loss fraction, in that case
# we do not need to re-measure _upper_ bounds.
elif ndr_hi.duration < state.duration and ndr_rel_width > 0.0:
result = ndr_hi.target_tr
- logging.info("re-measuring NDR upper bound")
+ logging.info(u"re-measuring NDR upper bound")
elif pdr_hi.duration < state.duration and pdr_rel_width > 0.0:
result = pdr_hi.target_tr
- logging.info("re-measuring PDR upper bound")
+ logging.info(u"re-measuring PDR upper bound")
else:
result = None
return result
diff --git a/resources/libraries/python/MLRsearch/NdrPdrResult.py b/resources/libraries/python/MLRsearch/NdrPdrResult.py
index 7b8cfd6449..3454ef1957 100644
--- a/resources/libraries/python/MLRsearch/NdrPdrResult.py
+++ b/resources/libraries/python/MLRsearch/NdrPdrResult.py
@@ -13,11 +13,10 @@
"""Module defining NdrPdrResult class."""
-from resources.libraries.python.MLRsearch.ReceiveRateInterval \
- import ReceiveRateInterval
+from .ReceiveRateInterval import ReceiveRateInterval
-class NdrPdrResult(object):
+class NdrPdrResult:
"""Two measurement intervals, return value of search algorithms.
Partial fraction is NOT part of the result. Pdr interval should be valid
@@ -34,11 +33,13 @@ class NdrPdrResult(object):
# TODO: Type checking is not very pythonic,
# perhaps users can fix wrong usage without it?
if not isinstance(ndr_interval, ReceiveRateInterval):
- raise TypeError("ndr_interval, is not a ReceiveRateInterval: "
- "{ndr!r}".format(ndr=ndr_interval))
+ raise TypeError(
+ f"ndr_interval, is not a ReceiveRateInterval: {ndr_interval!r}"
+ )
if not isinstance(pdr_interval, ReceiveRateInterval):
- raise TypeError("pdr_interval, is not a ReceiveRateInterval: "
- "{pdr!r}".format(pdr=pdr_interval))
+ raise TypeError(
+ f"pdr_interval, is not a ReceiveRateInterval: {pdr_interval!r}"
+ )
self.ndr_interval = ndr_interval
self.pdr_interval = pdr_interval
@@ -51,16 +52,14 @@ class NdrPdrResult(object):
:returns: Message containing NDR and PDR widths in goals.
:rtype: str
"""
- return "ndr {ndr_in_goals}; pdr {pdr_in_goals}".format(
- ndr_in_goals=self.ndr_interval.width_in_goals(relative_width_goal),
- pdr_in_goals=self.pdr_interval.width_in_goals(relative_width_goal))
+ return f"ndr {self.ndr_interval.width_in_goals(relative_width_goal)};" \
+ f" pdr {self.pdr_interval.width_in_goals(relative_width_goal)}"
def __str__(self):
"""Return string as tuple of named values."""
- return "NDR={ndr!s};PDR={pdr!s}".format(
- ndr=self.ndr_interval, pdr=self.pdr_interval)
+ return f"NDR={self.ndr_interval!s};PDR={self.pdr_interval!s}"
def __repr__(self):
"""Return string evaluable as a constructor call."""
- return "NdrPdrResult(ndr_interval={ndr!r},pdr_interval={pdr!r})".format(
- ndr=self.ndr_interval, pdr=self.pdr_interval)
+ return f"NdrPdrResult(ndr_interval={self.ndr_interval!r}," \
+ f"pdr_interval={self.pdr_interval!r})"
diff --git a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py b/resources/libraries/python/MLRsearch/ReceiveRateInterval.py
index ec3cbb7462..eff23e8bcc 100644
--- a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py
+++ b/resources/libraries/python/MLRsearch/ReceiveRateInterval.py
@@ -15,11 +15,10 @@
import math
-from resources.libraries.python.MLRsearch.ReceiveRateMeasurement \
- import ReceiveRateMeasurement
+from .ReceiveRateMeasurement import ReceiveRateMeasurement
-class ReceiveRateInterval(object):
+class ReceiveRateInterval:
"""Structure defining two Rr measurements, and their relation."""
def __init__(self, measured_low, measured_high):
@@ -33,11 +32,15 @@ class ReceiveRateInterval(object):
# TODO: Type checking is not very pythonic,
# perhaps users can fix wrong usage without it?
if not isinstance(measured_low, ReceiveRateMeasurement):
- raise TypeError("measured_low is not a ReceiveRateMeasurement: "
- "{low!r}".format(low=measured_low))
+ raise TypeError(
+ f"measured_low is not a ReceiveRateMeasurement: "
+ f"{measured_low!r}"
+ )
if not isinstance(measured_high, ReceiveRateMeasurement):
- raise TypeError("measured_high is not a ReceiveRateMeasurement: "
- "{high!r}".format(high=measured_high))
+ raise TypeError(
+ f"measured_high is not a ReceiveRateMeasurement: "
+ f"{measured_high!r}"
+ )
self.measured_low = measured_low
self.measured_high = measured_high
# Declare secondary quantities to appease pylint.
@@ -51,9 +54,11 @@ class ReceiveRateInterval(object):
"""Sort bounds by target Tr, compute secondary quantities."""
if self.measured_low.target_tr > self.measured_high.target_tr:
self.measured_low, self.measured_high = (
- self.measured_high, self.measured_low)
+ self.measured_high, self.measured_low
+ )
self.abs_tr_width = (
- self.measured_high.target_tr - self.measured_low.target_tr)
+ self.measured_high.target_tr - self.measured_low.target_tr
+ )
self.rel_tr_width = self.abs_tr_width / self.measured_high.target_tr
def width_in_goals(self, relative_width_goal):
@@ -75,11 +80,9 @@ class ReceiveRateInterval(object):
def __str__(self):
"""Return string as half-open interval."""
- return "[{low!s};{high!s})".format(
- low=self.measured_low, high=self.measured_high)
+ return f"[{self.measured_low!s};{self.measured_high!s})"
def __repr__(self):
"""Return string evaluable as a constructor call."""
- return ("ReceiveRateInterval(measured_low={low!r}"
- ",measured_high={high!r})".format(
- low=self.measured_low, high=self.measured_high))
+ return f"ReceiveRateInterval(measured_low={self.measured_low!r}," \
+ f"measured_high={self.measured_high!r})"
diff --git a/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py b/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py
index d052ebd3bf..31a6f8202e 100644
--- a/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py
+++ b/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -14,7 +14,7 @@
"""Module defining ReceiveRateMeasurement class."""
-class ReceiveRateMeasurement(object):
+class ReceiveRateMeasurement:
"""Structure defining the result of single Rr measurement."""
def __init__(self, duration, target_tr, transmit_count, loss_count):
@@ -43,12 +43,12 @@ class ReceiveRateMeasurement(object):
def __str__(self):
"""Return string reporting input and loss fraction."""
- return "d={dur!s},Tr={rate!s},Df={frac!s}".format(
- dur=self.duration, rate=self.target_tr, frac=self.loss_fraction)
+ return f"d={self.duration!s},Tr={self.target_tr!s}," \
+ f"Df={self.loss_fraction!s}"
def __repr__(self):
"""Return string evaluable as a constructor call."""
- return ("ReceiveRateMeasurement(duration={dur!r},target_tr={rate!r}"
- ",transmit_count={trans!r},loss_count={loss!r})".format(
- dur=self.duration, rate=self.target_tr,
- trans=self.transmit_count, loss=self.loss_count))
+ return f"ReceiveRateMeasurement(duration={self.duration!r}," \
+ f"target_tr={self.target_tr!r}," \
+ f"transmit_count={self.transmit_count!r}," \
+ f"loss_count={self.loss_count!r})"
diff --git a/resources/libraries/python/Memif.py b/resources/libraries/python/Memif.py
index 24fda52677..2128d30428 100644
--- a/resources/libraries/python/Memif.py
+++ b/resources/libraries/python/Memif.py
@@ -15,6 +15,7 @@
from enum import IntEnum
+
from robot.api import logger
from resources.libraries.python.topology import NodeType, Topology
@@ -27,7 +28,7 @@ class MemifRole(IntEnum):
SLAVE = 1
-class Memif(object):
+class Memif:
"""Memif interface class"""
def __init__(self):
@@ -42,18 +43,18 @@ class Memif(object):
:returns: List of memif interfaces extracted from Papi response.
:rtype: list
"""
- cmd = "memif_dump"
+ cmd = u"memif_dump"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details()
for memif in details:
- memif["hw_addr"] = str(memif["hw_addr"])
- memif["role"] = memif["role"].value
- memif["mode"] = memif["mode"].value
- memif["flags"] = memif["flags"].value \
- if hasattr(memif["flags"], 'value') else int(memif["flags"])
+ memif[u"hw_addr"] = str(memif[u"hw_addr"])
+ memif[u"role"] = memif[u"role"].value
+ memif[u"mode"] = memif[u"mode"].value
+ memif[u"flags"] = memif[u"flags"].value \
+ if hasattr(memif[u"flags"], u"value") else int(memif[u"flags"])
- logger.debug("MEMIF details:\n{details}".format(details=details))
+ logger.debug(f"MEMIF details:\n{details}")
return details
@@ -73,13 +74,12 @@ class Memif(object):
includes only retval.
:rtype: dict
"""
- cmd = 'memif_socket_filename_add_del'
- err_msg = 'Failed to create memif socket on host {host}'.format(
- host=node['host'])
+ cmd = u"memif_socket_filename_add_del"
+ err_msg = f"Failed to create memif socket on host {node[u'host']}"
args = dict(
is_add=is_add,
socket_id=int(sid),
- socket_filename=str('/tmp/' + filename)
+ socket_filename=str(u"/tmp/" + filename)
)
with PapiSocketExecutor(node) as papi_exec:
return papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -103,23 +103,23 @@ class Memif(object):
:returns: sw_if_index
:rtype: int
"""
- cmd = 'memif_create'
- err_msg = 'Failed to create memif interface on host {host}'.format(
- host=node['host'])
+ cmd = u"memif_create"
+ err_msg = f"Failed to create memif interface on host {node[u'host']}"
args = dict(
role=role,
rx_queues=int(rxq),
tx_queues=int(txq),
socket_id=int(sid),
id=int(mid),
- secret=""
+ secret=u""
)
+
with PapiSocketExecutor(node) as papi_exec:
return papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
@staticmethod
- def create_memif_interface(node, filename, mid, sid, rxq=1, txq=1,
- role="SLAVE"):
+ def create_memif_interface(
+ node, filename, mid, sid, rxq=1, txq=1, role=u"SLAVE"):
"""Create Memif interface on the given node.
:param node: Given node to create Memif interface on.
@@ -140,7 +140,6 @@ class Memif(object):
:rtype: int
:raises ValueError: If command 'create memif' fails.
"""
-
role = getattr(MemifRole, role.upper()).value
# Create socket
@@ -148,10 +147,11 @@ class Memif(object):
# Create memif
sw_if_index = Memif._memif_create(
- node, mid, sid, rxq=rxq, txq=txq, role=role)
+ node, mid, sid, rxq=rxq, txq=txq, role=role
+ )
# Update Topology
- if_key = Topology.add_new_port(node, 'memif')
+ if_key = Topology.add_new_port(node, u"memif")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = Memif.vpp_get_memif_interface_name(node, sw_if_index)
@@ -160,7 +160,9 @@ class Memif(object):
ifc_mac = Memif.vpp_get_memif_interface_mac(node, sw_if_index)
Topology.update_interface_mac_address(node, if_key, ifc_mac)
- Topology.update_interface_memif_socket(node, if_key, '/tmp/' + filename)
+ Topology.update_interface_memif_socket(
+ node, if_key, u"/tmp/" + filename
+ )
Topology.update_interface_memif_id(node, if_key, mid)
Topology.update_interface_memif_role(node, if_key, str(role))
@@ -173,7 +175,6 @@ class Memif(object):
:param node: Given node to show Memif data on.
:type node: dict
"""
-
Memif._memif_details(node)
@staticmethod
@@ -184,7 +185,7 @@ class Memif(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
Memif.show_memif(node)
@staticmethod
@@ -198,12 +199,11 @@ class Memif(object):
:returns: Memif interface name, or None if not found.
:rtype: str
"""
-
details = Memif._memif_details(node)
for memif in details:
- if memif["sw_if_index"] == sw_if_index:
- return memif["if_name"]
+ if memif[u"sw_if_index"] == sw_if_index:
+ return memif[u"if_name"]
return None
@staticmethod
@@ -217,10 +217,9 @@ class Memif(object):
:returns: Memif interface MAC address, or None if not found.
:rtype: str
"""
-
details = Memif._memif_details(node)
for memif in details:
- if memif["sw_if_index"] == sw_if_index:
- return memif["hw_addr"]
+ if memif[u"sw_if_index"] == sw_if_index:
+ return memif[u"hw_addr"]
return None
diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py
index f018d38335..2d5c1c7b76 100644
--- a/resources/libraries/python/NATUtil.py
+++ b/resources/libraries/python/NATUtil.py
@@ -15,7 +15,6 @@
from pprint import pformat
from socket import AF_INET, inet_pton
-
from enum import IntEnum
from robot.api import logger
@@ -37,7 +36,7 @@ class NATConfigFlags(IntEnum):
NAT_IS_EXT_HOST_VALID = 0x80
-class NATUtil(object):
+class NATUtil:
"""This class defines the methods to set NAT."""
def __init__(self):
@@ -54,28 +53,29 @@ class NATUtil(object):
:type int_in: str
:type int_out: str
"""
-
- cmd = 'nat44_interface_add_del_feature'
+ cmd = u"nat44_interface_add_del_feature"
int_in_idx = InterfaceUtil.get_sw_if_index(node, int_in)
- err_msg = 'Failed to set inside interface {int} for NAT44 on host ' \
- '{host}'.format(int=int_in, host=node['host'])
+ err_msg = f"Failed to set inside interface {int_in} for NAT44 " \
+ f"on host {node[u'host']}"
args_in = dict(
sw_if_index=int_in_idx,
is_add=1,
- flags=getattr(NATConfigFlags, "NAT_IS_INSIDE").value
+ flags=getattr(NATConfigFlags, u"NAT_IS_INSIDE").value
)
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args_in).get_reply(err_msg)
int_out_idx = InterfaceUtil.get_sw_if_index(node, int_out)
- err_msg = 'Failed to set outside interface {int} for NAT44 on host ' \
- '{host}'.format(int=int_out, host=node['host'])
+ err_msg = f"Failed to set outside interface {int_out} for NAT44 " \
+ f"on host {node[u'host']}"
args_in = dict(
sw_if_index=int_out_idx,
is_add=1,
- flags=getattr(NATConfigFlags, "NAT_IS_OUTSIDE").value
+ flags=getattr(NATConfigFlags, u"NAT_IS_OUTSIDE").value
)
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args_in).get_reply(err_msg)
@@ -94,10 +94,9 @@ class NATUtil(object):
:type ip_out: str
:type subnet_out: str or int
"""
-
- cmd = 'nat_det_add_del_map'
- err_msg = 'Failed to set deterministic behaviour of NAT on host ' \
- '{host}'.format(host=node['host'])
+ cmd = u"nat_det_add_del_map"
+ err_msg = f"Failed to set deterministic behaviour of NAT " \
+ f"on host {node[u'host']}"
args_in = dict(
is_add=True,
in_addr=inet_pton(AF_INET, str(ip_in)),
@@ -105,6 +104,7 @@ class NATUtil(object):
out_addr=inet_pton(AF_INET, str(ip_out)),
out_plen=int(subnet_out)
)
+
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args_in).get_reply(err_msg)
@@ -127,22 +127,22 @@ class NATUtil(object):
:param node: DUT node.
:type node: dict
"""
+ cmd = u"nat_show_config"
+ err_msg = f"Failed to get NAT configuration on host {node[u'host']}"
- cmd = 'nat_show_config'
- err_msg = 'Failed to get NAT configuration on host {host}'.\
- format(host=node['host'])
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
- logger.debug("NAT Configuration:\n{reply}".format(reply=pformat(reply)))
+
+ logger.debug(f"NAT Configuration:\n{pformat(reply)}")
cmds = [
- "nat_worker_dump",
- "nat44_interface_addr_dump",
- "nat44_address_dump",
- "nat44_static_mapping_dump",
- "nat44_user_dump",
- "nat44_interface_dump",
- "nat44_user_session_dump",
- "nat_det_map_dump"
+ u"nat_worker_dump",
+ u"nat44_interface_addr_dump",
+ u"nat44_address_dump",
+ u"nat44_static_mapping_dump",
+ u"nat44_user_dump",
+ u"nat44_interface_dump",
+ u"nat44_user_session_dump",
+ u"nat_det_map_dump"
]
PapiSocketExecutor.dump_and_log(node, cmds)
diff --git a/resources/libraries/python/Namespaces.py b/resources/libraries/python/Namespaces.py
index 00d615350e..2618f3d19b 100644
--- a/resources/libraries/python/Namespaces.py
+++ b/resources/libraries/python/Namespaces.py
@@ -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:
@@ -16,7 +16,7 @@
from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
-class Namespaces(object):
+class Namespaces:
"""Linux namespace utilities."""
def __init__(self):
self._namespaces = []
@@ -29,7 +29,8 @@ class Namespaces(object):
:type node: dict
:type namespace_name: str
"""
- cmd = ('ip netns add {0}'.format(namespace_name))
+ cmd = f"ip netns add {namespace_name}"
+
exec_cmd_no_error(node, cmd, sudo=True)
self._namespaces.append(namespace_name)
@@ -45,17 +46,19 @@ class Namespaces(object):
:type interface: str
:raises RuntimeError: Interface could not be attached.
"""
- cmd = 'ip link set {0} netns {1}'.format(interface, namespace)
- (ret_code, _, stderr) = exec_cmd(node, cmd, timeout=5, sudo=True)
+ cmd = f"ip link set {interface} netns {namespace}"
+
+ ret_code, _, stderr = exec_cmd(node, cmd, timeout=5, sudo=True)
if ret_code != 0:
- raise RuntimeError(
- 'Could not attach interface, reason:{}'.format(stderr))
- cmd = 'ip netns exec {} ip link set {} up'.format(
- namespace, interface)
- (ret_code, _, stderr) = exec_cmd(node, cmd, timeout=5, sudo=True)
+ raise RuntimeError(f"Could not attach interface, reason:\n{stderr}")
+
+ cmd = f"ip netns exec {namespace} ip link set {interface} up"
+
+ ret_code, _, stderr = exec_cmd(node, cmd, timeout=5, sudo=True)
if ret_code != 0:
raise RuntimeError(
- 'Could not set interface state, reason:{}'.format(stderr))
+ f"Could not set interface state, reason:\n{stderr}"
+ )
@staticmethod
def create_bridge_for_int_in_namespace(
@@ -71,14 +74,15 @@ class Namespaces(object):
:type bridge_name: str
:type interfaces: list
"""
- cmd = 'ip netns exec {} brctl addbr {}'.format(namespace, bridge_name)
+ cmd = f"ip netns exec {namespace} brctl addbr {bridge_name}"
exec_cmd_no_error(node, cmd, sudo=True)
+
for interface in interfaces:
- cmd = 'ip netns exec {} brctl addif {} {}'.format(
- namespace, bridge_name, interface)
+ cmd = f"ip netns exec {namespace} brctl addif {bridge_name} " \
+ f"{interface}"
exec_cmd_no_error(node, cmd, sudo=True)
- cmd = 'ip netns exec {} ip link set dev {} up'.format(
- namespace, bridge_name)
+
+ cmd = f"ip netns exec {namespace} ip link set dev {bridge_name} up"
exec_cmd_no_error(node, cmd, sudo=True)
def clean_up_namespaces(self, node):
@@ -89,8 +93,8 @@ class Namespaces(object):
:raises RuntimeError: Namespaces could not be cleaned properly.
"""
for namespace in self._namespaces:
- print "Cleaning namespace {}".format(namespace)
- cmd = 'ip netns delete {}'.format(namespace)
- (ret_code, _, _) = exec_cmd(node, cmd, timeout=5, sudo=True)
+ print(f"Cleaning namespace {namespace}")
+ cmd = f"ip netns delete {namespace}"
+ ret_code, _, _ = exec_cmd(node, cmd, timeout=5, sudo=True)
if ret_code != 0:
- raise RuntimeError('Could not delete namespace')
+ raise RuntimeError(u"Could not delete namespace")
diff --git a/resources/libraries/python/NodePath.py b/resources/libraries/python/NodePath.py
index ec84a8b08b..e97bde87ad 100644
--- a/resources/libraries/python/NodePath.py
+++ b/resources/libraries/python/NodePath.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,7 +16,7 @@
from resources.libraries.python.topology import Topology
-class NodePath(object):
+class NodePath:
"""Path utilities for nodes in the topology.
:Example:
@@ -103,7 +103,7 @@ class NodePath(object):
"""
nodes = self._nodes
if len(nodes) < 2:
- raise RuntimeError('Not enough nodes to compute path')
+ raise RuntimeError(u"Not enough nodes to compute path")
for idx in range(0, len(nodes) - 1):
topo = Topology()
@@ -111,12 +111,14 @@ class NodePath(object):
node2 = nodes[idx + 1]
n1_list = self._nodes_filter[idx]
n2_list = self._nodes_filter[idx + 1]
- links = topo.get_active_connecting_links(node1, node2,
- filter_list_node1=n1_list,
- filter_list_node2=n2_list)
+ links = topo.get_active_connecting_links(
+ node1, node2, filter_list_node1=n1_list,
+ filter_list_node2=n2_list
+ )
if not links:
- raise RuntimeError('No link between {0} and {1}'.format(
- node1['host'], node2['host']))
+ raise RuntimeError(
+ f"No link between {node1[u'host']} and {node2[u'host']}"
+ )
if always_same_link:
l_set = set(links).intersection(self._links)
@@ -124,8 +126,9 @@ class NodePath(object):
l_set = set(links).difference(self._links)
if not l_set:
raise RuntimeError(
- 'No free link between {0} and {1}, all links already '
- 'used'.format(node1['host'], node2['host']))
+ f"No free link between {node1[u'host']} and "
+ f"{node2[u'host']}, all links already used"
+ )
if not l_set:
link = links.pop()
@@ -162,7 +165,7 @@ class NodePath(object):
.. note:: Call compute_path before.
"""
if not self._path:
- raise RuntimeError('No path for topology')
+ raise RuntimeError(u"No path for topology")
return self._path[0]
def last_interface(self):
@@ -174,7 +177,7 @@ class NodePath(object):
.. note:: Call compute_path before.
"""
if not self._path:
- raise RuntimeError('No path for topology')
+ raise RuntimeError(u"No path for topology")
return self._path[-1]
def first_ingress_interface(self):
@@ -186,7 +189,7 @@ class NodePath(object):
.. note:: Call compute_path before.
"""
if not self._path:
- raise RuntimeError('No path for topology')
+ raise RuntimeError(u"No path for topology")
return self._path[1]
def last_egress_interface(self):
@@ -198,5 +201,5 @@ class NodePath(object):
.. note:: Call compute_path before.
"""
if not self._path:
- raise RuntimeError('No path for topology')
+ raise RuntimeError(u"No path for topology")
return self._path[-2]
diff --git a/resources/libraries/python/OptionString.py b/resources/libraries/python/OptionString.py
index 7163d057ec..9a30d37b9a 100644
--- a/resources/libraries/python/OptionString.py
+++ b/resources/libraries/python/OptionString.py
@@ -14,10 +14,10 @@
"""Utility function for handling options without doubled or trailing spaces."""
-class OptionString(object):
+class OptionString:
"""Class serving as a builder for option strings.
- Motivation: Both manual contatenation and .join() methods
+ Motivation: Both manual concatenation and .join() methods
are prone to leaving superfluous spaces if some parts of options
are optional (missing, empty).
@@ -36,7 +36,7 @@ class OptionString(object):
the best fitting one, without much logic near the call site.
"""
- def __init__(self, parts=tuple(), prefix=""):
+ def __init__(self, parts=tuple(), prefix=u""):
"""Create instance with listed strings as parts to use.
Prefix will be converted to string and stripped.
@@ -44,8 +44,8 @@ class OptionString(object):
TODO: Support users calling with parts being a string?
- :param parts: List of of stringifiable objects to become parts.
- :param prefix: Subtring to prepend to every parameter (not value).
+ :param parts: List of stringifiable objects to become parts.
+ :param prefix: Substring to prepend to every parameter (not value).
:type parts: Iterable of object
:type prefix: object
"""
@@ -58,8 +58,7 @@ class OptionString(object):
:returns: Executable constructor call as string.
:rtype: str
"""
- return "OptionString(parts={parts!r},prefix={prefix!r})".format(
- parts=self.parts, prefix=self.prefix)
+ return f"OptionString(parts={self.parts!r},prefix={self.prefix!r})"
# TODO: Would we ever need a copy() method?
# Currently, superstring "master" is mutable but unique,
@@ -106,7 +105,7 @@ class OptionString(object):
:returns: The converted part without prefix, empty means not added.
:rtype: str
"""
- part = "" if part is None else str(part).strip()
+ part = u"" if part is None else str(part).strip()
if part:
prefixed_part = self.prefix + part if prefixed else part
self.parts.append(prefixed_part)
@@ -120,7 +119,7 @@ class OptionString(object):
Parameter is prefixed before adding.
:param parameter: Parameter object, usually a word starting with dash.
- :type variable: object
+ :type parameter: object
:returns: Self, to enable method chaining.
:rtype: OptionString
"""
@@ -137,7 +136,7 @@ class OptionString(object):
:param parameter: Parameter object, usually a word starting with dash.
:param condition: Do not add if truth value of this is false.
- :type variable: object
+ :type parameter: object
:type condition: object
:returns: Self, to enable method chaining.
:rtype: OptionString
@@ -155,7 +154,7 @@ class OptionString(object):
:param parameter: Parameter object, usually a word starting with dash.
:param value: Value object. Prefix is never added.
- :type variable: object
+ :type parameter: object
:type value: object
:returns: Self, to enable method chaining.
:rtype: OptionString
@@ -178,7 +177,7 @@ class OptionString(object):
:param parameter: Parameter object, usually a word starting with dash.
:param value: Value object. Prefix is never added.
- :type variable: object
+ :type parameter: object
:type value: object
:returns: Self, to enable method chaining.
:rtype: OptionString
@@ -187,7 +186,7 @@ class OptionString(object):
# pylint: disable=protected-access
if temp._check_and_add(parameter, prefixed=True):
if temp._check_and_add(value, prefixed=False):
- self.parts.append("=".join(temp.parts))
+ self.parts.append(u"=".join(temp.parts))
return self
def add_with_value_if(self, parameter, value, condition):
@@ -201,7 +200,7 @@ class OptionString(object):
:param parameter: Parameter object, usually a word starting with dash.
:param value: Value object. Prefix is never added.
:param condition: Do not add if truth value of this is false.
- :type variable: object
+ :type parameter: object
:type value: object
:type condition: object
:returns: Self, to enable method chaining.
@@ -222,7 +221,7 @@ class OptionString(object):
:param parameter: Parameter object, usually a word starting with dash.
:param value: Value object. Prefix is never added.
:param condition: Do not add if truth value of this is false.
- :type variable: object
+ :type parameter: object
:type value: object
:type condition: object
:returns: Self, to enable method chaining.
@@ -232,7 +231,7 @@ class OptionString(object):
self.add_equals(parameter, value)
return self
- def add_with_value_from_dict(self, parameter, key, mapping, default=""):
+ def add_with_value_from_dict(self, parameter, key, mapping, default=u""):
"""Add parameter with value from dict under key, or default.
If key is missing, default is used as value.
@@ -254,7 +253,7 @@ class OptionString(object):
value = mapping.get(key, default)
return self.add_with_value(parameter, value)
- def add_equals_from_dict(self, parameter, key, mapping, default=""):
+ def add_equals_from_dict(self, parameter, key, mapping, default=u""):
"""Add parameter=value to options where value is from dict.
If key is missing, default is used as value.
@@ -276,7 +275,7 @@ class OptionString(object):
value = mapping.get(key, default)
return self.add_equals(parameter, value)
- def add_if_from_dict(self, parameter, key, mapping, default="False"):
+ def add_if_from_dict(self, parameter, key, mapping, default=u"False"):
"""Add parameter based on if the condition in dict is true.
If key is missing, default is used as condition.
@@ -300,7 +299,7 @@ class OptionString(object):
return self.add_if(parameter, condition)
def add_with_value_if_from_dict(
- self, parameter, value, key, mapping, default="False"):
+ self, parameter, value, key, mapping, default=u"False"):
"""Add parameter and value based on condition in dict.
If key is missing, default is used as condition.
@@ -326,7 +325,7 @@ class OptionString(object):
return self.add_with_value_if(parameter, value, condition)
def add_equals_if_from_dict(
- self, parameter, value, key, mapping, default="False"):
+ self, parameter, value, key, mapping, default=u"False"):
"""Add parameter=value based on condition in dict.
If key is missing, default is used as condition.
@@ -361,4 +360,4 @@ class OptionString(object):
:returns: Space separated string of options.
:rtype: str
"""
- return " ".join(self.parts)
+ return u" ".join(self.parts)
diff --git a/resources/libraries/python/PLRsearch/Integrator.py b/resources/libraries/python/PLRsearch/Integrator.py
index 86181eaa56..331bd8475b 100644
--- a/resources/libraries/python/PLRsearch/Integrator.py
+++ b/resources/libraries/python/PLRsearch/Integrator.py
@@ -23,6 +23,7 @@ import copy
import traceback
import dill
+
from numpy import random
# TODO: Teach FD.io CSIT to use multiple dirs in PYTHONPATH,
@@ -58,7 +59,7 @@ def try_estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
# so we have to catch them all.
traceback_string = traceback.format_exc()
communication_pipe.send(traceback_string)
- # After sendig, re-raise, so usages other than "one process per call"
+ # After sending, re-raise, so usages other than "one process per call"
# keep behaving correctly.
raise
@@ -86,7 +87,8 @@ def generate_sample(averages, covariance_matrix, dimension, scale_coeff):
covariance_matrix[first][second] *= scale_coeff
while 1:
sample_point = random.multivariate_normal(
- averages, covariance_matrix, 1)[0].tolist()
+ averages, covariance_matrix, 1
+ )[0].tolist()
# Multivariate Gauss can fall outside (-1, 1) interval
for first in range(dimension):
sample_coordinate = sample_point[first]
@@ -187,14 +189,15 @@ def estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
:raises numpy.linalg.LinAlgError: If the focus shape gets singular
(due to rounding errors). Try changing scale_coeff.
"""
-
debug_list = list()
trace_list = list()
# Block until input object appears.
dimension, dilled_function, param_focus_tracker, max_samples = (
- communication_pipe.recv())
- debug_list.append("Called with param_focus_tracker {tracker!r}"
- .format(tracker=param_focus_tracker))
+ communication_pipe.recv()
+ )
+ debug_list.append(
+ f"Called with param_focus_tracker {param_focus_tracker!r}"
+ )
def trace(name, value):
"""
@@ -210,7 +213,7 @@ def estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
:type value: object
"""
if trace_enabled:
- trace_list.append(name + " " + repr(value))
+ trace_list.append(f"{name} {value!r}")
value_logweight_function = dill.loads(dilled_function)
samples = 0
@@ -235,33 +238,39 @@ def estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
break
sample_point = generate_sample(
param_focus_tracker.averages, param_focus_tracker.covariance_matrix,
- dimension, scale_coeff)
- trace("sample_point", sample_point)
+ dimension, scale_coeff
+ )
+ trace(u"sample_point", sample_point)
samples += 1
- trace("samples", samples)
+ trace(u"samples", samples)
value, log_weight = value_logweight_function(trace, *sample_point)
- trace("value", value)
- trace("log_weight", log_weight)
- trace("focus tracker before adding", param_focus_tracker)
+ trace(u"value", value)
+ trace(u"log_weight", log_weight)
+ trace(u"focus tracker before adding", param_focus_tracker)
# Update focus related statistics.
param_distance = param_focus_tracker.add_without_dominance_get_distance(
- sample_point, log_weight)
+ sample_point, log_weight
+ )
# The code above looked at weight (not importance).
# The code below looks at importance (not weight).
log_rarity = param_distance / 2.0
- trace("log_rarity", log_rarity)
+ trace(u"log_rarity", log_rarity)
log_importance = log_weight + log_rarity
- trace("log_importance", log_importance)
+ trace(u"log_importance", log_importance)
value_tracker.add(value, log_importance)
# Update sampled statistics.
param_sampled_tracker.add_get_shift(sample_point, log_importance)
- debug_list.append("integrator used " + str(samples) + " samples")
- debug_list.append(" ".join([
- "value_avg", str(value_tracker.average),
- "param_sampled_avg", repr(param_sampled_tracker.averages),
- "param_sampled_cov", repr(param_sampled_tracker.covariance_matrix),
- "value_log_variance", str(value_tracker.log_variance),
- "value_log_secondary_variance",
- str(value_tracker.secondary.log_variance)]))
+ debug_list.append(f"integrator used {samples!s} samples")
+ debug_list.append(
+ u" ".join([
+ u"value_avg", str(value_tracker.average),
+ u"param_sampled_avg", repr(param_sampled_tracker.averages),
+ u"param_sampled_cov", repr(param_sampled_tracker.covariance_matrix),
+ u"value_log_variance", str(value_tracker.log_variance),
+ u"value_log_secondary_variance",
+ str(value_tracker.secondary.log_variance)
+ ])
+ )
communication_pipe.send(
- (value_tracker, param_focus_tracker, debug_list, trace_list, samples))
+ (value_tracker, param_focus_tracker, debug_list, trace_list, samples)
+ )
diff --git a/resources/libraries/python/PLRsearch/PLRsearch.py b/resources/libraries/python/PLRsearch/PLRsearch.py
index b7c9344391..e20d293d3c 100644
--- a/resources/libraries/python/PLRsearch/PLRsearch.py
+++ b/resources/libraries/python/PLRsearch/PLRsearch.py
@@ -17,20 +17,22 @@ import logging
import math
import multiprocessing
import time
+
from collections import namedtuple
import dill
+
from scipy.special import erfcx, erfc
# TODO: Teach FD.io CSIT to use multiple dirs in PYTHONPATH,
# then switch to absolute imports within PLRsearch package.
# Current usage of relative imports is just a short term workaround.
from . import Integrator
-from .log_plus import log_plus, log_minus
from . import stat_trackers
+from .log_plus import log_plus, log_minus
-class PLRsearch(object):
+class PLRsearch:
"""A class to encapsulate data relevant for the search method.
The context is performance testing of packet processing systems.
@@ -41,7 +43,7 @@ class PLRsearch(object):
Two constants are stored as class fields for speed.
- Method othed than search (and than __init__)
+ Method other than search (and than __init__)
are just internal code structure.
TODO: Those method names should start with underscore then.
@@ -168,20 +170,23 @@ class PLRsearch(object):
stop_time = time.time() + self.timeout
min_rate = float(min_rate)
max_rate = float(max_rate)
- logging.info("Started search with min_rate %(min)r, max_rate %(max)r",
- {"min": min_rate, "max": max_rate})
+ logging.info(
+ f"Started search with min_rate {min_rate!r}, "
+ f"max_rate {max_rate!r}"
+ )
trial_result_list = list()
trial_number = self.trial_number_offset
focus_trackers = (None, None)
transmit_rate = (min_rate + max_rate) / 2.0
lossy_loads = [max_rate]
- zeros = 0 # How many cosecutive zero loss results are happening.
+ zeros = 0 # How many consecutive zero loss results are happening.
while 1:
trial_number += 1
- logging.info("Trial %(number)r", {"number": trial_number})
+ logging.info(f"Trial {trial_number!r}")
results = self.measure_and_compute(
self.trial_duration_per_trial * trial_number, transmit_rate,
- trial_result_list, min_rate, max_rate, focus_trackers)
+ trial_result_list, min_rate, max_rate, focus_trackers
+ )
measurement, average, stdev, avg1, avg2, focus_trackers = results
zeros += 1
# TODO: Ratio of fill rate to drain rate seems to have
@@ -212,9 +217,10 @@ class PLRsearch(object):
# in order to get to usable loses at higher loads.
if len(lossy_loads) > 3:
lossy_loads = lossy_loads[3:]
- logging.debug("Zeros %(z)r orig %(o)r next %(n)r loads %(s)r",
- {"z": zeros, "o": (avg1 + avg2) / 2.0,
- "n": next_load, "s": lossy_loads})
+ logging.debug(
+ f"Zeros {zeros!r} orig {(avg1 + avg2) / 2.0!r} "
+ f"next {next_load!r} loads {lossy_loads!r}"
+ )
transmit_rate = min(max_rate, max(min_rate, next_load))
@staticmethod
@@ -255,21 +261,22 @@ class PLRsearch(object):
# TODO: chi is from https://en.wikipedia.org/wiki/Nondimensionalization
chi = (load - mrr) / spread
chi0 = -mrr / spread
- trace("stretch: load", load)
- trace("mrr", mrr)
- trace("spread", spread)
- trace("chi", chi)
- trace("chi0", chi0)
+ trace(u"stretch: load", load)
+ trace(u"mrr", mrr)
+ trace(u"spread", spread)
+ trace(u"chi", chi)
+ trace(u"chi0", chi0)
if chi > 0:
log_lps = math.log(
- load - mrr + (log_plus(0, -chi) - log_plus(0, chi0)) * spread)
- trace("big loss direct log_lps", log_lps)
+ load - mrr + (log_plus(0, -chi) - log_plus(0, chi0)) * spread
+ )
+ trace(u"big loss direct log_lps", log_lps)
else:
two_positive = log_plus(chi, 2 * chi0 - log_2)
two_negative = log_plus(chi0, 2 * chi - log_2)
if two_positive <= two_negative:
log_lps = log_minus(chi, chi0) + log_spread
- trace("small loss crude log_lps", log_lps)
+ trace(u"small loss crude log_lps", log_lps)
return log_lps
two = log_minus(two_positive, two_negative)
three_positive = log_plus(two_positive, 3 * chi - log_3)
@@ -277,11 +284,11 @@ class PLRsearch(object):
three = log_minus(three_positive, three_negative)
if two == three:
log_lps = two + log_spread
- trace("small loss approx log_lps", log_lps)
+ trace(u"small loss approx log_lps", log_lps)
else:
log_lps = math.log(log_plus(0, chi) - log_plus(0, chi0))
log_lps += log_spread
- trace("small loss direct log_lps", log_lps)
+ trace(u"small loss direct log_lps", log_lps)
return log_lps
@staticmethod
@@ -320,26 +327,26 @@ class PLRsearch(object):
# TODO: The stretch sign is just to have less minuses. Worth changing?
chi = (mrr - load) / spread
chi0 = mrr / spread
- trace("Erf: load", load)
- trace("mrr", mrr)
- trace("spread", spread)
- trace("chi", chi)
- trace("chi0", chi0)
+ trace(u"Erf: load", load)
+ trace(u"mrr", mrr)
+ trace(u"spread", spread)
+ trace(u"chi", chi)
+ trace(u"chi0", chi0)
if chi >= -1.0:
- trace("positive, b roughly bigger than m", None)
+ trace(u"positive, b roughly bigger than m", None)
if chi > math.exp(10):
first = PLRsearch.log_xerfcx_10 + 2 * (math.log(chi) - 10)
- trace("approximated first", first)
+ trace(u"approximated first", first)
else:
first = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi))
- trace("exact first", first)
+ trace(u"exact first", first)
first -= chi * chi
second = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi0))
second -= chi0 * chi0
intermediate = log_minus(first, second)
- trace("first", first)
+ trace(u"first", first)
else:
- trace("negative, b roughly smaller than m", None)
+ trace(u"negative, b roughly smaller than m", None)
exp_first = PLRsearch.xerfcx_limit + chi * erfcx(-chi)
exp_first *= math.exp(-chi * chi)
exp_first -= 2 * chi
@@ -350,11 +357,11 @@ class PLRsearch(object):
second = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi0))
second -= chi0 * chi0
intermediate = math.log(exp_first - math.exp(second))
- trace("exp_first", exp_first)
- trace("second", second)
- trace("intermediate", intermediate)
+ trace(u"exp_first", exp_first)
+ trace(u"second", second)
+ trace(u"intermediate", intermediate)
result = intermediate + math.log(spread) - math.log(erfc(-chi0))
- trace("result", result)
+ trace(u"result", result)
return result
@staticmethod
@@ -385,7 +392,7 @@ class PLRsearch(object):
:type lfit_func: Function from 3 floats to float.
:type min_rate: float
:type max_rate: float
- :type log_lps_target: float
+ :type loss_ratio_target: float
:type mrr: float
:type spread: float
:returns: Load [pps] which achieves the target with given parameters.
@@ -397,17 +404,17 @@ class PLRsearch(object):
loss_ratio = -1
while loss_ratio != loss_ratio_target:
rate = (rate_hi + rate_lo) / 2.0
- if rate == rate_hi or rate == rate_lo:
+ if rate in (rate_hi, rate_lo):
break
loss_rate = math.exp(lfit_func(trace, rate, mrr, spread))
loss_ratio = loss_rate / rate
if loss_ratio > loss_ratio_target:
- trace("halving down", rate)
+ trace(u"halving down", rate)
rate_hi = rate
elif loss_ratio < loss_ratio_target:
- trace("halving up", rate)
+ trace(u"halving up", rate)
rate_lo = rate
- trace("found", rate)
+ trace(u"found", rate)
return rate
@staticmethod
@@ -428,36 +435,39 @@ class PLRsearch(object):
:param trace: A multiprocessing-friendly logging function (closure).
:param lfit_func: Fitting function, typically lfit_spread or lfit_erf.
- :param result_list: List of trial measurement results.
+ :param trial_result_list: List of trial measurement results.
:param mrr: The mrr parameter for the fitting function.
:param spread: The spread parameter for the fittinmg function.
:type trace: function (str, object) -> None
:type lfit_func: Function from 3 floats to float.
- :type result_list: list of MLRsearch.ReceiveRateMeasurement
+ :type trial_result_list: list of MLRsearch.ReceiveRateMeasurement
:type mrr: float
:type spread: float
:returns: Logarithm of result weight for given function and parameters.
:rtype: float
"""
log_likelihood = 0.0
- trace("log_weight for mrr", mrr)
- trace("spread", spread)
+ trace(u"log_weight for mrr", mrr)
+ trace(u"spread", spread)
for result in trial_result_list:
- trace("for tr", result.target_tr)
- trace("lc", result.loss_count)
- trace("d", result.duration)
+ trace(u"for tr", result.target_tr)
+ trace(u"lc", result.loss_count)
+ trace(u"d", result.duration)
log_avg_loss_per_second = lfit_func(
- trace, result.target_tr, mrr, spread)
+ trace, result.target_tr, mrr, spread
+ )
log_avg_loss_per_trial = (
- log_avg_loss_per_second + math.log(result.duration))
+ log_avg_loss_per_second + math.log(result.duration)
+ )
# Poisson probability computation works nice for logarithms.
log_trial_likelihood = (
result.loss_count * log_avg_loss_per_trial
- - math.exp(log_avg_loss_per_trial))
+ - math.exp(log_avg_loss_per_trial)
+ )
log_trial_likelihood -= math.lgamma(1 + result.loss_count)
log_likelihood += log_trial_likelihood
- trace("avg_loss_per_trial", math.exp(log_avg_loss_per_trial))
- trace("log_trial_likelihood", log_trial_likelihood)
+ trace(u"avg_loss_per_trial", math.exp(log_avg_loss_per_trial))
+ trace(u"log_trial_likelihood", log_trial_likelihood)
return log_likelihood
def measure_and_compute(
@@ -512,12 +522,11 @@ class PLRsearch(object):
:rtype: _ComputeResult
"""
logging.debug(
- "measure_and_compute started with self %(self)r, trial_duration "
- "%(dur)r, transmit_rate %(tr)r, trial_result_list %(trl)r, "
- "max_rate %(mr)r, focus_trackers %(track)r, max_samples %(ms)r",
- {"self": self, "dur": trial_duration, "tr": transmit_rate,
- "trl": trial_result_list, "mr": max_rate, "track": focus_trackers,
- "ms": max_samples})
+ f"measure_and_compute started with self {self!r}, trial_duration "
+ f"{trial_duration!r}, transmit_rate {transmit_rate!r}, "
+ f"trial_result_list {trial_result_list!r}, max_rate {max_rate!r}, "
+ f"focus_trackers {focus_trackers!r}, max_samples {max_samples!r}"
+ )
# Preparation phase.
dimension = 2
stretch_focus_tracker, erf_focus_tracker = focus_trackers
@@ -536,11 +545,10 @@ class PLRsearch(object):
start computation, return the boss pipe end.
:param fitting_function: lfit_erf or lfit_stretch.
- :param bias_avg: Tuple of floats to start searching around.
- :param bias_cov: Covariance matrix defining initial focus shape.
+ :param focus_tracker: Tracker initialized to speed up the numeric
+ computation.
:type fitting_function: Function from 3 floats to float.
- :type bias_avg: 2-tuple of floats
- :type bias_cov: 2-tuple of 2-tuples of floats
+ :type focus_tracker: None or stat_trackers.VectorStatTracker
:returns: Boss end of communication pipe.
:rtype: multiprocessing.Connection
"""
@@ -579,27 +587,31 @@ class PLRsearch(object):
mrr = max_rate * (1.0 / (x_mrr + 1.0) - 0.5) + 1.0
spread = math.exp((x_spread + 1.0) / 2.0 * math.log(mrr))
logweight = self.log_weight(
- trace, fitting_function, trial_result_list, mrr, spread)
- value = math.log(self.find_critical_rate(
- trace, fitting_function, min_rate, max_rate,
- self.packet_loss_ratio_target, mrr, spread))
+ trace, fitting_function, trial_result_list, mrr, spread
+ )
+ value = math.log(
+ self.find_critical_rate(
+ trace, fitting_function, min_rate, max_rate,
+ self.packet_loss_ratio_target, mrr, spread
+ )
+ )
return value, logweight
dilled_function = dill.dumps(value_logweight_func)
boss_pipe_end, worker_pipe_end = multiprocessing.Pipe()
boss_pipe_end.send(
- (dimension, dilled_function, focus_tracker, max_samples))
+ (dimension, dilled_function, focus_tracker, max_samples)
+ )
worker = multiprocessing.Process(
- target=Integrator.try_estimate_nd, args=(
- worker_pipe_end, 10.0, self.trace_enabled))
+ target=Integrator.try_estimate_nd,
+ args=(worker_pipe_end, 10.0, self.trace_enabled)
+ )
worker.daemon = True
worker.start()
return boss_pipe_end
- erf_pipe = start_computing(
- self.lfit_erf, erf_focus_tracker)
- stretch_pipe = start_computing(
- self.lfit_stretch, stretch_focus_tracker)
+ erf_pipe = start_computing(self.lfit_erf, erf_focus_tracker)
+ stretch_pipe = start_computing(self.lfit_stretch, stretch_focus_tracker)
# Measurement phase.
measurement = self.measurer.measure(trial_duration, transmit_rate)
@@ -623,38 +635,38 @@ class PLRsearch(object):
"""
pipe.send(None)
if not pipe.poll(10.0):
- raise RuntimeError(
- "Worker {name} did not finish!".format(name=name))
+ raise RuntimeError(f"Worker {name} did not finish!")
result_or_traceback = pipe.recv()
try:
value_tracker, focus_tracker, debug_list, trace_list, sampls = (
- result_or_traceback)
+ result_or_traceback
+ )
except ValueError:
raise RuntimeError(
- "Worker {name} failed with the following traceback:\n{tr}"
- .format(name=name, tr=result_or_traceback))
- logging.info("Logs from worker %(name)r:", {"name": name})
+ f"Worker {name} failed with the following traceback:\n"
+ f"{result_or_traceback}"
+ )
+ logging.info(f"Logs from worker {name!r}:")
for message in debug_list:
logging.info(message)
for message in trace_list:
logging.debug(message)
- logging.debug("trackers: value %(val)r focus %(foc)r", {
- "val": value_tracker, "foc": focus_tracker})
+ logging.debug(
+ f"trackers: value {value_tracker!r} focus {focus_tracker!r}"
+ )
return _PartialResult(value_tracker, focus_tracker, sampls)
- stretch_result = stop_computing("stretch", stretch_pipe)
- erf_result = stop_computing("erf", erf_pipe)
+ stretch_result = stop_computing(u"stretch", stretch_pipe)
+ erf_result = stop_computing(u"erf", erf_pipe)
result = PLRsearch._get_result(measurement, stretch_result, erf_result)
logging.info(
- "measure_and_compute finished with trial result %(res)r "
- "avg %(avg)r stdev %(stdev)r stretch %(a1)r erf %(a2)r "
- "new trackers %(nt)r old trackers %(ot)r stretch samples %(ss)r "
- "erf samples %(es)r",
- {"res": result.measurement,
- "avg": result.avg, "stdev": result.stdev,
- "a1": result.stretch_exp_avg, "a2": result.erf_exp_avg,
- "nt": result.trackers, "ot": old_trackers,
- "ss": stretch_result.samples, "es": erf_result.samples})
+ f"measure_and_compute finished with trial result "
+ f"{result.measurement!r} avg {result.avg!r} stdev {result.stdev!r} "
+ f"stretch {result.stretch_exp_avg!r} erf {result.erf_exp_avg!r} "
+ f"new trackers {result.trackers!r} old trackers {old_trackers!r} "
+ f"stretch samples {stretch_result.samples!r} erf samples "
+ f"{erf_result.samples!r}"
+ )
return result
@staticmethod
@@ -692,7 +704,8 @@ class PLRsearch(object):
# Named tuples, for multiple local variables to be passed as return value.
_PartialResult = namedtuple(
- "_PartialResult", "value_tracker focus_tracker samples")
+ u"_PartialResult", u"value_tracker focus_tracker samples"
+)
"""Two stat trackers and sample counter.
:param value_tracker: Tracker for the value (critical load) being integrated.
@@ -704,8 +717,9 @@ _PartialResult = namedtuple(
"""
_ComputeResult = namedtuple(
- "_ComputeResult",
- "measurement avg stdev stretch_exp_avg erf_exp_avg trackers")
+ u"_ComputeResult",
+ u"measurement avg stdev stretch_exp_avg erf_exp_avg trackers"
+)
"""Measurement, 4 computation result values, pair of trackers.
:param measurement: The trial measurement result obtained during computation.
diff --git a/resources/libraries/python/PLRsearch/log_plus.py b/resources/libraries/python/PLRsearch/log_plus.py
index 1c802a5599..62378f6f2c 100644
--- a/resources/libraries/python/PLRsearch/log_plus.py
+++ b/resources/libraries/python/PLRsearch/log_plus.py
@@ -24,7 +24,7 @@ functions of this module use None as -inf.
TODO: Figure out a more performant way of handling -inf.
-The functions handle the common task of adding or substracting
+The functions handle the common task of adding or subtracting
two numbers where both operands and the result is given in logarithm form.
There are conditionals to make sure overflow does not happen (if possible)
during the computation."""
@@ -33,7 +33,7 @@ import math
def log_plus(first, second):
- """Return logarithm of the sum of two exponentials.
+ """Return logarithm of the sum of two exponents.
Basically math.log(math.exp(first) + math.exp(second))
which avoids overflow and uses None as math.log(0.0).
@@ -47,19 +47,19 @@ def log_plus(first, second):
:returns: Logarithm of the sum (or None if zero).
:rtype: float
"""
-
if first is None:
return second
if second is None:
return first
if second > first:
- return second + math.log(1.0 + math.exp(first - second))
+ retval = second + math.log(1.0 + math.exp(first - second))
else:
- return first + math.log(1.0 + math.exp(second - first))
+ retval = first + math.log(1.0 + math.exp(second - first))
+ return retval
def log_minus(first, second):
- """Return logarithm of the difference of two exponentials.
+ """Return logarithm of the difference of two exponents.
Basically math.log(math.exp(first) - math.exp(second))
which avoids overflow and uses None as math.log(0.0).
@@ -75,18 +75,18 @@ def log_minus(first, second):
:rtype: float
:raises RuntimeError: If the difference would be non-positive.
"""
-
if first is None:
- raise RuntimeError("log_minus: does not suport None first")
+ raise RuntimeError(u"log_minus: does not support None first")
if second is None:
return first
if second >= first:
- raise RuntimeError("log_minus: first has to be bigger than second")
+ raise RuntimeError(u"log_minus: first has to be bigger than second")
factor = -math.expm1(second - first)
if factor <= 0.0:
- raise RuntimeError("log_minus: non-positive number to log")
+ msg = u"log_minus: non-positive number to log"
else:
return first + math.log(factor)
+ raise RuntimeError(msg)
def safe_exp(log_value):
diff --git a/resources/libraries/python/PLRsearch/stat_trackers.py b/resources/libraries/python/PLRsearch/stat_trackers.py
index 58ad98fd2e..2a7a05cae6 100644
--- a/resources/libraries/python/PLRsearch/stat_trackers.py
+++ b/resources/libraries/python/PLRsearch/stat_trackers.py
@@ -32,7 +32,7 @@ import numpy
from .log_plus import log_plus, safe_exp
-class ScalarStatTracker(object):
+class ScalarStatTracker:
"""Class for tracking one-dimensional samples.
Variance of one-dimensional data cannot be negative,
@@ -61,13 +61,11 @@ class ScalarStatTracker(object):
def __repr__(self):
"""Return string, which interpreted constructs state of self.
- :returns: Expression contructing an equivalent instance.
+ :returns: Expression constructing an equivalent instance.
:rtype: str
"""
- return ("ScalarStatTracker(log_sum_weight={lsw!r},average={a!r},"
- "log_variance={lv!r})".format(
- lsw=self.log_sum_weight, a=self.average,
- lv=self.log_variance))
+ return f"ScalarStatTracker(log_sum_weight={self.log_sum_weight!r}," \
+ f"average={self.average!r},log_variance={self.log_variance!r})"
def copy(self):
"""Return new ScalarStatTracker instance with the same state as self.
@@ -79,7 +77,8 @@ class ScalarStatTracker(object):
:rtype: ScalarStatTracker
"""
return ScalarStatTracker(
- self.log_sum_weight, self.average, self.log_variance)
+ self.log_sum_weight, self.average, self.log_variance
+ )
def add(self, scalar_value, log_weight=0.0):
"""Return updated stats corresponding to addition of another sample.
@@ -134,7 +133,6 @@ class ScalarDualStatTracker(ScalarStatTracker):
One typical use is for Monte Carlo integrator to decide whether
the partial sums so far are reliable enough.
"""
-
def __init__(
self, log_sum_weight=None, average=0.0, log_variance=None,
log_sum_secondary_weight=None, secondary_average=0.0,
@@ -168,7 +166,8 @@ class ScalarDualStatTracker(ScalarStatTracker):
# so in case of diamond inheritance mismatch would be probable.
ScalarStatTracker.__init__(self, log_sum_weight, average, log_variance)
self.secondary = ScalarStatTracker(
- log_sum_secondary_weight, secondary_average, log_secondary_variance)
+ log_sum_secondary_weight, secondary_average, log_secondary_variance
+ )
self.max_log_weight = max_log_weight
def __repr__(self):
@@ -178,14 +177,12 @@ class ScalarDualStatTracker(ScalarStatTracker):
:rtype: str
"""
sec = self.secondary
- return (
- "ScalarDualStatTracker(log_sum_weight={lsw!r},average={a!r},"
- "log_variance={lv!r},log_sum_secondary_weight={lssw!r},"
- "secondary_average={sa!r},log_secondary_variance={lsv!r},"
- "max_log_weight={mlw!r})".format(
- lsw=self.log_sum_weight, a=self.average, lv=self.log_variance,
- lssw=sec.log_sum_weight, sa=sec.average, lsv=sec.log_variance,
- mlw=self.max_log_weight))
+ return f"ScalarDualStatTracker(log_sum_weight={self.log_sum_weight!r},"\
+ f"average={self.average!r},log_variance={self.log_variance!r}," \
+ f"log_sum_secondary_weight={sec.log_sum_weight!r}," \
+ f"secondary_average={sec.average!r}," \
+ f"log_secondary_variance={sec.log_variance!r}," \
+ f"max_log_weight={self.max_log_weight!r})"
def add(self, scalar_value, log_weight=0.0):
"""Return updated both stats after addition of another sample.
@@ -209,7 +206,6 @@ class ScalarDualStatTracker(ScalarStatTracker):
primary.add(scalar_value, log_weight)
return self
-
def get_pessimistic_variance(self):
"""Return estimate of variance reflecting weight effects.
@@ -231,7 +227,7 @@ class ScalarDualStatTracker(ScalarStatTracker):
return var_combined
-class VectorStatTracker(object):
+class VectorStatTracker:
"""Class for tracking multi-dimensional samples.
Contrary to one-dimensional data, multi-dimensional covariance matrix
@@ -248,11 +244,11 @@ class VectorStatTracker(object):
def __init__(
self, dimension=2, log_sum_weight=None, averages=None,
covariance_matrix=None):
- """Initialize new tracker instance, two-dimenstional empty by default.
+ """Initialize new tracker instance, two-dimensional empty by default.
If any of latter two arguments is None, it means
the tracker state is invalid. Use reset method
- to create empty tracker of constructed dimentionality.
+ to create empty tracker of constructed dimensionality.
:param dimension: Number of scalar components of samples.
:param log_sum_weight: Natural logarithm of sum of weights
@@ -273,14 +269,13 @@ class VectorStatTracker(object):
def __repr__(self):
"""Return string, which interpreted constructs state of self.
- :returns: Expression contructing an equivalent instance.
+ :returns: Expression constructing an equivalent instance.
:rtype: str
"""
- return (
- "VectorStatTracker(dimension={d!r},log_sum_weight={lsw!r},"
- "averages={a!r},covariance_matrix={cm!r})".format(
- d=self.dimension, lsw=self.log_sum_weight, a=self.averages,
- cm=self.covariance_matrix))
+ return f"VectorStatTracker(dimension={self.dimension!r}," \
+ f"log_sum_weight={self.log_sum_weight!r}," \
+ f"averages={self.averages!r}," \
+ f"covariance_matrix={self.covariance_matrix!r})"
def copy(self):
"""Return new instance with the same state as self.
@@ -293,7 +288,8 @@ class VectorStatTracker(object):
"""
return VectorStatTracker(
self.dimension, self.log_sum_weight, self.averages[:],
- copy.deepcopy(self.covariance_matrix))
+ copy.deepcopy(self.covariance_matrix)
+ )
def reset(self):
"""Return state set to empty data of proper dimensionality.
@@ -303,8 +299,9 @@ class VectorStatTracker(object):
"""
self.averages = [0.0 for _ in range(self.dimension)]
# TODO: Examine whether we can gain speed by tracking triangle only.
- self.covariance_matrix = [[0.0 for _ in range(self.dimension)]
- for _ in range(self.dimension)]
+ self.covariance_matrix = [
+ [0.0 for _ in range(self.dimension)] for _ in range(self.dimension)
+ ]
# TODO: In Python3, list comprehensions are generators,
# so they are not indexable. Put list() when converting.
return self
@@ -338,10 +335,12 @@ class VectorStatTracker(object):
old_log_sum_weight = self.log_sum_weight
old_averages = self.averages
if not old_averages:
- shift = [0.0 for index in range(dimension)]
+ shift = [0.0 for _ in range(dimension)]
else:
- shift = [vector_value[index] - old_averages[index]
- for index in range(dimension)]
+ shift = [
+ vector_value[index] - old_averages[index]
+ for index in range(dimension)
+ ]
if old_log_sum_weight is None:
# First sample.
self.log_sum_weight = log_weight
@@ -352,8 +351,10 @@ class VectorStatTracker(object):
new_log_sum_weight = log_plus(old_log_sum_weight, log_weight)
data_ratio = math.exp(old_log_sum_weight - new_log_sum_weight)
sample_ratio = math.exp(log_weight - new_log_sum_weight)
- new_averages = [old_averages[index] + shift[index] * sample_ratio
- for index in range(dimension)]
+ new_averages = [
+ old_averages[index] + shift[index] * sample_ratio
+ for index in range(dimension)
+ ]
# It is easier to update covariance matrix in-place.
for second in range(dimension):
for first in range(dimension):
@@ -375,7 +376,7 @@ class VectorStatTracker(object):
If the weight of the incoming sample is far bigger
than the weight of all the previous data together,
- convariance matrix would suffer from underflows.
+ covariance matrix would suffer from underflow.
To avoid that, this method manipulates both weights
before calling add().
diff --git a/resources/libraries/python/PacketVerifier.py b/resources/libraries/python/PacketVerifier.py
index 978babf7ce..397ce76f49 100644
--- a/resources/libraries/python/PacketVerifier.py
+++ b/resources/libraries/python/PacketVerifier.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -67,28 +67,33 @@
import os
import select
-from scapy.config import conf
from scapy.all import ETH_P_IP, ETH_P_IPV6, ETH_P_ALL, ETH_P_ARP
+from scapy.config import conf
from scapy.layers.inet6 import IPv6
from scapy.layers.l2 import Ether, ARP
+from scapy.packet import Raw
# Enable libpcap's L2listen
conf.use_pcap = True
import scapy.arch.pcapdnet # pylint: disable=C0413, unused-import
-__all__ = ['RxQueue', 'TxQueue', 'Interface', 'create_gratuitous_arp_request',
- 'auto_pad', 'checksum_equal']
+__all__ = [
+ u"RxQueue", u"TxQueue", u"Interface", u"create_gratuitous_arp_request",
+ u"auto_pad", u"checksum_equal"
+]
# TODO: http://stackoverflow.com/questions/320232/
# ensuring-subprocesses-are-dead-on-exiting-python-program
-class PacketVerifier(object):
+class PacketVerifier:
"""Base class for TX and RX queue objects for packet verifier."""
def __init__(self, interface_name):
- os.system('sudo echo 1 > /proc/sys/net/ipv6/conf/{0}/disable_ipv6'
- .format(interface_name))
- os.system('sudo ip link set {0} up promisc on'.format(interface_name))
+ os.system(
+ f"sudo echo 1 > /proc/sys/net/ipv6/conf/{interface_name}/"
+ f"disable_ipv6"
+ )
+ os.system(f"sudo ip link set {interface_name} up promisc on")
self._ifname = interface_name
@@ -111,8 +116,7 @@ def extract_one_packet(buf):
try:
ether_type = Ether(buf[0:14]).type
except AttributeError:
- raise RuntimeError(
- 'No EtherType in packet {0}'.format(buf.__repr__()))
+ raise RuntimeError(f"No EtherType in packet {buf!r}")
if ether_type == ETH_P_IP:
# 14 is Ethernet fame header size.
@@ -124,17 +128,16 @@ def extract_one_packet(buf):
return None
elif ether_type == ETH_P_IPV6:
if not Ether(buf[0:14+6]).haslayer(IPv6):
- raise RuntimeError(
- 'Invalid IPv6 packet {0}'.format(buf.__repr__()))
+ raise RuntimeError(f"Invalid IPv6 packet {buf!r}")
# ... to add to the above, 40 bytes is the length of IPV6 header.
# The ipv6.len only contains length of the payload and not the header
- pkt_len = Ether(buf)['IPv6'].plen + 14 + 40
+ pkt_len = Ether(buf)[u"IPv6"].plen + 14 + 40
if len(buf) < 60:
return None
elif ether_type == ETH_P_ARP:
pkt = Ether(buf[:20])
if not pkt.haslayer(ARP):
- raise RuntimeError('Incomplete ARP packet')
+ raise RuntimeError(u"Incomplete ARP packet")
# len(eth) + arp(2 hw addr type + 2 proto addr type
# + 1b len + 1b len + 2b operation)
@@ -146,10 +149,10 @@ def extract_one_packet(buf):
elif ether_type == 32821: # RARP (Reverse ARP)
pkt = Ether(buf[:20])
pkt.type = ETH_P_ARP # Change to ARP so it works with scapy
- pkt = Ether(str(pkt))
+ pkt = Ether(pkt)
if not pkt.haslayer(ARP):
pkt.show()
- raise RuntimeError('Incomplete RARP packet')
+ raise RuntimeError(u"Incomplete RARP packet")
# len(eth) + arp(2 hw addr type + 2 proto addr type
# + 1b len + 1b len + 2b operation)
@@ -159,7 +162,7 @@ def extract_one_packet(buf):
del pkt
else:
- raise RuntimeError('Unknown protocol {0}'.format(ether_type))
+ raise RuntimeError(f"Unknown protocol {ether_type}")
if pkt_len < 60:
pkt_len = 60
@@ -222,25 +225,23 @@ class RxQueue(PacketVerifier):
if ignore is not None:
for ig_pkt in ignore:
# Auto pad all packets in ignore list
- ignore_list.append(auto_pad(ig_pkt))
+ ignore_list.append(str(auto_pad(ig_pkt)))
while True:
- (rlist, _, _) = select.select([self._sock], [], [], timeout)
+ rlist, _, _ = select.select([self._sock], [], [], timeout)
if self._sock not in rlist:
return None
pkt = self._sock.recv(0x7fff)
- pkt_pad = auto_pad(pkt)
- print 'Received packet on {0} of len {1}'\
- .format(self._ifname, len(pkt))
+ pkt_pad = str(auto_pad(pkt))
+ print(f"Received packet on {self._ifname} of len {len(pkt)}")
if verbose:
pkt.show2() # pylint: disable=no-member
- print
+ print()
if pkt_pad in ignore_list:
ignore_list.remove(pkt_pad)
- print 'Received packet ignored.'
+ print(u"Received packet ignored.")
continue
- else:
- return pkt
+ return pkt
class TxQueue(PacketVerifier):
@@ -259,21 +260,20 @@ class TxQueue(PacketVerifier):
"""Send packet out of the bound interface.
:param pkt: Packet to send.
- :param verbose: Used to supress detailed logging of sent packets.
+ :param verbose: Used to suppress detailed logging of sent packets.
:type pkt: string or scapy Packet derivative.
:type verbose: bool
"""
- print 'Sending packet out of {0} of len {1}'.format(self._ifname,
- len(pkt))
+ pkt = auto_pad(pkt)
+ print(f"Sending packet out of {self._ifname} of len {len(pkt)}")
if verbose:
- Ether(str(pkt)).show2()
- print
+ pkt.show2()
+ print()
- pkt = auto_pad(str(pkt))
self._sock.send(pkt)
-class Interface(object):
+class Interface:
"""Class for network interfaces. Contains methods for sending and receiving
packets."""
def __init__(self, if_name):
@@ -305,16 +305,17 @@ class Interface(object):
def create_gratuitous_arp_request(src_mac, src_ip):
"""Creates scapy representation of gratuitous ARP request."""
- return (Ether(src=src_mac, dst='ff:ff:ff:ff:ff:ff') /
- ARP(psrc=src_ip, hwsrc=src_mac, pdst=src_ip))
+ return (Ether(src=src_mac, dst=u"ff:ff:ff:ff:ff:ff") /
+ ARP(psrc=src_ip, hwsrc=src_mac, pdst=src_ip)
+ )
def auto_pad(packet):
"""Pads zeroes at the end of the packet if the total len < 60 bytes."""
- padded = str(packet)
- if len(padded) < 60:
- padded += ('\0' * (60 - len(padded)))
- return padded
+ # padded = str(packet)
+ if len(packet) < 60:
+ packet[Raw].load += (b"\0" * (60 - len(packet)))
+ return packet
def checksum_equal(chksum1, chksum2):
diff --git a/resources/libraries/python/PapiExecutor.py b/resources/libraries/python/PapiExecutor.py
index 0e0a9332c4..7f226f4ff3 100644
--- a/resources/libraries/python/PapiExecutor.py
+++ b/resources/libraries/python/PapiExecutor.py
@@ -14,7 +14,6 @@
"""Python API executor library.
"""
-import binascii
import copy
import glob
import json
@@ -31,7 +30,6 @@ from robot.api import logger
from resources.libraries.python.Constants import Constants
from resources.libraries.python.LocalExecution import run
from resources.libraries.python.FilteredLogger import FilteredLogger
-from resources.libraries.python.PythonThree import raise_from
from resources.libraries.python.PapiHistory import PapiHistory
from resources.libraries.python.ssh import (
SSH, SSHTimeout, exec_cmd_no_error, scp_node)
@@ -39,7 +37,7 @@ from resources.libraries.python.topology import Topology, SocketType
from resources.libraries.python.VppApiCrc import VppApiCrcChecker
-__all__ = ["PapiExecutor", "PapiSocketExecutor"]
+__all__ = [u"PapiExecutor", u"PapiSocketExecutor"]
def dictize(obj):
@@ -56,14 +54,14 @@ def dictize(obj):
from tuple, including its read-only __getitem__ attribute,
so we cannot monkey-patch it.
- TODO: Create a proxy for namedtuple to allow that.
+ TODO: Create a proxy for named tuple to allow that.
:param obj: Arbitrary object to dictize.
:type obj: object
:returns: Dictized object.
:rtype: same as obj type or collections.OrderedDict
"""
- if not hasattr(obj, "_asdict"):
+ if not hasattr(obj, u"_asdict"):
return obj
ret = obj._asdict()
old_get = ret.__getitem__
@@ -72,7 +70,7 @@ def dictize(obj):
return ret
-class PapiSocketExecutor(object):
+class PapiSocketExecutor:
"""Methods for executing VPP Python API commands on forwarded socket.
The current implementation connects for the duration of resource manager.
@@ -171,39 +169,40 @@ class PapiSocketExecutor(object):
return
cls = self.__class__ # Shorthand for setting class fields.
package_path = None
- tmp_dir = tempfile.mkdtemp(dir="/tmp")
+ tmp_dir = tempfile.mkdtemp(dir=u"/tmp")
try:
# Pack, copy and unpack Python part of VPP installation from _node.
# TODO: Use rsync or recursive version of ssh.scp_node instead?
node = self._node
- exec_cmd_no_error(node, ["rm", "-rf", "/tmp/papi.txz"])
+ exec_cmd_no_error(node, [u"rm", u"-rf", u"/tmp/papi.txz"])
# Papi python version depends on OS (and time).
# Python 2.7 or 3.4, site-packages or dist-packages.
- installed_papi_glob = "/usr/lib/python*/*-packages/vpp_papi"
+ installed_papi_glob = u"/usr/lib/python3*/*-packages/vpp_papi"
# We need to wrap this command in bash, in order to expand globs,
# and as ssh does join, the inner command has to be quoted.
- inner_cmd = " ".join([
- "tar", "cJf", "/tmp/papi.txz", "--exclude=*.pyc",
- installed_papi_glob, "/usr/share/vpp/api"])
- exec_cmd_no_error(node, ["bash", "-c", "'" + inner_cmd + "'"])
- scp_node(node, tmp_dir + "/papi.txz", "/tmp/papi.txz", get=True)
- run(["tar", "xf", tmp_dir + "/papi.txz", "-C", tmp_dir])
- api_json_directory = tmp_dir + "/usr/share/vpp/api"
+ inner_cmd = u" ".join([
+ u"tar", u"cJf", u"/tmp/papi.txz", u"--exclude=*.pyc",
+ installed_papi_glob, u"/usr/share/vpp/api"
+ ])
+ exec_cmd_no_error(node, [u"bash", u"-c", u"'" + inner_cmd + u"'"])
+ scp_node(node, tmp_dir + u"/papi.txz", u"/tmp/papi.txz", get=True)
+ run([u"tar", u"xf", tmp_dir + u"/papi.txz", u"-C", tmp_dir])
+ api_json_directory = tmp_dir + u"/usr/share/vpp/api"
# Perform initial checks before .api.json files are gone,
# by creating the checker instance.
cls.crc_checker = VppApiCrcChecker(api_json_directory)
# When present locally, we finally can find the installation path.
package_path = glob.glob(tmp_dir + installed_papi_glob)[0]
# Package path has to be one level above the vpp_papi directory.
- package_path = package_path.rsplit('/', 1)[0]
+ package_path = package_path.rsplit(u"/", 1)[0]
sys.path.append(package_path)
- # pylint: disable=import-error
+ # pylint: disable=import-outside-toplevel, import-error
from vpp_papi.vpp_papi import VPPApiClient as vpp_class
vpp_class.apidir = api_json_directory
# We need to create instance before removing from sys.path.
cls.vpp_instance = vpp_class(
- use_socket=True, server_address="TBD", async_thread=False,
- read_timeout=14, logger=FilteredLogger(logger, "INFO"))
+ use_socket=True, server_address=u"TBD", async_thread=False,
+ read_timeout=14, logger=FilteredLogger(logger, u"INFO"))
# Cannot use loglevel parameter, robot.api.logger lacks support.
# TODO: Stop overriding read_timeout when VPP-1722 is fixed.
finally:
@@ -224,53 +223,58 @@ class PapiSocketExecutor(object):
# Parsing takes longer than connecting, prepare instance before tunnel.
vpp_instance = self.vpp_instance
node = self._node
- self._temp_dir = tempfile.mkdtemp(dir="/tmp")
- self._local_vpp_socket = self._temp_dir + "/vpp-api.sock"
- self._ssh_control_socket = self._temp_dir + "/ssh.sock"
+ self._temp_dir = tempfile.mkdtemp(dir=u"/tmp")
+ self._local_vpp_socket = self._temp_dir + u"/vpp-api.sock"
+ self._ssh_control_socket = self._temp_dir + u"/ssh.sock"
ssh_socket = self._ssh_control_socket
# Cleanup possibilities.
- ret_code, _ = run(["ls", ssh_socket], check=False)
+ ret_code, _ = run([u"ls", ssh_socket], check=False)
if ret_code != 2:
# This branch never seems to be hit in CI,
# but may be useful when testing manually.
- run(["ssh", "-S", ssh_socket, "-O", "exit", "0.0.0.0"],
- check=False, log=True)
+ run(
+ [u"ssh", u"-S", ssh_socket, u"-O", u"exit", u"0.0.0.0"],
+ check=False, log=True
+ )
# TODO: Is any sleep necessary? How to prove if not?
- run(["sleep", "0.1"])
- run(["rm", "-vrf", ssh_socket])
+ run([u"sleep", u"0.1"])
+ run([u"rm", u"-vrf", ssh_socket])
# Even if ssh can perhaps reuse this file,
# we need to remove it for readiness detection to work correctly.
- run(["rm", "-rvf", self._local_vpp_socket])
+ run([u"rm", u"-rvf", self._local_vpp_socket])
# On VIRL, the ssh user is not added to "vpp" group,
# so we need to change remote socket file access rights.
exec_cmd_no_error(
- node, "chmod o+rwx " + self._remote_vpp_socket, sudo=True)
+ node, u"chmod o+rwx " + self._remote_vpp_socket, sudo=True
+ )
# We use sleep command. The ssh command will exit in 10 second,
# unless a local socket connection is established,
# in which case the ssh command will exit only when
# the ssh connection is closed again (via control socket).
# The log level is to supress "Warning: Permanently added" messages.
ssh_cmd = [
- "ssh", "-S", ssh_socket, "-M",
- "-o", "LogLevel=ERROR", "-o", "UserKnownHostsFile=/dev/null",
- "-o", "StrictHostKeyChecking=no", "-o", "ExitOnForwardFailure=yes",
- "-L", self._local_vpp_socket + ':' + self._remote_vpp_socket,
- "-p", str(node['port']), node['username'] + "@" + node['host'],
- "sleep", "10"]
- priv_key = node.get("priv_key")
+ u"ssh", u"-S", ssh_socket, u"-M",
+ u"-o", u"LogLevel=ERROR", u"-o", u"UserKnownHostsFile=/dev/null",
+ u"-o", u"StrictHostKeyChecking=no",
+ u"-o", u"ExitOnForwardFailure=yes",
+ u"-L", self._local_vpp_socket + u":" + self._remote_vpp_socket,
+ u"-p", str(node[u"port"]), node[u"username"] + u"@" + node[u"host"],
+ u"sleep", u"10"
+ ]
+ priv_key = node.get(u"priv_key")
if priv_key:
# This is tricky. We need a file to pass the value to ssh command.
- # And we need ssh command, because paramiko does not suport sockets
+ # And we need ssh command, because paramiko does not support sockets
# (neither ssh_socket, nor _remote_vpp_socket).
key_file = tempfile.NamedTemporaryFile()
key_file.write(priv_key)
# Make sure the content is written, but do not close yet.
key_file.flush()
- ssh_cmd[1:1] = ["-i", key_file.name]
- password = node.get("password")
+ ssh_cmd[1:1] = [u"-i", key_file.name]
+ password = node.get(u"password")
if password:
# Prepend sshpass command to set password.
- ssh_cmd[:0] = ["sshpass", "-p", password]
+ ssh_cmd[:0] = [u"sshpass", u"-p", password]
time_stop = time.time() + 10.0
# subprocess.Popen seems to be the best way to run commands
# on background. Other ways (shell=True with "&" and ssh with -f)
@@ -280,12 +284,14 @@ class PapiSocketExecutor(object):
# Check socket presence on local side.
while time.time() < time_stop:
# It can take a moment for ssh to create the socket file.
- ret_code, _ = run(["ls", "-l", self._local_vpp_socket], check=False)
+ ret_code, _ = run(
+ [u"ls", u"-l", self._local_vpp_socket], check=False
+ )
if not ret_code:
break
time.sleep(0.1)
else:
- raise RuntimeError("Local side socket has not appeared.")
+ raise RuntimeError(u"Local side socket has not appeared.")
if priv_key:
# Socket up means the key has been read. Delete file by closing it.
key_file.close()
@@ -293,16 +299,16 @@ class PapiSocketExecutor(object):
vpp_instance.transport.server_address = self._local_vpp_socket
# It seems we can get read error even if every preceding check passed.
# Single retry seems to help.
- for _ in xrange(2):
+ for _ in range(2):
try:
- vpp_instance.connect_sync("csit_socket")
+ vpp_instance.connect_sync(u"csit_socket")
except (IOError, struct.error) as err:
- logger.warn("Got initial connect error {err!r}".format(err=err))
+ logger.warn(f"Got initial connect error {err!r}")
vpp_instance.disconnect()
else:
break
else:
- raise RuntimeError("Failed to connect to VPP over a socket.")
+ raise RuntimeError(u"Failed to connect to VPP over a socket.")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
@@ -312,8 +318,9 @@ class PapiSocketExecutor(object):
Arguments related to possible exception are entirely ignored.
"""
self.vpp_instance.disconnect()
- run(["ssh", "-S", self._ssh_control_socket, "-O", "exit", "0.0.0.0"],
- check=False)
+ run([
+ u"ssh", u"-S", self._ssh_control_socket, u"-O", u"exit", u"0.0.0.0"
+ ], check=False)
shutil.rmtree(self._temp_dir)
def add(self, csit_papi_command, history=True, **kwargs):
@@ -346,10 +353,15 @@ class PapiSocketExecutor(object):
self.crc_checker.report_initial_conflicts()
if history:
PapiHistory.add_to_papi_history(
- self._node, csit_papi_command, **kwargs)
+ self._node, csit_papi_command, **kwargs
+ )
self.crc_checker.check_api_name(csit_papi_command)
self._api_command_list.append(
- dict(api_name=csit_papi_command, api_args=copy.deepcopy(kwargs)))
+ dict(
+ api_name=csit_papi_command,
+ api_args=copy.deepcopy(kwargs)
+ )
+ )
return self
def get_replies(self, err_msg="Failed to get replies."):
@@ -366,7 +378,7 @@ class PapiSocketExecutor(object):
"""
return self._execute(err_msg=err_msg)
- def get_reply(self, err_msg="Failed to get reply."):
+ def get_reply(self, err_msg=u"Failed to get reply."):
"""Get reply from VPP Python API.
The reply is parsed into dict-like object,
@@ -382,11 +394,10 @@ class PapiSocketExecutor(object):
"""
replies = self.get_replies(err_msg=err_msg)
if len(replies) != 1:
- raise RuntimeError("Expected single reply, got {replies!r}".format(
- replies=replies))
+ raise RuntimeError(f"Expected single reply, got {replies!r}")
return replies[0]
- def get_sw_if_index(self, err_msg="Failed to get reply."):
+ def get_sw_if_index(self, err_msg=u"Failed to get reply."):
"""Get sw_if_index from reply from VPP Python API.
Frequently, the caller is only interested in sw_if_index field
@@ -401,8 +412,8 @@ class PapiSocketExecutor(object):
:raises AssertionError: If retval is nonzero, parsing or ssh error.
"""
reply = self.get_reply(err_msg=err_msg)
- logger.trace("Getting index from {reply!r}".format(reply=reply))
- return reply["sw_if_index"]
+ logger.trace(f"Getting index from {reply!r}")
+ return reply[u"sw_if_index"]
def get_details(self, err_msg="Failed to get dump details."):
"""Get dump details from VPP Python API.
@@ -422,8 +433,8 @@ class PapiSocketExecutor(object):
return self._execute(err_msg)
@staticmethod
- def run_cli_cmd(node, cli_cmd, log=True,
- remote_vpp_socket=Constants.SOCKSVR_PATH):
+ def run_cli_cmd(
+ node, cli_cmd, log=True, remote_vpp_socket=Constants.SOCKSVR_PATH):
"""Run a CLI command as cli_inband, return the "reply" field of reply.
Optionally, log the field value.
@@ -439,17 +450,20 @@ class PapiSocketExecutor(object):
:returns: CLI output.
:rtype: str
"""
- cmd = 'cli_inband'
- args = dict(cmd=cli_cmd)
- err_msg = "Failed to run 'cli_inband {cmd}' PAPI command on host " \
- "{host}".format(host=node['host'], cmd=cli_cmd)
+ cmd = u"cli_inband"
+ args = dict(
+ cmd=cli_cmd
+ )
+ err_msg = f"Failed to run 'cli_inband {cli_cmd}' PAPI command " \
+ f"on host {node[u'host']}"
+
with PapiSocketExecutor(node, remote_vpp_socket) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)["reply"]
if log:
logger.info(
- "{cmd} ({host} - {remote_vpp_socket}):\n{reply}".
- format(cmd=cmd, reply=reply.encode('utf-8').strip(),
- remote_vpp_socket=remote_vpp_socket, host=node['host']))
+ f"{cmd} ({node[u'host']} - {remote_vpp_socket}):\n"
+ f"{reply.strip()}"
+ )
return reply
@staticmethod
@@ -467,7 +481,8 @@ class PapiSocketExecutor(object):
if sockets:
for socket in sockets.values():
PapiSocketExecutor.run_cli_cmd(
- node, cli_cmd, log=log, remote_vpp_socket=socket)
+ node, cli_cmd, log=log, remote_vpp_socket=socket
+ )
@staticmethod
def dump_and_log(node, cmds):
@@ -481,10 +496,9 @@ class PapiSocketExecutor(object):
with PapiSocketExecutor(node) as papi_exec:
for cmd in cmds:
dump = papi_exec.add(cmd).get_details()
- logger.debug("{cmd}:\n{data}".format(
- cmd=cmd, data=pformat(dump)))
+ logger.debug(f"{cmd}:\n{pformat(dump)}")
- def _execute(self, err_msg="Undefined error message"):
+ def _execute(self, err_msg=u"Undefined error message", exp_rv=0):
"""Turn internal command list into data and execute; return replies.
This method also clears the internal command list.
@@ -509,43 +523,42 @@ class PapiSocketExecutor(object):
self._api_command_list = list()
replies = list()
for command in local_list:
- api_name = command["api_name"]
+ api_name = command[u"api_name"]
papi_fn = getattr(vpp_instance.api, api_name)
try:
try:
- reply = papi_fn(**command["api_args"])
+ reply = papi_fn(**command[u"api_args"])
except (IOError, struct.error) as err:
- # Ocassionally an error happens, try reconnect.
- logger.warn("Reconnect after error: {err!r}".format(
- err=err))
+ # Occasionally an error happens, try reconnect.
+ logger.warn(f"Reconnect after error: {err!r}")
self.vpp_instance.disconnect()
- # Testing showes immediate reconnect fails.
+ # Testing shows immediate reconnect fails.
time.sleep(1)
- self.vpp_instance.connect_sync("csit_socket")
- logger.trace("Reconnected.")
- reply = papi_fn(**command["api_args"])
+ self.vpp_instance.connect_sync(u"csit_socket")
+ logger.trace(u"Reconnected.")
+ reply = papi_fn(**command[u"api_args"])
except (AttributeError, IOError, struct.error) as err:
- raise_from(AssertionError(err_msg), err, level="INFO")
+ raise AssertionError(err_msg) from err
# *_dump commands return list of objects, convert, ordinary reply.
if not isinstance(reply, list):
reply = [reply]
for item in reply:
self.crc_checker.check_api_name(item.__class__.__name__)
dict_item = dictize(item)
- if "retval" in dict_item.keys():
+ if u"retval" in dict_item.keys():
# *_details messages do not contain retval.
- retval = dict_item["retval"]
- if retval != 0:
+ retval = dict_item[u"retval"]
+ if retval != exp_rv:
# TODO: What exactly to log and raise here?
- err = AssertionError("Retval {rv!r}".format(rv=retval))
- # Lowering log level, some retval!=0 calls are expected.
- # TODO: Expose level argument so callers can decide?
- raise_from(AssertionError(err_msg), err, level="DEBUG")
+ raise AssertionError(
+ f"Retval {retval!r} does not match expected "
+ f"retval {exp_rv!r}"
+ )
replies.append(dict_item)
return replies
-class PapiExecutor(object):
+class PapiExecutor:
"""Contains methods for executing VPP Python API commands on DUTs.
TODO: Remove .add step, make get_stats accept paths directly.
@@ -589,7 +602,6 @@ class PapiExecutor(object):
:param node: Node to run command(s) on.
:type node: dict
"""
-
# Node to run command(s) on.
self._node = node
@@ -602,15 +614,16 @@ class PapiExecutor(object):
try:
self._ssh.connect(self._node)
except IOError:
- raise RuntimeError("Cannot open SSH connection to host {host} to "
- "execute PAPI command(s)".
- format(host=self._node["host"]))
+ raise RuntimeError(
+ f"Cannot open SSH connection to host {self._node[u'host']} "
+ f"to execute PAPI command(s)"
+ )
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self._ssh.disconnect(self._node)
- def add(self, csit_papi_command="vpp-stats", history=True, **kwargs):
+ def add(self, csit_papi_command=u"vpp-stats", history=True, **kwargs):
"""Add next command to internal command list; return self.
The argument name 'csit_papi_command' must be unique enough as it cannot
@@ -629,28 +642,36 @@ class PapiExecutor(object):
"""
if history:
PapiHistory.add_to_papi_history(
- self._node, csit_papi_command, **kwargs)
- self._api_command_list.append(dict(
- api_name=csit_papi_command, api_args=copy.deepcopy(kwargs)))
+ self._node, csit_papi_command, **kwargs
+ )
+ self._api_command_list.append(
+ dict(
+ api_name=csit_papi_command, api_args=copy.deepcopy(kwargs)
+ )
+ )
return self
- def get_stats(self, err_msg="Failed to get statistics.", timeout=120,
- socket=Constants.SOCKSTAT_PATH):
+ def get_stats(
+ self, err_msg=u"Failed to get statistics.", timeout=120,
+ socket=Constants.SOCKSTAT_PATH):
"""Get VPP Stats from VPP Python API.
:param err_msg: The message used if the PAPI command(s) execution fails.
:param timeout: Timeout in seconds.
+ :param socket: Path to Stats socket to tunnel to.
:type err_msg: str
:type timeout: int
+ :type socket: str
:returns: Requested VPP statistics.
:rtype: list of dict
"""
- paths = [cmd['api_args']['path'] for cmd in self._api_command_list]
+ paths = [cmd[u"api_args"][u"path"] for cmd in self._api_command_list]
self._api_command_list = list()
stdout = self._execute_papi(
- paths, method='stats', err_msg=err_msg, timeout=timeout,
- socket=socket)
+ paths, method=u"stats", err_msg=err_msg, timeout=timeout,
+ socket=socket
+ )
return json.loads(stdout)
@@ -675,27 +696,33 @@ class PapiExecutor(object):
:rtype: dict or str or int
"""
if isinstance(val, dict):
- for val_k, val_v in val.iteritems():
+ for val_k, val_v in val.items():
val[str(val_k)] = process_value(val_v)
- return val
+ retval = val
elif isinstance(val, list):
for idx, val_l in enumerate(val):
val[idx] = process_value(val_l)
- return val
+ retval = val
else:
- return binascii.hexlify(val) if isinstance(val, str) else val
+ retval = val.encode().hex() if isinstance(val, str) else val
+ return retval
api_data_processed = list()
for api in api_d:
api_args_processed = dict()
- for a_k, a_v in api["api_args"].iteritems():
+ for a_k, a_v in api[u"api_args"].items():
api_args_processed[str(a_k)] = process_value(a_v)
- api_data_processed.append(dict(api_name=api["api_name"],
- api_args=api_args_processed))
+ api_data_processed.append(
+ dict(
+ api_name=api[u"api_name"],
+ api_args=api_args_processed
+ )
+ )
return api_data_processed
- def _execute_papi(self, api_data, method='request', err_msg="",
- timeout=120, socket=None):
+ def _execute_papi(
+ self, api_data, method=u"request", err_msg=u"", timeout=120,
+ socket=None):
"""Execute PAPI command(s) on remote node and store the result.
:param api_data: List of APIs with their arguments.
@@ -714,32 +741,31 @@ class PapiExecutor(object):
:raises AssertionError: If PAPI command(s) execution has failed.
"""
if not api_data:
- raise RuntimeError("No API data provided.")
+ raise RuntimeError(u"No API data provided.")
json_data = json.dumps(api_data) \
- if method in ("stats", "stats_request") \
+ if method in (u"stats", u"stats_request") \
else json.dumps(self._process_api_data(api_data))
- sock = " --socket {socket}".format(socket=socket) if socket else ""
- cmd = (
- "{fw_dir}/{papi_provider} --method {method} --data '{json}'{socket}"
- .format(fw_dir=Constants.REMOTE_FW_DIR,
- papi_provider=Constants.RESOURCES_PAPI_PROVIDER,
- method=method, json=json_data, socket=sock))
+ sock = f" --socket {socket}" if socket else u""
+ cmd = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_PAPI_PROVIDER}" \
+ f" --method {method} --data '{json_data}'{sock}"
try:
ret_code, stdout, _ = self._ssh.exec_command_sudo(
- cmd=cmd, timeout=timeout, log_stdout_err=False)
+ cmd=cmd, timeout=timeout, log_stdout_err=False
+ )
# TODO: Fail on non-empty stderr?
except SSHTimeout:
- logger.error("PAPI command(s) execution timeout on host {host}:"
- "\n{apis}".format(host=self._node["host"],
- apis=api_data))
+ logger.error(
+ f"PAPI command(s) execution timeout on host "
+ f"{self._node[u'host']}:\n{api_data}"
+ )
raise
except Exception as exc:
- raise_from(RuntimeError(
- "PAPI command(s) execution on host {host} "
- "failed: {apis}".format(
- host=self._node["host"], apis=api_data)), exc)
+ raise RuntimeError(
+ f"PAPI command(s) execution on host {self._node[u'host']} "
+ f"failed: {api_data}"
+ ) from exc
if ret_code != 0:
raise AssertionError(err_msg)
diff --git a/resources/libraries/python/PapiHistory.py b/resources/libraries/python/PapiHistory.py
index c4ee4ee495..cacfbd6b19 100644
--- a/resources/libraries/python/PapiHistory.py
+++ b/resources/libraries/python/PapiHistory.py
@@ -17,13 +17,13 @@ from robot.api import logger
from resources.libraries.python.topology import NodeType, DICT__nodes
-__all__ = ["DICT__DUTS_PAPI_HISTORY", "PapiHistory"]
+__all__ = [u"DICT__DUTS_PAPI_HISTORY", u"PapiHistory"]
DICT__DUTS_PAPI_HISTORY = dict()
-class PapiHistory(object):
+class PapiHistory:
"""Contains methods to set up DUT PAPI command history.
"""
@@ -34,7 +34,7 @@ class PapiHistory(object):
:param node: DUT node to reset PAPI command history for.
:type node: dict
"""
- DICT__DUTS_PAPI_HISTORY[node['host']] = list()
+ DICT__DUTS_PAPI_HISTORY[node[u"host"]] = list()
@staticmethod
def reset_papi_history_on_all_duts(nodes):
@@ -44,7 +44,7 @@ class PapiHistory(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
PapiHistory.reset_papi_history(node)
@staticmethod
@@ -85,16 +85,15 @@ class PapiHistory(object):
"""
if papi:
args = list()
- for key, val in kwargs.iteritems():
- args.append("{key}={val!r}".format(key=key, val=val))
- item = "{cmd}({args})".format(cmd=csit_papi_command,
- args=",".join(args))
+ for key, val in kwargs.items():
+ args.append(f"{key}={val!r}")
+ item = f"{csit_papi_command}({u','.join(args)})"
else:
# This else part is here to store VAT commands.
# VAT history is not used.
# TODO: Remove when VatExecutor is completely removed.
- item = "{cmd}".format(cmd=csit_papi_command)
- DICT__DUTS_PAPI_HISTORY[node['host']].append(item)
+ item = f"{csit_papi_command}"
+ DICT__DUTS_PAPI_HISTORY[node[u"host"]].append(item)
@staticmethod
def show_papi_history(node):
@@ -103,12 +102,11 @@ class PapiHistory(object):
:param node: DUT node to show PAPI command history for.
:type node: dict
"""
- history_list = DICT__DUTS_PAPI_HISTORY[node['host']]
+ history_list = DICT__DUTS_PAPI_HISTORY[node[u"host"]]
if not history_list:
- history_list = ("No PAPI command executed", )
- logger.info(
- "{0} PAPI command history:\n{1}\n".format(
- node['host'], "\n".join(history_list)))
+ history_list = (u"No PAPI command executed", )
+ history = u'\n'.join(history_list)
+ logger.info(f"{node[u'host']} PAPI command history:\n{history}\n")
@staticmethod
def show_papi_history_on_all_duts(nodes):
@@ -118,7 +116,7 @@ class PapiHistory(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
PapiHistory.show_papi_history(node)
diff --git a/resources/libraries/python/Policer.py b/resources/libraries/python/Policer.py
index a51f99609c..f6a852e417 100644
--- a/resources/libraries/python/Policer.py
+++ b/resources/libraries/python/Policer.py
@@ -81,7 +81,7 @@ class DSCP(IntEnum):
D_EF = 46
-class Policer(object):
+class Policer:
"""Policer utilities."""
# pylint: disable=too-many-arguments, too-many-locals
@@ -128,50 +128,49 @@ class Policer(object):
:type exceed_dscp: str
:type violate_dscp: str
"""
- cmd = 'policer_add_del'
+ cmd = u"policer_add_del"
args = dict(
is_add=int(is_add),
- name=str(policer_name),
+ name=str(policer_name).encode(encoding=u"utf-8"),
cir=int(cir),
eir=int(eir),
cb=int(cbs),
eb=int(ebs),
rate_type=getattr(PolicerRateType, rate_type.upper()).value,
round_type=getattr(
- PolicerRoundType, 'ROUND_TO_{rt}'.format(
- rt=round_type.upper())).value,
- type=getattr(PolicerType, 'TYPE_{pt}'.format(
- pt=policer_type.upper())).value,
+ PolicerRoundType, f"ROUND_TO_{round_type.upper()}"
+ ).value,
+ type=getattr(PolicerType, f"TYPE_{policer_type.upper()}").value,
conform_action_type=getattr(
- PolicerAction, conform_action_type.upper()).value,
- conform_dscp=getattr(DSCP, 'D_{dscp}'.format(
- dscp=conform_dscp.upper())).value
+ PolicerAction, conform_action_type.upper()
+ ).value,
+ conform_dscp=getattr(DSCP, f"D_{conform_dscp.upper()}").value
if
conform_action_type.upper() == PolicerAction.MARK_AND_TRANSMIT.name
else 0,
exceed_action_type=getattr(
- PolicerAction, exceed_action_type.upper()).value,
- exceed_dscp=getattr(DSCP, 'D_{dscp}'.format(
- dscp=exceed_dscp.upper())).value
+ PolicerAction, exceed_action_type.upper()
+ ).value,
+ exceed_dscp=getattr(DSCP, f"D_{exceed_dscp.upper()}").value
if
exceed_action_type.upper() == PolicerAction.MARK_AND_TRANSMIT.name
else 0,
violate_action_type=getattr(
- PolicerAction, violate_action_type.upper()).value,
- violate_dscp=getattr(DSCP, 'D_{dscp}'.format(
- dscp=violate_dscp.upper())).value
+ PolicerAction, violate_action_type.upper()
+ ).value,
+ violate_dscp=getattr(DSCP, f"D_{violate_dscp.upper()}").value
if
violate_action_type.upper() == PolicerAction.MARK_AND_TRANSMIT.name
else 0,
- color_aware=1 if color_aware == "'ca'" else 0
+ color_aware=1 if color_aware == u"'ca'" else 0
)
- err_msg = 'Failed to configure policer {pn} on host {host}'.format(
- pn=policer_name, host=node['host'])
+ err_msg = f"Failed to configure policer {policer_name} " \
+ f"on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)
- return reply['policer_index']
+ return reply[u"policer_index"]
@staticmethod
def policer_classify_set_interface(
@@ -196,13 +195,12 @@ class Policer(object):
:type ip6_table_index: int
:type l2_table_index: int
"""
- if isinstance(interface, basestring):
+ if isinstance(interface, str):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
- cmd = 'policer_classify_set_interface'
-
+ cmd = u"policer_classify_set_interface"
args = dict(
is_add=int(is_add),
sw_if_index=sw_if_index,
@@ -210,8 +208,8 @@ class Policer(object):
ip6_table_index=int(ip6_table_index),
l2_table_index=int(l2_table_index)
)
- err_msg = 'Failed to set/unset policer classify interface {ifc} ' \
- 'on host {host}'.format(ifc=interface, host=node['host'])
+ err_msg = f"Failed to set/unset policer classify interface " \
+ f"{interface} on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -236,4 +234,4 @@ class Policer(object):
:returns: DSCP numeric value.
:rtype: int
"""
- return getattr(DSCP, 'D_{dscp}'.format(dscp=dscp.upper())).value
+ return getattr(DSCP, f"D_{dscp.upper()}").value
diff --git a/resources/libraries/python/PythonThree.py b/resources/libraries/python/PythonThree.py
deleted file mode 100644
index 6ecea80173..0000000000
--- a/resources/libraries/python/PythonThree.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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:
-#
-# 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.
-
-"""Library holding utility functions to be replaced by later Python builtins."""
-
-from robot.api import logger
-
-
-def raise_from(raising, excepted, level="WARN"):
- """Function to be replaced by "raise from" in Python 3.
-
- Neither "six" nor "future" offer good enough implementation right now.
- chezsoi.org/lucas/blog/displaying-chained-exceptions-stacktraces-in-python-2
-
- Current implementation just logs the excepted error, and raises the new one.
- For allower log level values, see:
- robot-framework.readthedocs.io/en/latest/autodoc/robot.api.html#log-levels
-
- :param raising: The exception to raise.
- :param excepted: The exception we excepted and want to log.
- :param level: Robot logger logging level to log with.
- :type raising: BaseException
- :type excepted: BaseException
- :type level: str
- :raises: raising
- """
- logger.write("Excepted: {exc!r}\nRaising: {rai!r}".format(
- exc=excepted, rai=raising), level)
- raise raising
diff --git a/resources/libraries/python/QemuManager.py b/resources/libraries/python/QemuManager.py
index ad205c87a5..cfc4fbd7c9 100644
--- a/resources/libraries/python/QemuManager.py
+++ b/resources/libraries/python/QemuManager.py
@@ -20,14 +20,14 @@ from resources.libraries.python.CpuUtils import CpuUtils
from resources.libraries.python.QemuUtils import QemuUtils
from resources.libraries.python.topology import NodeType, Topology
-__all__ = ["QemuManager"]
+__all__ = [u"QemuManager"]
-class QemuManager(object):
+class QemuManager:
"""QEMU lifecycle management class"""
# Use one instance of class per tests.
- ROBOT_LIBRARY_SCOPE = 'TEST CASE'
+ ROBOT_LIBRARY_SCOPE = u"TEST CASE"
def __init__(self, nodes):
"""Init QemuManager object."""
@@ -46,57 +46,62 @@ class QemuManager(object):
:param kwargs: Named parameters.
:type kwargs: dict
"""
- node = kwargs['node']
- nf_chains = int(kwargs['nf_chains'])
- nf_nodes = int(kwargs['nf_nodes'])
- queues = kwargs['rxq_count_int'] if kwargs['auto_scale'] else 1
- vs_dtc = kwargs['vs_dtc']
- nf_dtc = kwargs['vs_dtc'] if kwargs['auto_scale'] else kwargs['nf_dtc']
- nf_dtcr = kwargs['nf_dtcr'] if isinstance(kwargs['nf_dtcr'], int) else 2
+ node = kwargs[u"node"]
+ nf_chains = int(kwargs[u"nf_chains"])
+ nf_nodes = int(kwargs[u"nf_nodes"])
+ queues = kwargs[u"rxq_count_int"] if kwargs[u"auto_scale"] else 1
+ vs_dtc = kwargs[u"vs_dtc"]
+ nf_dtc = kwargs[u"vs_dtc"] if kwargs[u"auto_scale"] \
+ else kwargs[u"nf_dtc"]
+ nf_dtcr = kwargs[u"nf_dtcr"] \
+ if isinstance(kwargs[u"nf_dtcr"], int) else 2
img = Constants.QEMU_VM_KERNEL
for nf_chain in range(1, nf_chains + 1):
for nf_node in range(1, nf_nodes + 1):
qemu_id = (nf_chain - 1) * nf_nodes + nf_node
- name = '{node}_{qemu_id}'.format(node=node, qemu_id=qemu_id)
- sock1 = '/var/run/vpp/sock-{qemu_id}-1'.format(qemu_id=qemu_id)
- sock2 = '/var/run/vpp/sock-{qemu_id}-2'.format(qemu_id=qemu_id)
+ name = f"{node}_{qemu_id}"
+ sock1 = f"/var/run/vpp/sock-{qemu_id}-1"
+ sock2 = f"/var/run/vpp/sock-{qemu_id}-2"
+ idx1 = (nf_chain - 1) * nf_nodes * 2 + nf_node * 2 - 1
vif1_mac = Topology.get_interface_mac(
- self.nodes[node], 'vhost{idx}'.format(
- idx=(nf_chain - 1) * nf_nodes * 2 + nf_node * 2 - 1)) \
- if kwargs['vnf'] == 'testpmd_mac' \
- else kwargs['tg_if1_mac'] if nf_node == 1 \
- else '52:54:00:00:{id:02x}:02'.format(id=qemu_id - 1)
+ self.nodes[node], f"vhost{idx1}"
+ ) if kwargs[u"vnf"] == u"testpmd_mac" \
+ else kwargs[u"tg_if1_mac"] if nf_node == 1 \
+ else f"52:54:00:00:{(qemu_id - 1):02x}:02"
+ idx2 = (nf_chain - 1) * nf_nodes * 2 + nf_node * 2
vif2_mac = Topology.get_interface_mac(
- self.nodes[node], 'vhost{idx}'.format(
- idx=(nf_chain - 1) * nf_nodes * 2 + nf_node * 2)) \
- if kwargs['vnf'] == 'testpmd_mac' \
- else kwargs['tg_if2_mac'] if nf_node == nf_nodes \
- else '52:54:00:00:{id:02x}:01'.format(id=qemu_id + 1)
+ self.nodes[node], f"vhost{idx2}"
+ ) if kwargs[u"vnf"] == u"testpmd_mac" \
+ else kwargs[u"tg_if2_mac"] if nf_node == nf_nodes \
+ else f"52:54:00:00:{(qemu_id + 1):02x}:01"
self.machines_affinity[name] = CpuUtils.get_affinity_nf(
nodes=self.nodes, node=node, nf_chains=nf_chains,
nf_nodes=nf_nodes, nf_chain=nf_chain, nf_node=nf_node,
- vs_dtc=vs_dtc, nf_dtc=nf_dtc, nf_dtcr=nf_dtcr)
+ vs_dtc=vs_dtc, nf_dtc=nf_dtc, nf_dtcr=nf_dtcr
+ )
self.machines[name] = QemuUtils(
node=self.nodes[node], qemu_id=qemu_id,
smp=len(self.machines_affinity[name]), mem=4096,
- vnf=kwargs['vnf'], img=img)
+ vnf=kwargs[u"vnf"], img=img
+ )
self.machines[name].configure_kernelvm_vnf(
- mac1='52:54:00:00:{id:02x}:01'.format(id=qemu_id),
- mac2='52:54:00:00:{id:02x}:02'.format(id=qemu_id),
- vif1_mac=vif1_mac,
- vif2_mac=vif2_mac,
- queues=queues,
- jumbo_frames=kwargs['jumbo'])
+ mac1=f"52:54:00:00:{qemu_id:02x}:01",
+ mac2=f"52:54:00:00:{qemu_id:02x}:02",
+ vif1_mac=vif1_mac, vif2_mac=vif2_mac, queues=queues,
+ jumbo_frames=kwargs[u"jumbo"]
+ )
self.machines[name].qemu_add_vhost_user_if(
- sock1, jumbo_frames=kwargs['jumbo'], queues=queues,
- queue_size=kwargs['perf_qemu_qsz'])
+ sock1, jumbo_frames=kwargs[u"jumbo"], queues=queues,
+ queue_size=kwargs[u"perf_qemu_qsz"]
+ )
self.machines[name].qemu_add_vhost_user_if(
- sock2, jumbo_frames=kwargs['jumbo'], queues=queues,
- queue_size=kwargs['perf_qemu_qsz'])
+ sock2, jumbo_frames=kwargs[u"jumbo"], queues=queues,
+ queue_size=kwargs[u"perf_qemu_qsz"]
+ )
def construct_vms_on_all_nodes(self, **kwargs):
"""Construct 1..Mx1..N VMs(s) with specified name on all nodes.
@@ -106,7 +111,7 @@ class QemuManager(object):
"""
self.initialize()
for node in self.nodes:
- if self.nodes[node]['type'] == NodeType.DUT:
+ if self.nodes[node][u"type"] == NodeType.DUT:
self.construct_vms_on_node(node=node, **kwargs)
def start_all_vms(self, pinning=False):
@@ -115,8 +120,8 @@ class QemuManager(object):
:param pinning: If True, then do also QEMU process pinning.
:type pinning: bool
"""
- for machine, machine_affinity in zip(self.machines.values(),
- self.machines_affinity.values()):
+ for machine, machine_affinity in \
+ zip(self.machines.values(), self.machines_affinity.values()):
machine.qemu_start()
if pinning:
machine.qemu_set_affinity(*machine_affinity)
diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py
index 17b5eabdc4..96b4ebdaf4 100644
--- a/resources/libraries/python/QemuUtils.py
+++ b/resources/libraries/python/QemuUtils.py
@@ -14,31 +14,34 @@
"""QEMU utilities library."""
import json
+
from re import match
from string import Template
from time import sleep
from robot.api import logger
+
from resources.libraries.python.Constants import Constants
from resources.libraries.python.DpdkUtil import DpdkUtil
from resources.libraries.python.DUTSetup import DUTSetup
from resources.libraries.python.OptionString import OptionString
-from resources.libraries.python.VppConfigGenerator import VppConfigGenerator
-from resources.libraries.python.VPPUtil import VPPUtil
from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
+from resources.libraries.python.VppConfigGenerator import VppConfigGenerator
+from resources.libraries.python.VPPUtil import VPPUtil
-__all__ = ["QemuUtils"]
+__all__ = [u"QemuUtils"]
-class QemuUtils(object):
+class QemuUtils:
"""QEMU utilities."""
# Use one instance of class per tests.
- ROBOT_LIBRARY_SCOPE = 'TEST CASE'
+ ROBOT_LIBRARY_SCOPE = u"TEST CASE"
- def __init__(self, node, qemu_id=1, smp=1, mem=512, vnf=None,
- img=Constants.QEMU_VM_IMAGE):
+ def __init__(
+ self, node, qemu_id=1, smp=1, mem=512, vnf=None,
+ img=Constants.QEMU_VM_IMAGE):
"""Initialize QemuUtil class.
:param node: Node to run QEMU on.
@@ -57,138 +60,143 @@ class QemuUtils(object):
self._vhost_id = 0
self._node = node
self._arch = Topology.get_node_arch(self._node)
- dpdk_target = 'arm64-armv8a' if self._arch == 'aarch64' \
- else 'x86_64-native'
- self._testpmd_path = '{path}/{dpdk_target}-linuxapp-gcc/app'\
- .format(path=Constants.QEMU_VM_DPDK, dpdk_target=dpdk_target)
+ dpdk_target = u"arm64-armv8a" if self._arch == u"aarch64" \
+ else u"x86_64-native"
+ self._testpmd_path = f"{Constants.QEMU_VM_DPDK}/" \
+ f"{dpdk_target}-linuxapp-gcc/app"
self._vm_info = {
- 'host': node['host'],
- 'type': NodeType.VM,
- 'port': 10021 + qemu_id,
- 'serial': 4555 + qemu_id,
- 'username': 'cisco',
- 'password': 'cisco',
- 'interfaces': {},
+ u"host": node[u"host"],
+ u"type": NodeType.VM,
+ u"port": 10021 + qemu_id,
+ u"serial": 4555 + qemu_id,
+ u"username": 'cisco',
+ u"password": 'cisco',
+ u"interfaces": {},
}
- if node['port'] != 22:
- self._vm_info['host_port'] = node['port']
- self._vm_info['host_username'] = node['username']
- self._vm_info['host_password'] = node['password']
+ if node[u"port"] != 22:
+ self._vm_info[u"host_port"] = node[u"port"]
+ self._vm_info[u"host_username"] = node[u"username"]
+ self._vm_info[u"host_password"] = node[u"password"]
# Input Options.
self._opt = dict()
- self._opt['qemu_id'] = qemu_id
- self._opt['mem'] = int(mem)
- self._opt['smp'] = int(smp)
- self._opt['img'] = img
- self._opt['vnf'] = vnf
+ self._opt[u"qemu_id"] = qemu_id
+ self._opt[u"mem"] = int(mem)
+ self._opt[u"smp"] = int(smp)
+ self._opt[u"img"] = img
+ self._opt[u"vnf"] = vnf
# Temporary files.
self._temp = dict()
- self._temp['pidfile'] = '/var/run/qemu_{id}.pid'.format(id=qemu_id)
+ self._temp[u"pidfile"] = f"/var/run/qemu_{qemu_id}.pid"
if img == Constants.QEMU_VM_IMAGE:
- self._opt['vm_type'] = 'nestedvm'
- self._temp['qmp'] = '/var/run/qmp_{id}.sock'.format(id=qemu_id)
- self._temp['qga'] = '/var/run/qga_{id}.sock'.format(id=qemu_id)
+ self._opt[u"vm_type"] = u"nestedvm"
+ self._temp[u"qmp"] = f"/var/run/qmp_{qemu_id}.sock"
+ self._temp[u"qga"] = f"/var/run/qga_{qemu_id}.sock"
elif img == Constants.QEMU_VM_KERNEL:
- self._opt['img'], _ = exec_cmd_no_error(
- node,
- 'ls -1 {img}* | tail -1'.format(img=Constants.QEMU_VM_KERNEL),
- message='Qemu Kernel VM image not found!')
- self._opt['vm_type'] = 'kernelvm'
- self._temp['log'] = '/tmp/serial_{id}.log'.format(id=qemu_id)
- self._temp['ini'] = '/etc/vm_init_{id}.conf'.format(id=qemu_id)
- self._opt['initrd'], _ = exec_cmd_no_error(
- node,
- 'ls -1 {initrd}* | tail -1'.format(
- initrd=Constants.QEMU_VM_KERNEL_INITRD),
- message='Qemu Kernel initrd image not found!')
+ self._opt[u"img"], _ = exec_cmd_no_error(
+ node, f"ls -1 {Constants.QEMU_VM_KERNEL}* | tail -1",
+ message=u"Qemu Kernel VM image not found!"
+ )
+ self._opt[u"vm_type"] = u"kernelvm"
+ self._temp[u"log"] = f"/tmp/serial_{qemu_id}.log"
+ self._temp[u"ini"] = f"/etc/vm_init_{qemu_id}.conf"
+ self._opt[u"initrd"], _ = exec_cmd_no_error(
+ node, f"ls -1 {Constants.QEMU_VM_KERNEL_INITRD}* | tail -1",
+ message=u"Qemu Kernel initrd image not found!"
+ )
else:
- raise RuntimeError('QEMU: Unknown VM image option: {}'.format(img))
+ raise RuntimeError(f"QEMU: Unknown VM image option: {img}")
# Computed parameters for QEMU command line.
- self._params = OptionString(prefix='-')
+ self._params = OptionString(prefix=u"-")
self.add_params()
def add_params(self):
"""Set QEMU command line parameters."""
self.add_default_params()
- if self._opt.get('vm_type', '') == 'nestedvm':
+ if self._opt.get(u"vm_type", u"") == u"nestedvm":
self.add_nestedvm_params()
- elif self._opt.get('vm_type', '') == 'kernelvm':
+ elif self._opt.get(u"vm_type", u"") == u"kernelvm":
self.add_kernelvm_params()
else:
- raise RuntimeError('QEMU: Unsupported VM type!')
+ raise RuntimeError(u"QEMU: Unsupported VM type!")
def add_default_params(self):
"""Set default QEMU command line parameters."""
- self._params.add('daemonize')
- self._params.add('nodefaults')
- self._params.add_with_value('name', 'vnf{qemu},debug-threads=on'.format(
- qemu=self._opt.get('qemu_id')))
- self._params.add('no-user-config')
- self._params.add_with_value('monitor', 'none')
- self._params.add_with_value('display', 'none')
- self._params.add_with_value('vga', 'none')
- self._params.add('enable-kvm')
- self._params.add_with_value('pidfile', self._temp.get('pidfile'))
- self._params.add_with_value('cpu', 'host')
-
- if self._arch == 'aarch64':
- machine_args = 'virt,accel=kvm,usb=off,mem-merge=off,gic-version=3'
- else:
- machine_args = 'pc,accel=kvm,usb=off,mem-merge=off'
+ self._params.add(u"daemonize")
+ self._params.add(u"nodefaults")
self._params.add_with_value(
- 'machine', machine_args)
- self._params.add_with_value(
- 'smp', '{smp},sockets=1,cores={smp},threads=1'.format(
- smp=self._opt.get('smp')))
+ u"name", f"vnf{self._opt.get(u'qemu_id')},debug-threads=on"
+ )
+ self._params.add(u"no-user-config")
+ self._params.add_with_value(u"monitor", u"none")
+ self._params.add_with_value(u"display", u"none")
+ self._params.add_with_value(u"vga", u"none")
+ self._params.add(u"enable-kvm")
+ self._params.add_with_value(u"pidfile", self._temp.get(u"pidfile"))
+ self._params.add_with_value(u"cpu", u"host")
+
+ if self._arch == u"aarch64":
+ machine_args = u"virt,accel=kvm,usb=off,mem-merge=off,gic-version=3"
+ else:
+ machine_args = u"pc,accel=kvm,usb=off,mem-merge=off"
+ self._params.add_with_value(u"machine", machine_args)
self._params.add_with_value(
- 'object', 'memory-backend-file,id=mem,size={mem}M,'
- 'mem-path=/dev/hugepages,share=on'.format(mem=self._opt.get('mem')))
+ u"smp", f"{self._opt.get(u'smp')},sockets=1,"
+ f"cores={self._opt.get(u'smp')},threads=1"
+ )
self._params.add_with_value(
- 'm', '{mem}M'.format(mem=self._opt.get('mem')))
- self._params.add_with_value('numa', 'node,memdev=mem')
- self._params.add_with_value('balloon', 'none')
+ u"object", f"memory-backend-file,id=mem,"
+ f"size={self._opt.get(u'mem')}M,mem-path=/dev/hugepages,share=on"
+ )
+ self._params.add_with_value(u"m", f"{self._opt.get(u'mem')}M")
+ self._params.add_with_value(u"numa", u"node,memdev=mem")
+ self._params.add_with_value(u"balloon", u"none")
def add_nestedvm_params(self):
"""Set NestedVM QEMU parameters."""
self._params.add_with_value(
- 'net', 'nic,macaddr=52:54:00:00:{qemu:02x}:ff'.format(
- qemu=self._opt.get('qemu_id')))
+ u"net",
+ f"nic,macaddr=52:54:00:00:{self._opt.get(u'qemu_id'):02x}:ff"
+ )
self._params.add_with_value(
- 'net', 'user,hostfwd=tcp::{info[port]}-:22'.format(
- info=self._vm_info))
- locking = ',file.locking=off'
+ u"net", f"user,hostfwd=tcp::{self._vm_info[u'port']}-:22"
+ )
+ locking = u",file.locking=off"
self._params.add_with_value(
- 'drive', 'file={img},format=raw,cache=none,if=virtio{locking}'.
- format(img=self._opt.get('img'), locking=locking))
+ u"drive", f"file={self._opt.get(u'img')},"
+ f"format=raw,cache=none,if=virtio{locking}"
+ )
self._params.add_with_value(
- 'qmp', 'unix:{qmp},server,nowait'.format(qmp=self._temp.get('qmp')))
+ u"qmp", f"unix:{self._temp.get(u'qmp')},server,nowait"
+ )
self._params.add_with_value(
- 'chardev', 'socket,host=127.0.0.1,port={info[serial]},'
- 'id=gnc0,server,nowait'.format(info=self._vm_info))
- self._params.add_with_value('device', 'isa-serial,chardev=gnc0')
+ u"chardev", f"socket,host=127.0.0.1,"
+ f"port={self._vm_info[u'serial']},id=gnc0,server,nowait")
+ self._params.add_with_value(u"device", u"isa-serial,chardev=gnc0")
self._params.add_with_value(
- 'chardev', 'socket,path={qga},server,nowait,id=qga0'.format(
- qga=self._temp.get('qga')))
- self._params.add_with_value('device', 'isa-serial,chardev=qga0')
+ u"chardev", f"socket,path={self._temp.get(u'qga')},"
+ f"server,nowait,id=qga0"
+ )
+ self._params.add_with_value(u"device", u"isa-serial,chardev=qga0")
def add_kernelvm_params(self):
"""Set KernelVM QEMU parameters."""
- console = 'ttyAMA0' if self._arch == 'aarch64' else 'ttyS0'
- self._params.add_with_value('serial', 'file:{log}'.format(
- log=self._temp.get('log')))
+ console = u"ttyAMA0" if self._arch == u"aarch64" else u"ttyS0"
self._params.add_with_value(
- 'fsdev', 'local,id=root9p,path=/,security_model=none')
+ u"serial", f"file:{self._temp.get(u'log')}"
+ )
self._params.add_with_value(
- 'device', 'virtio-9p-pci,fsdev=root9p,mount_tag=virtioroot')
+ u"fsdev", u"local,id=root9p,path=/,security_model=none"
+ )
self._params.add_with_value(
- 'kernel', '{img}'.format(img=self._opt.get('img')))
+ u"device", u"virtio-9p-pci,fsdev=root9p,mount_tag=virtioroot"
+ )
+ self._params.add_with_value(u"kernel", f"{self._opt.get(u'img')}")
+ self._params.add_with_value(u"initrd", f"{self._opt.get(u'initrd')}")
self._params.add_with_value(
- 'initrd', '{initrd}'.format(initrd=self._opt.get('initrd')))
- self._params.add_with_value(
- 'append', '"ro rootfstype=9p rootflags=trans=virtio '
- 'root=virtioroot console={console} tsc=reliable '
- 'hugepages=256 init={init} fastboot"'.format(
- console=console, init=self._temp.get('ini')))
+ u"append", f"'ro rootfstype=9p rootflags=trans=virtio "
+ f"root=virtioroot console={console} tsc=reliable hugepages=256 "
+ f"init={self._temp.get(u'ini')} fastboot'"
+ )
def create_kernelvm_config_vpp(self, **kwargs):
"""Create QEMU VPP config files.
@@ -197,15 +205,12 @@ class QemuUtils(object):
file.
:type kwargs: dict
"""
- startup = ('/etc/vpp/vm_startup_{id}.conf'.
- format(id=self._opt.get('qemu_id')))
- running = ('/etc/vpp/vm_running_{id}.exec'.
- format(id=self._opt.get('qemu_id')))
+ startup = f"/etc/vpp/vm_startup_{self._opt.get(u'qemu_id')}.conf"
+ running = f"/etc/vpp/vm_running_{self._opt.get(u'qemu_id')}.exec"
- self._temp['startup'] = startup
- self._temp['running'] = running
- self._opt['vnf_bin'] = ('/usr/bin/vpp -c {startup}'.
- format(startup=startup))
+ self._temp[u"startup"] = startup
+ self._temp[u"running"] = running
+ self._opt[u"vnf_bin"] = f"/usr/bin/vpp -c {startup}"
# Create VPP startup configuration.
vpp_config = VppConfigGenerator()
@@ -214,31 +219,29 @@ class QemuUtils(object):
vpp_config.add_unix_cli_listen()
vpp_config.add_unix_exec(running)
vpp_config.add_socksvr()
- vpp_config.add_cpu_main_core('0')
- if self._opt.get('smp') > 1:
- vpp_config.add_cpu_corelist_workers('1-{smp}'.format(
- smp=self._opt.get('smp')-1))
- vpp_config.add_dpdk_dev('0000:00:06.0', '0000:00:07.0')
- vpp_config.add_dpdk_dev_default_rxq(kwargs['queues'])
- vpp_config.add_dpdk_log_level('debug')
- if not kwargs['jumbo_frames']:
+ vpp_config.add_cpu_main_core(u"0")
+ if self._opt.get(u"smp") > 1:
+ vpp_config.add_cpu_corelist_workers(f"1-{self._opt.get(u'smp')-1}")
+ vpp_config.add_dpdk_dev(u"0000:00:06.0", u"0000:00:07.0")
+ vpp_config.add_dpdk_dev_default_rxq(kwargs[u"queues"])
+ vpp_config.add_dpdk_log_level(u"debug")
+ if not kwargs[u"jumbo_frames"]:
vpp_config.add_dpdk_no_multi_seg()
vpp_config.add_dpdk_no_tx_checksum_offload()
- vpp_config.add_plugin('disable', 'default')
- vpp_config.add_plugin('enable', 'dpdk_plugin.so')
+ vpp_config.add_plugin(u"disable", [u"default"])
+ vpp_config.add_plugin(u"enable", [u"dpdk_plugin.so"])
vpp_config.write_config(startup)
# Create VPP running configuration.
- template = '{res}/{tpl}.exec'.format(res=Constants.RESOURCES_TPL_VM,
- tpl=self._opt.get('vnf'))
- exec_cmd_no_error(self._node, 'rm -f {running}'.format(running=running),
- sudo=True)
+ template = f"{Constants.RESOURCES_TPL_VM}/{self._opt.get(u'vnf')}.exec"
+ exec_cmd_no_error(self._node, f"rm -f {running}", sudo=True)
- with open(template, 'r') as src_file:
+ with open(template, "r") as src_file:
src = Template(src_file.read())
exec_cmd_no_error(
- self._node, "echo '{out}' | sudo tee {running}".format(
- out=src.safe_substitute(**kwargs), running=running))
+ self._node, f"echo '{src.safe_substitute(**kwargs)}' | "
+ f"sudo tee {running}"
+ )
def create_kernelvm_config_testpmd_io(self, **kwargs):
"""Create QEMU testpmd-io command line.
@@ -247,19 +250,18 @@ class QemuUtils(object):
:type kwargs: dict
"""
testpmd_cmd = DpdkUtil.get_testpmd_cmdline(
- eal_corelist='0-{smp}'.format(smp=self._opt.get('smp') - 1),
+ eal_corelist=f"0-{self._opt.get(u'smp') - 1}",
eal_driver=False,
eal_in_memory=True,
pmd_num_mbufs=16384,
- pmd_rxq=kwargs['queues'],
- pmd_txq=kwargs['queues'],
+ pmd_rxq=kwargs[u"queues"],
+ pmd_txq=kwargs[u"queues"],
pmd_tx_offloads='0x0',
pmd_disable_hw_vlan=False,
- pmd_nb_cores=str(self._opt.get('smp') - 1))
+ pmd_nb_cores=str(self._opt.get(u"smp") - 1)
+ )
- self._opt['vnf_bin'] = ('{testpmd_path}/{testpmd_cmd}'.
- format(testpmd_path=self._testpmd_path,
- testpmd_cmd=testpmd_cmd))
+ self._opt[u"vnf_bin"] = f"{self._testpmd_path}/{testpmd_cmd}"
def create_kernelvm_config_testpmd_mac(self, **kwargs):
"""Create QEMU testpmd-mac command line.
@@ -268,22 +270,21 @@ class QemuUtils(object):
:type kwargs: dict
"""
testpmd_cmd = DpdkUtil.get_testpmd_cmdline(
- eal_corelist='0-{smp}'.format(smp=self._opt.get('smp') - 1),
+ eal_corelist=f"0-{self._opt.get(u'smp') - 1}",
eal_driver=False,
eal_in_memory=True,
pmd_num_mbufs=16384,
- pmd_fwd_mode='mac',
- pmd_eth_peer_0='0,{mac}'.format(mac=kwargs['vif1_mac']),
- pmd_eth_peer_1='1,{mac}'.format(mac=kwargs['vif2_mac']),
- pmd_rxq=kwargs['queues'],
- pmd_txq=kwargs['queues'],
- pmd_tx_offloads='0x0',
+ pmd_fwd_mode=u"mac",
+ pmd_eth_peer_0=f"0,{kwargs[u'vif1_mac']}",
+ pmd_eth_peer_1=f"1,{kwargs[u'vif2_mac']}",
+ pmd_rxq=kwargs[u"queues"],
+ pmd_txq=kwargs[u"queues"],
+ pmd_tx_offloads=u"0x0",
pmd_disable_hw_vlan=False,
- pmd_nb_cores=str(self._opt.get('smp') - 1))
+ pmd_nb_cores=str(self._opt.get(u"smp") - 1)
+ )
- self._opt['vnf_bin'] = ('{testpmd_path}/{testpmd_cmd}'.
- format(testpmd_path=self._testpmd_path,
- testpmd_cmd=testpmd_cmd))
+ self._opt[u"vnf_bin"] = f"{self._testpmd_path}/{testpmd_cmd}"
def create_kernelvm_init(self, **kwargs):
"""Create QEMU init script.
@@ -291,18 +292,17 @@ class QemuUtils(object):
:param kwargs: Key-value pairs to replace content of init startup file.
:type kwargs: dict
"""
- template = '{res}/init.sh'.format(res=Constants.RESOURCES_TPL_VM)
- init = self._temp.get('ini')
- exec_cmd_no_error(
- self._node, 'rm -f {init}'.format(init=init), sudo=True)
+ template = f"{Constants.RESOURCES_TPL_VM}/init.sh"
+ init = self._temp.get(u"ini")
+ exec_cmd_no_error(self._node, f"rm -f {init}", sudo=True)
- with open(template, 'r') as src_file:
+ with open(template, "r") as src_file:
src = Template(src_file.read())
exec_cmd_no_error(
- self._node, "echo '{out}' | sudo tee {init}".format(
- out=src.safe_substitute(**kwargs), init=init))
- exec_cmd_no_error(
- self._node, "chmod +x {init}".format(init=init), sudo=True)
+ self._node, f"echo '{src.safe_substitute(**kwargs)}' | "
+ f"sudo tee {init}"
+ )
+ exec_cmd_no_error(self._node, f"chmod +x {init}", sudo=True)
def configure_kernelvm_vnf(self, **kwargs):
"""Create KernelVM VNF configurations.
@@ -310,15 +310,15 @@ class QemuUtils(object):
:param kwargs: Key-value pairs for templating configs.
:type kwargs: dict
"""
- if 'vpp' in self._opt.get('vnf'):
+ if u"vpp" in self._opt.get(u"vnf"):
self.create_kernelvm_config_vpp(**kwargs)
- elif 'testpmd_io' in self._opt.get('vnf'):
+ elif u"testpmd_io" in self._opt.get(u"vnf"):
self.create_kernelvm_config_testpmd_io(**kwargs)
- elif 'testpmd_mac' in self._opt.get('vnf'):
+ elif u"testpmd_mac" in self._opt.get(u"vnf"):
self.create_kernelvm_config_testpmd_mac(**kwargs)
else:
- raise RuntimeError('QEMU: Unsupported VNF!')
- self.create_kernelvm_init(vnf_bin=self._opt['vnf_bin'])
+ raise RuntimeError(u"QEMU: Unsupported VNF!")
+ self.create_kernelvm_init(vnf_bin=self._opt[u"vnf_bin"])
def get_qemu_pids(self):
"""Get QEMU CPU pids.
@@ -326,9 +326,9 @@ class QemuUtils(object):
:returns: List of QEMU CPU pids.
:rtype: list of str
"""
- command = ("grep -rwl 'CPU' /proc/$(sudo cat {pidfile})/task/*/comm ".
- format(pidfile=self._temp.get('pidfile')))
- command += (r"| xargs dirname | sed -e 's/\/.*\///g' | uniq")
+ command = f"grep -rwl 'CPU' /proc/$(sudo cat " \
+ f"{self._temp.get(u'pidfile')})/task/*/comm "
+ command += r"| xargs dirname | sed -e 's/\/.*\///g' | uniq"
stdout, _ = exec_cmd_no_error(self._node, command)
return stdout.splitlines()
@@ -349,19 +349,19 @@ class QemuUtils(object):
sleep(1)
continue
for qemu_cpu, host_cpu in zip(qemu_cpus, host_cpus):
- command = ('taskset -pc {host_cpu} {thread}'.
- format(host_cpu=host_cpu, thread=qemu_cpu))
- message = ('QEMU: Set affinity failed on {host}!'.
- format(host=self._node['host']))
- exec_cmd_no_error(self._node, command, sudo=True,
- message=message)
+ command = f"taskset -pc {host_cpu} {qemu_cpu}"
+ message = f"QEMU: Set affinity failed " \
+ f"on {self._node[u'host']}!"
+ exec_cmd_no_error(
+ self._node, command, sudo=True, message=message
+ )
break
except (RuntimeError, ValueError):
self.qemu_kill_all()
raise
else:
self.qemu_kill_all()
- raise RuntimeError('Failed to set Qemu threads affinity!')
+ raise RuntimeError(u"Failed to set Qemu threads affinity!")
def qemu_set_scheduler_policy(self):
"""Set scheduler policy to SCHED_RR with priority 1 for all Qemu CPU
@@ -373,18 +373,18 @@ class QemuUtils(object):
qemu_cpus = self.get_qemu_pids()
for qemu_cpu in qemu_cpus:
- command = ('chrt -r -p 1 {thread}'.
- format(thread=qemu_cpu))
- message = ('QEMU: Set SCHED_RR failed on {host}'.
- format(host=self._node['host']))
- exec_cmd_no_error(self._node, command, sudo=True,
- message=message)
+ command = f"chrt -r -p 1 {qemu_cpu}"
+ message = f"QEMU: Set SCHED_RR failed on {self._node[u'host']}"
+ exec_cmd_no_error(
+ self._node, command, sudo=True, message=message
+ )
except (RuntimeError, ValueError):
self.qemu_kill_all()
raise
- def qemu_add_vhost_user_if(self, socket, server=True, jumbo_frames=False,
- queue_size=None, queues=1):
+ def qemu_add_vhost_user_if(
+ self, socket, server=True, jumbo_frames=False, queue_size=None,
+ queues=1):
"""Add Vhost-user interface.
:param socket: Path of the unix socket.
@@ -400,30 +400,29 @@ class QemuUtils(object):
"""
self._vhost_id += 1
self._params.add_with_value(
- 'chardev', 'socket,id=char{vhost},path={socket}{server}'.format(
- vhost=self._vhost_id, socket=socket,
- server=',server' if server is True else ''))
+ u"chardev", f"socket,id=char{self._vhost_id},"
+ f"path={socket}{u',server' if server is True else u''}"
+ )
self._params.add_with_value(
- 'netdev', 'vhost-user,id=vhost{vhost},chardev=char{vhost},'
- 'queues={queues}'.format(vhost=self._vhost_id, queues=queues))
- mac = ('52:54:00:00:{qemu:02x}:{vhost:02x}'.
- format(qemu=self._opt.get('qemu_id'), vhost=self._vhost_id))
- queue_size = ('rx_queue_size={queue_size},tx_queue_size={queue_size}'.
- format(queue_size=queue_size)) if queue_size else ''
- mbuf = 'on,host_mtu=9200'
+ u"netdev", f"vhost-user,id=vhost{self._vhost_id},"
+ f"chardev=char{self._vhost_id},queues={queues}"
+ )
+ mac = f"52:54:00:00:{self._opt.get(u'qemu_id'):02x}:" \
+ f"{self._vhost_id:02x}"
+ queue_size = f"rx_queue_size={queue_size},tx_queue_size={queue_size}" \
+ if queue_size else u""
+ mbuf = u"on,host_mtu=9200"
self._params.add_with_value(
- 'device', 'virtio-net-pci,netdev=vhost{vhost},mac={mac},'
- 'addr={addr}.0,mq=on,vectors={vectors},csum=off,gso=off,'
- 'guest_tso4=off,guest_tso6=off,guest_ecn=off,mrg_rxbuf={mbuf},'
- '{queue_size}'.format(
- addr=self._vhost_id+5, vhost=self._vhost_id, mac=mac,
- mbuf=mbuf if jumbo_frames else 'off', queue_size=queue_size,
- vectors=(2 * queues + 2)))
+ u"device", f"virtio-net-pci,netdev=vhost{self._vhost_id},mac={mac},"
+ f"addr={self._vhost_id+5}.0,mq=on,vectors={2 * queues + 2},"
+ f"csum=off,gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off,"
+ f"mrg_rxbuf={mbuf if jumbo_frames else u'off'},{queue_size}"
+ )
# Add interface MAC and socket to the node dict.
- if_data = {'mac_address': mac, 'socket': socket}
- if_name = 'vhost{vhost}'.format(vhost=self._vhost_id)
- self._vm_info['interfaces'][if_name] = if_data
+ if_data = {u"mac_address": mac, u"socket": socket}
+ if_name = f"vhost{self._vhost_id}"
+ self._vm_info[u"interfaces"][if_name] = if_data
# Add socket to temporary file list.
self._temp[if_name] = socket
@@ -439,32 +438,32 @@ class QemuUtils(object):
response will contain the "error" keyword instead of "return".
"""
# To enter command mode, the qmp_capabilities command must be issued.
- command = ('echo "{{ \\"execute\\": \\"qmp_capabilities\\" }}'
- '{{ \\"execute\\": \\"{cmd}\\" }}" | '
- 'sudo -S socat - UNIX-CONNECT:{qmp}'.
- format(cmd=cmd, qmp=self._temp.get('qmp')))
- message = ('QMP execute "{cmd}" failed on {host}'.
- format(cmd=cmd, host=self._node['host']))
+ command = f"echo \"{{{{ \\\"execute\\\": " \
+ f"\\\"qmp_capabilities\\\" }}}}" \
+ f"{{{{ \\\"execute\\\": \\\"{cmd}\\\" }}}}\" | " \
+ f"sudo -S socat - UNIX-CONNECT:{self._temp.get(u'qmp')}"
+ message = f"QMP execute '{cmd}' failed on {self._node[u'host']}"
+
stdout, _ = exec_cmd_no_error(
- self._node, command, sudo=False, message=message)
+ self._node, command, sudo=False, message=message
+ )
# Skip capabilities negotiation messages.
out_list = stdout.splitlines()
if len(out_list) < 3:
- raise RuntimeError(
- 'Invalid QMP output on {host}'.format(host=self._node['host']))
+ raise RuntimeError(f"Invalid QMP output on {self._node[u'host']}")
return json.loads(out_list[2])
def _qemu_qga_flush(self):
"""Flush the QGA parser state."""
- command = ('(printf "\xFF"; sleep 1) | '
- 'sudo -S socat - UNIX-CONNECT:{qga}'.
- format(qga=self._temp.get('qga')))
- message = ('QGA flush failed on {host}'.format(host=self._node['host']))
+ command = f"(printf \"\xFF\"; sleep 1) | sudo -S socat " \
+ f"- UNIX-CONNECT:{self._temp.get(u'qga')}"
+ message = f"QGA flush failed on {self._node[u'host']}"
stdout, _ = exec_cmd_no_error(
- self._node, command, sudo=False, message=message)
+ self._node, command, sudo=False, message=message
+ )
- return json.loads(stdout.split('\n', 1)[0]) if stdout else dict()
+ return json.loads(stdout.split(u"\n", 1)[0]) if stdout else dict()
def _qemu_qga_exec(self, cmd):
"""Execute QGA command.
@@ -474,25 +473,25 @@ class QemuUtils(object):
:param cmd: QGA command to execute.
:type cmd: str
"""
- command = ('(echo "{{ \\"execute\\": \\"{cmd}\\" }}"; sleep 1) | '
- 'sudo -S socat - UNIX-CONNECT:{qga}'.
- format(cmd=cmd, qga=self._temp.get('qga')))
- message = ('QGA execute "{cmd}" failed on {host}'.
- format(cmd=cmd, host=self._node['host']))
+ command = f"(echo \"{{{{ \\\"execute\\\": " \
+ f"\\\"{cmd}\\\" }}}}\"; sleep 1) | " \
+ f"sudo -S socat - UNIX-CONNECT:{self._temp.get(u'qga')}"
+ message = f"QGA execute '{cmd}' failed on {self._node[u'host']}"
stdout, _ = exec_cmd_no_error(
- self._node, command, sudo=False, message=message)
+ self._node, command, sudo=False, message=message
+ )
- return json.loads(stdout.split('\n', 1)[0]) if stdout else dict()
+ return json.loads(stdout.split(u"\n", 1)[0]) if stdout else dict()
def _wait_until_vm_boot(self):
"""Wait until QEMU with NestedVM is booted."""
- if self._opt.get('vm_type') == 'nestedvm':
+ if self._opt.get(u"vm_type") == u"nestedvm":
self._wait_until_nestedvm_boot()
self._update_vm_interfaces()
- elif self._opt.get('vm_type') == 'kernelvm':
+ elif self._opt.get(u"vm_type") == u"kernelvm":
self._wait_until_kernelvm_boot()
else:
- raise RuntimeError('QEMU: Unsupported VM type!')
+ raise RuntimeError(u"QEMU: Unsupported VM type!")
def _wait_until_nestedvm_boot(self, retries=12):
"""Wait until QEMU with NestedVM is booted.
@@ -508,40 +507,39 @@ class QemuUtils(object):
try:
out = self._qemu_qga_flush()
except ValueError:
- logger.trace('QGA qga flush unexpected output {out}'.
- format(out=out))
+ logger.trace(f"QGA qga flush unexpected output {out}")
# Empty output - VM not booted yet
if not out:
sleep(5)
else:
break
else:
- raise RuntimeError('QEMU: Timeout, VM not booted on {host}!'.
- format(host=self._node['host']))
+ raise RuntimeError(
+ f"QEMU: Timeout, VM not booted on {self._node[u'host']}!"
+ )
for _ in range(retries):
out = None
try:
- out = self._qemu_qga_exec('guest-ping')
+ out = self._qemu_qga_exec(u"guest-ping")
except ValueError:
- logger.trace('QGA guest-ping unexpected output {out}'.
- format(out=out))
+ logger.trace(f"QGA guest-ping unexpected output {out}")
# Empty output - VM not booted yet.
if not out:
sleep(5)
# Non-error return - VM booted.
- elif out.get('return') is not None:
+ elif out.get(u"return") is not None:
break
# Skip error and wait.
- elif out.get('error') is not None:
+ elif out.get(u"error") is not None:
sleep(5)
else:
# If there is an unexpected output from QGA guest-info, try
# again until timeout.
- logger.trace('QGA guest-ping unexpected output {out}'.
- format(out=out))
+ logger.trace(f"QGA guest-ping unexpected output {out}")
else:
- raise RuntimeError('QEMU: Timeout, VM not booted on {host}!'.
- format(host=self._node['host']))
+ raise RuntimeError(
+ f"QEMU: Timeout, VM not booted on {self._node[u'host']}!"
+ )
def _wait_until_kernelvm_boot(self, retries=60):
"""Wait until QEMU KernelVM is booted.
@@ -552,47 +550,49 @@ class QemuUtils(object):
vpp_ver = VPPUtil.vpp_show_version(self._node)
for _ in range(retries):
- command = ('tail -1 {log}'.format(log=self._temp.get('log')))
+ command = f"tail -1 {self._temp.get(u'log')}"
stdout = None
try:
stdout, _ = exec_cmd_no_error(self._node, command, sudo=True)
sleep(1)
except RuntimeError:
pass
- if vpp_ver in stdout or 'Press enter to exit' in stdout:
+ if vpp_ver in stdout or u"Press enter to exit" in stdout:
break
- if 'reboot: Power down' in stdout:
- raise RuntimeError('QEMU: NF failed to run on {host}!'.
- format(host=self._node['host']))
+ if u"reboot: Power down" in stdout:
+ raise RuntimeError(
+ f"QEMU: NF failed to run on {self._node[u'host']}!"
+ )
else:
- raise RuntimeError('QEMU: Timeout, VM not booted on {host}!'.
- format(host=self._node['host']))
+ raise RuntimeError(
+ f"QEMU: Timeout, VM not booted on {self._node[u'host']}!"
+ )
def _update_vm_interfaces(self):
"""Update interface names in VM node dict."""
# Send guest-network-get-interfaces command via QGA, output example:
# {"return": [{"name": "eth0", "hardware-address": "52:54:00:00:04:01"},
# {"name": "eth1", "hardware-address": "52:54:00:00:04:02"}]}.
- out = self._qemu_qga_exec('guest-network-get-interfaces')
- interfaces = out.get('return')
+ out = self._qemu_qga_exec(u"guest-network-get-interfaces")
+ interfaces = out.get(u"return")
mac_name = {}
if not interfaces:
- raise RuntimeError('Get VM interface list failed on {host}'.
- format(host=self._node['host']))
+ raise RuntimeError(
+ f"Get VM interface list failed on {self._node[u'host']}"
+ )
# Create MAC-name dict.
for interface in interfaces:
- if 'hardware-address' not in interface:
+ if u"hardware-address" not in interface:
continue
- mac_name[interface['hardware-address']] = interface['name']
+ mac_name[interface[u"hardware-address"]] = interface[u"name"]
# Match interface by MAC and save interface name.
- for interface in self._vm_info['interfaces'].values():
- mac = interface.get('mac_address')
+ for interface in self._vm_info[u"interfaces"].values():
+ mac = interface.get(u"mac_address")
if_name = mac_name.get(mac)
if if_name is None:
- logger.trace(
- 'Interface name for MAC {mac} not found'.format(mac=mac))
+ logger.trace(f"Interface name for MAC {mac} not found")
else:
- interface['name'] = if_name
+ interface[u"name"] = if_name
def qemu_start(self):
"""Start QEMU and wait until VM boot.
@@ -601,17 +601,16 @@ class QemuUtils(object):
:rtype: dict
"""
cmd_opts = OptionString()
- cmd_opts.add('{bin_path}/qemu-system-{arch}'.format(
- bin_path=Constants.QEMU_BIN_PATH, arch=self._arch))
+ cmd_opts.add(f"{Constants.QEMU_BIN_PATH}/qemu-system-{self._arch}")
cmd_opts.extend(self._params)
- message = ('QEMU: Start failed on {host}!'.
- format(host=self._node['host']))
+ message = f"QEMU: Start failed on {self._node[u'host']}!"
try:
DUTSetup.check_huge_page(
- self._node, '/dev/hugepages', self._opt.get('mem'))
+ self._node, u"/dev/hugepages", self._opt.get(u"mem"))
exec_cmd_no_error(
- self._node, cmd_opts, timeout=300, sudo=True, message=message)
+ self._node, cmd_opts, timeout=300, sudo=True, message=message
+ )
self._wait_until_vm_boot()
except RuntimeError:
self.qemu_kill_all()
@@ -620,22 +619,25 @@ class QemuUtils(object):
def qemu_kill(self):
"""Kill qemu process."""
- exec_cmd(self._node, 'chmod +r {pidfile}'.
- format(pidfile=self._temp.get('pidfile')), sudo=True)
- exec_cmd(self._node, 'kill -SIGKILL $(cat {pidfile})'.
- format(pidfile=self._temp.get('pidfile')), sudo=True)
+ exec_cmd(
+ self._node, f"chmod +r {self._temp.get(u'pidfile')}", sudo=True
+ )
+ exec_cmd(
+ self._node, f"kill -SIGKILL $(cat {self._temp.get(u'pidfile')})",
+ sudo=True
+ )
for value in self._temp.values():
- exec_cmd(self._node, 'cat {value}'.format(value=value), sudo=True)
- exec_cmd(self._node, 'rm -f {value}'.format(value=value), sudo=True)
+ exec_cmd(self._node, f"cat {value}", sudo=True)
+ exec_cmd(self._node, f"rm -f {value}", sudo=True)
def qemu_kill_all(self):
"""Kill all qemu processes on DUT node if specified."""
- exec_cmd(self._node, 'pkill -SIGKILL qemu', sudo=True)
+ exec_cmd(self._node, u"pkill -SIGKILL qemu", sudo=True)
for value in self._temp.values():
- exec_cmd(self._node, 'cat {value}'.format(value=value), sudo=True)
- exec_cmd(self._node, 'rm -f {value}'.format(value=value), sudo=True)
+ exec_cmd(self._node, f"cat {value}", sudo=True)
+ exec_cmd(self._node, f"rm -f {value}", sudo=True)
def qemu_version(self):
"""Return Qemu version.
@@ -643,12 +645,11 @@ class QemuUtils(object):
:returns: Qemu version.
:rtype: str
"""
- command = ('{bin_path}/qemu-system-{arch} --version'.format(
- bin_path=Constants.QEMU_BIN_PATH,
- arch=self._arch))
+ command = f"{Constants.QEMU_BIN_PATH}/qemu-system-{self._arch} " \
+ f"--version"
try:
stdout, _ = exec_cmd_no_error(self._node, command, sudo=True)
- return match(r'QEMU emulator version ([\d.]*)', stdout).group(1)
+ return match(r"QEMU emulator version ([\d.]*)", stdout).group(1)
except RuntimeError:
self.qemu_kill_all()
raise
diff --git a/resources/libraries/python/SRv6.py b/resources/libraries/python/SRv6.py
index 24ebea7ccf..4d21733c28 100644
--- a/resources/libraries/python/SRv6.py
+++ b/resources/libraries/python/SRv6.py
@@ -14,6 +14,7 @@
"""Segment Routing over IPv6 data plane utilities library."""
from enum import IntEnum
+
from ipaddress import ip_address, IPv6Address
from resources.libraries.python.Constants import Constants
@@ -52,12 +53,9 @@ class SRv6PolicySteeringTypes(IntEnum):
SR_STEER_IPV6 = 6
-class SRv6(object):
+class SRv6:
"""SRv6 class."""
- def __init__(self):
- pass
-
@staticmethod
def create_srv6_sid_object(ip_addr):
"""Create SRv6 SID object.
@@ -67,7 +65,9 @@ class SRv6(object):
:returns: SRv6 SID object.
:rtype: dict
"""
- return dict(addr=IPv6Address(unicode(ip_addr)).packed)
+ return dict(
+ addr=IPv6Address(ip_addr).packed
+ )
@staticmethod
def create_srv6_sid_list(sids):
@@ -78,10 +78,16 @@ class SRv6(object):
:returns: SRv6 SID list object.
:rtype: list
"""
- sid_list = list(0 for _ in xrange(16))
- for i in xrange(len(sids)):
- sid_list[i] = SRv6.create_srv6_sid_object(sids[i])
- return dict(num_sids=len(sids), weight=1, sids=sid_list)
+ sid_list = [0] * 16
+
+ for index, item in enumerate(sids):
+ sid_list[index] = SRv6.create_srv6_sid_object(item)
+
+ return dict(
+ num_sids=len(sids),
+ weight=1,
+ sids=sid_list
+ )
@staticmethod
def configure_sr_localsid(
@@ -123,43 +129,42 @@ class SRv6(object):
:type sid_list: list
:raises ValueError: If required parameter is missing.
"""
- beh = behavior.replace('.', '_').upper()
+ beh = behavior.replace(u".", u"_").upper()
# There is no SRv6Behaviour enum defined for functions from SRv6 plugins
# so we need to use CLI command to configure it.
- if beh in (getattr(SRv6Behavior, 'END_AD').name,
- getattr(SRv6Behavior, 'END_AS').name,
- getattr(SRv6Behavior, 'END_AM').name):
- if beh == getattr(SRv6Behavior, 'END_AS').name:
+ if beh in (getattr(SRv6Behavior, u"END_AD").name,
+ getattr(SRv6Behavior, u"END_AS").name,
+ getattr(SRv6Behavior, u"END_AM").name):
+ if beh == getattr(SRv6Behavior, u"END_AS").name:
if next_hop is None or out_if is None or in_if is None or \
src_addr is None or sid_list is None:
raise ValueError(
- 'Required parameter(s) missing.\n'
- 'next_hop:{nh}\n'
- 'out_if:{oif}\n'
- 'in_if:{iif}\n'
- 'src_addr:{saddr}\n'
- 'sid_list:{sids}'.format(
- nh=next_hop, oif=out_if, iif=in_if, saddr=src_addr,
- sids=sid_list))
- sid_conf = 'next ' + ' next '.join(sid_list)
- params = 'nh {nh} oif {oif} iif {iif} src {saddr} {sids}'.\
- format(nh=next_hop, oif=out_if, iif=in_if, saddr=src_addr,
- sids=sid_conf)
+ f"Required parameter(s) missing.\n"
+ f"next_hop:{next_hop}\n "
+ f"out_if:{out_if}\n"
+ f"in_if:{in_if}\n"
+ f"src_addr:{src_addr}\n"
+ f"sid_list:{sid_list}"
+ )
+ sid_conf = f"next {u' next '.join(sid_list)}"
+ params = f"nh {next_hop} oif {out_if} iif {in_if} " \
+ f"src {src_addr} {sid_conf}"
else:
if next_hop is None or out_if is None or in_if is None:
raise ValueError(
- 'Required parameter(s) missing.\nnext_hop:{0}\n'
- 'out_if:{1}\nin_if:{2}'.format(next_hop, out_if, in_if))
- params = 'nh {0} oif {1} iif {2}'.format(
- next_hop, out_if, in_if)
+ f"Required parameter(s) missing.\n"
+ f"next_hop:{next_hop}\n"
+ f"out_if:{out_if}\n"
+ f"in_if:{in_if}"
+ )
+ params = f"nh {next_hop} oif {out_if} iif {in_if}"
- cli_cmd = 'sr localsid address {l_sid} behavior {beh} {params}'.\
- format(l_sid=local_sid, beh=behavior, params=params)
+ cli_cmd = f"sr localsid address {local_sid} behavior {behavior}" \
+ f"{params}"
PapiSocketExecutor.run_cli_cmd(node, cli_cmd)
- return
- cmd = 'sr_localsid_add_del'
+ cmd = u"sr_localsid_add_del"
args = dict(
is_del=0,
localsid=SRv6.create_srv6_sid_object(local_sid),
@@ -171,36 +176,41 @@ class SRv6(object):
nh_addr6=0,
nh_addr4=0
)
- err_msg = 'Failed to add SR localSID {lsid} on host {host}'.format(
- lsid=local_sid, host=node['host'])
-
- if beh in (getattr(SRv6Behavior, 'END_X').name,
- getattr(SRv6Behavior, 'END_DX4').name,
- getattr(SRv6Behavior, 'END_DX6').name):
+ err_msg = f"Failed to add SR localSID {local_sid} " \
+ f"host {node[u'host']}"
+ if beh in (getattr(SRv6Behavior, u"END_X").name,
+ getattr(SRv6Behavior, u"END_DX4").name,
+ getattr(SRv6Behavior, u"END_DX6").name):
if interface is None or next_hop is None:
- raise ValueError('Required parameter(s) missing.\n'
- 'interface:{ifc}\n'
- 'next_hop:{nh}'.
- format(ifc=interface, nh=next_hop))
- args['sw_if_index'] = InterfaceUtil.get_interface_index(
- node, interface)
- next_hop = ip_address(unicode(next_hop))
+ raise ValueError(
+ f"Required parameter(s) missing.\n"
+ f"interface:{interface}\n"
+ f"next_hop:{next_hop}"
+ )
+ args[u"sw_if_index"] = InterfaceUtil.get_interface_index(
+ node, interface
+ )
+ next_hop = ip_address(next_hop)
if next_hop.version == 6:
- args['nh_addr6'] = next_hop.packed
+ args[u"nh_addr6"] = next_hop.packed
else:
- args['nh_addr4'] = next_hop.packed
- elif beh == getattr(SRv6Behavior, 'END_DX2').name:
+ args[u"nh_addr4"] = next_hop.packed
+ elif beh == getattr(SRv6Behavior, u"END_DX2").name:
if interface is None:
- raise ValueError('Required parameter missing.\ninterface:{ifc}'.
- format(ifc=interface))
- args['sw_if_index'] = InterfaceUtil.get_interface_index(
- node, interface)
- elif beh in (getattr(SRv6Behavior, 'END_DT4').name,
- getattr(SRv6Behavior, 'END_DT6').name):
+ raise ValueError(
+ f"Required parameter missing.\ninterface: {interface}"
+ )
+ args[u"sw_if_index"] = InterfaceUtil.get_interface_index(
+ node, interface
+ )
+ elif beh in (getattr(SRv6Behavior, u"END_DT4").name,
+ getattr(SRv6Behavior, u"END_DT6").name):
if fib_table is None:
- raise ValueError('Required parameter missing.\n'
- 'fib_table: {fib}'.format(fib=fib_table))
- args['fib_table'] = fib_table
+ raise ValueError(
+ f"Required parameter missing.\n"
+ f"fib_table: {fib_table}"
+ )
+ args[u"fib_table"] = fib_table
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -212,15 +222,14 @@ class SRv6(object):
:param node: Given node to show localSIDs on.
:type node: dict
"""
- cmd = 'sr_localsids_dump'
- err_msg = 'Failed to get SR localSID dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sr_localsids_dump"
+ err_msg = f"Failed to get SR localSID dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd).get_details(err_msg)
@staticmethod
- def configure_sr_policy(node, bsid, sid_list, mode='encap'):
+ def configure_sr_policy(node, bsid, sid_list, mode=u"encap"):
"""Create SRv6 policy on the given node.
:param node: Given node to create SRv6 policy on.
@@ -232,15 +241,15 @@ class SRv6(object):
:type sid_list: list
:type mode: str
"""
- cmd = 'sr_policy_add'
+ cmd = u"sr_policy_add"
args = dict(
- bsid_addr=IPv6Address(unicode(bsid)).packed,
+ bsid_addr=IPv6Address(bsid).packed,
weight=1,
- is_encap=1 if mode == 'encap' else 0,
+ is_encap=1 if mode == u"encap" else 0,
sids=SRv6.create_srv6_sid_list(sid_list)
)
- err_msg = 'Failed to add SR policy for BindingSID {bsid} ' \
- 'on host {host}'.format(bsid=bsid, host=node['host'])
+ err_msg = f"Failed to add SR policy for BindingSID {bsid} " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -252,9 +261,8 @@ class SRv6(object):
:param node: Given node to show SRv6 policies on.
:type node: dict
"""
- cmd = 'sr_policies_dump'
- err_msg = 'Failed to get SR policies dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sr_policies_dump"
+ err_msg = f"Failed to get SR policies dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd).get_details(err_msg)
@@ -284,31 +292,40 @@ class SRv6(object):
:raises ValueError: If unsupported mode used or required parameter
is missing.
"""
- if mode.lower() == 'l2':
+ if mode.lower() == u"l2":
if interface is None:
- raise ValueError('Required data missing.\ninterface:{ifc}'.
- format(ifc=interface))
+ raise ValueError(
+ f"Required data missing.\n"
+ f"interface: {interface}"
+ )
sw_if_index = InterfaceUtil.get_interface_index(node, interface)
mask_width = 0
- prefix_addr = 16 * b'\x00'
- traffic_type = getattr(SRv6PolicySteeringTypes, 'SR_STEER_L2').value
- elif mode.lower() == 'l3':
+ prefix_addr = 16 * b"\0"
+ traffic_type = getattr(
+ SRv6PolicySteeringTypes, u"SR_STEER_L2"
+ ).value
+ elif mode.lower() == u"l3":
if ip_addr is None or prefix is None:
- raise ValueError('Required data missing.\nIP address:{0}\n'
- 'mask:{1}'.format(ip_addr, prefix))
+ raise ValueError(
+ f"Required data missing.\n"
+ f"IP address:{ip_addr}\n"
+ f"mask:{prefix}"
+ )
sw_if_index = Constants.BITWISE_NON_ZERO
- ip_addr = ip_address(unicode(ip_addr))
+ ip_addr = ip_address(ip_addr)
prefix_addr = ip_addr.packed
mask_width = int(prefix)
if ip_addr.version == 4:
- prefix_addr += 12 * b'\x00'
+ prefix_addr += 12 * b"\0"
traffic_type = getattr(
- SRv6PolicySteeringTypes, 'SR_STEER_IPV4').value
+ SRv6PolicySteeringTypes, u"SR_STEER_IPV4"
+ ).value
else:
traffic_type = getattr(
- SRv6PolicySteeringTypes, 'SR_STEER_IPV6').value
+ SRv6PolicySteeringTypes, u"SR_STEER_IPV6"
+ ).value
else:
- raise ValueError('Unsupported mode: {0}'.format(mode))
+ raise ValueError(f"Unsupported mode: {mode}")
return sw_if_index, mask_width, prefix_addr, traffic_type
@@ -338,12 +355,13 @@ class SRv6(object):
"""
sw_if_index, mask_width, prefix_addr, traffic_type = \
SRv6._get_sr_steer_policy_args(
- node, mode, interface, ip_addr, prefix)
+ node, mode, interface, ip_addr, prefix
+ )
- cmd = 'sr_steering_add_del'
+ cmd = u"sr_steering_add_del"
args = dict(
is_del=0,
- bsid_addr=IPv6Address(unicode(bsid)).packed,
+ bsid_addr=IPv6Address(str(bsid)).packed,
sr_policy_index=0,
table_id=0,
prefix_addr=prefix_addr,
@@ -351,8 +369,8 @@ class SRv6(object):
sw_if_index=sw_if_index,
traffic_type=traffic_type
)
- err_msg = 'Failed to add SRv6 steering policy for BindingSID {bsid} ' \
- 'on host {host}'.format(bsid=bsid, host=node['host'])
+ err_msg = f"Failed to add SRv6 steering policy for BindingSID {bsid} " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -364,9 +382,8 @@ class SRv6(object):
:param node: Given node to show SRv6 steering policies on.
:type node: dict
"""
- cmd = 'sr_steering_pol_dump'
- err_msg = 'Failed to get SR localSID dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sr_steering_pol_dump"
+ err_msg = f"Failed to get SR localSID dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd).get_details(err_msg)
@@ -380,10 +397,12 @@ class SRv6(object):
:type node: dict
:type ip6_addr: str
"""
- cmd = 'sr_set_encap_source'
- args = dict(encaps_source=IPv6Address(unicode(ip6_addr)).packed)
- err_msg = 'Failed to set SRv6 encapsulation source address {addr} ' \
- 'on host {host}'.format(addr=ip6_addr, host=node['host'])
+ cmd = u"sr_set_encap_source"
+ args = dict(
+ encaps_source=IPv6Address(ip6_addr).packed
+ )
+ err_msg = f"Failed to set SRv6 encapsulation source address " \
+ f"{ip6_addr} on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
diff --git a/resources/libraries/python/SchedUtils.py b/resources/libraries/python/SchedUtils.py
index b4c57217bd..bb14c29de8 100644
--- a/resources/libraries/python/SchedUtils.py
+++ b/resources/libraries/python/SchedUtils.py
@@ -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:
@@ -12,12 +12,13 @@
# limitations under the License.
"""Linux scheduler util library"""
+
from resources.libraries.python.ssh import SSH
+__all__ = [u"SchedUtils"]
-__all__ = ["SchedUtils"]
-class SchedUtils(object):
+class SchedUtils:
"""General class for any linux scheduler related methods/functions."""
@staticmethod
@@ -32,24 +33,26 @@ class SchedUtils(object):
ssh = SSH()
ssh.connect(node)
- cmd = "cat /proc/`pidof vpp`/task/*/stat | grep -i vpp_wk"\
- " | awk '{print $1}'"
+ cmd = u"cat /proc/`pidof vpp`/task/*/stat | grep -i vpp_wk" \
+ u" | awk '{print $1}'"
for _ in range(3):
- (ret, out, _) = ssh.exec_command_sudo(cmd)
+ ret, out, _ = ssh.exec_command_sudo(cmd)
if ret == 0:
try:
if not out:
raise ValueError
except ValueError:
- print 'Reading VPP worker thread PID failed.'
+ print(u"Reading VPP worker thread PID failed.")
else:
- for pid in out.split("\n"):
- if pid and pid[0] != '#':
+ for pid in out.split(u"\n"):
+ if pid and pid[0] != u"#":
SchedUtils.set_proc_scheduling_rr(node, int(pid))
break
else:
- raise RuntimeError('Failed to retrieve PID for VPP worker threads.')
+ raise RuntimeError(
+ u"Failed to retrieve PID for VPP worker threads."
+ )
@staticmethod
def set_proc_scheduling_rr(node, pid, priority=1):
@@ -69,16 +72,17 @@ class SchedUtils(object):
ssh.connect(node)
if pid < 1:
- raise ValueError("SCHED_RR: PID must be higher then 1.")
+ raise ValueError(u"SCHED_RR: PID must be higher then 1.")
if 1 <= priority <= 99:
- cmd = "chrt -r -p {0} {1}".format(priority, pid)
- (ret, _, _) = ssh.exec_command_sudo(cmd)
+ cmd = f"chrt -r -p {priority} {pid}"
+ ret, _, _ = ssh.exec_command_sudo(cmd)
if ret != 0:
- raise RuntimeError("SCHED_RR: Failed to set policy "\
- "for PID {0}.".format(pid))
+ raise RuntimeError(
+ f"SCHED_RR: Failed to set policy for PID {pid}."
+ )
else:
- raise ValueError("SCHED_RR: Priority must be in range 1-99.")
+ raise ValueError(u"SCHED_RR: Priority must be in range 1-99.")
@staticmethod
def set_proc_scheduling_other(node, pid):
@@ -95,10 +99,11 @@ class SchedUtils(object):
ssh.connect(node)
if pid < 1:
- raise ValueError("SCHED_OTHER: PID must be higher then 1.")
+ raise ValueError(u"SCHED_OTHER: PID must be higher then 1.")
- cmd = "chrt -o -p 0 {1}".format(pid)
- (ret, _, _) = ssh.exec_command_sudo(cmd)
+ cmd = f"chrt -o -p 0 {pid}"
+ ret, _, _ = ssh.exec_command_sudo(cmd)
if ret != 0:
- raise RuntimeError("SCHED_OTHER: Failed to set policy "\
- "for PID {0}.".format(pid))
+ raise RuntimeError(
+ f"SCHED_OTHER: Failed to set policy for PID {pid}."
+ )
diff --git a/resources/libraries/python/SetupFramework.py b/resources/libraries/python/SetupFramework.py
index 3f74057832..45447e923b 100644
--- a/resources/libraries/python/SetupFramework.py
+++ b/resources/libraries/python/SetupFramework.py
@@ -17,7 +17,6 @@ supposed to end up here.
"""
from os import environ, remove
-from os.path import basename
from tempfile import NamedTemporaryFile
import threading
@@ -28,7 +27,7 @@ from resources.libraries.python.ssh import exec_cmd_no_error, scp_node
from resources.libraries.python.LocalExecution import run
from resources.libraries.python.topology import NodeType
-__all__ = ["SetupFramework"]
+__all__ = [u"SetupFramework"]
def pack_framework_dir():
@@ -40,21 +39,25 @@ def pack_framework_dir():
"""
try:
- directory = environ["TMPDIR"]
+ directory = environ[u"TMPDIR"]
except KeyError:
directory = None
if directory is not None:
- tmpfile = NamedTemporaryFile(suffix=".tgz", prefix="csit-testing-",
- dir="{0}".format(directory))
+ tmpfile = NamedTemporaryFile(
+ suffix=u".tgz", prefix=u"csit-testing-", dir=f"{directory}"
+ )
else:
- tmpfile = NamedTemporaryFile(suffix=".tgz", prefix="csit-testing-")
+ tmpfile = NamedTemporaryFile(suffix=u".tgz", prefix=u"csit-testing-")
file_name = tmpfile.name
tmpfile.close()
- run(["tar", "--sparse", "--exclude-vcs", "--exclude=output*.xml",
- "--exclude=./tmp", "-zcf", file_name, "."],
- msg="Could not pack testing framework")
+ run(
+ [
+ u"tar", u"--sparse", u"--exclude-vcs", u"--exclude=output*.xml",
+ u"--exclude=./tmp", u"-zcf", file_name, u"."
+ ], msg=u"Could not pack testing framework"
+ )
return file_name
@@ -68,10 +71,15 @@ def copy_tarball_to_node(tarball, node):
:type node: dict
:returns: nothing
"""
- host = node['host']
- logger.console('Copying tarball to {0} starts.'.format(host))
- scp_node(node, tarball, "/tmp/")
- logger.console('Copying tarball to {0} done.'.format(host))
+ logger.console(
+ f"Copying tarball to {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} starts."
+ )
+ scp_node(node, tarball, u"/tmp/")
+ logger.console(
+ f"Copying tarball to {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} done."
+ )
def extract_tarball_at_node(tarball, node):
@@ -86,16 +94,22 @@ def extract_tarball_at_node(tarball, node):
:returns: nothing
:raises RuntimeError: When failed to unpack tarball.
"""
- host = node['host']
- logger.console('Extracting tarball to {0} on {1} starts.'
- .format(con.REMOTE_FW_DIR, host))
+ logger.console(
+ f"Extracting tarball to {con.REMOTE_FW_DIR} on {node[u'type']} "
+ f"host {node[u'host']}, port {node[u'port']} starts."
+ )
+ cmd = f"sudo rm -rf {con.REMOTE_FW_DIR}; mkdir {con.REMOTE_FW_DIR}; " \
+ f"tar -zxf {tarball} -C {con.REMOTE_FW_DIR}; rm -f {tarball}"
exec_cmd_no_error(
- node, "sudo rm -rf {1}; mkdir {1}; tar -zxf {0} -C {1};"
- " rm -f {0}".format(tarball, con.REMOTE_FW_DIR),
- message='Failed to extract {0} at node {1}'.format(tarball, host),
- timeout=30, include_reason=True)
- logger.console('Extracting tarball to {0} on {1} done.'
- .format(con.REMOTE_FW_DIR, host))
+ node, cmd,
+ message=f"Failed to extract {tarball} at node {node[u'type']} "
+ f"host {node[u'host']}, port {node[u'port']}",
+ timeout=30, include_reason=True
+ )
+ logger.console(
+ f"Extracting tarball to {con.REMOTE_FW_DIR} on {node[u'type']} "
+ f"host {node[u'host']}, port {node[u'port']} done."
+ )
def create_env_directory_at_node(node):
@@ -106,17 +120,22 @@ def create_env_directory_at_node(node):
:returns: nothing
:raises RuntimeError: When failed to setup virtualenv.
"""
- host = node['host']
- logger.console('Virtualenv setup including requirements.txt on {0} starts.'
- .format(host))
+ logger.console(
+ f"Virtualenv setup including requirements.txt on {node[u'type']} "
+ f"host {node[u'host']}, port {node[u'port']} starts."
+ )
+ cmd = f"cd {con.REMOTE_FW_DIR} && rm -rf env && virtualenv " \
+ f"-p $(which python3) --system-site-packages --never-download env " \
+ f"&& source env/bin/activate && pip3 install -r requirements.txt"
exec_cmd_no_error(
- node, 'cd {0} && rm -rf env'
- ' && virtualenv -p $(which python3) '
- '--system-site-packages --never-download env'
- ' && source env/bin/activate && pip3 install -r requirements.txt'
- .format(con.REMOTE_FW_DIR), timeout=100, include_reason=True,
- message="Failed install at node {host}".format(host=host))
- logger.console('Virtualenv setup on {0} done.'.format(host))
+ node, cmd, timeout=100, include_reason=True,
+ message=f"Failed install at node {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']}"
+ )
+ logger.console(
+ f"Virtualenv setup on {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} done."
+ )
def setup_node(node, tarball, remote_tarball, results=None):
@@ -133,18 +152,22 @@ def setup_node(node, tarball, remote_tarball, results=None):
:returns: True - success, False - error
:rtype: bool
"""
- host = node['host']
try:
copy_tarball_to_node(tarball, node)
extract_tarball_at_node(remote_tarball, node)
- if node['type'] == NodeType.TG:
+ if node[u"type"] == NodeType.TG:
create_env_directory_at_node(node)
except RuntimeError as exc:
- logger.console("Node {node} setup failed, error: {err!r}".format(
- node=host, err=exc))
+ logger.console(
+ f"Node {node[u'type']} host {node[u'host']}, port {node[u'port']} "
+ f"setup failed, error: {exc!r}"
+ )
result = False
else:
- logger.console('Setup of node {ip} done.'.format(ip=host))
+ logger.console(
+ f"Setup of node {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} done."
+ )
result = True
if isinstance(results, list):
@@ -168,15 +191,20 @@ def delete_framework_dir(node):
:param node: Node to delete framework directory on.
:type node: dict
"""
- host = node['host']
logger.console(
- 'Deleting framework directory on {0} starts.'.format(host))
+ f"Deleting framework directory on {node[u'type']} host {node[u'host']},"
+ f" port {node[u'port']} starts."
+ )
exec_cmd_no_error(
- node, 'sudo rm -rf {0}'.format(con.REMOTE_FW_DIR),
- message="Framework delete failed at node {host}".format(host=host),
- timeout=100, include_reason=True)
+ node, f"sudo rm -rf {con.REMOTE_FW_DIR}",
+ message=f"Framework delete failed at node {node[u'type']} "
+ f"host {node[u'host']}, port {node[u'port']}",
+ timeout=100, include_reason=True
+ )
logger.console(
- 'Deleting framework directory on {0} done.'.format(host))
+ f"Deleting framework directory on {node[u'type']} host {node[u'host']},"
+ f" port {node[u'port']} done."
+ )
def cleanup_node(node, results=None):
@@ -189,14 +217,19 @@ def cleanup_node(node, results=None):
:returns: True - success, False - error
:rtype: bool
"""
- host = node['host']
try:
delete_framework_dir(node)
except RuntimeError:
- logger.error("Cleanup of node {0} failed.".format(host))
+ logger.error(
+ f"Cleanup of node {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} failed."
+ )
result = False
else:
- logger.console('Cleanup of node {0} done.'.format(host))
+ logger.console(
+ f"Cleanup of node {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} done."
+ )
result = True
if isinstance(results, list):
@@ -204,7 +237,7 @@ def cleanup_node(node, results=None):
return result
-class SetupFramework(object):
+class SetupFramework:
"""Setup suite run on topology nodes.
Many VAT/CLI based tests need the scripts at remote hosts before executing
@@ -222,13 +255,13 @@ class SetupFramework(object):
"""
tarball = pack_framework_dir()
- msg = 'Framework packed to {0}'.format(tarball)
+ msg = f"Framework packed to {tarball}"
logger.console(msg)
logger.trace(msg)
- remote_tarball = "/tmp/{0}".format(basename(tarball))
+ remote_tarball = f"{tarball}"
- results = []
- threads = []
+ results = list()
+ threads = list()
for node in nodes.values():
args = node, tarball, remote_tarball, results
@@ -237,24 +270,27 @@ class SetupFramework(object):
threads.append(thread)
logger.info(
- 'Executing node setups in parallel, waiting for threads to end')
+ f"Executing node setups in parallel, waiting for threads to end"
+ )
for thread in threads:
thread.join()
- logger.info('Results: {0}'.format(results))
+ logger.info(f"Results: {results}")
delete_local_tarball(tarball)
if all(results):
- logger.console('All nodes are ready.')
+ logger.console(u"All nodes are ready.")
for node in nodes.values():
- logger.info('Setup of {type} node {ip} done.'.
- format(type=node['type'], ip=node['host']))
+ logger.info(
+ f"Setup of node {node[u'type']} host {node[u'host']}, "
+ f"port {node[u'port']} done."
+ )
else:
- raise RuntimeError('Failed to setup framework.')
+ raise RuntimeError(u"Failed to setup framework.")
-class CleanupFramework(object):
+class CleanupFramework:
"""Clean up suite run on topology nodes."""
@staticmethod
@@ -266,24 +302,24 @@ class CleanupFramework(object):
:raises RuntimeError: If cleanup framework failed.
"""
- results = []
- threads = []
+ results = list()
+ threads = list()
for node in nodes.values():
- thread = threading.Thread(target=cleanup_node,
- args=(node, results))
+ thread = threading.Thread(target=cleanup_node, args=(node, results))
thread.start()
threads.append(thread)
logger.info(
- 'Executing node cleanups in parallel, waiting for threads to end.')
+ u"Executing node cleanups in parallel, waiting for threads to end."
+ )
for thread in threads:
thread.join()
- logger.info('Results: {0}'.format(results))
+ logger.info(f"Results: {results}")
if all(results):
- logger.console('All nodes cleaned up.')
+ logger.console(u"All nodes cleaned up.")
else:
- raise RuntimeError('Failed to cleaned up framework.')
+ raise RuntimeError(u"Failed to cleaned up framework.")
diff --git a/resources/libraries/python/SysctlUtil.py b/resources/libraries/python/SysctlUtil.py
index 0db7e2c5e5..f8c169a833 100644
--- a/resources/libraries/python/SysctlUtil.py
+++ b/resources/libraries/python/SysctlUtil.py
@@ -15,10 +15,10 @@
from resources.libraries.python.ssh import exec_cmd_no_error
-__all__ = ["SysctlUtil"]
+__all__ = [u"SysctlUtil"]
-class SysctlUtil(object):
+class SysctlUtil:
"""Class contains methods for getting or setting sysctl settings."""
@staticmethod
@@ -30,10 +30,8 @@ class SysctlUtil(object):
:type node: dict
:type key: str
"""
- command = 'sysctl {key}'.format(key=key)
-
- message = 'Node {host} failed to run: {command}'.\
- format(host=node['host'], command=command)
+ command = f"sysctl {key}"
+ message = f"Node {node[u'host']} failed to run: {command}"
exec_cmd_no_error(node, command, sudo=True, message=message)
@@ -48,10 +46,7 @@ class SysctlUtil(object):
:type key: str
:type value: str
"""
- command = 'sysctl -w {key}={value}'.format(key=key, value=value)
-
- message = 'Node {host} failed to run: {command}'.\
- format(host=node['host'], command=command)
+ command = f"sysctl -w {key}={value}"
+ message = f"Node {node[u'host']} failed to run: {command}"
exec_cmd_no_error(node, command, sudo=True, message=message)
-
diff --git a/resources/libraries/python/TGSetup.py b/resources/libraries/python/TGSetup.py
index 7c05e55503..e105921e23 100644
--- a/resources/libraries/python/TGSetup.py
+++ b/resources/libraries/python/TGSetup.py
@@ -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:
@@ -13,11 +13,11 @@
"""TG Setup library."""
-from resources.libraries.python.topology import NodeType
from resources.libraries.python.InterfaceUtil import InterfaceUtil
+from resources.libraries.python.topology import NodeType
-class TGSetup(object):
+class TGSetup:
"""TG setup before test."""
@staticmethod
@@ -28,5 +28,5 @@ class TGSetup(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.TG:
+ if node[u"type"] == NodeType.TG:
InterfaceUtil.tg_set_interfaces_default_driver(node)
diff --git a/resources/libraries/python/TLDK/SetupTLDKTest.py b/resources/libraries/python/TLDK/SetupTLDKTest.py
index e4d7120022..e9aaec7149 100644
--- a/resources/libraries/python/TLDK/SetupTLDKTest.py
+++ b/resources/libraries/python/TLDK/SetupTLDKTest.py
@@ -206,7 +206,7 @@ def delete_local_tarball(tarball):
call(split('sh -c "rm {0} > /dev/null 2>&1"'.format(tarball)))
-class SetupTLDKTest(object):
+class SetupTLDKTest:
"""Setup suite run on topology nodes.
Many VAT/CLI based tests need the scripts at remote hosts before executing
diff --git a/resources/libraries/python/TLDK/TLDKConstants.py b/resources/libraries/python/TLDK/TLDKConstants.py
index 153b36c3ab..57b7fa23a1 100644
--- a/resources/libraries/python/TLDK/TLDKConstants.py
+++ b/resources/libraries/python/TLDK/TLDKConstants.py
@@ -15,7 +15,7 @@
"""This file defines the constants variables for the TLDK test."""
-class TLDKConstants(object):
+class TLDKConstants:
"""Define the directory path for the TLDK test."""
# TLDK testing directory location at topology nodes
diff --git a/resources/libraries/python/TLDK/UdpTest.py b/resources/libraries/python/TLDK/UdpTest.py
index b3f1b221e6..8973fe45d9 100644
--- a/resources/libraries/python/TLDK/UdpTest.py
+++ b/resources/libraries/python/TLDK/UdpTest.py
@@ -26,7 +26,7 @@ from resources.libraries.python.ssh import SSH
from resources.libraries.python.TLDK.TLDKConstants import TLDKConstants as con
from resources.libraries.python.topology import Topology
-class UdpTest(object):
+class UdpTest:
"""Test the TLDK UDP function."""
@staticmethod
diff --git a/resources/libraries/python/Tap.py b/resources/libraries/python/Tap.py
index 103eeffd9e..19f60242cb 100644
--- a/resources/libraries/python/Tap.py
+++ b/resources/libraries/python/Tap.py
@@ -17,13 +17,13 @@ from ipaddress import ip_address
from robot.api import logger
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.L2Util import L2Util
from resources.libraries.python.InterfaceUtil import InterfaceUtil
+from resources.libraries.python.L2Util import L2Util
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import Topology
-class Tap(object):
+class Tap:
"""Tap utilities."""
@staticmethod
@@ -34,35 +34,34 @@ class Tap(object):
:param tap_name: Tap interface name for linux tap.
:param mac: Optional MAC address for VPP tap.
:type node: dict
- :type tap_name: str or unicode
+ :type tap_name: str
:type mac: str
:returns: Returns a interface index.
:rtype: int
"""
- if isinstance(tap_name, unicode):
- tap_name = str(tap_name)
- cmd = 'tap_create_v2'
+ cmd = u"tap_create_v2"
args = dict(
id=Constants.BITWISE_NON_ZERO,
use_random_mac=0 if mac else 1,
- mac_address=L2Util.mac_to_bin(mac) if mac else 6 * b'\x00',
- host_namespace=64 * b'\x00',
- host_mac_addr=6 * b'\x00',
+ mac_address=L2Util.mac_to_bin(mac) if mac else 6 * b"\0",
+ host_namespace=64 * b"\0",
+ host_mac_addr=6 * b"\0",
host_if_name_set=1,
- host_if_name=tap_name + (64 - len(tap_name)) * b'\x00',
- host_bridge=64 * b'\x00',
- host_ip4_addr=4 * b'\x00',
- host_ip6_addr=16 * b'\x00',
- host_ip4_gw=4 * b'\x00',
- host_ip6_gw=16 * b'\x00'
+ host_if_name=tap_name.encode(encoding=u"utf-8") +
+ (64 - len(tap_name)) * b"\0",
+ host_bridge=64 * b"\0",
+ host_ip4_addr=4 * b"\0",
+ host_ip6_addr=16 * b"\0",
+ host_ip4_gw=4 * b"\0",
+ host_ip6_gw=16 * b"\0"
)
- err_msg = 'Failed to create tap interface {tap} on host {host}'.format(
- tap=tap_name, host=node['host'])
+ err_msg = f"Failed to create tap interface {tap_name} " \
+ f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
- if_key = Topology.add_new_port(node, 'tap')
+ if_key = Topology.add_new_port(node, u"tap")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
Topology.update_interface_name(node, if_key, tap_name)
if mac is None:
@@ -84,7 +83,7 @@ class Tap(object):
:returns: VPP tap interface dev_name.
:rtype: str
"""
- return Tap.tap_dump(node, host_if_name).get('dev_name')
+ return Tap.tap_dump(node, host_if_name).get(u"dev_name")
@staticmethod
def vpp_get_tap_interface_mac(node, interface_name):
@@ -120,19 +119,17 @@ class Tap(object):
:returns: Processed tap interface dump.
:rtype: dict
"""
- tap_dump['dev_name'] = tap_dump['dev_name'].rstrip('\x00')
- tap_dump['host_if_name'] = tap_dump['host_if_name'].rstrip('\x00')
- tap_dump['host_namespace'] = \
- tap_dump['host_namespace'].rstrip('\x00')
- tap_dump['host_mac_addr'] = \
- L2Util.bin_to_mac(tap_dump['host_mac_addr'])
- tap_dump['host_ip4_addr'] = ip_address(tap_dump['host_ip4_addr'])
- tap_dump['host_ip6_addr'] = ip_address(tap_dump['host_ip6_addr'])
+ tap_dump[u"host_mac_addr"] = L2Util.bin_to_mac(
+ tap_dump[u"host_mac_addr"]
+ )
+ tap_dump[u"host_ip4_addr"] = ip_address(tap_dump[u"host_ip4_addr"])
+ tap_dump[u"host_ip6_addr"] = ip_address(tap_dump[u"host_ip6_addr"])
+
return tap_dump
- cmd = 'sw_interface_tap_v2_dump'
- err_msg = 'Failed to get TAP dump on host {host}'.format(
- host=node['host'])
+ cmd = u"sw_interface_tap_v2_dump"
+ err_msg = f"Failed to get TAP dump on host {node[u'host']}"
+
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details(err_msg)
@@ -140,9 +137,9 @@ class Tap(object):
for dump in details:
if name is None:
data.append(process_tap_dump(dump))
- elif dump.get('host_if_name').rstrip('\x00') == name:
+ elif dump.get(u"host_if_name") == name:
data = process_tap_dump(dump)
break
- logger.debug('TAP data:\n{tap_data}'.format(tap_data=data))
+ logger.debug(f"TAP data:\n{data}")
return data
diff --git a/resources/libraries/python/TestConfig.py b/resources/libraries/python/TestConfig.py
index 48f67e5a0f..9f83fbb5fc 100644
--- a/resources/libraries/python/TestConfig.py
+++ b/resources/libraries/python/TestConfig.py
@@ -25,7 +25,7 @@ from resources.libraries.python.topology import Topology
from resources.libraries.python.VatExecutor import VatExecutor
-class TestConfig(object):
+class TestConfig:
"""Contains special test configurations implemented in python for faster
execution."""
@@ -69,17 +69,20 @@ class TestConfig(object):
# configure IPs, create VXLAN interfaces and VLAN sub-interfaces
vxlan_count = TestConfig.vpp_create_vxlan_and_vlan_interfaces(
node, node_vxlan_if, node_vlan_if, n_tunnels, vni_start,
- src_ip_start, dst_ip_start, ip_step)
+ src_ip_start, dst_ip_start, ip_step
+ )
# update topology with VXLAN interfaces and VLAN sub-interfaces data
# and put interfaces up
TestConfig.vpp_put_vxlan_and_vlan_interfaces_up(
- node, vxlan_count, node_vlan_if)
+ node, vxlan_count, node_vlan_if
+ )
# configure bridge domains, ARPs and routes
TestConfig.vpp_put_vxlan_and_vlan_interfaces_to_bridge_domain(
node, node_vxlan_if, vxlan_count, op_node, op_node_if, dst_ip_start,
- ip_step, bd_id_start)
+ ip_step, bd_id_start
+ )
@staticmethod
def vpp_create_vxlan_and_vlan_interfaces(
@@ -110,47 +113,49 @@ class TestConfig(object):
:returns: Number of created VXLAN interfaces.
:rtype: int
"""
- src_ip_addr_start = ip_address(unicode(src_ip_start))
- dst_ip_addr_start = ip_address(unicode(dst_ip_start))
+ src_ip_start = ip_address(src_ip_start)
+ dst_ip_start = ip_address(dst_ip_start)
if vxlan_count > 10:
commands = list()
- tmp_fn = '/tmp/create_vxlan_interfaces.config'
- for i in xrange(0, vxlan_count):
+ for i in range(0, vxlan_count):
try:
- src_ip = src_ip_addr_start + i * ip_step
- dst_ip = dst_ip_addr_start + i * ip_step
+ src_ip = src_ip_start + i * ip_step
+ dst_ip = dst_ip_start + i * ip_step
except AddressValueError:
- logger.warn("Can't do more iterations - IP address limit "
- "has been reached.")
+ logger.warn(
+ u"Can't do more iterations - IP address limit "
+ u"has been reached."
+ )
vxlan_count = i
break
commands.append(
- 'sw_interface_add_del_address sw_if_index {sw_idx} '
- '{ip}/{ip_len}\n'.format(
- sw_idx=Topology.get_interface_sw_index(
- node, node_vxlan_if),
- ip=src_ip,
- ip_len=128 if src_ip.version == 6 else 32))
+ f"sw_interface_add_del_address sw_if_index "
+ f"{Topology.get_interface_sw_index(node, node_vxlan_if)} "
+ f"{src_ip}/{128 if src_ip.version == 6 else 32}\n"
+ )
commands.append(
- 'vxlan_add_del_tunnel src {srcip} dst {dstip} vni {vni}\n'\
- .format(srcip=src_ip, dstip=dst_ip,
- vni=vni_start + i))
+ f"vxlan_add_del_tunnel src {src_ip} dst {dst_ip} "
+ f"vni {vni_start + i}\n"
+ )
commands.append(
- 'create_vlan_subif sw_if_index {sw_idx} vlan {vlan}\n'\
- .format(sw_idx=Topology.get_interface_sw_index(
- node, node_vlan_if), vlan=i + 1))
- VatExecutor().write_and_execute_script(node, tmp_fn, commands)
+ f"create_vlan_subif sw_if_index "
+ f"{Topology.get_interface_sw_index(node, node_vlan_if)} "
+ f"vlan {i + 1}\n"
+ )
+ VatExecutor().write_and_execute_script(
+ node, u"/tmp/create_vxlan_interfaces.config", commands
+ )
return vxlan_count
- cmd1 = 'sw_interface_add_del_address'
+ cmd1 = u"sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, node_vxlan_if),
is_add=True,
del_all=False,
prefix=None
)
- cmd2 = 'vxlan_add_del_tunnel'
+ cmd2 = u"vxlan_add_del_tunnel"
args2 = dict(
is_add=1,
is_ipv6=0,
@@ -162,7 +167,7 @@ class TestConfig(object):
decap_next_index=Constants.BITWISE_NON_ZERO,
vni=None
)
- cmd3 = 'create_vlan_subif'
+ cmd3 = u"create_vlan_subif"
args3 = dict(
sw_if_index=InterfaceUtil.get_interface_index(
node, node_vlan_if),
@@ -170,22 +175,25 @@ class TestConfig(object):
)
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(0, vxlan_count):
+ for i in range(0, vxlan_count):
try:
- src_ip = src_ip_addr_start + i * ip_step
- dst_ip = dst_ip_addr_start + i * ip_step
+ src_ip = src_ip_start + i * ip_step
+ dst_ip = dst_ip_start + i * ip_step
except AddressValueError:
- logger.warn("Can't do more iterations - IP address limit "
- "has been reached.")
+ logger.warn(
+ u"Can't do more iterations - IP address limit "
+ u"has been reached."
+ )
vxlan_count = i
break
- args1['prefix'] = IPUtil.create_prefix_object(
- src_ip, 128 if src_ip_addr_start.version == 6 else 32)
- args2['src_address'] = getattr(src_ip, 'packed')
- args2['dst_address'] = getattr(dst_ip, 'packed')
- args2['vni'] = int(vni_start) + i
- args3['vlan_id'] = i + 1
- history = False if 1 < i < vxlan_count else True
+ args1[u"prefix"] = IPUtil.create_prefix_object(
+ src_ip, 128 if src_ip_start.version == 6 else 32
+ )
+ args2[u"src_address"] = getattr(src_ip, u"packed")
+ args2[u"dst_address"] = getattr(dst_ip, u"packed")
+ args2[u"vni"] = int(vni_start) + i
+ args3[u"vlan_id"] = i + 1
+ history = bool(not 1 < i < vxlan_count - 1)
papi_exec.add(cmd1, history=history, **args1).\
add(cmd2, history=history, **args2).\
add(cmd3, history=history, **args3)
@@ -207,50 +215,51 @@ class TestConfig(object):
:type vxlan_count: int
:type node_vlan_if: str
"""
- if_data = InterfaceUtil.vpp_get_interface_data(node)
- vlan_if_name = Topology.get_interface_name(node, node_vlan_if)
-
if vxlan_count > 10:
- tmp_fn = '/tmp/put_subinterfaces_up.config'
commands = list()
- for i in xrange(0, vxlan_count):
- vxlan_subif_key = Topology.add_new_port(node, 'vxlan_tunnel')
- vxlan_subif_name = 'vxlan_tunnel{nr}'.format(nr=i)
- vxlan_found = False
+ for i in range(0, vxlan_count):
+ vxlan_subif_key = Topology.add_new_port(node, u"vxlan_tunnel")
+ vxlan_subif_name = f"vxlan_tunnel{i}"
+ founds = dict(vxlan=False, vlan=False)
vxlan_subif_idx = None
- vlan_subif_key = Topology.add_new_port(node, 'vlan_subif')
- vlan_subif_name = '{if_name}.{vlan}'.format(
- if_name=vlan_if_name, vlan=i + 1)
- vlan_found = False
+ vlan_subif_key = Topology.add_new_port(node, u"vlan_subif")
+ vlan_subif_name = \
+ f"{Topology.get_interface_name(node, node_vlan_if)}.{i + 1}"
vlan_idx = None
- for data in if_data:
- if_name = data['interface_name']
- if not vxlan_found and if_name == vxlan_subif_name:
- vxlan_subif_idx = data['sw_if_index']
- vxlan_found = True
- elif not vlan_found and if_name == vlan_subif_name:
- vlan_idx = data['sw_if_index']
- vlan_found = True
- if vxlan_found and vlan_found:
+ for data in InterfaceUtil.vpp_get_interface_data(node):
+ if_name = data[u"interface_name"]
+ if not founds[u"vxlan"] and if_name == vxlan_subif_name:
+ vxlan_subif_idx = data[u"sw_if_index"]
+ founds[u"vxlan"] = True
+ elif not founds[u"vlan"] and if_name == vlan_subif_name:
+ vlan_idx = data[u"sw_if_index"]
+ founds[u"vlan"] = True
+ if founds[u"vxlan"] and founds[u"vlan"]:
break
Topology.update_interface_sw_if_index(
node, vxlan_subif_key, vxlan_subif_idx)
Topology.update_interface_name(
node, vxlan_subif_key, vxlan_subif_name)
commands.append(
- 'sw_interface_set_flags sw_if_index {sw_idx} admin-up '
- 'link-up\n'.format(sw_idx=vxlan_subif_idx))
+ f"sw_interface_set_flags sw_if_index {vxlan_subif_idx} "
+ f"admin-up link-up\n"
+ )
Topology.update_interface_sw_if_index(
- node, vlan_subif_key, vlan_idx)
+ node, vlan_subif_key, vlan_idx
+ )
Topology.update_interface_name(
- node, vlan_subif_key, vlan_subif_name)
+ node, vlan_subif_key, vlan_subif_name
+ )
commands.append(
- 'sw_interface_set_flags sw_if_index {sw_idx} admin-up '
- 'link-up\n'.format(sw_idx=vlan_idx))
- VatExecutor().write_and_execute_script(node, tmp_fn, commands)
+ f"sw_interface_set_flags sw_if_index {vlan_idx} admin-up "
+ f"link-up\n"
+ )
+ VatExecutor().write_and_execute_script(
+ node, u"/tmp/put_subinterfaces_up.config", commands
+ )
return
- cmd = 'sw_interface_set_flags'
+ cmd = u"sw_interface_set_flags"
args1 = dict(
sw_if_index=None,
flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
@@ -261,38 +270,41 @@ class TestConfig(object):
)
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(0, vxlan_count):
- vxlan_subif_key = Topology.add_new_port(node, 'vxlan_tunnel')
- vxlan_subif_name = 'vxlan_tunnel{nr}'.format(nr=i)
- vxlan_found = False
+ for i in range(0, vxlan_count):
+ vxlan_subif_key = Topology.add_new_port(node, u"vxlan_tunnel")
+ vxlan_subif_name = f"vxlan_tunnel{i}"
+ founds = dict(vxlan=False, vlan=False)
vxlan_subif_idx = None
- vlan_subif_key = Topology.add_new_port(node, 'vlan_subif')
- vlan_subif_name = '{if_name}.{vlan}'.format(
- if_name=vlan_if_name, vlan=i+1)
- vlan_found = False
+ vlan_subif_key = Topology.add_new_port(node, u"vlan_subif")
+ vlan_subif_name = \
+ f"{Topology.get_interface_name(node, node_vlan_if)}.{i+1}"
vlan_idx = None
- for data in if_data:
- if not vxlan_found \
- and data['interface_name'] == vxlan_subif_name:
- vxlan_subif_idx = data['sw_if_index']
- vxlan_found = True
- elif not vlan_found \
- and data['interface_name'] == vlan_subif_name:
- vlan_idx = data['sw_if_index']
- vlan_found = True
- if vxlan_found and vlan_found:
+ for data in InterfaceUtil.vpp_get_interface_data(node):
+ if not founds[u"vxlan"] \
+ and data[u"interface_name"] == vxlan_subif_name:
+ vxlan_subif_idx = data[u"sw_if_index"]
+ founds[u"vxlan"] = True
+ elif not founds[u"vlan"] \
+ and data[u"interface_name"] == vlan_subif_name:
+ vlan_idx = data[u"sw_if_index"]
+ founds[u"vlan"] = True
+ if founds[u"vxlan"] and founds[u"vlan"]:
break
Topology.update_interface_sw_if_index(
- node, vxlan_subif_key, vxlan_subif_idx)
+ node, vxlan_subif_key, vxlan_subif_idx
+ )
Topology.update_interface_name(
- node, vxlan_subif_key, vxlan_subif_name)
- args1['sw_if_index'] = vxlan_subif_idx
+ node, vxlan_subif_key, vxlan_subif_name
+ )
+ args1[u"sw_if_index"] = vxlan_subif_idx
Topology.update_interface_sw_if_index(
- node, vlan_subif_key, vlan_idx)
+ node, vlan_subif_key, vlan_idx
+ )
Topology.update_interface_name(
- node, vlan_subif_key, vlan_subif_name)
- args2['sw_if_index'] = vlan_idx
- history = False if 1 < i < vxlan_count else True
+ node, vlan_subif_key, vlan_subif_name
+ )
+ args2[u"sw_if_index"] = vlan_idx
+ history = bool(not 1 < i < vxlan_count - 1)
papi_exec.add(cmd, history=history, **args1). \
add(cmd, history=history, **args2)
papi_exec.add(cmd, **args1).add(cmd, **args2)
@@ -325,92 +337,101 @@ class TestConfig(object):
:type ip_step: int
:type bd_id_start: int
"""
- dst_ip_addr_start = ip_address(unicode(dst_ip_start))
+ dst_ip_start = ip_address(dst_ip_start)
if vxlan_count > 1:
sw_idx_vxlan = Topology.get_interface_sw_index(node, node_vxlan_if)
- tmp_fn = '/tmp/configure_routes_and_bridge_domains.config'
commands = list()
- for i in xrange(0, vxlan_count):
- dst_ip = dst_ip_addr_start + i * ip_step
+ for i in range(0, vxlan_count):
+ dst_ip = dst_ip_start + i * ip_step
commands.append(
- 'ip_neighbor_add_del sw_if_index {sw_idx} dst {ip} '
- 'mac {mac}\n'.format(
- sw_idx=sw_idx_vxlan,
- ip=dst_ip,
- mac=Topology.get_interface_mac(op_node, op_node_if)))
+ f"ip_neighbor_add_del sw_if_index {sw_idx_vxlan} "
+ f"dst {dst_ip} "
+ f"mac {Topology.get_interface_mac(op_node, op_node_if)}\n"
+ )
commands.append(
- 'ip_route_add_del {ip}/{ip_len} count 1 via {ip} '
- 'sw_if_index {sw_idx}\n'.format(
- ip=dst_ip,
- ip_len=128 if dst_ip.version == 6 else 32,
- sw_idx=sw_idx_vxlan))
+ f"ip_route_add_del "
+ f"{dst_ip}/{128 if dst_ip.version == 6 else 32} count 1 "
+ f"via {dst_ip} sw_if_index {sw_idx_vxlan}\n"
+ )
+ sw_idx_vxlan = Topology.get_interface_sw_index(
+ node, f"vxlan_tunnel{i + 1}"
+ )
commands.append(
- 'sw_interface_set_l2_bridge sw_if_index {sw_idx} '
- 'bd_id {bd_id} shg 0 enable\n'.format(
- sw_idx=Topology.get_interface_sw_index(
- node, 'vxlan_tunnel{nr}'.format(nr=i + 1)),
- bd_id=bd_id_start + i))
+ f"sw_interface_set_l2_bridge sw_if_index {sw_idx_vxlan} "
+ f"bd_id {bd_id_start + i} shg 0 enable\n"
+ )
+ sw_idx_vlan = Topology.get_interface_sw_index(
+ node, f"vlan_subif{i + 1}"
+ )
commands.append(
- 'sw_interface_set_l2_bridge sw_if_index {sw_idx} '
- 'bd_id {bd_id} shg 0 enable\n'.format(
- sw_idx=Topology.get_interface_sw_index(
- node, 'vlan_subif{nr}'.format(nr=i + 1)),
- bd_id=bd_id_start + i))
- VatExecutor().write_and_execute_script(node, tmp_fn, commands)
+ f"sw_interface_set_l2_bridge sw_if_index {sw_idx_vlan} "
+ f"bd_id {bd_id_start + i} shg 0 enable\n"
+ )
+ VatExecutor().write_and_execute_script(
+ node, u"/tmp/configure_routes_and_bridge_domains.config",
+ commands
+ )
return
- cmd1 = 'ip_neighbor_add_del'
+ cmd1 = u"ip_neighbor_add_del"
neighbor = dict(
sw_if_index=Topology.get_interface_sw_index(node, node_vxlan_if),
flags=0,
mac_address=Topology.get_interface_mac(op_node, op_node_if),
- ip_address='')
+ ip_address=u""
+ )
args1 = dict(
is_add=1,
- neighbor=neighbor)
- cmd2 = 'ip_route_add_del'
+ neighbor=neighbor
+ )
+ cmd2 = u"ip_route_add_del"
kwargs = dict(
interface=node_vxlan_if,
- gateway=str(dst_ip_addr_start))
+ gateway=str(dst_ip_start)
+ )
route = IPUtil.compose_vpp_route_structure(
- node,
- str(dst_ip_addr_start),
- 128 if dst_ip_addr_start.version == 6 else 32,
- **kwargs)
+ node, str(dst_ip_start),
+ 128 if dst_ip_start.version == 6 else 32, **kwargs
+ )
args2 = dict(
is_add=1,
is_multipath=0,
- route=route)
- cmd3 = 'sw_interface_set_l2_bridge'
+ route=route
+ )
+ cmd3 = u"sw_interface_set_l2_bridge"
args3 = dict(
rx_sw_if_index=None,
bd_id=None,
shg=0,
port_type=0,
- enable=1)
+ enable=1
+ )
args4 = dict(
rx_sw_if_index=None,
bd_id=None,
shg=0,
port_type=0,
- enable=1)
+ enable=1
+ )
with PapiSocketExecutor(node) as papi_exec:
- for i in xrange(0, vxlan_count):
- dst_ip = dst_ip_addr_start + i * ip_step
- args1['neighbor']['ip_address'] = str(dst_ip)
- args2['route']['prefix']['address']['un'] = \
- IPUtil.union_addr(dst_ip)
- args2['route']['paths'][0]['nh']['address'] = \
- IPUtil.union_addr(dst_ip)
- args3['rx_sw_if_index'] = Topology.get_interface_sw_index(
- node, 'vxlan_tunnel{nr}'.format(nr=i+1))
- args3['bd_id'] = int(bd_id_start+i)
- args4['rx_sw_if_index'] = Topology.get_interface_sw_index(
- node, 'vlan_subif{nr}'.format(nr=i+1))
- args4['bd_id'] = int(bd_id_start+i)
- history = False if 1 < i < vxlan_count else True
+ for i in range(0, vxlan_count):
+ args1[u"neighbor"][u"ip_address"] = \
+ str(dst_ip_start + i * ip_step)
+ args2[u"route"][u"prefix"][u"address"][u"un"] = \
+ IPUtil.union_addr(dst_ip_start + i * ip_step)
+ args2[u"route"][u"paths"][0][u"nh"][u"address"] = \
+ IPUtil.union_addr(dst_ip_start + i * ip_step)
+ args3[u"rx_sw_if_index"] = Topology.get_interface_sw_index(
+ node, f"vxlan_tunnel{i+1}"
+ )
+ args3[u"bd_id"] = int(bd_id_start+i)
+ args4[u"rx_sw_if_index"] = Topology.get_interface_sw_index(
+ node, f"vlan_subif{i+1}"
+ )
+ args4[u"bd_id"] = int(bd_id_start+i)
+ history = bool(not 1 < i < vxlan_count - 1)
papi_exec.add(cmd1, history=history, **args1). \
add(cmd2, history=history, **args2). \
add(cmd3, history=history, **args3). \
diff --git a/resources/libraries/python/Trace.py b/resources/libraries/python/Trace.py
index 27cc30476e..c88150f72c 100644
--- a/resources/libraries/python/Trace.py
+++ b/resources/libraries/python/Trace.py
@@ -17,7 +17,7 @@ from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import NodeType
-class Trace(object):
+class Trace:
"""This class provides methods to manipulate the VPP packet trace."""
@staticmethod
@@ -29,13 +29,11 @@ class Trace(object):
:type nodes: dict
:type maximum: int
"""
- maximum = "max {count}".format(count=maximum) if maximum is not None\
- else ""
+ maximum = f"max {maximum}" if maximum is not None else f""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- PapiSocketExecutor.run_cli_cmd(
- node, "show trace {max}".format(max=maximum))
+ if node[u"type"] == NodeType.DUT:
+ PapiSocketExecutor.run_cli_cmd(node, f"show trace {maximum}")
@staticmethod
def clear_packet_trace_on_all_duts(nodes):
@@ -45,5 +43,5 @@ class Trace(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
- PapiSocketExecutor.run_cli_cmd(node, "clear trace")
+ if node[u"type"] == NodeType.DUT:
+ PapiSocketExecutor.run_cli_cmd(node, u"clear trace")
diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py
index 8c3abfb373..14d2dc8d1c 100644
--- a/resources/libraries/python/TrafficGenerator.py
+++ b/resources/libraries/python/TrafficGenerator.py
@@ -29,7 +29,7 @@ from .MLRsearch.MultipleLossRatioSearch import MultipleLossRatioSearch
from .MLRsearch.ReceiveRateMeasurement import ReceiveRateMeasurement
from .PLRsearch.PLRsearch import PLRsearch
-__all__ = ['TGDropRateSearchImpl', 'TrafficGenerator', 'OptimizedSearch']
+__all__ = [u"TGDropRateSearchImpl", u"TrafficGenerator", u"OptimizedSearch"]
def check_subtype(node):
@@ -44,27 +44,28 @@ def check_subtype(node):
:rtype: NodeSubTypeTG
:raises RuntimeError: If node is not supported, message explains how.
"""
- if node.get('type') is None:
- raise RuntimeError('Node type is not defined')
+ if node.get(u"type") is None:
+ msg = u"Node type is not defined"
elif node['type'] != NodeType.TG:
- raise RuntimeError('Node type is {typ!r}, not a TG'.format(
- typ=node['type']))
- elif node.get('subtype') is None:
- raise RuntimeError('TG subtype is not defined')
- elif node['subtype'] == NodeSubTypeTG.TREX:
+ msg = f"Node type is {node[u'type']!r}, not a TG"
+ elif node.get(u"subtype") is None:
+ msg = u"TG subtype is not defined"
+ elif node[u"subtype"] != NodeSubTypeTG.TREX:
+ msg = f"TG subtype {node[u'subtype']!r} is not supported"
+ else:
return NodeSubTypeTG.TREX
- raise RuntimeError('TG subtype {sub!r} is not supported'.format(
- sub=node['subtype']))
+ raise RuntimeError(msg)
class TGDropRateSearchImpl(DropRateSearch):
"""Drop Rate Search implementation."""
- def __init__(self):
- super(TGDropRateSearchImpl, self).__init__()
+ # def __init__(self):
+ # super(TGDropRateSearchImpl, self).__init__()
- def measure_loss(self, rate, frame_size, loss_acceptance,
- loss_acceptance_type, traffic_profile, skip_warmup=False):
+ def measure_loss(
+ self, rate, frame_size, loss_acceptance, loss_acceptance_type,
+ traffic_profile, skip_warmup=False):
"""Runs the traffic and evaluate the measured results.
:param rate: Offered traffic load.
@@ -88,23 +89,27 @@ class TGDropRateSearchImpl(DropRateSearch):
# we need instance of TrafficGenerator instantiated by Robot Framework
# to be able to use trex_stl-*()
tg_instance = BuiltIn().get_library_instance(
- 'resources.libraries.python.TrafficGenerator')
+ u"resources.libraries.python.TrafficGenerator"
+ )
subtype = check_subtype(tg_instance.node)
if subtype == NodeSubTypeTG.TREX:
unit_rate = str(rate) + self.get_rate_type_str()
if skip_warmup:
tg_instance.trex_stl_start_remote_exec(
self.get_duration(), unit_rate, frame_size, traffic_profile,
- warmup_time=0.0)
+ warmup_time=0.0
+ )
else:
tg_instance.trex_stl_start_remote_exec(
- self.get_duration(), unit_rate, frame_size, traffic_profile)
+ self.get_duration(), unit_rate, frame_size, traffic_profile
+ )
loss = tg_instance.get_loss()
sent = tg_instance.get_sent()
if self.loss_acceptance_type_is_percentage():
loss = (float(loss) / float(sent)) * 100
- logger.trace("comparing: {los} < {acc} {typ}".format(
- los=loss, acc=loss_acceptance, typ=loss_acceptance_type))
+ logger.trace(
+ f"comparing: {loss} < {loss_acceptance} {loss_acceptance_type}"
+ )
return float(loss) <= float(loss_acceptance)
return False
@@ -115,10 +120,12 @@ class TGDropRateSearchImpl(DropRateSearch):
:rtype: list
"""
tg_instance = BuiltIn().get_library_instance(
- 'resources.libraries.python.TrafficGenerator')
+ u"resources.libraries.python.TrafficGenerator"
+ )
return tg_instance.get_latency_int()
+# pylint: disable=too-many-instance-attributes
class TrafficGenerator(AbstractMeasurer):
"""Traffic Generator.
@@ -128,7 +135,7 @@ class TrafficGenerator(AbstractMeasurer):
# TODO: Remove "trex" from lines which could work with other TGs.
# Use one instance of TrafficGenerator for all tests in test suite
- ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
+ ROBOT_LIBRARY_SCOPE = u"TEST SUITE"
def __init__(self):
# TODO: Number of fields will be reduced with CSIT-1378.
@@ -194,6 +201,7 @@ class TrafficGenerator(AbstractMeasurer):
"""
return self._latency
+ # pylint: disable=too-many-locals
def initialize_traffic_generator(
self, tg_node, tg_if1, tg_if2, tg_if1_adj_node, tg_if1_adj_if,
tg_if2_adj_node, tg_if2_adj_if, osi_layer, tg_if1_dst_mac=None,
@@ -234,23 +242,27 @@ class TrafficGenerator(AbstractMeasurer):
if1_addr = Topology().get_interface_mac(self._node, tg_if1)
if2_addr = Topology().get_interface_mac(self._node, tg_if2)
- if osi_layer == 'L2':
+ if osi_layer == u"L2":
if1_adj_addr = if2_addr
if2_adj_addr = if1_addr
- elif osi_layer == 'L3':
- if1_adj_addr = Topology().get_interface_mac(tg_if1_adj_node,
- tg_if1_adj_if)
- if2_adj_addr = Topology().get_interface_mac(tg_if2_adj_node,
- tg_if2_adj_if)
- elif osi_layer == 'L7':
+ elif osi_layer == u"L3":
+ if1_adj_addr = Topology().get_interface_mac(
+ tg_if1_adj_node, tg_if1_adj_if
+ )
+ if2_adj_addr = Topology().get_interface_mac(
+ tg_if2_adj_node, tg_if2_adj_if
+ )
+ elif osi_layer == u"L7":
if1_addr = Topology().get_interface_ip4(self._node, tg_if1)
if2_addr = Topology().get_interface_ip4(self._node, tg_if2)
- if1_adj_addr = Topology().get_interface_ip4(tg_if1_adj_node,
- tg_if1_adj_if)
- if2_adj_addr = Topology().get_interface_ip4(tg_if2_adj_node,
- tg_if2_adj_if)
+ if1_adj_addr = Topology().get_interface_ip4(
+ tg_if1_adj_node, tg_if1_adj_if
+ )
+ if2_adj_addr = Topology().get_interface_ip4(
+ tg_if2_adj_node, tg_if2_adj_if
+ )
else:
- raise ValueError("Unknown Test Type")
+ raise ValueError(u"Unknown Test Type")
# in case of switched environment we can override MAC addresses
if tg_if1_dst_mac is not None and tg_if2_dst_mac is not None:
@@ -263,42 +275,40 @@ class TrafficGenerator(AbstractMeasurer):
if1_adj_addr, if2_adj_addr = if2_adj_addr, if1_adj_addr
self._ifaces_reordered = True
- if osi_layer == 'L2' or osi_layer == 'L3':
+ if osi_layer in (u"L2", u"L3"):
+ dst_mac0 = f"0x{if1_adj_addr.replace(u':', u',0x')}"
+ src_mac0 = f"0x{if1_addr.replace(u':', u',0x')}"
+ dst_mac1 = f"0x{if2_adj_addr.replace(u':', u',0x')}"
+ src_mac1 = f"0x{if2_addr.replace(u':', u',0x')}"
exec_cmd_no_error(
self._node,
- "sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
- "- version: 2\n"
- " interfaces: [\"{0}\",\"{1}\"]\n"
- " port_info:\n"
- " - dest_mac: [{2}]\n"
- " src_mac: [{3}]\n"
- " - dest_mac: [{4}]\n"
- " src_mac: [{5}]\n"
- "EOF'"\
- .format(if1_pci, if2_pci,
- "0x"+if1_adj_addr.replace(":", ",0x"),
- "0x"+if1_addr.replace(":", ",0x"),
- "0x"+if2_adj_addr.replace(":", ",0x"),
- "0x"+if2_addr.replace(":", ",0x")),
- sudo=True, message='TRex config generation error')
- elif osi_layer == 'L7':
+ f"sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
+ f"- version: 2\n"
+ f" interfaces: [\"{if1_pci}\",\"{if2_pci}\"]\n"
+ f" port_info:\n"
+ f" - dest_mac: [{dst_mac0}]\n"
+ f" src_mac: [{src_mac0}]\n"
+ f" - dest_mac: [{dst_mac1}]\n"
+ f" src_mac: [{src_mac1}]\n"
+ f"EOF'",
+ sudo=True, message=u"TRex config generation error"
+ )
+ elif osi_layer == u"L7":
exec_cmd_no_error(
self._node,
- "sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
- "- version: 2\n"
- " interfaces: [\"{0}\",\"{1}\"]\n"
- " port_info:\n"
- " - ip: [{2}]\n"
- " default_gw: [{3}]\n"
- " - ip: [{4}]\n"
- " default_gw: [{5}]\n"
- "EOF'"\
- .format(if1_pci, if2_pci,
- if1_addr, if1_adj_addr,
- if2_addr, if2_adj_addr),
- sudo=True, message='TRex config generation error')
+ f"sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
+ f"- version: 2\n"
+ f" interfaces: [\"{if1_pci}\",\"{if2_pci}\"]\n"
+ f" port_info:\n"
+ f" - ip: [{if1_addr}]\n"
+ f" default_gw: [{if1_adj_addr}]\n"
+ f" - ip: [{if2_addr}]\n"
+ f" default_gw: [{if2_adj_addr}]\n"
+ f"EOF'",
+ sudo=True, message=u"TRex config generation error"
+ )
else:
- raise ValueError("Unknown Test Type")
+ raise ValueError(u"Unknown Test Type")
self._startup_trex(osi_layer)
@@ -312,49 +322,52 @@ class TrafficGenerator(AbstractMeasurer):
# No need to check subtype, we know it is TREX.
for _ in range(0, 3):
# Kill TRex only if it is already running.
- cmd = "sh -c 'pgrep t-rex && pkill t-rex && sleep 3 || true'"
+ cmd = u"sh -c \"pgrep t-rex && pkill t-rex && sleep 3 || true\""
exec_cmd_no_error(
- self._node, cmd, sudo=True, message='Kill TRex failed!')
+ self._node, cmd, sudo=True, message=u"Kill TRex failed!"
+ )
# Configure TRex.
ports = ''
- for port in self._node['interfaces'].values():
- ports += ' {pci}'.format(pci=port.get('pci_address'))
+ for port in self._node[u"interfaces"].values():
+ ports += f" {port.get(u'pci_address')}"
- cmd = ("sh -c 'cd {dir}/scripts/ && "
- "./dpdk_nic_bind.py -u {ports} || true'"
- .format(dir=Constants.TREX_INSTALL_DIR, ports=ports))
+ cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \
+ f"./dpdk_nic_bind.py -u {ports} || true\""
exec_cmd_no_error(
self._node, cmd, sudo=True,
- message='Unbind PCI ports from driver failed!')
+ message=u"Unbind PCI ports from driver failed!"
+ )
# Start TRex.
- cmd = ("sh -c 'cd {dir}/scripts/ && "
- "nohup ./t-rex-64 --hdrh{mode} --prefix $(hostname)"
- " -i -c 7 > /tmp/trex.log 2>&1 &' > /dev/null"
- .format(dir=Constants.TREX_INSTALL_DIR,
- mode=' --astf' if osi_layer == 'L7' else ''))
+ cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \
+ f"nohup ./t-rex-64 " \
+ f"--hdrh{u' --astf' if osi_layer == u'L7' else u''} " \
+ f"--prefix $(hostname) -i -c 7 > /tmp/trex.log 2>&1 &\" > " \
+ f"/dev/null"
try:
exec_cmd_no_error(self._node, cmd, sudo=True)
except RuntimeError:
- cmd = "sh -c 'cat /tmp/trex.log'"
+ cmd = u"sh -c \"cat /tmp/trex.log\""
exec_cmd_no_error(
- self._node, cmd, sudo=True, message='Get TRex logs failed!')
- raise RuntimeError('Start TRex failed!')
+ self._node, cmd, sudo=True, message=u"Get TRex logs failed!"
+ )
+ raise RuntimeError(u"Start TRex failed!")
# Test if TRex starts successfuly.
- cmd = ("sh -c '{dir}/resources/tools/trex/trex_server_info.py'"
- .format(dir=Constants.REMOTE_FW_DIR))
+ cmd = f"sh -c \"{Constants.REMOTE_FW_DIR}/resources/tools/trex/" \
+ f"trex_server_info.py\""
try:
exec_cmd_no_error(
- self._node, cmd, sudo=True, message='Test TRex failed!',
- retries=20)
+ self._node, cmd, sudo=True, message=u"Test TRex failed!",
+ retries=20
+ )
except RuntimeError:
continue
return
# After max retries TRex is still not responding to API critical error
# occurred.
- raise RuntimeError('Start TRex failed after multiple retries!')
+ raise RuntimeError(u"Start TRex failed after multiple retries!")
@staticmethod
def is_trex_running(node):
@@ -368,7 +381,7 @@ class TrafficGenerator(AbstractMeasurer):
"""
# No need to check subtype, we know it is TREX.
- ret, _, _ = exec_cmd(node, "pidof t-rex", sudo=True)
+ ret, _, _ = exec_cmd(node, u"pidof t-rex", sudo=True)
return bool(int(ret) == 0)
@staticmethod
@@ -384,8 +397,9 @@ class TrafficGenerator(AbstractMeasurer):
subtype = check_subtype(node)
if subtype == NodeSubTypeTG.TREX:
exec_cmd_no_error(
- node, "sh -c 'sudo pkill t-rex && sleep 3'",
- sudo=False, message='pkill t-rex failed')
+ node, u"sh -c \"sudo pkill t-rex && sleep 3\"",
+ sudo=False, message=u"pkill t-rex failed"
+ )
def _parse_traffic_results(self, stdout):
"""Parse stdout of scripts into fields of self.
@@ -399,13 +413,13 @@ class TrafficGenerator(AbstractMeasurer):
# last line from console output
line = stdout.splitlines()[-1]
self._result = line
- logger.info('TrafficGen result: {0}'.format(self._result))
- self._received = self._result.split(', ')[1].split('=', 1)[1]
- self._sent = self._result.split(', ')[2].split('=', 1)[1]
- self._loss = self._result.split(', ')[3].split('=', 1)[1]
- self._latency = []
- self._latency.append(self._result.split(', ')[4].split('=', 1)[1])
- self._latency.append(self._result.split(', ')[5].split('=', 1)[1])
+ logger.info(f"TrafficGen result: {self._result}")
+ self._received = self._result.split(u", ")[1].split(u"=", 1)[1]
+ self._sent = self._result.split(u", ")[2].split(u"=", 1)[1]
+ self._loss = self._result.split(u", ")[3].split(u"=", 1)[1]
+ self._latency = list()
+ self._latency.append(self._result.split(u", ")[4].split(u"=", 1)[1])
+ self._latency.append(self._result.split(u", ")[5].split(u"=", 1)[1])
def trex_stl_stop_remote_exec(self, node):
"""Execute script on remote node over ssh to stop running traffic.
@@ -417,17 +431,17 @@ class TrafficGenerator(AbstractMeasurer):
:raises RuntimeError: If stop traffic script fails.
"""
# No need to check subtype, we know it is TREX.
- x_args = ""
+ x_args = u""
for index, value in enumerate(self._xstats):
if value is not None:
# Nested quoting is fun.
- value = value.replace("'", "\"")
- x_args += " --xstat{i}='\"'\"'{v}'\"'\"'".format(
- i=index, v=value)
+ value = value.replace(u"'", u"\"")
+ x_args += f" --xstat{index}='\"'\"'{value}'\"'\"'"
stdout, _ = exec_cmd_no_error(
- node, "sh -c '{d}/resources/tools/trex/trex_stateless_stop.py{a}'"\
- .format(d=Constants.REMOTE_FW_DIR, a=x_args),
- message='TRex stateless runtime error')
+ node, f"sh -c '{Constants.REMOTE_FW_DIR}/resources/tools/trex/"
+ f"trex_stateless_stop.py{x_args}'",
+ message=u"TRex stateless runtime error"
+ )
self._parse_traffic_results(stdout)
def trex_stl_start_remote_exec(
@@ -468,39 +482,36 @@ class TrafficGenerator(AbstractMeasurer):
# No need to check subtype, we know it is TREX.
reorder = self._ifaces_reordered # Just to make the next line fit.
p_0, p_1 = (rx_port, tx_port) if reorder else (tx_port, rx_port)
- # Values from Robot can introduce type unicode,
- # we need to encode them, so that repr() does not lead with 'u'.
- if isinstance(rate, unicode):
- rate = rate.encode("utf-8")
+
if not isinstance(duration, (float, int)):
duration = float(duration)
if not isinstance(warmup_time, (float, int)):
warmup_time = float(warmup_time)
- command = (
- "sh -c '{tool}/resources/tools/trex/trex_stateless_profile.py"
- " --profile {prof}/resources/traffic_profiles/trex/{traffic}.py"
- " --duration {duration!r} --frame_size {frame_size} --rate {rate!r}"
- " --warmup_time {warmup!r} --port_0 {p_0} --port_1 {p_1}"
- " --traffic_directions {dirs}").format(
- tool=Constants.REMOTE_FW_DIR, prof=Constants.REMOTE_FW_DIR,
- traffic=traffic_profile, duration=duration,
- frame_size=frame_size, rate=rate, warmup=warmup_time, p_0=p_0,
- p_1=p_1, dirs=traffic_directions)
+ command = f"sh -c \"" \
+ f"{Constants.REMOTE_FW_DIR}/resources/tools/trex/" \
+ f"trex_stateless_profile.py" \
+ f" --profile {Constants.REMOTE_FW_DIR}/resources/" \
+ f"traffic_profiles/trex/{traffic_profile}.py" \
+ f" --duration {duration!r} --frame_size {frame_size} " \
+ f"--rate {rate!r} --warmup_time {warmup_time!r} " \
+ f"--port_0 {p_0} --port_1 {p_1}" \
+ f" --traffic_directions {traffic_directions}"
if async_call:
- command += " --async_start"
+ command += u" --async_start"
if latency:
- command += " --latency"
- command += "'"
+ command += u" --latency"
+ command += u"\""
stdout, _ = exec_cmd_no_error(
self._node, command, timeout=float(duration) + 60,
- message='TRex stateless runtime error')
+ message=u"TRex stateless runtime error"
+ )
self.traffic_directions = traffic_directions
if async_call:
- #no result
+ # no result
self._start_time = time.time()
- self._rate = float(rate[:-3]) if "pps" in rate else float(rate)
+ self._rate = float(rate[:-3]) if u"pps" in rate else float(rate)
self._received = None
self._sent = None
self._loss = None
@@ -508,7 +519,7 @@ class TrafficGenerator(AbstractMeasurer):
xstats = [None, None]
index = 0
for line in stdout.splitlines():
- if "Xstats snapshot {i}: ".format(i=index) in line:
+ if f"Xstats snapshot {index}: " in line:
xstats[index] = line[19:]
index += 1
if index == 2:
@@ -590,7 +601,8 @@ class TrafficGenerator(AbstractMeasurer):
if subtype == NodeSubTypeTG.TREX:
self.trex_stl_start_remote_exec(
duration, rate, frame_size, traffic_profile, async_call,
- latency, warmup_time, traffic_directions, tx_port, rx_port)
+ latency, warmup_time, traffic_directions, tx_port, rx_port
+ )
return self._result
@@ -601,9 +613,9 @@ class TrafficGenerator(AbstractMeasurer):
:raises Exception: If loss occured.
"""
if self._loss is None:
- raise RuntimeError('The traffic generation has not been issued')
- if self._loss != '0':
- raise RuntimeError('Traffic loss occurred: {0}'.format(self._loss))
+ raise RuntimeError(u"The traffic generation has not been issued")
+ if self._loss != u"0":
+ raise RuntimeError(f"Traffic loss occurred: {self._loss}")
def fail_if_no_traffic_forwarded(self):
"""Fail if no traffic forwarded.
@@ -612,12 +624,12 @@ class TrafficGenerator(AbstractMeasurer):
:raises Exception: If no traffic forwarded.
"""
if self._received is None:
- raise RuntimeError('The traffic generation has not been issued')
- if self._received == '0':
- raise RuntimeError('No traffic forwarded')
+ raise RuntimeError(u"The traffic generation has not been issued")
+ if self._received == u"0":
+ raise RuntimeError(u"No traffic forwarded")
- def partial_traffic_loss_accepted(self, loss_acceptance,
- loss_acceptance_type):
+ def partial_traffic_loss_accepted(
+ self, loss_acceptance, loss_acceptance_type):
"""Fail if loss is higher then accepted in traffic run.
:param loss_acceptance: Permitted drop ratio or frames count.
@@ -628,21 +640,23 @@ class TrafficGenerator(AbstractMeasurer):
:raises Exception: If loss is above acceptance criteria.
"""
if self._loss is None:
- raise Exception('The traffic generation has not been issued')
+ raise Exception(u"The traffic generation has not been issued")
- if loss_acceptance_type == 'percentage':
+ if loss_acceptance_type == u"percentage":
loss = (float(self._loss) / float(self._sent)) * 100
- elif loss_acceptance_type == 'frames':
+ elif loss_acceptance_type == u"frames":
loss = float(self._loss)
else:
- raise Exception('Loss acceptance type not supported')
+ raise Exception(u"Loss acceptance type not supported")
if loss > float(loss_acceptance):
- raise Exception("Traffic loss {} above loss acceptance: {}".format(
- loss, loss_acceptance))
+ raise Exception(
+ f"Traffic loss {loss} above loss acceptance: {loss_acceptance}"
+ )
- def set_rate_provider_defaults(self, frame_size, traffic_profile,
- warmup_time=0.0, traffic_directions=2):
+ def set_rate_provider_defaults(
+ self, frame_size, traffic_profile, warmup_time=0.0,
+ traffic_directions=2):
"""Store values accessed by measure().
:param frame_size: Frame size identifier or value [B].
@@ -686,7 +700,8 @@ class TrafficGenerator(AbstractMeasurer):
transmit_count = int(self.get_sent())
loss_count = int(self.get_loss())
measurement = ReceiveRateMeasurement(
- duration, transmit_rate, transmit_count, loss_count)
+ duration, transmit_rate, transmit_count, loss_count
+ )
measurement.latency = self.get_latency_int()
return measurement
@@ -709,15 +724,16 @@ class TrafficGenerator(AbstractMeasurer):
transmit_rate = float(transmit_rate)
# TG needs target Tr per stream, but reports aggregate Tx and Dx.
unit_rate_int = transmit_rate / float(self.traffic_directions)
- unit_rate_str = str(unit_rate_int) + "pps"
+ unit_rate_str = str(unit_rate_int) + u"pps"
self.send_traffic_on_tg(
duration, unit_rate_str, self.frame_size, self.traffic_profile,
warmup_time=self.warmup_time, latency=True,
- traffic_directions=self.traffic_directions)
+ traffic_directions=self.traffic_directions
+ )
return self.get_measurement_result(duration, transmit_rate)
-class OptimizedSearch(object):
+class OptimizedSearch:
"""Class to be imported as Robot Library, containing search keywords.
Aside of setting up measurer and forwarding arguments,
@@ -777,7 +793,8 @@ class OptimizedSearch(object):
# we need instance of TrafficGenerator instantiated by Robot Framework
# to be able to use trex_stl-*()
tg_instance = BuiltIn().get_library_instance(
- 'resources.libraries.python.TrafficGenerator')
+ u"resources.libraries.python.TrafficGenerator"
+ )
tg_instance.set_rate_provider_defaults(
frame_size, traffic_profile, traffic_directions=traffic_directions)
algorithm = MultipleLossRatioSearch(
@@ -785,9 +802,11 @@ class OptimizedSearch(object):
final_relative_width=final_relative_width,
number_of_intermediate_phases=number_of_intermediate_phases,
initial_trial_duration=initial_trial_duration, timeout=timeout,
- doublings=doublings)
+ doublings=doublings
+ )
result = algorithm.narrow_down_ndr_and_pdr(
- minimum_transmit_rate, maximum_transmit_rate, packet_loss_ratio)
+ minimum_transmit_rate, maximum_transmit_rate, packet_loss_ratio
+ )
return result
@staticmethod
@@ -814,6 +833,7 @@ class OptimizedSearch(object):
This is needed because initial "search" phase of integrator
takes significant time even without any trial results.
:param timeout: The search will stop after this overall time [s].
+ :param trace_enabled: True if trace enabled else False.
:param traffic_directions: Traffic is bi- (2) or uni- (1) directional.
Default: 2
:type frame_size: str or int
@@ -823,6 +843,7 @@ class OptimizedSearch(object):
:type plr_target: float
:type initial_count: int
:type timeout: float
+ :type trace_enabled: bool
:type traffic_directions: int
:returns: Average and stdev of estimated aggregate rate giving PLR.
:rtype: 2-tuple of float
@@ -830,13 +851,15 @@ class OptimizedSearch(object):
minimum_transmit_rate *= traffic_directions
maximum_transmit_rate *= traffic_directions
tg_instance = BuiltIn().get_library_instance(
- 'resources.libraries.python.TrafficGenerator')
+ u"resources.libraries.python.TrafficGenerator"
+ )
tg_instance.set_rate_provider_defaults(
frame_size, traffic_profile, traffic_directions=traffic_directions)
algorithm = PLRsearch(
measurer=tg_instance, trial_duration_per_trial=tdpt,
packet_loss_ratio_target=plr_target,
trial_number_offset=initial_count, timeout=timeout,
- trace_enabled=trace_enabled)
+ trace_enabled=trace_enabled
+ )
result = algorithm.search(minimum_transmit_rate, maximum_transmit_rate)
return result
diff --git a/resources/libraries/python/TrafficScriptArg.py b/resources/libraries/python/TrafficScriptArg.py
index 64d0747b27..247eccbc2f 100644
--- a/resources/libraries/python/TrafficScriptArg.py
+++ b/resources/libraries/python/TrafficScriptArg.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,7 +16,7 @@
import argparse
-class TrafficScriptArg(object):
+class TrafficScriptArg:
"""Traffic scripts argument parser.
Parse arguments for traffic script. Default has two arguments '--tx_if'
@@ -37,18 +37,18 @@ class TrafficScriptArg(object):
def __init__(self, more_args=None, opt_args=None):
parser = argparse.ArgumentParser()
- parser.add_argument("--tx_if", help="interface that sends traffic")
- parser.add_argument("--rx_if", help="interface that receives traffic")
+ parser.add_argument(u"--tx_if", help=u"interface that sends traffic")
+ parser.add_argument(u"--rx_if", help=u"interface that receives traffic")
if more_args is not None:
for arg in more_args:
- arg_name = '--{0}'.format(arg)
+ arg_name = f"--{arg}"
parser.add_argument(arg_name)
if opt_args is not None:
for arg in opt_args:
- arg_name = '--{0}'.format(arg)
- parser.add_argument(arg_name, nargs='?', default='')
+ arg_name = f"--{arg}"
+ parser.add_argument(arg_name, nargs=u"?", default=u"")
self._parser = parser
self._args = vars(parser.parse_args())
@@ -63,6 +63,6 @@ class TrafficScriptArg(object):
"""
arg_val = self._args.get(arg_name)
if arg_val is None:
- raise Exception("Argument '{0}' not found".format(arg_name))
+ raise Exception(f"Argument '{arg_name}' not found")
return arg_val
diff --git a/resources/libraries/python/TrafficScriptExecutor.py b/resources/libraries/python/TrafficScriptExecutor.py
index abd97e6fc6..a9a733bbdf 100644
--- a/resources/libraries/python/TrafficScriptExecutor.py
+++ b/resources/libraries/python/TrafficScriptExecutor.py
@@ -16,10 +16,10 @@
from resources.libraries.python.Constants import Constants
from resources.libraries.python.ssh import SSH
-__all__ = ['TrafficScriptExecutor']
+__all__ = [u"TrafficScriptExecutor"]
-class TrafficScriptExecutor(object):
+class TrafficScriptExecutor:
"""Traffic script executor utilities."""
@staticmethod
@@ -31,11 +31,11 @@ class TrafficScriptExecutor(object):
:returns: Escaped string.
:rtype: str
"""
- return string.replace('"', '\\"').replace("$", "\\$")
+ return string.replace(u'"', u'\\"').replace(u"$", u"\\$")
@staticmethod
- def run_traffic_script_on_node(script_file_name, node, script_args,
- timeout=60):
+ def run_traffic_script_on_node(
+ script_file_name, node, script_args, timeout=60):
"""Run traffic script on the TG node.
:param script_file_name: Traffic script name.
@@ -55,33 +55,32 @@ class TrafficScriptExecutor(object):
"""
ssh = SSH()
ssh.connect(node)
- cmd = ("cd {}; " +
- "virtualenv --system-site-packages --never-download env && " +
- "export PYTHONPATH=${{PWD}}; " +
- ". ${{PWD}}/env/bin/activate; " +
- "resources/traffic_scripts/{} {}") \
- .format(Constants.REMOTE_FW_DIR, script_file_name,
- script_args)
+ cmd = f"cd {Constants.REMOTE_FW_DIR}; virtualenv -p $(which python3) " \
+ f"--system-site-packages --never-download env && " \
+ f"export PYTHONPATH=${{PWD}}; . ${{PWD}}/env/bin/activate; " \
+ f"resources/traffic_scripts/{script_file_name} {script_args}"
+
ret_code, stdout, stderr = ssh.exec_command_sudo(
- 'sh -c "{cmd}"'.format(cmd=TrafficScriptExecutor._escape(cmd)),
- timeout=timeout)
+ f'sh -c "{TrafficScriptExecutor._escape(cmd)}"', timeout=timeout
+ )
if ret_code != 0:
- if "RuntimeError: ICMP echo Rx timeout" in stderr:
- raise RuntimeError("ICMP echo Rx timeout")
- elif "RuntimeError: IP packet Rx timeout" in stderr:
- raise RuntimeError("IP packet Rx timeout")
- elif "RuntimeError: DHCP REQUEST Rx timeout" in stderr:
- raise RuntimeError("DHCP REQUEST Rx timeout")
- elif "RuntimeError: DHCP DISCOVER Rx timeout" in stderr:
- raise RuntimeError("DHCP DISCOVER Rx timeout")
- elif "RuntimeError: TCP/UDP Rx timeout" in stderr:
- raise RuntimeError("TCP/UDP Rx timeout")
- elif "Error occurred: ARP reply timeout" in stdout:
- raise RuntimeError("ARP reply timeout")
- elif "RuntimeError: ESP packet Rx timeout" in stderr:
- raise RuntimeError("ESP packet Rx timeout")
+ if u"RuntimeError: ICMP echo Rx timeout" in stderr:
+ msg = "ICMP echo Rx timeout"
+ elif u"RuntimeError: IP packet Rx timeout" in stderr:
+ msg = u"IP packet Rx timeout"
+ elif u"RuntimeError: DHCP REQUEST Rx timeout" in stderr:
+ msg = u"DHCP REQUEST Rx timeout"
+ elif u"RuntimeError: DHCP DISCOVER Rx timeout" in stderr:
+ msg = u"DHCP DISCOVER Rx timeout"
+ elif u"RuntimeError: TCP/UDP Rx timeout" in stderr:
+ msg = u"TCP/UDP Rx timeout"
+ elif u"Error occurred: ARP reply timeout" in stdout:
+ msg = u"ARP reply timeout"
+ elif u"RuntimeError: ESP packet Rx timeout" in stderr:
+ msg = u"ESP packet Rx timeout"
else:
- raise RuntimeError("Traffic script execution failed")
+ msg = u"Traffic script execution failed"
+ raise RuntimeError(msg)
@staticmethod
def traffic_script_gen_arg(rx_if, tx_if, src_mac, dst_mac, src_ip, dst_ip):
@@ -102,7 +101,6 @@ class TrafficScriptExecutor(object):
:returns: Traffic script arguments string.
:rtype: str
"""
- args = ('--rx_if {0} --tx_if {1} --src_mac {2} --dst_mac {3} --src_ip'
- ' {4} --dst_ip {5}').format(rx_if, tx_if, src_mac, dst_mac,
- src_ip, dst_ip)
+ args = f"--rx_if {rx_if} --tx_if {tx_if} --src_mac {src_mac} " \
+ f"--dst_mac {dst_mac} --src_ip {src_ip} --dst_ip {dst_ip}"
return args
diff --git a/resources/libraries/python/VPPUtil.py b/resources/libraries/python/VPPUtil.py
index 72b6142306..72325d8169 100644
--- a/resources/libraries/python/VPPUtil.py
+++ b/resources/libraries/python/VPPUtil.py
@@ -22,7 +22,7 @@ from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import NodeType
-class VPPUtil(object):
+class VPPUtil:
"""General class for any VPP related methods/functions."""
@staticmethod
@@ -38,20 +38,20 @@ class VPPUtil(object):
:type additional_cmds: tuple
"""
def_setting_tb_displayed = {
- 'IPv6 FIB': 'ip6 fib',
- 'IPv4 FIB': 'ip fib',
- 'Interface IP': 'int addr',
- 'Interfaces': 'int',
- 'ARP': 'ip arp',
- 'Errors': 'err'
+ u"IPv6 FIB": u"ip6 fib",
+ u"IPv4 FIB": u"ip fib",
+ u"Interface IP": u"int addr",
+ u"Interfaces": u"int",
+ u"ARP": u"ip arp",
+ u"Errors": u"err"
}
if additional_cmds:
for cmd in additional_cmds:
- def_setting_tb_displayed['Custom Setting: {}'.format(cmd)] = cmd
+ def_setting_tb_displayed[f"Custom Setting: {cmd}"] = cmd
for _, cmd in def_setting_tb_displayed.items():
- command = 'vppctl sh {cmd}'.format(cmd=cmd)
+ command = f"vppctl sh {cmd}"
exec_cmd_no_error(node, command, timeout=30, sudo=True)
@staticmethod
@@ -71,7 +71,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.restart_vpp_service(node)
@staticmethod
@@ -91,7 +91,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.stop_vpp_service(node)
@staticmethod
@@ -101,9 +101,8 @@ class VPPUtil(object):
:param node: Topology node.
:type node: dict
"""
- cmd = 'command -v vpp'
- exec_cmd_no_error(
- node, cmd, message='VPP is not installed!')
+ cmd = u"command -v vpp"
+ exec_cmd_no_error(node, cmd, message=u"VPP is not installed!")
@staticmethod
def verify_vpp_started(node):
@@ -112,15 +111,16 @@ class VPPUtil(object):
:param node: Topology node.
:type node: dict
"""
- cmd = 'echo "show pci" | sudo socat - UNIX-CONNECT:/run/vpp/cli.sock'
+ cmd = u"echo \"show pci\" | sudo socat - UNIX-CONNECT:/run/vpp/cli.sock"
exec_cmd_no_error(
- node, cmd, sudo=False, message='VPP failed to start!', retries=120)
+ node, cmd, sudo=False, message=u"VPP failed to start!", retries=120
+ )
- cmd = ('vppctl show pci 2>&1 | '
- 'fgrep -v "Connection refused" | '
- 'fgrep -v "No such file or directory"')
+ cmd = u"vppctl show pci 2>&1 | fgrep -v \"Connection refused\" | " \
+ u"fgrep -v \"No such file or directory\""
exec_cmd_no_error(
- node, cmd, sudo=True, message='VPP failed to start!', retries=120)
+ node, cmd, sudo=True, message=u"VPP failed to start!", retries=120
+ )
@staticmethod
def verify_vpp(node):
@@ -133,9 +133,9 @@ class VPPUtil(object):
"""
VPPUtil.verify_vpp_installed(node)
try:
- # Verify responsivness of vppctl.
+ # Verify responsiveness of vppctl.
VPPUtil.verify_vpp_started(node)
- # Verify responsivness of PAPI.
+ # Verify responsiveness of PAPI.
VPPUtil.show_log(node)
VPPUtil.vpp_show_version(node)
finally:
@@ -149,33 +149,23 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.verify_vpp(node)
@staticmethod
- def vpp_show_version(node, verbose=True):
+ def vpp_show_version(node):
"""Run "show_version" PAPI command.
:param node: Node to run command on.
- :param verbose: Show version, compile date and compile location if True
- otherwise show only version.
:type node: dict
- :type verbose: bool
:returns: VPP version.
:rtype: str
"""
- cmd = 'show_version'
+ cmd = u"show_version"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply()
- return_version = reply['version'].rstrip('\0x00')
- version = 'VPP version: {ver}\n'.format(ver=return_version)
- if verbose:
- version += ('Compile date: {date}\n'
- 'Compile location: {cl}\n'.
- format(date=reply['build_date'].rstrip('\0x00'),
- cl=reply['build_directory'].rstrip('\0x00')))
- logger.info(version)
- return return_version
+ logger.info(f"VPP version: {reply[u'version']}\n")
+ return f"{reply[u'version']}"
@staticmethod
def show_vpp_version_on_all_duts(nodes):
@@ -185,7 +175,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.vpp_show_version(node)
@staticmethod
@@ -196,29 +186,27 @@ class VPPUtil(object):
:type node: dict
"""
- cmd = 'sw_interface_dump'
+ cmd = u"sw_interface_dump"
args = dict(
name_filter_valid=False,
- name_filter=''
+ name_filter=u""
)
- err_msg = 'Failed to get interface dump on host {host}'.format(
- host=node['host'])
+ err_msg = f"Failed to get interface dump on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd, **args).get_details(err_msg)
for if_dump in details:
- if_dump['l2_address'] = str(if_dump['l2_address'])
- if_dump['b_dmac'] = str(if_dump['b_dmac'])
- if_dump['b_smac'] = str(if_dump['b_smac'])
- if_dump['flags'] = if_dump['flags'].value
- if_dump['type'] = if_dump['type'].value
- if_dump['link_duplex'] = if_dump['link_duplex'].value
- if_dump['sub_if_flags'] = if_dump['sub_if_flags'].value \
- if hasattr(if_dump['sub_if_flags'], 'value') \
- else int(if_dump['sub_if_flags'])
+ if_dump[u"l2_address"] = str(if_dump[u"l2_address"])
+ if_dump[u"b_dmac"] = str(if_dump[u"b_dmac"])
+ if_dump[u"b_smac"] = str(if_dump[u"b_smac"])
+ if_dump[u"flags"] = if_dump[u"flags"].value
+ if_dump[u"type"] = if_dump[u"type"].value
+ if_dump[u"link_duplex"] = if_dump[u"link_duplex"].value
+ if_dump[u"sub_if_flags"] = if_dump[u"sub_if_flags"].value \
+ if hasattr(if_dump[u"sub_if_flags"], u"value") \
+ else int(if_dump[u"sub_if_flags"])
# TODO: return only base data
- logger.trace('Interface data of host {host}:\n{details}'.format(
- host=node['host'], details=details))
+ logger.trace(f"Interface data of host {node[u'host']}:\n{details}")
@staticmethod
def vpp_enable_traces_on_dut(node, fail_on_error=False):
@@ -231,10 +219,10 @@ class VPPUtil(object):
:type fail_on_error: bool
"""
cmds = [
- "trace add dpdk-input 50",
- "trace add vhost-user-input 50",
- "trace add memif-input 50",
- "trace add avf-input 50"
+ u"trace add dpdk-input 50",
+ u"trace add vhost-user-input 50",
+ u"trace add memif-input 50",
+ u"trace add avf-input 50"
]
for cmd in cmds:
@@ -255,7 +243,7 @@ class VPPUtil(object):
:type fail_on_error: bool
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.vpp_enable_traces_on_dut(node, fail_on_error)
@staticmethod
@@ -275,7 +263,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.vpp_enable_elog_traces(node)
@staticmethod
@@ -285,7 +273,7 @@ class VPPUtil(object):
:param node: Topology node.
:type node: dict
"""
- PapiSocketExecutor.run_cli_cmd(node, "show event-logger")
+ PapiSocketExecutor.run_cli_cmd(node, u"show event-logger")
@staticmethod
def show_event_logger_on_all_duts(nodes):
@@ -295,7 +283,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.show_event_logger(node)
@staticmethod
@@ -305,7 +293,7 @@ class VPPUtil(object):
:param node: Topology node.
:type node: dict
"""
- PapiSocketExecutor.run_cli_cmd(node, "show logging")
+ PapiSocketExecutor.run_cli_cmd(node, u"show logging")
@staticmethod
def show_log_on_all_duts(nodes):
@@ -315,7 +303,7 @@ class VPPUtil(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VPPUtil.show_log(node)
@staticmethod
@@ -327,19 +315,19 @@ class VPPUtil(object):
:returns: VPP thread data.
:rtype: list
"""
- cmd = 'show_threads'
+ cmd = u"show_threads"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply()
threads_data = list()
- for thread in reply["thread_data"]:
+ for thread in reply[u"thread_data"]:
thread_data = list()
for item in thread:
- if isinstance(item, unicode):
+ if isinstance(item, str):
item = item.rstrip('\x00')
thread_data.append(item)
threads_data.append(thread_data)
- logger.trace("show threads:\n{threads}".format(threads=threads_data))
+ logger.trace(f"show threads:\n{threads_data}")
return threads_data
diff --git a/resources/libraries/python/VatExecutor.py b/resources/libraries/python/VatExecutor.py
index 4fe549eb23..2d6a03327b 100644
--- a/resources/libraries/python/VatExecutor.py
+++ b/resources/libraries/python/VatExecutor.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -14,16 +14,17 @@
"""VAT executor library."""
import json
+
from os import remove
from paramiko.ssh_exception import SSHException
from robot.api import logger
-from resources.libraries.python.ssh import SSH, SSHTimeout
from resources.libraries.python.Constants import Constants
from resources.libraries.python.PapiHistory import PapiHistory
+from resources.libraries.python.ssh import SSH, SSHTimeout
-__all__ = ['VatExecutor']
+__all__ = [u"VatExecutor"]
def cleanup_vat_json_output(json_output, vat_name=None):
@@ -40,14 +41,13 @@ def cleanup_vat_json_output(json_output, vat_name=None):
"""
retval = json_output
- clutter = ['vat#', 'dump_interface_table error: Misc']
+ clutter = [u"vat#", u"dump_interface_table error: Misc"]
if vat_name:
- remote_file_path = '{0}/{1}/{2}'.format(Constants.REMOTE_FW_DIR,
- Constants.RESOURCES_TPL_VAT,
- vat_name)
- clutter.append("{0}(2):".format(remote_file_path))
+ remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \
+ f"{Constants.RESOURCES_TPL_VAT}/{vat_name}"
+ clutter.append(f"{remote_file_path}(2):")
for garbage in clutter:
- retval = retval.replace(garbage, '')
+ retval = retval.replace(garbage, u"")
return retval
@@ -60,12 +60,13 @@ def get_vpp_pid(node):
running on the DUT node.
:rtype: int or list
"""
+ # pylint: disable=import-outside-toplevel
import resources.libraries.python.DUTSetup as PidLib
pid = PidLib.DUTSetup.get_vpp_pid(node)
return pid
-class VatExecutor(object):
+class VatExecutor:
"""Contains methods for executing VAT commands on DUTs."""
def __init__(self):
self._stdout = None
@@ -73,8 +74,9 @@ class VatExecutor(object):
self._ret_code = None
self._script_name = None
- def execute_script(self, vat_name, node, timeout=120, json_out=True,
- copy_on_execute=False, history=True):
+ def execute_script(
+ self, vat_name, node, timeout=120, json_out=True,
+ copy_on_execute=False, history=True):
"""Execute VAT script on remote node, and store the result. There is an
option to copy script from local host to remote host before execution.
Path is defined automatically.
@@ -102,45 +104,44 @@ class VatExecutor(object):
try:
ssh.connect(node)
except:
- raise SSHException("Cannot open SSH connection to execute VAT "
- "command(s) from vat script {name}"
- .format(name=vat_name))
+ raise SSHException(
+ f"Cannot open SSH connection to execute VAT command(s) "
+ f"from vat script {vat_name}"
+ )
if copy_on_execute:
ssh.scp(vat_name, vat_name)
remote_file_path = vat_name
if history:
- with open(vat_name, 'r') as vat_file:
+ with open(vat_name, "r") as vat_file:
for line in vat_file:
- PapiHistory.add_to_papi_history(node,
- line.replace('\n', ''),
- papi=False)
+ PapiHistory.add_to_papi_history(
+ node, line.replace(u"\n", u""), papi=False
+ )
else:
- remote_file_path = '{0}/{1}/{2}'.format(Constants.REMOTE_FW_DIR,
- Constants.RESOURCES_TPL_VAT,
- vat_name)
-
- cmd = "{vat_bin} {json} in {vat_path} script".format(
- vat_bin=Constants.VAT_BIN_NAME,
- json="json" if json_out is True else "",
- vat_path=remote_file_path)
+ remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \
+ f"{Constants.RESOURCES_TPL_VAT}/{vat_name}"
+ cmd = f"{Constants.VAT_BIN_NAME}" \
+ f"{u' json' if json_out is True else u''} " \
+ f"in {remote_file_path} script"
try:
- ret_code, stdout, stderr = ssh.exec_command_sudo(cmd=cmd,
- timeout=timeout)
+ ret_code, stdout, stderr = ssh.exec_command_sudo(
+ cmd=cmd, timeout=timeout
+ )
except SSHTimeout:
- logger.error("VAT script execution timeout: {0}".format(cmd))
+ logger.error(f"VAT script execution timeout: {cmd}")
raise
- except:
- raise RuntimeError("VAT script execution failed: {0}".format(cmd))
+ except Exception:
+ raise RuntimeError(f"VAT script execution failed: {cmd}")
self._ret_code = ret_code
self._stdout = stdout
self._stderr = stderr
self._script_name = vat_name
- def write_and_execute_script(self, node, tmp_fn, commands, timeout=300,
- json_out=False):
+ def write_and_execute_script(
+ self, node, tmp_fn, commands, timeout=300, json_out=False):
"""Write VAT commands to the script, copy it to node and execute it.
:param node: VPP node.
@@ -154,11 +155,13 @@ class VatExecutor(object):
:type timeout: int
:type json_out: bool
"""
- with open(tmp_fn, 'w') as tmp_f:
+ with open(tmp_fn, "w") as tmp_f:
tmp_f.writelines(commands)
- self.execute_script(tmp_fn, node, timeout=timeout, json_out=json_out,
- copy_on_execute=True)
+ self.execute_script(
+ tmp_fn, node, timeout=timeout, json_out=json_out,
+ copy_on_execute=True
+ )
remove(tmp_fn)
def execute_script_json_out(self, vat_name, node, timeout=120):
@@ -181,21 +184,23 @@ class VatExecutor(object):
"""Read return code from last executed script and raise exception if the
script didn't fail."""
if self._ret_code is None:
- raise Exception("First execute the script!")
+ raise Exception(u"First execute the script!")
if self._ret_code == 0:
raise AssertionError(
- "VAT Script execution passed, but failure was expected: {cmd}"
- .format(cmd=self._script_name))
+ f"VAT Script execution passed, but failure was expected: "
+ f"{self._script_name}"
+ )
def script_should_have_passed(self):
"""Read return code from last executed script and raise exception if the
script failed."""
if self._ret_code is None:
- raise Exception("First execute the script!")
+ raise Exception(u"First execute the script!")
if self._ret_code != 0:
raise AssertionError(
- "VAT Script execution failed, but success was expected: {cmd}"
- .format(cmd=self._script_name))
+ f"VAT Script execution failed, but success was expected: "
+ f"{self._script_name}"
+ )
def get_script_stdout(self):
"""Returns value of stdout from last executed script."""
@@ -212,15 +217,17 @@ class VatExecutor(object):
:param node: Node in topology on witch the script is executed.
:param vat_template_file: Template file of VAT script.
+ :param json_param: Require JSON mode.
:param vat_args: Arguments to the template file.
:returns: List of JSON objects returned by VAT.
"""
with VatTerminal(node, json_param=json_param) as vat:
- return vat.vat_terminal_exec_cmd_from_template(vat_template_file,
- **vat_args)
+ return vat.vat_terminal_exec_cmd_from_template(
+ vat_template_file, **vat_args
+ )
-class VatTerminal(object):
+class VatTerminal:
"""VAT interactive terminal.
:param node: Node to open VAT terminal on.
@@ -231,11 +238,11 @@ class VatTerminal(object):
"""
- __VAT_PROMPT = ("vat# ", )
- __LINUX_PROMPT = (":~# ", ":~$ ", "~]$ ", "~]# ")
+ __VAT_PROMPT = (u"vat# ", )
+ __LINUX_PROMPT = (u":~# ", u":~$ ", u"~]$ ", u"~]# ")
def __init__(self, node, json_param=True):
- json_text = ' json' if json_param else ''
+ json_text = u" json" if json_param else u""
self.json = json_param
self._node = node
self._ssh = SSH()
@@ -243,15 +250,16 @@ class VatTerminal(object):
try:
self._tty = self._ssh.interactive_terminal_open()
except Exception:
- raise RuntimeError("Cannot open interactive terminal on node {0}".
- format(self._node))
+ raise RuntimeError(
+ f"Cannot open interactive terminal on node {self._node}"
+ )
for _ in range(3):
try:
self._ssh.interactive_terminal_exec_command(
- self._tty,
- 'sudo -S {0}{1}'.format(Constants.VAT_BIN_NAME, json_text),
- self.__VAT_PROMPT)
+ self._tty, f"sudo -S {Constants.VAT_BIN_NAME}{json_text}",
+ self.__VAT_PROMPT
+ )
except Exception:
continue
else:
@@ -260,16 +268,17 @@ class VatTerminal(object):
vpp_pid = get_vpp_pid(self._node)
if vpp_pid:
if isinstance(vpp_pid, int):
- logger.trace("VPP running on node {0}".
- format(self._node['host']))
+ logger.trace(f"VPP running on node {self._node[u'host']}")
else:
- logger.error("More instances of VPP running on node {0}.".
- format(self._node['host']))
+ logger.error(
+ f"More instances of VPP running "
+ f"on node {self._node[u'host']}."
+ )
else:
- logger.error("VPP not running on node {0}.".
- format(self._node['host']))
- raise RuntimeError("Failed to open VAT console on node {0}".
- format(self._node['host']))
+ logger.error(f"VPP not running on node {self._node[u'host']}.")
+ raise RuntimeError(
+ f"Failed to open VAT console on node {self._node[u'host']}"
+ )
self._exec_failure = False
self.vat_stdout = None
@@ -289,36 +298,37 @@ class VatTerminal(object):
None if not in JSON mode.
"""
PapiHistory.add_to_papi_history(self._node, cmd, papi=False)
- logger.debug("Executing command in VAT terminal: {0}".format(cmd))
+ logger.debug(f"Executing command in VAT terminal: {cmd}")
try:
- out = self._ssh.interactive_terminal_exec_command(self._tty, cmd,
- self.__VAT_PROMPT)
+ out = self._ssh.interactive_terminal_exec_command(
+ self._tty, cmd, self.__VAT_PROMPT
+ )
self.vat_stdout = out
except Exception:
self._exec_failure = True
vpp_pid = get_vpp_pid(self._node)
if vpp_pid:
if isinstance(vpp_pid, int):
- raise RuntimeError("VPP running on node {0} but VAT command"
- " {1} execution failed.".
- format(self._node['host'], cmd))
+ msg = f"VPP running on node {self._node[u'host']} " \
+ f"but VAT command {cmd} execution failed."
else:
- raise RuntimeError("More instances of VPP running on node "
- "{0}. VAT command {1} execution failed.".
- format(self._node['host'], cmd))
- raise RuntimeError("VPP not running on node {0}. VAT command "
- "{1} execution failed.".
- format(self._node['host'], cmd))
-
- logger.debug("VAT output: {0}".format(out))
+ msg = f"More instances of VPP running on node " \
+ f"{self._node[u'host']}. VAT command {cmd} " \
+ f"execution failed."
+ else:
+ msg = f"VPP not running on node {self._node[u'host']}. " \
+ f"VAT command {cmd} execution failed."
+ raise RuntimeError(msg)
+
+ logger.debug(f"VAT output: {out}")
if self.json:
- obj_start = out.find('{')
- obj_end = out.rfind('}')
- array_start = out.find('[')
- array_end = out.rfind(']')
+ obj_start = out.find(u"{")
+ obj_end = out.rfind(u"}")
+ array_start = out.find(u"[")
+ array_end = out.rfind(u"]")
if obj_start == -1 and array_start == -1:
- raise RuntimeError("VAT command {0}: no JSON data.".format(cmd))
+ raise RuntimeError(f"VAT command {cmd}: no JSON data.")
if obj_start < array_start or array_start == -1:
start = obj_start
@@ -329,36 +339,44 @@ class VatTerminal(object):
out = out[start:end]
json_out = json.loads(out)
return json_out
- else:
- return None
+
+ return None
def vat_terminal_close(self):
"""Close VAT terminal."""
# interactive terminal is dead, we only need to close session
if not self._exec_failure:
try:
- self._ssh.interactive_terminal_exec_command(self._tty,
- 'quit',
- self.__LINUX_PROMPT)
+ self._ssh.interactive_terminal_exec_command(
+ self._tty, u"quit", self.__LINUX_PROMPT
+ )
except Exception:
vpp_pid = get_vpp_pid(self._node)
if vpp_pid:
if isinstance(vpp_pid, int):
- logger.trace("VPP running on node {0}.".
- format(self._node['host']))
+ logger.trace(
+ f"VPP running on node {self._node[u'host']}."
+ )
else:
- logger.error("More instances of VPP running on node "
- "{0}.".format(self._node['host']))
+ logger.error(
+ f"More instances of VPP running "
+ f"on node {self._node[u'host']}."
+ )
else:
- logger.error("VPP not running on node {0}.".
- format(self._node['host']))
- raise RuntimeError("Failed to close VAT console on node {0}".
- format(self._node['host']))
+ logger.error(
+ f"VPP not running on node {self._node[u'host']}."
+ )
+ raise RuntimeError(
+ f"Failed to close VAT console "
+ f"on node {self._node[u'host']}"
+ )
try:
self._ssh.interactive_terminal_close(self._tty)
- except:
- raise RuntimeError("Cannot close interactive terminal on node {0}".
- format(self._node['host']))
+ except Exception:
+ raise RuntimeError(
+ f"Cannot close interactive terminal "
+ f"on node {self._node[u'host']}"
+ )
def vat_terminal_exec_cmd_from_template(self, vat_template_file, **args):
"""Execute VAT script from a file.
@@ -367,12 +385,12 @@ class VatTerminal(object):
:param args: Dictionary of parameters for VAT script.
:returns: List of JSON objects returned by VAT.
"""
- file_path = '{}/{}'.format(Constants.RESOURCES_TPL_VAT,
- vat_template_file)
- with open(file_path, 'r') as template_file:
+ file_path = f"{Constants.RESOURCES_TPL_VAT}/{vat_template_file}"
+
+ with open(file_path, "r") as template_file:
cmd_template = template_file.readlines()
- ret = []
+ ret = list()
for line_tmpl in cmd_template:
vat_cmd = line_tmpl.format(**args)
- ret.append(self.vat_terminal_exec_cmd(vat_cmd.replace('\n', '')))
+ ret.append(self.vat_terminal_exec_cmd(vat_cmd.replace(u"\n", u"")))
return ret
diff --git a/resources/libraries/python/VatJsonUtil.py b/resources/libraries/python/VatJsonUtil.py
index ef92a24f07..594d3e2f39 100644
--- a/resources/libraries/python/VatJsonUtil.py
+++ b/resources/libraries/python/VatJsonUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -18,7 +18,7 @@ from robot.api import logger
from resources.libraries.python.parsers.JsonParser import JsonParser
-class VatJsonUtil(object):
+class VatJsonUtil:
"""Utilities to work with JSON data format from VAT."""
@staticmethod
@@ -33,8 +33,8 @@ class VatJsonUtil(object):
:returns: List representation of MAC address.
:rtype: list
"""
- list_mac = []
- for num in mac_address.split(":"):
+ list_mac = list()
+ for num in mac_address.split(u":"):
list_mac.append(int(num, 16))
return list_mac
@@ -52,26 +52,29 @@ class VatJsonUtil(object):
:returns: Interface from JSON.
:rtype: dict
"""
- interface_dict = {}
+ interface_dict = dict()
list_mac_address = VatJsonUtil._convert_mac_to_number_list(mac_address)
- logger.trace("MAC address {0} converted to list {1}."
- .format(mac_address, list_mac_address))
+ logger.trace(
+ f"MAC address {mac_address} converted to list {list_mac_address}."
+ )
for interface in interfaces_list:
# TODO: create vat json integrity checking and move there
- if "l2_address" not in interface:
+ if u"l2_address" not in interface:
raise KeyError(
- "key l2_address not found in interface dict."
- "Probably input list is not parsed from correct VAT "
- "json output.")
- if "l2_address_length" not in interface:
+ u"key l2_address not found in interface dict."
+ u"Probably input list is not parsed from correct VAT "
+ u"json output."
+ )
+ if u"l2_address_length" not in interface:
raise KeyError(
- "key l2_address_length not found in interface "
- "dict. Probably input list is not parsed from correct "
- "VAT json output.")
- mac_from_json = interface["l2_address"][:6]
+ u"key l2_address_length not found in interface "
+ u"dict. Probably input list is not parsed from correct "
+ u"VAT json output."
+ )
+ mac_from_json = interface[u"l2_address"][:6]
if mac_from_json == list_mac_address:
- if interface["l2_address_length"] != 6:
- raise ValueError("l2_address_length value is not 6.")
+ if interface[u"l2_address_length"] != 6:
+ raise ValueError(u"l2_address_length value is not 6.")
interface_dict = interface
break
return interface_dict
@@ -90,18 +93,18 @@ class VatJsonUtil(object):
:type interface_dump_json: str
"""
interface_list = JsonParser().parse_data(interface_dump_json)
- for ifc in node['interfaces'].values():
- if_mac = ifc['mac_address']
+ for ifc in node[u"interfaces"].values():
+ if_mac = ifc[u"mac_address"]
interface_dict = VatJsonUtil.get_vpp_interface_by_mac(
- interface_list, if_mac)
+ interface_list, if_mac
+ )
if not interface_dict:
- logger.trace('Interface {0} not found by MAC {1}'
- .format(ifc, if_mac))
- ifc['vpp_sw_index'] = None
+ logger.trace(f"Interface {ifc} not found by MAC {if_mac}")
+ ifc[u"vpp_sw_index"] = None
continue
- ifc['name'] = interface_dict["interface_name"]
- ifc['vpp_sw_index'] = interface_dict["sw_if_index"]
- ifc['mtu'] = interface_dict["mtu"]
+ ifc[u"name"] = interface_dict[u"interface_name"]
+ ifc[u"vpp_sw_index"] = interface_dict[u"sw_if_index"]
+ ifc[u"mtu"] = interface_dict[u"mtu"]
@staticmethod
def get_interface_sw_index_from_json(interface_dump_json, interface_name):
@@ -120,15 +123,16 @@ class VatJsonUtil(object):
interface_list = JsonParser().parse_data(interface_dump_json)
for interface in interface_list:
try:
- if interface['interface_name'] == interface_name:
- index = interface['sw_if_index']
- logger.debug('Interface with name {} has sw_if_index {}.'
- .format(interface_name, index))
+ if interface[u"interface_name"] == interface_name:
+ index = interface[u"sw_if_index"]
+ logger.debug(
+ f"Interface with name {interface_name} "
+ f"has sw_if_index {index}."
+ )
return index
except KeyError:
pass
- raise ValueError('Interface with name {} not found.'
- .format(interface_name))
+ raise ValueError(f"Interface with name {interface_name} not found.")
@staticmethod
def get_interface_name_from_json(interface_dump_json, sw_if_index):
@@ -147,16 +151,16 @@ class VatJsonUtil(object):
interface_list = JsonParser().parse_data(interface_dump_json)
for interface in interface_list:
try:
- if interface['sw_if_index'] == sw_if_index:
- interface_name = interface['interface_name']
- logger.debug('Interface with sw_if_index {idx} has name'
- ' {name}.'.format(idx=sw_if_index,
- name=interface_name))
+ if interface[u"sw_if_index"] == sw_if_index:
+ interface_name = interface[u"interface_name"]
+ logger.debug(
+ f"Interface with sw_if_index {sw_if_index} "
+ f"has name {interface_name}."
+ )
return interface_name
except KeyError:
pass
- raise ValueError('Interface with sw_if_index {} not found.'
- .format(sw_if_index))
+ raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.")
@staticmethod
def get_interface_mac_from_json(interface_dump_json, sw_if_index):
@@ -175,22 +179,23 @@ class VatJsonUtil(object):
interface_list = JsonParser().parse_data(interface_dump_json)
for interface in interface_list:
try:
- if interface['sw_if_index'] == sw_if_index:
- mac_from_json = interface['l2_address'][:6] \
- if 'l2_address' in interface.keys() else ''
- mac_address = ':'.join('{:02x}'.format(item)
- for item in mac_from_json)
- logger.debug('Interface with sw_if_index {idx} has MAC'
- ' address {addr}.'.format(idx=sw_if_index,
- addr=mac_address))
+ if interface[u"sw_if_index"] == sw_if_index:
+ mac_from_json = interface[u"l2_address"][:6] \
+ if u"l2_address" in list(interface.keys()) else u""
+ mac_address = u":".join(
+ f"{item:02x}" for item in mac_from_json
+ )
+ logger.debug(
+ f"Interface with sw_if_index {sw_if_index} "
+ f"has MAC address {mac_address}."
+ )
return mac_address
except KeyError:
pass
- raise ValueError('Interface with sw_if_index {idx} not found.'
- .format(idx=sw_if_index))
+ raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.")
@staticmethod
- def verify_vat_retval(vat_out, exp_retval=0, err_msg='VAT cmd failed'):
+ def verify_vat_retval(vat_out, exp_retval=0, err_msg=u"VAT cmd failed"):
"""Verify return value of VAT command.
VAT command JSON output should be object (dict in python) or array. We
@@ -207,7 +212,7 @@ class VatJsonUtil(object):
:raises RuntimeError: If VAT command return value is incorrect.
"""
if isinstance(vat_out, dict):
- retval = vat_out.get('retval')
+ retval = vat_out.get(u"retval")
if retval is not None:
if retval != exp_retval:
raise RuntimeError(err_msg)
diff --git a/resources/libraries/python/VhostUser.py b/resources/libraries/python/VhostUser.py
index a24bc97633..48cce002bd 100644
--- a/resources/libraries/python/VhostUser.py
+++ b/resources/libraries/python/VhostUser.py
@@ -20,7 +20,7 @@ from resources.libraries.python.topology import NodeType, Topology
from resources.libraries.python.InterfaceUtil import InterfaceUtil
-class VhostUser(object):
+class VhostUser:
"""Vhost-user interfaces L1 library."""
@staticmethod
@@ -33,15 +33,16 @@ class VhostUser(object):
response.
:rtype: list
"""
- cmd = "sw_interface_vhost_user_dump"
+ cmd = u"sw_interface_vhost_user_dump"
+
with PapiSocketExecutor(node) as papi_exec:
details = papi_exec.add(cmd).get_details()
for vhost in details:
- vhost["interface_name"] = vhost["interface_name"].rstrip('\x00')
- vhost["sock_filename"] = vhost["sock_filename"].rstrip('\x00')
+ vhost[u"interface_name"] = vhost[u"interface_name"]
+ vhost[u"sock_filename"] = vhost[u"sock_filename"]
- logger.debug("VhostUser details:\n{details}".format(details=details))
+ logger.debug(f"VhostUser details:\n{details}")
return details
@@ -56,17 +57,18 @@ class VhostUser(object):
:returns: SW interface index.
:rtype: int
"""
- cmd = 'create_vhost_user_if'
- err_msg = 'Failed to create Vhost-user interface on host {host}'.format(
- host=node['host'])
+ cmd = u"create_vhost_user_if"
+ err_msg = f"Failed to create Vhost-user interface " \
+ f"on host {node[u'host']}"
args = dict(
- sock_filename=str(socket)
+ sock_filename=str(socket).encode(encoding=u"utf-8")
)
+
with PapiSocketExecutor(node) as papi_exec:
sw_if_index = papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
# Update the Topology:
- if_key = Topology.add_new_port(node, 'vhost')
+ if_key = Topology.add_new_port(node, u"vhost")
Topology.update_interface_sw_if_index(node, if_key, sw_if_index)
ifc_name = InterfaceUtil.vpp_get_interface_name(node, sw_if_index)
@@ -90,9 +92,9 @@ class VhostUser(object):
:returns: Interface name or None if not found.
:rtype: str
"""
- for interface in node['interfaces'].values():
- if interface.get('socket') == socket:
- return interface.get('name')
+ for interface in node[u"interfaces"].values():
+ if interface.get(u"socket") == socket:
+ return interface.get(u"name")
return None
@staticmethod
@@ -107,7 +109,6 @@ class VhostUser(object):
:returns: l2_address of the given interface.
:rtype: str
"""
-
return InterfaceUtil.vpp_get_interface_mac(node, sw_if_index)
@staticmethod
@@ -127,5 +128,23 @@ class VhostUser(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VhostUser.vpp_show_vhost(node)
+
+ @staticmethod
+ def vhost_user_dump(node):
+ """Get vhost-user data for the given node.
+
+ :param node: VPP node to get interface data from.
+ :type node: dict
+ :returns: List of dictionaries with all vhost-user interfaces.
+ :rtype: list
+ """
+ cmd = u"sw_interface_vhost_user_dump"
+ err_msg = f"Failed to get vhost-user dump on host {node['host']}"
+
+ with PapiSocketExecutor(node) as papi_exec:
+ details = papi_exec.add(cmd).get_details(err_msg)
+
+ logger.debug(f"Vhost-user details:\n{details}")
+ return details
diff --git a/resources/libraries/python/VppApiCrc.py b/resources/libraries/python/VppApiCrc.py
index 8f2979eaec..d55058e431 100644
--- a/resources/libraries/python/VppApiCrc.py
+++ b/resources/libraries/python/VppApiCrc.py
@@ -21,23 +21,24 @@ from robot.api import logger
from resources.libraries.python.Constants import Constants
+
def _str(text):
- """Convert from possible unicode without interpreting as number.
+ """Convert from possible bytes without interpreting as number.
:param text: Input to convert.
:type text: str or unicode
:returns: Converted text.
:rtype: str
"""
- return text.encode("utf-8") if isinstance(text, unicode) else text
+ return text.decode(u"utf-8") if isinstance(text, bytes) else text
-class VppApiCrcChecker(object):
+class VppApiCrcChecker:
"""Holder of data related to tracking VPP API CRCs.
Both message names and crc hexa strings are tracked as
- ordinary Python2 (bytes) string, so _str() is used when input is
- possibly unicode or otherwise not safe.
+ ordinary Python3 (unicode) string, so _str() is used when input is
+ possibly bytes or otherwise not safe.
Each instance of this class starts with same default state,
so make sure the calling libraries have appropriate robot library scope.
@@ -62,9 +63,9 @@ class VppApiCrcChecker(object):
self._expected = dict()
"""Mapping from collection name to mapping from API name to CRC string.
- Colection name should be something useful for logging.
+ Collection name should be something useful for logging.
- Order of addition reflects the order colections should be queried.
+ Order of addition reflects the order collections should be queried.
If an incompatible CRC is found, affected collections are removed.
A CRC that would remove all does not, added to _reported instead,
while causing a failure in single test (if fail_on_mismatch)."""
@@ -100,7 +101,7 @@ class VppApiCrcChecker(object):
"""Log to console, on fail_on_mismatch also raise runtime exception.
:param exc_msg: The message to include in log or exception.
- :type exception: str
+ :type exc_msg: str
:raises RuntimeError: With the message, if fail_on_mismatch.
"""
logger.console("RuntimeError:\n{m}".format(m=exc_msg))
@@ -118,8 +119,9 @@ class VppApiCrcChecker(object):
"""
collection_name = _str(collection_name)
if collection_name in self._expected:
- raise RuntimeError("Collection {cn!r} already registered.".format(
- cn=collection_name))
+ raise RuntimeError(
+ f"Collection {collection_name!r} already registered."
+ )
mapping = {_str(k): _str(v) for k, v in name_to_crc_mapping.items()}
self._expected[collection_name] = mapping
self._missing[collection_name] = mapping.copy()
@@ -128,10 +130,10 @@ class VppApiCrcChecker(object):
"""Add all collections this CSIT codebase is tested against."""
file_path = os.path.normpath(os.path.join(
- os.path.dirname(os.path.abspath(__file__)), "..", "..",
- "api", "vpp", "supported_crcs.yaml"))
+ os.path.dirname(os.path.abspath(__file__)), u"..", u"..",
+ u"api", u"vpp", u"supported_crcs.yaml"))
with open(file_path, "r") as file_in:
- collections_dict = yaml.load(file_in.read())
+ collections_dict = yaml.safe_load(file_in.read())
for collection_name, name_to_crc_mapping in collections_dict.items():
self._register_collection(collection_name, name_to_crc_mapping)
@@ -149,8 +151,7 @@ class VppApiCrcChecker(object):
if isinstance(item, (dict, list)):
continue
return _str(item)
- raise RuntimeError("No name found for message: {obj!r}".format(
- obj=msg_obj))
+ raise RuntimeError(f"No name found for message: {msg_obj!r}")
@staticmethod
def _get_crc(msg_obj):
@@ -165,11 +166,10 @@ class VppApiCrcChecker(object):
for item in reversed(msg_obj):
if not isinstance(item, dict):
continue
- crc = item.get("crc", None)
+ crc = item.get(u"crc", None)
if crc:
return _str(crc)
- raise RuntimeError("No CRC found for message: {obj!r}".format(
- obj=msg_obj))
+ raise RuntimeError(f"No CRC found for message: {msg_obj!r}")
def _process_crc(self, api_name, crc):
"""Compare API to verified collections, update class state.
@@ -220,7 +220,7 @@ class VppApiCrcChecker(object):
self._expected = new_expected
self._missing = {name: self._missing[name] for name in new_expected}
return
- # No new_expected means some colections knew the api_name,
+ # No new_expected means some collections knew the api_name,
# but CRC does not match any. This has to be reported.
self._reported[api_name] = crc
@@ -240,17 +240,16 @@ class VppApiCrcChecker(object):
"""
for root, _, files in os.walk(directory):
for filename in files:
- if not filename.endswith(".api.json"):
+ if not filename.endswith(u".api.json"):
continue
- with open(root + '/' + filename, "r") as file_in:
+ with open(f"{root}/{filename}", "r") as file_in:
json_obj = json.load(file_in)
- msgs = json_obj["messages"]
+ msgs = json_obj[u"messages"]
for msg_obj in msgs:
msg_name = self._get_name(msg_obj)
msg_crc = self._get_crc(msg_obj)
self._process_crc(msg_name, msg_crc)
- logger.debug("Surviving collections: {col!r}".format(
- col=self._expected.keys()))
+ logger.debug(f"Surviving collections: {self._expected.keys()!r}")
def report_initial_conflicts(self, report_missing=False):
"""Report issues discovered by _check_dir, if not done that already.
@@ -275,19 +274,23 @@ class VppApiCrcChecker(object):
self._initial_conflicts_reported = True
if self._reported:
reported_indented = json.dumps(
- self._reported, indent=1, sort_keys=True, separators=[",", ":"])
+ self._reported, indent=1, sort_keys=True,
+ separators=[u",", u":"]
+ )
self._reported = dict()
self.log_and_raise(
- "Incompatible API CRCs found in .api.json files:\n{ri}".format(
- ri=reported_indented))
+ f"Incompatible API CRCs found in .api.json files:\n"
+ f"{reported_indented}"
+ )
if not report_missing:
return
missing = {name: mapp for name, mapp in self._missing.items() if mapp}
if missing:
missing_indented = json.dumps(
- missing, indent=1, sort_keys=True, separators=[",", ":"])
- self.log_and_raise("API CRCs missing from .api.json:\n{mi}".format(
- mi=missing_indented))
+ missing, indent=1, sort_keys=True, separators=[u",", u":"])
+ self.log_and_raise(
+ f"API CRCs missing from .api.json:\n{missing_indented}"
+ )
def check_api_name(self, api_name):
"""Fail if the api_name has no, or different from known CRC associated.
@@ -295,9 +298,9 @@ class VppApiCrcChecker(object):
Do not fail if this particular failure has been already reported.
Intended use: Call during test (not in initialization),
- everytime an API call is queued or response received.
+ every time an API call is queued or response received.
- :param api_name: VPP API messagee name to check.
+ :param api_name: VPP API message name to check.
:type api_name: str or unicode
:raises RuntimeError: If no verified CRC for the api_name is found.
"""
@@ -328,5 +331,6 @@ class VppApiCrcChecker(object):
if matching:
return
self._reported[api_name] = crc
- self.log_and_raise("No active collection contains API {api!r}"
- " with CRC {crc!r}".format(api=api_name, crc=crc))
+ self.log_and_raise(
+ f"No active collection contains API {api_name!r} with CRC {crc!r}"
+ )
diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py
index 15e8ffb3b5..88fbb317c4 100644
--- a/resources/libraries/python/VppConfigGenerator.py
+++ b/resources/libraries/python/VppConfigGenerator.py
@@ -26,7 +26,7 @@ from resources.libraries.python.topology import NodeType
from resources.libraries.python.topology import Topology
from resources.libraries.python.VPPUtil import VPPUtil
-__all__ = ['VppConfigGenerator']
+__all__ = [u"VppConfigGenerator"]
def pci_dev_check(pci_dev):
@@ -38,33 +38,35 @@ def pci_dev_check(pci_dev):
:rtype: bool
:raises ValueError: If PCI address is in incorrect format.
"""
- pattern = re.compile("^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{2}:"
- "[0-9A-Fa-f]{2}\\.[0-9A-Fa-f]$")
- if not pattern.match(pci_dev):
- raise ValueError('PCI address {addr} is not in valid format '
- 'xxxx:xx:xx.x'.format(addr=pci_dev))
+ pattern = re.compile(
+ r"^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}\.[0-9A-Fa-f]$"
+ )
+ if not re.match(pattern, pci_dev):
+ raise ValueError(
+ f"PCI address {pci_dev} is not in valid format xxxx:xx:xx.x"
+ )
return True
-class VppConfigGenerator(object):
+class VppConfigGenerator:
"""VPP Configuration File Generator."""
def __init__(self):
"""Initialize library."""
# VPP Node to apply configuration on
- self._node = ''
+ self._node = u""
# VPP Hostname
- self._hostname = ''
+ self._hostname = u""
# VPP Configuration
- self._nodeconfig = {}
+ self._nodeconfig = dict()
# Serialized VPP Configuration
- self._vpp_config = ''
+ self._vpp_config = u""
# VPP Service name
- self._vpp_service_name = 'vpp'
+ self._vpp_service_name = u"vpp"
# VPP Logfile location
- self._vpp_logfile = '/tmp/vpe.log'
+ self._vpp_logfile = u"/tmp/vpe.log"
# VPP Startup config location
- self._vpp_startup_conf = '/etc/vpp/startup.conf'
+ self._vpp_startup_conf = u"/etc/vpp/startup.conf"
# VPP Startup config backup location
self._vpp_startup_conf_backup = None
@@ -75,9 +77,10 @@ class VppConfigGenerator(object):
:type node: dict
:raises RuntimeError: If Node type is not DUT.
"""
- if node['type'] != NodeType.DUT:
- raise RuntimeError('Startup config can only be applied to DUT'
- 'node.')
+ if node[u"type"] != NodeType.DUT:
+ raise RuntimeError(
+ u"Startup config can only be applied to DUTnode."
+ )
self._node = node
self._hostname = Topology.get_node_hostname(node)
@@ -89,7 +92,7 @@ class VppConfigGenerator(object):
"""
self._vpp_logfile = logfile
- def set_vpp_startup_conf_backup(self, backup='/etc/vpp/startup.backup'):
+ def set_vpp_startup_conf_backup(self, backup=u"/etc/vpp/startup.backup"):
"""Set VPP startup configuration backup.
:param backup: VPP logfile location.
@@ -120,10 +123,10 @@ class VppConfigGenerator(object):
config[path[0]] = value
return
if path[0] not in config:
- config[path[0]] = {}
+ config[path[0]] = dict()
elif isinstance(config[path[0]], str):
- config[path[0]] = {} if config[path[0]] == '' \
- else {config[path[0]]: ''}
+ config[path[0]] = dict() if config[path[0]] == u"" \
+ else {config[path[0]]: u""}
self.add_config_item(config[path[0]], value, path[1:])
def dump_config(self, obj, level=-1):
@@ -135,23 +138,21 @@ class VppConfigGenerator(object):
:type level: int
:returns: nothing
"""
- indent = ' '
+ indent = u" "
if level >= 0:
- self._vpp_config += '{}{{\n'.format((level) * indent)
+ self._vpp_config += f"{level * indent}{{\n"
if isinstance(obj, dict):
for key, val in obj.items():
- if hasattr(val, '__iter__'):
- self._vpp_config += '{}{}\n'.format((level + 1) * indent,
- key)
+ if hasattr(val, u"__iter__") and not isinstance(val, str):
+ self._vpp_config += f"{(level + 1) * indent}{key}\n"
self.dump_config(val, level + 1)
else:
- self._vpp_config += '{}{} {}\n'.format((level + 1) * indent,
- key, val)
+ self._vpp_config += f"{(level + 1) * indent}{key} {val}\n"
else:
for val in obj:
- self._vpp_config += '{}{}\n'.format((level + 1) * indent, val)
+ self._vpp_config += f"{(level + 1) * indent}{val}\n"
if level >= 0:
- self._vpp_config += '{}}}\n'.format(level * indent)
+ self._vpp_config += f"{level * indent}}}\n"
def add_unix_log(self, value=None):
"""Add UNIX log configuration.
@@ -159,56 +160,56 @@ class VppConfigGenerator(object):
:param value: Log file.
:type value: str
"""
- path = ['unix', 'log']
+ path = [u"unix", u"log"]
if value is None:
value = self._vpp_logfile
self.add_config_item(self._nodeconfig, value, path)
- def add_unix_cli_listen(self, value='/run/vpp/cli.sock'):
+ def add_unix_cli_listen(self, value=u"/run/vpp/cli.sock"):
"""Add UNIX cli-listen configuration.
:param value: CLI listen address and port or path to CLI socket.
:type value: str
"""
- path = ['unix', 'cli-listen']
+ path = [u"unix", u"cli-listen"]
self.add_config_item(self._nodeconfig, value, path)
- def add_unix_gid(self, value='vpp'):
+ def add_unix_gid(self, value=u"vpp"):
"""Add UNIX gid configuration.
:param value: Gid.
:type value: str
"""
- path = ['unix', 'gid']
+ path = [u"unix", u"gid"]
self.add_config_item(self._nodeconfig, value, path)
def add_unix_nodaemon(self):
"""Add UNIX nodaemon configuration."""
- path = ['unix', 'nodaemon']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"unix", u"nodaemon"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_unix_coredump(self):
"""Add UNIX full-coredump configuration."""
- path = ['unix', 'full-coredump']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"unix", u"full-coredump"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_unix_exec(self, value):
"""Add UNIX exec configuration."""
- path = ['unix', 'exec']
+ path = [u"unix", u"exec"]
self.add_config_item(self._nodeconfig, value, path)
def add_socksvr(self, socket=Constants.SOCKSVR_PATH):
"""Add socksvr configuration."""
- path = ['socksvr', 'socket-name']
+ path = ['socksvr', u"socket-name"]
self.add_config_item(self._nodeconfig, socket, path)
- def add_api_segment_gid(self, value='vpp'):
+ def add_api_segment_gid(self, value=u"vpp"):
"""Add API-SEGMENT gid configuration.
:param value: Gid.
:type value: str
"""
- path = ['api-segment', 'gid']
+ path = [u"api-segment", u"gid"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_segment_global_size(self, value):
@@ -217,7 +218,7 @@ class VppConfigGenerator(object):
:param value: Global size.
:type value: str
"""
- path = ['api-segment', 'global-size']
+ path = [u"api-segment", u"global-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_segment_api_size(self, value):
@@ -226,7 +227,7 @@ class VppConfigGenerator(object):
:param value: API size.
:type value: str
"""
- path = ['api-segment', 'api-size']
+ path = [u"api-segment", u"api-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_buffers_per_numa(self, value):
@@ -235,7 +236,7 @@ class VppConfigGenerator(object):
:param value: Number of buffers allocated.
:type value: int
"""
- path = ['buffers', 'buffers-per-numa']
+ path = [u"buffers", u"buffers-per-numa"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev(self, *devices):
@@ -246,8 +247,8 @@ class VppConfigGenerator(object):
"""
for device in devices:
if pci_dev_check(device):
- path = ['dpdk', 'dev {0}'.format(device)]
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"dpdk", f"dev {device}"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_dpdk_dev_parameter(self, device, parameter, value):
"""Add parameter for DPDK device.
@@ -260,7 +261,7 @@ class VppConfigGenerator(object):
:type value: str
"""
if pci_dev_check(device):
- path = ['dpdk', 'dev {0}'.format(device), parameter]
+ path = [u"dpdk", f"dev {device}", parameter]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_cryptodev(self, count):
@@ -271,11 +272,10 @@ class VppConfigGenerator(object):
"""
cryptodev = Topology.get_cryptodev(self._node)
for i in range(count):
- cryptodev_config = 'dev {0}'.format(
- re.sub(r'\d.\d$', '1.'+str(i), cryptodev))
- path = ['dpdk', cryptodev_config]
- self.add_config_item(self._nodeconfig, '', path)
- self.add_dpdk_uio_driver('vfio-pci')
+ cryptodev_config = re.sub(r"\d.\d$", f"1.{str(i)}", cryptodev)
+ path = [u"dpdk", f"dev {cryptodev_config}"]
+ self.add_config_item(self._nodeconfig, u"", path)
+ self.add_dpdk_uio_driver(u"vfio-pci")
def add_dpdk_sw_cryptodev(self, sw_pmd_type, socket_id, count):
"""Add DPDK SW Crypto device configuration.
@@ -288,10 +288,10 @@ class VppConfigGenerator(object):
:type count: int
"""
for _ in range(count):
- cryptodev_config = 'vdev cryptodev_{0}_pmd,socket_id={1}'.\
- format(sw_pmd_type, str(socket_id))
- path = ['dpdk', cryptodev_config]
- self.add_config_item(self._nodeconfig, '', path)
+ cryptodev_config = f"vdev cryptodev_{sw_pmd_type}_pmd," \
+ f"socket_id={str(socket_id)}"
+ path = [u"dpdk", cryptodev_config]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_dpdk_eth_bond_dev(self, ethbond_id, mode, xmit_policy, *slaves):
"""Add DPDK Eth_bond device configuration.
@@ -305,16 +305,13 @@ class VppConfigGenerator(object):
:type xmit_policy: str
:type slaves: list
"""
- slaves_config = ',slave=' + \
- ',slave='.join(slave if pci_dev_check(slave) else ''
- for slave in slaves)
- ethbond_config = 'vdev eth_bond{id},mode={mode}{slaves},' \
- 'xmit_policy={xmit_pol}'.format(id=ethbond_id,
- mode=mode,
- slaves=slaves_config,
- xmit_pol=xmit_policy)
- path = ['dpdk', ethbond_config]
- self.add_config_item(self._nodeconfig, '', path)
+ slaves_config = u"slave=" + u",slave=".join(
+ slave if pci_dev_check(slave) else u"" for slave in slaves
+ )
+ ethbond_config = f"vdev eth_bond{ethbond_id}," \
+ f"mode={mode}{slaves_config},xmit_policy={xmit_policy}"
+ path = [u"dpdk", ethbond_config]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_dpdk_dev_default_rxq(self, value):
"""Add DPDK dev default rxq configuration.
@@ -322,7 +319,7 @@ class VppConfigGenerator(object):
:param value: Default number of rxqs.
:type value: str
"""
- path = ['dpdk', 'dev default', 'num-rx-queues']
+ path = [u"dpdk", u"dev default", u"num-rx-queues"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_txq(self, value):
@@ -331,7 +328,7 @@ class VppConfigGenerator(object):
:param value: Default number of txqs.
:type value: str
"""
- path = ['dpdk', 'dev default', 'num-tx-queues']
+ path = [u"dpdk", u"dev default", u"num-tx-queues"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_rxd(self, value):
@@ -340,7 +337,7 @@ class VppConfigGenerator(object):
:param value: Default number of rxds.
:type value: str
"""
- path = ['dpdk', 'dev default', 'num-rx-desc']
+ path = [u"dpdk", u"dev default", u"num-rx-desc"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_txd(self, value):
@@ -349,7 +346,7 @@ class VppConfigGenerator(object):
:param value: Default number of txds.
:type value: str
"""
- path = ['dpdk', 'dev default', 'num-tx-desc']
+ path = [u"dpdk", u"dev default", u"num-tx-desc"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_log_level(self, value):
@@ -358,25 +355,25 @@ class VppConfigGenerator(object):
:param value: Log level.
:type value: str
"""
- path = ['dpdk', 'log-level']
+ path = [u"dpdk", u"log-level"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_no_pci(self):
"""Add DPDK no-pci."""
- path = ['dpdk', 'no-pci']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"dpdk", u"no-pci"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_dpdk_uio_driver(self, value=None):
"""Add DPDK uio-driver configuration.
:param value: DPDK uio-driver configuration. By default, driver will be
- loaded automatically from Topology file, still leaving
- option to manually override by parameter.
+ loaded automatically from Topology file, still leaving option
+ to manually override by parameter.
:type value: str
"""
if value is None:
value = Topology.get_uio_driver(self._node)
- path = ['dpdk', 'uio-driver']
+ path = [u"dpdk", u"uio-driver"]
self.add_config_item(self._nodeconfig, value, path)
def add_cpu_main_core(self, value):
@@ -385,7 +382,7 @@ class VppConfigGenerator(object):
:param value: Main core option.
:type value: str
"""
- path = ['cpu', 'main-core']
+ path = [u"cpu", u"main-core"]
self.add_config_item(self._nodeconfig, value, path)
def add_cpu_corelist_workers(self, value):
@@ -394,7 +391,7 @@ class VppConfigGenerator(object):
:param value: Corelist-workers option.
:type value: str
"""
- path = ['cpu', 'corelist-workers']
+ path = [u"cpu", u"corelist-workers"]
self.add_config_item(self._nodeconfig, value, path)
def add_heapsize(self, value):
@@ -403,13 +400,13 @@ class VppConfigGenerator(object):
:param value: Amount of heapsize.
:type value: str
"""
- path = ['heapsize']
+ path = [u"heapsize"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_trace(self):
"""Add API trace configuration."""
- path = ['api-trace', 'on']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"api-trace", u"on"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_ip6_hash_buckets(self, value):
"""Add IP6 hash buckets configuration.
@@ -417,7 +414,7 @@ class VppConfigGenerator(object):
:param value: Number of IP6 hash buckets.
:type value: str
"""
- path = ['ip6', 'hash-buckets']
+ path = [u"ip6", u"hash-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_ip6_heap_size(self, value):
@@ -426,7 +423,7 @@ class VppConfigGenerator(object):
:param value: IP6 Heapsize amount.
:type value: str
"""
- path = ['ip6', 'heap-size']
+ path = [u"ip6", u"heap-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_ip_heap_size(self, value):
@@ -435,7 +432,7 @@ class VppConfigGenerator(object):
:param value: IP Heapsize amount.
:type value: str
"""
- path = ['ip', 'heap-size']
+ path = [u"ip", u"heap-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_statseg_size(self, value):
@@ -444,7 +441,7 @@ class VppConfigGenerator(object):
:param value: Stats heapsize amount.
:type value: str
"""
- path = ['statseg', 'size']
+ path = [u"statseg", u"size"]
self.add_config_item(self._nodeconfig, value, path)
def add_statseg_per_node_counters(self, value):
@@ -453,7 +450,7 @@ class VppConfigGenerator(object):
:param value: "on" to switch the counters on.
:type value: str
"""
- path = ['statseg', 'per-node-counters']
+ path = [u"statseg", u"per-node-counters"]
self.add_config_item(self._nodeconfig, value, path)
def add_plugin(self, state, *plugins):
@@ -465,26 +462,26 @@ class VppConfigGenerator(object):
:type plugins: list
"""
for plugin in plugins:
- path = ['plugins', 'plugin {0}'.format(plugin), state]
- self.add_config_item(self._nodeconfig, ' ', path)
+ path = [u"plugins", f"plugin {plugin}", state]
+ self.add_config_item(self._nodeconfig, u" ", path)
def add_dpdk_no_multi_seg(self):
"""Add DPDK no-multi-seg configuration."""
- path = ['dpdk', 'no-multi-seg']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"dpdk", u"no-multi-seg"]
+ self.add_config_item(self._nodeconfig, u"", path)
def add_dpdk_no_tx_checksum_offload(self):
"""Add DPDK no-tx-checksum-offload configuration."""
- path = ['dpdk', 'no-tx-checksum-offload']
- self.add_config_item(self._nodeconfig, '', path)
+ path = [u"dpdk", u"no-tx-checksum-offload"]
+ self.add_config_item(self._nodeconfig, u"", path)
- def add_nat(self, value='deterministic'):
+ def add_nat(self, value=u"deterministic"):
"""Add NAT configuration.
:param value: NAT mode.
:type value: str
"""
- path = ['nat']
+ path = [u"nat"]
self.add_config_item(self._nodeconfig, value, path)
def add_tcp_preallocated_connections(self, value):
@@ -493,7 +490,7 @@ class VppConfigGenerator(object):
:param value: The number of pre-allocated connections.
:type value: int
"""
- path = ['tcp', 'preallocated-connections']
+ path = [u"tcp", u"preallocated-connections"]
self.add_config_item(self._nodeconfig, value, path)
def add_tcp_preallocated_half_open_connections(self, value):
@@ -502,7 +499,7 @@ class VppConfigGenerator(object):
:param value: The number of pre-allocated half open connections.
:type value: int
"""
- path = ['tcp', 'preallocated-half-open-connections']
+ path = [u"tcp", u"preallocated-half-open-connections"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_event_queue_length(self, value):
@@ -511,7 +508,7 @@ class VppConfigGenerator(object):
:param value: Session event queue length.
:type value: int
"""
- path = ['session', 'event-queue-length']
+ path = [u"session", u"event-queue-length"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_preallocated_sessions(self, value):
@@ -520,7 +517,7 @@ class VppConfigGenerator(object):
:param value: Number of pre-allocated sessions.
:type value: int
"""
- path = ['session', 'preallocated-sessions']
+ path = [u"session", u"preallocated-sessions"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_session_table_buckets(self, value):
@@ -529,7 +526,7 @@ class VppConfigGenerator(object):
:param value: Number of v4 session table buckets.
:type value: int
"""
- path = ['session', 'v4-session-table-buckets']
+ path = [u"session", u"v4-session-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_session_table_memory(self, value):
@@ -538,7 +535,7 @@ class VppConfigGenerator(object):
:param value: Size of v4 session table memory.
:type value: str
"""
- path = ['session', 'v4-session-table-memory']
+ path = [u"session", u"v4-session-table-memory"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_halfopen_table_buckets(self, value):
@@ -547,7 +544,7 @@ class VppConfigGenerator(object):
:param value: Number of v4 halfopen table buckets.
:type value: int
"""
- path = ['session', 'v4-halfopen-table-buckets']
+ path = [u"session", u"v4-halfopen-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_halfopen_table_memory(self, value):
@@ -556,7 +553,7 @@ class VppConfigGenerator(object):
:param value: Size of v4 halfopen table memory.
:type value: str
"""
- path = ['session', 'v4-halfopen-table-memory']
+ path = [u"session", u"v4-halfopen-table-memory"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_local_endpoints_table_buckets(self, value):
@@ -565,7 +562,7 @@ class VppConfigGenerator(object):
:param value: Number of local endpoints table buckets.
:type value: int
"""
- path = ['session', 'local-endpoints-table-buckets']
+ path = [u"session", u"local-endpoints-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_local_endpoints_table_memory(self, value):
@@ -574,7 +571,7 @@ class VppConfigGenerator(object):
:param value: Size of local endpoints table memory.
:type value: str
"""
- path = ['session', 'local-endpoints-table-memory']
+ path = [u"session", u"local-endpoints-table-memory"]
self.add_config_item(self._nodeconfig, value, path)
def write_config(self, filename=None):
@@ -592,15 +589,15 @@ class VppConfigGenerator(object):
filename = self._vpp_startup_conf
if self._vpp_startup_conf_backup is not None:
- cmd = ('cp {src} {dest}'.format(
- src=self._vpp_startup_conf, dest=self._vpp_startup_conf_backup))
+ cmd = f"cp {self._vpp_startup_conf} {self._vpp_startup_conf_backup}"
exec_cmd_no_error(
- self._node, cmd, sudo=True, message='Copy config file failed!')
+ self._node, cmd, sudo=True, message=u"Copy config file failed!"
+ )
- cmd = ('echo "{config}" | sudo tee {filename}'.format(
- config=self._vpp_config, filename=filename))
+ cmd = f"echo \"{self._vpp_config}\" | sudo tee {filename}"
exec_cmd_no_error(
- self._node, cmd, message='Writing config file failed!')
+ self._node, cmd, message=u"Writing config file failed!"
+ )
def apply_config(self, filename=None, verify_vpp=True):
"""Generate and write VPP startup configuration to file and restart VPP.
@@ -621,7 +618,7 @@ class VppConfigGenerator(object):
def restore_config(self):
"""Restore VPP startup.conf from backup."""
- cmd = ('cp {src} {dest}'.format(
- src=self._vpp_startup_conf_backup, dest=self._vpp_startup_conf))
+ cmd = f"cp {self._vpp_startup_conf_backup} {self._vpp_startup_conf}"
exec_cmd_no_error(
- self._node, cmd, sudo=True, message='Copy config file failed!')
+ self._node, cmd, sudo=True, message=u"Copy config file failed!"
+ )
diff --git a/resources/libraries/python/VppCounters.py b/resources/libraries/python/VppCounters.py
index c115efcdb5..bb8a8d2c28 100644
--- a/resources/libraries/python/VppCounters.py
+++ b/resources/libraries/python/VppCounters.py
@@ -16,12 +16,13 @@
from pprint import pformat
from robot.api import logger
-from resources.libraries.python.PapiExecutor import PapiExecutor
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+
+from resources.libraries.python.PapiExecutor import PapiExecutor, \
+ PapiSocketExecutor
from resources.libraries.python.topology import Topology, SocketType, NodeType
-class VppCounters(object):
+class VppCounters:
"""VPP counters utilities."""
def __init__(self):
@@ -34,8 +35,7 @@ class VppCounters(object):
:param node: Node to run command on.
:type node: dict
"""
- PapiSocketExecutor.run_cli_cmd_on_all_sockets(
- node, 'show errors')
+ PapiSocketExecutor.run_cli_cmd_on_all_sockets(node, u"show errors")
@staticmethod
def vpp_show_errors_on_all_duts(nodes):
@@ -45,7 +45,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.vpp_show_errors(node)
@staticmethod
@@ -57,46 +57,46 @@ class VppCounters(object):
:type node: dict
:type log_zeros: bool
"""
- args = dict(path='^/sys/node')
+ args = dict(path=u"^/sys/node")
sockets = Topology.get_node_sockets(node, socket_type=SocketType.STATS)
if sockets:
for socket in sockets.values():
with PapiExecutor(node) as papi_exec:
- stats = papi_exec.add("vpp-stats", **args).\
+ stats = papi_exec.add(u"vpp-stats", **args).\
get_stats(socket=socket)[0]
- names = stats['/sys/node/names']
+ names = stats[u"/sys/node/names"]
if not names:
return
- runtime = []
- runtime_nz = []
+ runtime = list()
+ runtime_nz = list()
for name in names:
- runtime.append({'name': name})
+ runtime.append({u"name": name})
for idx, runtime_item in enumerate(runtime):
calls_th = []
- for thread in stats['/sys/node/calls']:
+ for thread in stats[u"/sys/node/calls"]:
calls_th.append(thread[idx])
- runtime_item["calls"] = calls_th
+ runtime_item[u"calls"] = calls_th
vectors_th = []
- for thread in stats['/sys/node/vectors']:
+ for thread in stats[u"/sys/node/vectors"]:
vectors_th.append(thread[idx])
- runtime_item["vectors"] = vectors_th
+ runtime_item[u"vectors"] = vectors_th
suspends_th = []
- for thread in stats['/sys/node/suspends']:
+ for thread in stats[u"/sys/node/suspends"]:
suspends_th.append(thread[idx])
- runtime_item["suspends"] = suspends_th
+ runtime_item[u"suspends"] = suspends_th
clocks_th = []
- for thread in stats['/sys/node/clocks']:
+ for thread in stats[u"/sys/node/clocks"]:
clocks_th.append(thread[idx])
- runtime_item["clocks"] = clocks_th
+ runtime_item[u"clocks"] = clocks_th
if (sum(calls_th) or sum(vectors_th) or
sum(suspends_th) or sum(clocks_th)):
@@ -104,16 +104,14 @@ class VppCounters(object):
if log_zeros:
logger.info(
- "stats runtime ({host} - {socket}):\n{runtime}".
- format(
- host=node['host'], runtime=pformat(runtime),
- socket=socket))
+ f"stats runtime ({node[u'host']} - {socket}):\n"
+ f"{pformat(runtime)}"
+ )
else:
logger.info(
- "stats runtime ({host} - {socket}):\n{runtime}".
- format(
- host=node['host'], runtime=pformat(runtime_nz),
- socket=socket))
+ f"stats runtime ({node[u'host']} - {socket}):\n"
+ f"{pformat(runtime_nz)}"
+ )
@staticmethod
def vpp_show_runtime_counters_on_all_duts(nodes):
@@ -123,7 +121,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.vpp_show_runtime(node)
@staticmethod
@@ -134,7 +132,8 @@ class VppCounters(object):
:type node: dict
"""
PapiSocketExecutor.run_cli_cmd_on_all_sockets(
- node, 'show hardware verbose')
+ node, u"show hardware verbose"
+ )
@staticmethod
def vpp_show_memory(node):
@@ -146,7 +145,8 @@ class VppCounters(object):
:type node: dict
"""
PapiSocketExecutor.run_cli_cmd(
- node, 'show memory verbose api-segment stats-segment main-heap')
+ node, u"show memory verbose api-segment stats-segment main-heap"
+ )
@staticmethod
def vpp_clear_runtime(node):
@@ -156,7 +156,8 @@ class VppCounters(object):
:type node: dict
"""
PapiSocketExecutor.run_cli_cmd_on_all_sockets(
- node, 'clear runtime', log=False)
+ node, u"clear runtime", log=False
+ )
@staticmethod
def vpp_clear_runtime_counters_on_all_duts(nodes):
@@ -166,7 +167,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.vpp_clear_runtime(node)
@staticmethod
@@ -179,7 +180,8 @@ class VppCounters(object):
:rtype: dict
"""
PapiSocketExecutor.run_cli_cmd_on_all_sockets(
- node, 'clear hardware', log=False)
+ node, u"clear hardware", log=False
+ )
@staticmethod
def vpp_clear_hardware_counters_on_all_duts(nodes):
@@ -189,7 +191,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.vpp_clear_hardware_counters(node)
@staticmethod
@@ -200,7 +202,8 @@ class VppCounters(object):
:type node: dict
"""
PapiSocketExecutor.run_cli_cmd_on_all_sockets(
- node, 'clear errors', log=False)
+ node, u"clear errors", log=False
+ )
@staticmethod
def vpp_clear_error_counters_on_all_duts(nodes):
@@ -210,7 +213,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.vpp_clear_errors_counters(node)
@staticmethod
@@ -233,7 +236,7 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.show_vpp_statistics(node)
@staticmethod
@@ -255,5 +258,5 @@ class VppCounters(object):
:type nodes: dict
"""
for node in nodes.values():
- if node['type'] == NodeType.DUT:
+ if node[u"type"] == NodeType.DUT:
VppCounters.clear_vpp_statistics(node)
diff --git a/resources/libraries/python/autogen/Regenerator.py b/resources/libraries/python/autogen/Regenerator.py
index eb5f9bda68..7271fbcf37 100644
--- a/resources/libraries/python/autogen/Regenerator.py
+++ b/resources/libraries/python/autogen/Regenerator.py
@@ -13,44 +13,39 @@
"""Module defining utilities for test directory regeneration."""
-from __future__ import print_function
+import sys
from glob import glob
+from io import open
from os import getcwd
-import sys
+
from resources.libraries.python.Constants import Constants
from resources.libraries.python.autogen.Testcase import Testcase
PROTOCOL_TO_MIN_FRAME_SIZE = {
- "ip4": 64,
- "ip6": 78,
- "ethip4vxlan": 114, # What is the real minimum for latency stream?
- "dot1qip4vxlan": 118
+ u"ip4": 64,
+ u"ip6": 78,
+ u"ethip4vxlan": 114, # What is the real minimum for latency stream?
+ u"dot1qip4vxlan": 118
}
-MIN_FRAME_SIZE_VALUES = PROTOCOL_TO_MIN_FRAME_SIZE.values()
-
-
-# Copied from https://stackoverflow.com/a/14981125
-def eprint(*args, **kwargs):
- """Print to stderr."""
- print(*args, file=sys.stderr, **kwargs)
+MIN_FRAME_SIZE_VALUES = list(PROTOCOL_TO_MIN_FRAME_SIZE.values())
def replace_defensively(
whole, to_replace, replace_with, how_many, msg, in_filename):
- """Replace substrings while checking the number of occurences.
+ """Replace substrings while checking the number of occurrences.
Return edited copy of the text. Assuming "whole" is really a string,
or something else with .replace not affecting it.
:param whole: The text to perform replacements on.
- :param to_replace: Substring occurences of which to replace.
- :param replace_with: Substring to replace occurences with.
- :param how_many: Number of occurences to expect.
+ :param to_replace: Substring occurrences of which to replace.
+ :param replace_with: Substring to replace occurrences with.
+ :param how_many: Number of occurrences to expect.
:param msg: Error message to raise.
- :param in_filename: File name in which the error occured.
+ :param in_filename: File name in which the error occurred.
:type whole: str
:type to_replace: str
:type replace_with: str
@@ -59,11 +54,11 @@ def replace_defensively(
:type in_filename: str
:return: The whole text after replacements are done.
:rtype: str
- :raise ValueError: If number of occurences does not match.
+ :raise ValueError: If number of occurrences does not match.
"""
found = whole.count(to_replace)
if found != how_many:
- raise ValueError(in_filename + ": " + msg)
+ raise ValueError(f"{in_filename}: {msg}")
return whole.replace(to_replace, replace_with)
@@ -73,18 +68,18 @@ def get_iface_and_suite_id(filename):
Interface ID is the part of suite name
which should be replaced for other NIC.
Suite ID is the part os suite name
- which si appended to testcase names.
+ which si appended to test case names.
:param filename: Suite file.
:type filename: str
:returns: Interface ID, Suite ID.
:rtype: (str, str)
"""
- dash_split = filename.split("-", 1)
+ dash_split = filename.split(u"-", 1)
if len(dash_split[0]) <= 4:
# It was something like "2n1l", we need one more split.
- dash_split = dash_split[1].split("-", 1)
- return dash_split[0], dash_split[1].split(".", 1)[0]
+ dash_split = dash_split[1].split(u"-", 1)
+ return dash_split[0], dash_split[1].split(u".", 1)[0]
def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
@@ -106,32 +101,32 @@ def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
for num, kwargs in enumerate(tc_kwargs_list, start=1):
# TODO: Is there a better way to disable some combinations?
emit = True
- if kwargs["frame_size"] == 9000:
- if "vic1227" in iface:
+ if kwargs[u"frame_size"] == 9000:
+ if u"vic1227" in iface:
# Not supported in HW.
emit = False
- if "vic1385" in iface:
+ if u"vic1385" in iface:
# Not supported in HW.
emit = False
- if "ipsec" in suite_id:
+ if u"ipsec" in suite_id:
# IPsec code does not support chained buffers.
# Tracked by Jira ticket VPP-1207.
emit = False
- if "-16vm2t-" in suite_id or "-16dcr2t-" in suite_id:
- if kwargs["phy_cores"] > 3:
+ if u"-16vm2t-" in suite_id or u"-16dcr2t-" in suite_id:
+ if kwargs[u"phy_cores"] > 3:
# CSIT lab only has 28 (physical) core processors,
# so these test would fail when attempting to assign cores.
emit = False
- if "-24vm1t-" in suite_id or "-24dcr1t-" in suite_id:
- if kwargs["phy_cores"] > 3:
+ if u"-24vm1t-" in suite_id or u"-24dcr1t-" in suite_id:
+ if kwargs[u"phy_cores"] > 3:
# CSIT lab only has 28 (physical) core processors,
# so these test would fail when attempting to assign cores.
emit = False
- if "soak" in suite_id:
+ if u"soak" in suite_id:
# Soak test take too long, do not risk other than tc01.
- if kwargs["phy_cores"] != 1:
+ if kwargs[u"phy_cores"] != 1:
emit = False
- if kwargs["frame_size"] not in MIN_FRAME_SIZE_VALUES:
+ if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
emit = False
if emit:
file_out.write(testcase.generate(num=num, **kwargs))
@@ -163,52 +158,61 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
"""
for suite_type in Constants.PERF_TYPE_TO_KEYWORD:
tmp_filename = replace_defensively(
- in_filename, "ndrpdr", suite_type, 1,
- "File name should contain suite type once.", in_filename)
+ in_filename, u"ndrpdr", suite_type, 1,
+ u"File name should contain suite type once.", in_filename
+ )
tmp_prolog = replace_defensively(
- in_prolog, "ndrpdr".upper(), suite_type.upper(), 1,
- "Suite type should appear once in uppercase (as tag).",
- in_filename)
+ in_prolog, u"ndrpdr".upper(), suite_type.upper(), 1,
+ u"Suite type should appear once in uppercase (as tag).",
+ in_filename
+ )
tmp_prolog = replace_defensively(
tmp_prolog,
- "Find NDR and PDR intervals using optimized search",
+ u"Find NDR and PDR intervals using optimized search",
Constants.PERF_TYPE_TO_KEYWORD[suite_type], 1,
- "Main search keyword should appear once in suite.",
- in_filename)
+ u"Main search keyword should appear once in suite.",
+ in_filename
+ )
tmp_prolog = replace_defensively(
tmp_prolog,
- Constants.PERF_TYPE_TO_SUITE_DOC_VER["ndrpdr"],
+ Constants.PERF_TYPE_TO_SUITE_DOC_VER[u"ndrpdr"],
Constants.PERF_TYPE_TO_SUITE_DOC_VER[suite_type],
- 1, "Exact suite type doc not found.", in_filename)
+ 1, u"Exact suite type doc not found.", in_filename
+ )
tmp_prolog = replace_defensively(
tmp_prolog,
- Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER["ndrpdr"],
+ Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[u"ndrpdr"],
Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[suite_type],
- 1, "Exact template type doc not found.", in_filename)
+ 1, u"Exact template type doc not found.", in_filename
+ )
_, suite_id = get_iface_and_suite_id(tmp_filename)
testcase = Testcase.default(suite_id)
for nic_name in Constants.NIC_NAME_TO_CODE:
out_filename = replace_defensively(
- tmp_filename, "10ge2p1x710",
+ tmp_filename, u"10ge2p1x710",
Constants.NIC_NAME_TO_CODE[nic_name], 1,
- "File name should contain NIC code once.", in_filename)
+ u"File name should contain NIC code once.", in_filename
+ )
out_prolog = replace_defensively(
- tmp_prolog, "Intel-X710", nic_name, 2,
- "NIC name should appear twice (tag and variable).",
- in_filename)
- if out_prolog.count("HW_") == 2:
+ tmp_prolog, u"Intel-X710", nic_name, 2,
+ u"NIC name should appear twice (tag and variable).",
+ in_filename
+ )
+ if out_prolog.count(u"HW_") == 2:
# TODO CSIT-1481: Crypto HW should be read
# from topology file instead.
if nic_name in Constants.NIC_NAME_TO_CRYPTO_HW:
out_prolog = replace_defensively(
- out_prolog, "HW_DH895xcc",
+ out_prolog, u"HW_DH895xcc",
Constants.NIC_NAME_TO_CRYPTO_HW[nic_name], 1,
- "HW crypto name should appear.", in_filename)
+ u"HW crypto name should appear.", in_filename
+ )
iface, suite_id = get_iface_and_suite_id(out_filename)
- with open(out_filename, "w") as file_out:
+ with open(out_filename, "wt") as file_out:
file_out.write(out_prolog)
add_default_testcases(
- testcase, iface, suite_id, file_out, kwargs_list)
+ testcase, iface, suite_id, file_out, kwargs_list
+ )
def write_reconf_files(in_filename, in_prolog, kwargs_list):
@@ -229,26 +233,30 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
testcase = Testcase.default(suite_id)
for nic_name in Constants.NIC_NAME_TO_CODE:
out_filename = replace_defensively(
- in_filename, "10ge2p1x710",
+ in_filename, u"10ge2p1x710",
Constants.NIC_NAME_TO_CODE[nic_name], 1,
- "File name should contain NIC code once.", in_filename)
+ u"File name should contain NIC code once.", in_filename
+ )
out_prolog = replace_defensively(
- in_prolog, "Intel-X710", nic_name, 2,
- "NIC name should appear twice (tag and variable).",
- in_filename)
- if out_prolog.count("HW_") == 2:
+ in_prolog, u"Intel-X710", nic_name, 2,
+ u"NIC name should appear twice (tag and variable).",
+ in_filename
+ )
+ if out_prolog.count(u"HW_") == 2:
# TODO CSIT-1481: Crypto HW should be read
# from topology file instead.
- if nic_name in Constants.NIC_NAME_TO_CRYPTO_HW.keys():
+ if nic_name in list(Constants.NIC_NAME_TO_CRYPTO_HW.keys()):
out_prolog = replace_defensively(
- out_prolog, "HW_DH895xcc",
+ out_prolog, u"HW_DH895xcc",
Constants.NIC_NAME_TO_CRYPTO_HW[nic_name], 1,
- "HW crypto name should appear.", in_filename)
+ u"HW crypto name should appear.", in_filename
+ )
iface, suite_id = get_iface_and_suite_id(out_filename)
- with open(out_filename, "w") as file_out:
+ with open(out_filename, "wt") as file_out:
file_out.write(out_prolog)
add_default_testcases(
- testcase, iface, suite_id, file_out, kwargs_list)
+ testcase, iface, suite_id, file_out, kwargs_list
+ )
def write_tcp_files(in_filename, in_prolog, kwargs_list):
@@ -266,19 +274,21 @@ def write_tcp_files(in_filename, in_prolog, kwargs_list):
testcase = Testcase.tcp(suite_id)
for nic_name in Constants.NIC_NAME_TO_CODE:
out_filename = replace_defensively(
- in_filename, "10ge2p1x710",
+ in_filename, u"10ge2p1x710",
Constants.NIC_NAME_TO_CODE[nic_name], 1,
- "File name should contain NIC code once.", in_filename)
+ u"File name should contain NIC code once.", in_filename
+ )
out_prolog = replace_defensively(
- in_prolog, "Intel-X710", nic_name, 2,
- "NIC name should appear twice (tag and variable).",
- in_filename)
- with open(out_filename, "w") as file_out:
+ in_prolog, u"Intel-X710", nic_name, 2,
+ u"NIC name should appear twice (tag and variable).",
+ in_filename
+ )
+ with open(out_filename, "wt") as file_out:
file_out.write(out_prolog)
add_tcp_testcases(testcase, file_out, kwargs_list)
-class Regenerator(object):
+class Regenerator:
"""Class containing file generating methods."""
def __init__(self, quiet=True):
@@ -289,15 +299,15 @@ class Regenerator(object):
"""
self.quiet = quiet
- def regenerate_glob(self, pattern, protocol="ip4"):
+ def regenerate_glob(self, pattern, protocol=u"ip4"):
"""Regenerate files matching glob pattern based on arguments.
In the current working directory, find all files matching
the glob pattern. Use testcase template according to suffix
- to regenerate test cases, autonumbering them,
+ to regenerate test cases, auto-numbering them,
taking arguments from list.
- Log-like prints are emited to sys.stderr.
+ Log-like prints are emitted to sys.stderr.
:param pattern: Glob pattern to select files. Example: *-ndrpdr.robot
:param protocol: String determining minimal frame size. Default: "ip4"
@@ -306,45 +316,50 @@ class Regenerator(object):
:raises RuntimeError: If invalid source suite is encountered.
"""
if not self.quiet:
- eprint("Regenerator starts at {cwd}".format(cwd=getcwd()))
+ print(f"Regenerator starts at {getcwd()}", file=sys.stderr)
min_frame_size = PROTOCOL_TO_MIN_FRAME_SIZE[protocol]
default_kwargs_list = [
- {"frame_size": min_frame_size, "phy_cores": 1},
- {"frame_size": min_frame_size, "phy_cores": 2},
- {"frame_size": min_frame_size, "phy_cores": 4},
- {"frame_size": 1518, "phy_cores": 1},
- {"frame_size": 1518, "phy_cores": 2},
- {"frame_size": 1518, "phy_cores": 4},
- {"frame_size": 9000, "phy_cores": 1},
- {"frame_size": 9000, "phy_cores": 2},
- {"frame_size": 9000, "phy_cores": 4},
- {"frame_size": "IMIX_v4_1", "phy_cores": 1},
- {"frame_size": "IMIX_v4_1", "phy_cores": 2},
- {"frame_size": "IMIX_v4_1", "phy_cores": 4}
+ {u"frame_size": min_frame_size, u"phy_cores": 1},
+ {u"frame_size": min_frame_size, u"phy_cores": 2},
+ {u"frame_size": min_frame_size, u"phy_cores": 4},
+ {u"frame_size": 1518, u"phy_cores": 1},
+ {u"frame_size": 1518, u"phy_cores": 2},
+ {u"frame_size": 1518, u"phy_cores": 4},
+ {u"frame_size": 9000, u"phy_cores": 1},
+ {u"frame_size": 9000, u"phy_cores": 2},
+ {u"frame_size": 9000, u"phy_cores": 4},
+ {u"frame_size": u"IMIX_v4_1", u"phy_cores": 1},
+ {u"frame_size": u"IMIX_v4_1", u"phy_cores": 2},
+ {u"frame_size": u"IMIX_v4_1", u"phy_cores": 4}
+ ]
+ tcp_kwargs_list = [
+ {u"phy_cores": i, u"frame_size": 0} for i in (1, 2, 4)
]
- tcp_kwargs_list = [{"phy_cores": i, "frame_size": 0} for i in (1, 2, 4)]
for in_filename in glob(pattern):
if not self.quiet:
- eprint("Regenerating in_filename:", in_filename)
+ print(
+ u"Regenerating in_filename:", in_filename, file=sys.stderr
+ )
iface, _ = get_iface_and_suite_id(in_filename)
- if not iface.endswith("10ge2p1x710"):
+ if not iface.endswith(u"10ge2p1x710"):
raise RuntimeError(
- "Error in {fil}: non-primary NIC found.".format(
- fil=in_filename))
- with open(in_filename, "r") as file_in:
- in_prolog = "".join(
- file_in.read().partition("*** Test Cases ***")[:-1])
- if in_filename.endswith("-ndrpdr.robot"):
+ f"Error in {in_filename}: non-primary NIC found."
+ )
+ with open(in_filename, "rt") as file_in:
+ in_prolog = u"".join(
+ file_in.read().partition("*** Test Cases ***")[:-1]
+ )
+ if in_filename.endswith(u"-ndrpdr.robot"):
write_default_files(in_filename, in_prolog, default_kwargs_list)
- elif in_filename.endswith("-reconf.robot"):
+ elif in_filename.endswith(u"-reconf.robot"):
write_reconf_files(in_filename, in_prolog, default_kwargs_list)
- elif in_filename[-10:] in ("-cps.robot", "-rps.robot"):
+ elif in_filename[-10:] in (u"-cps.robot", u"-rps.robot"):
write_tcp_files(in_filename, in_prolog, tcp_kwargs_list)
else:
raise RuntimeError(
- "Error in {fil}: non-primary suite type found.".format(
- fil=in_filename))
+ f"Error in {in_filename}: non-primary suite type found."
+ )
if not self.quiet:
- eprint("Regenerator ends.")
- eprint() # To make autogen check output more readable.
+ print(u"Regenerator ends.", file=sys.stderr)
+ print(file=sys.stderr) # To make autogen check output more readable.
diff --git a/resources/libraries/python/autogen/Testcase.py b/resources/libraries/python/autogen/Testcase.py
index 70c212211c..224295e1e2 100644
--- a/resources/libraries/python/autogen/Testcase.py
+++ b/resources/libraries/python/autogen/Testcase.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -16,7 +16,7 @@
from string import Template
-class Testcase(object):
+class Testcase:
"""Class containing a template string and a substitution method."""
def __init__(self, template_string):
@@ -52,22 +52,23 @@ class Testcase(object):
try:
fsize = int(frame_size)
subst_dict = {
- "frame_num": "${%d}" % fsize,
- "frame_str": "%dB" % fsize
+ u"frame_num": f"${{{fsize:d}}}",
+ u"frame_str": f"{fsize:d}B"
}
except ValueError: # Assuming an IMIX string.
subst_dict = {
- "frame_num": str(frame_size),
- "frame_str": "IMIX"
+ u"frame_num": str(frame_size),
+ u"frame_str": u"IMIX"
}
cores_str = str(phy_cores)
cores_num = int(cores_str)
subst_dict.update(
{
- "cores_num": "${%d}" % cores_num,
- "cores_str": phy_cores,
- "tc_num": "tc{num:02d}".format(num=num)
- })
+ u"cores_num": f"${{{cores_num:d}}}",
+ u"cores_str": phy_cores,
+ u"tc_num": f"tc{num:02d}"
+ }
+ )
return self.template.substitute(subst_dict)
@classmethod
@@ -82,10 +83,10 @@ class Testcase(object):
:returns: Instance for generating testcase text of this type.
:rtype: Testcase
"""
- template_string = r'''
-| ${tc_num}-${frame_str}-${cores_str}c-''' + suite_id + r'''
-| | [Tags] | ${frame_str} | ${cores_str}C
-| | frame_size=${frame_num} | phy_cores=${cores_num}
+ template_string = f'''
+| ${{tc_num}}-${{frame_str}}-${{cores_str}}c-{suite_id}
+| | [Tags] | ${{frame_str}} | ${{cores_str}}C
+| | frame_size=${{frame_num}} | phy_cores=${{cores_num}}
'''
return cls(template_string)
@@ -102,9 +103,9 @@ class Testcase(object):
"""
# TODO: Choose a better frame size identifier for streamed protocols
# (TCP, QUIC, SCTP, ...) where DUT (not TG) decides frame size.
- template_string = r'''
-| ${tc_num}-IMIX-${cores_str}c-''' + suite_id + r'''
-| | [Tags] | ${cores_str}C
-| | phy_cores=${cores_num}
+ template_string = f'''
+| ${{tc_num}}-IMIX-${{cores_str}}c-{suite_id}
+| | [Tags] | ${{cores_str}}C
+| | phy_cores=${{cores_num}}
'''
return cls(template_string)
diff --git a/resources/libraries/python/parsers/JsonParser.py b/resources/libraries/python/parsers/JsonParser.py
index 2c8e62ffe3..c597d5a935 100644
--- a/resources/libraries/python/parsers/JsonParser.py
+++ b/resources/libraries/python/parsers/JsonParser.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -14,10 +14,11 @@
"""Used to parse JSON files or JSON data strings to dictionaries"""
import json
-from os import uname
+from io import open
-class JsonParser(object):
+
+class JsonParser:
"""Parses JSON data string or files containing JSON data strings"""
def __init__(self):
pass
@@ -33,23 +34,6 @@ class JsonParser(object):
:returns: JSON data parsed as python list.
:rtype: list
"""
- if "4.2.0-42-generic" in uname():
- # TODO: remove ugly workaround
- # On Ubuntu14.04 the VAT console returns "error:misc" even after
- # some commands execute correctly. This causes problems
- # with parsing JSON data.
- known_errors = ["sw_interface_dump error: Misc",
- "lisp_eid_table_dump error: Misc",
- "show_lisp_status error: Misc",
- "lisp_map_resolver_dump error: Misc",
- "show_lisp_pitr error: Misc",
- "snat_static_mapping_dump error: Misc",
- ]
- for item in known_errors:
- if item in json_data:
- json_data = json_data.replace(item, "")
- print("Removing API error: *{0}* "
- "from JSON output.".format(item))
parsed_data = json.loads(json_data)
return parsed_data
@@ -65,6 +49,6 @@ class JsonParser(object):
:returns: JSON data parsed as python list.
:rtype: list
"""
- input_data = open(json_file).read()
+ input_data = open(json_file, "rt").read()
parsed_data = JsonParser.parse_data(input_data)
return parsed_data
diff --git a/resources/libraries/python/ssh.py b/resources/libraries/python/ssh.py
index 1908da4153..5359a6e5fb 100644
--- a/resources/libraries/python/ssh.py
+++ b/resources/libraries/python/ssh.py
@@ -15,7 +15,8 @@
import socket
-import StringIO
+
+from io import StringIO
from time import time, sleep
from paramiko import RSAKey, SSHClient, AutoAddPolicy
@@ -24,23 +25,23 @@ from robot.api import logger
from scp import SCPClient, SCPException
from resources.libraries.python.OptionString import OptionString
-from resources.libraries.python.PythonThree import raise_from
-__all__ = ["exec_cmd", "exec_cmd_no_error"]
+__all__ = [
+ u"exec_cmd", u"exec_cmd_no_error", u"SSH", u"SSHTimeout", u"scp_node"
+]
# TODO: load priv key
class SSHTimeout(Exception):
"""This exception is raised when a timeout occurs."""
- pass
-class SSH(object):
+class SSH:
"""Contains methods for managing and using SSH connections."""
- __MAX_RECV_BUF = 10*1024*1024
- __existing_connections = {}
+ __MAX_RECV_BUF = 10 * 1024 * 1024
+ __existing_connections = dict()
def __init__(self):
self._ssh = None
@@ -55,8 +56,7 @@ class SSH(object):
:returns: IP address and port for the specified node.
:rtype: int
"""
-
- return hash(frozenset([node['host'], node['port']]))
+ return hash(frozenset([node[u"host"], node[u"port"]]))
def connect(self, node, attempts=5):
"""Connect to node prior to running exec_command or scp.
@@ -74,43 +74,42 @@ class SSH(object):
if node_hash in SSH.__existing_connections:
self._ssh = SSH.__existing_connections[node_hash]
if self._ssh.get_transport().is_active():
- logger.debug('Reusing SSH: {ssh}'.format(ssh=self._ssh))
+ logger.debug(f"Reusing SSH: {self._ssh}")
else:
if attempts > 0:
self._reconnect(attempts-1)
else:
- raise IOError('Cannot connect to {host}'.
- format(host=node['host']))
+ raise IOError(f"Cannot connect to {node['host']}")
else:
try:
start = time()
pkey = None
- if 'priv_key' in node:
- pkey = RSAKey.from_private_key(
- StringIO.StringIO(node['priv_key']))
+ if u"priv_key" in node:
+ pkey = RSAKey.from_private_key(StringIO(node[u"priv_key"]))
self._ssh = SSHClient()
self._ssh.set_missing_host_key_policy(AutoAddPolicy())
- self._ssh.connect(node['host'], username=node['username'],
- password=node.get('password'), pkey=pkey,
- port=node['port'])
+ self._ssh.connect(
+ node[u"host"], username=node[u"username"],
+ password=node.get(u"password"), pkey=pkey,
+ port=node[u"port"]
+ )
self._ssh.get_transport().set_keepalive(10)
SSH.__existing_connections[node_hash] = self._ssh
- logger.debug('New SSH to {peer} took {total} seconds: {ssh}'.
- format(
- peer=self._ssh.get_transport().getpeername(),
- total=(time() - start),
- ssh=self._ssh))
+ logger.debug(
+ f"New SSH to {self._ssh.get_transport().getpeername()} "
+ f"took {time() - start} seconds: {self._ssh}"
+ )
except SSHException as exc:
- raise_from(IOError('Cannot connect to {host}'.format(
- host=node['host'])), exc)
+ raise IOError(f"Cannot connect to {node[u'host']}") from exc
except NoValidConnectionsError as err:
- raise_from(IOError(
- 'Unable to connect to port {port} on {host}'.format(
- port=node['port'], host=node['host'])), err)
+ raise IOError(
+ f"Unable to connect to port {node[u'port']} on "
+ f"{node[u'host']}"
+ ) from err
def disconnect(self, node=None):
"""Close SSH connection to the node.
@@ -124,8 +123,9 @@ class SSH(object):
return
node_hash = self._node_hash(node)
if node_hash in SSH.__existing_connections:
- logger.debug('Disconnecting peer: {host}, {port}'.
- format(host=node['host'], port=node['port']))
+ logger.debug(
+ f"Disconnecting peer: {node[u'host']}, {node[u'port']}"
+ )
ssh = SSH.__existing_connections.pop(node_hash)
ssh.close()
@@ -138,8 +138,9 @@ class SSH(object):
node = self._node
self.disconnect(node)
self.connect(node, attempts)
- logger.debug('Reconnecting peer done: {host}, {port}'.
- format(host=node['host'], port=node['port']))
+ logger.debug(
+ f"Reconnecting peer done: {node[u'host']}, {node[u'port']}"
+ )
def exec_command(self, cmd, timeout=10, log_stdout_err=True):
"""Execute SSH command on a new channel on the connected Node.
@@ -160,8 +161,8 @@ class SSH(object):
if isinstance(cmd, (list, tuple)):
cmd = OptionString(cmd)
cmd = str(cmd)
- stdout = StringIO.StringIO()
- stderr = StringIO.StringIO()
+ stdout = u""
+ stderr = u""
try:
chan = self._ssh.get_transport().open_session(timeout=5)
peer = self._ssh.get_transport().getpeername()
@@ -171,50 +172,58 @@ class SSH(object):
peer = self._ssh.get_transport().getpeername()
chan.settimeout(timeout)
- logger.trace('exec_command on {peer} with timeout {timeout}: {cmd}'
- .format(peer=peer, timeout=timeout, cmd=cmd))
+ logger.trace(f"exec_command on {peer} with timeout {timeout}: {cmd}")
start = time()
chan.exec_command(cmd)
while not chan.exit_status_ready() and timeout is not None:
if chan.recv_ready():
- stdout.write(chan.recv(self.__MAX_RECV_BUF))
+ s_out = chan.recv(self.__MAX_RECV_BUF)
+ stdout += s_out.decode(encoding=u'utf-8', errors=u'ignore') \
+ if isinstance(s_out, bytes) else s_out
if chan.recv_stderr_ready():
- stderr.write(chan.recv_stderr(self.__MAX_RECV_BUF))
+ s_err = chan.recv_stderr(self.__MAX_RECV_BUF)
+ stderr += s_err.decode(encoding=u'utf-8', errors=u'ignore') \
+ if isinstance(s_err, bytes) else s_err
if time() - start > timeout:
raise SSHTimeout(
- 'Timeout exception during execution of command: {cmd}\n'
- 'Current contents of stdout buffer: {stdout}\n'
- 'Current contents of stderr buffer: {stderr}\n'
- .format(cmd=cmd, stdout=stdout.getvalue(),
- stderr=stderr.getvalue())
+ f"Timeout exception during execution of command: {cmd}\n"
+ f"Current contents of stdout buffer: "
+ f"{stdout}\n"
+ f"Current contents of stderr buffer: "
+ f"{stderr}\n"
)
sleep(0.1)
return_code = chan.recv_exit_status()
while chan.recv_ready():
- stdout.write(chan.recv(self.__MAX_RECV_BUF))
+ s_out = chan.recv(self.__MAX_RECV_BUF)
+ stdout += s_out.decode(encoding=u'utf-8', errors=u'ignore') \
+ if isinstance(s_out, bytes) else s_out
while chan.recv_stderr_ready():
- stderr.write(chan.recv_stderr(self.__MAX_RECV_BUF))
+ s_err = chan.recv_stderr(self.__MAX_RECV_BUF)
+ stderr += s_err.decode(encoding=u'utf-8', errors=u'ignore') \
+ if isinstance(s_err, bytes) else s_err
end = time()
- logger.trace('exec_command on {peer} took {total} seconds'.
- format(peer=peer, total=end-start))
+ logger.trace(f"exec_command on {peer} took {end-start} seconds")
- logger.trace('return RC {rc}'.format(rc=return_code))
+ logger.trace(f"return RC {return_code}")
if log_stdout_err or int(return_code):
- logger.trace('return STDOUT {stdout}'.
- format(stdout=stdout.getvalue()))
- logger.trace('return STDERR {stderr}'.
- format(stderr=stderr.getvalue()))
- return return_code, stdout.getvalue(), stderr.getvalue()
-
- def exec_command_sudo(self, cmd, cmd_input=None, timeout=30,
- log_stdout_err=True):
+ logger.trace(
+ f"return STDOUT {stdout}"
+ )
+ logger.trace(
+ f"return STDERR {stderr}"
+ )
+ return return_code, stdout, stderr
+
+ def exec_command_sudo(
+ self, cmd, cmd_input=None, timeout=30, log_stdout_err=True):
"""Execute SSH command with sudo on a new channel on the connected Node.
:param cmd: Command to be executed.
@@ -234,21 +243,22 @@ class SSH(object):
>>> ssh = SSH()
>>> ssh.connect(node)
>>> # Execute command without input (sudo -S cmd)
- >>> ssh.exec_command_sudo("ifconfig eth0 down")
- >>> # Execute command with input (sudo -S cmd <<< "input")
- >>> ssh.exec_command_sudo("vpp_api_test", "dump_interface_table")
+ >>> ssh.exec_command_sudo(u"ifconfig eth0 down")
+ >>> # Execute command with input (sudo -S cmd <<< 'input')
+ >>> ssh.exec_command_sudo(u"vpp_api_test", u"dump_interface_table")
"""
if isinstance(cmd, (list, tuple)):
cmd = OptionString(cmd)
if cmd_input is None:
- command = 'sudo -E -S {c}'.format(c=cmd)
+ command = f"sudo -E -S {cmd}"
else:
- command = 'sudo -E -S {c} <<< "{i}"'.format(c=cmd, i=cmd_input)
- return self.exec_command(command, timeout,
- log_stdout_err=log_stdout_err)
+ command = f"sudo -E -S {cmd} <<< \"{cmd_input}\""
+ return self.exec_command(
+ command, timeout, log_stdout_err=log_stdout_err
+ )
- def exec_command_lxc(self, lxc_cmd, lxc_name, lxc_params='', sudo=True,
- timeout=30):
+ def exec_command_lxc(
+ self, lxc_cmd, lxc_name, lxc_params=u"", sudo=True, timeout=30):
"""Execute command in LXC on a new SSH channel on the connected Node.
:param lxc_cmd: Command to be executed.
@@ -263,11 +273,11 @@ class SSH(object):
:type timeout: int
:returns: return_code, stdout, stderr
"""
- command = "lxc-attach {p} --name {n} -- /bin/sh -c '{c}'"\
- .format(p=lxc_params, n=lxc_name, c=lxc_cmd)
+ command = f"lxc-attach {lxc_params} --name {lxc_name} -- /bin/sh " \
+ f"-c \"{lxc_cmd}\""
if sudo:
- command = 'sudo -E -S {c}'.format(c=command)
+ command = f"sudo -E -S {command}"
return self.exec_command(command, timeout)
def interactive_terminal_open(self, time_out=45):
@@ -289,18 +299,18 @@ class SSH(object):
chan.settimeout(int(time_out))
chan.set_combine_stderr(True)
- buf = ''
- while not buf.endswith((":~# ", ":~$ ", "~]$ ", "~]# ")):
+ buf = u""
+ while not buf.endswith((u":~# ", u":~$ ", u"~]$ ", u"~]# ")):
try:
chunk = chan.recv(self.__MAX_RECV_BUF)
if not chunk:
break
buf += chunk
if chan.exit_status_ready():
- logger.error('Channel exit status ready')
+ logger.error(u"Channel exit status ready")
break
except socket.timeout as exc:
- raise_from(Exception('Socket timeout: {0}'.format(buf)), exc)
+ raise Exception(f"Socket timeout: {buf}") from exc
return chan
def interactive_terminal_exec_command(self, chan, cmd, prompt):
@@ -321,8 +331,8 @@ class SSH(object):
from other threads. You must not use this in a program that
uses SIGALRM itself (this includes certain profilers)
"""
- chan.sendall('{c}\n'.format(c=cmd))
- buf = ''
+ chan.sendall(f"{cmd}\n")
+ buf = u""
while not buf.endswith(prompt):
try:
chunk = chan.recv(self.__MAX_RECV_BUF)
@@ -330,15 +340,16 @@ class SSH(object):
break
buf += chunk
if chan.exit_status_ready():
- logger.error('Channel exit status ready')
+ logger.error(u"Channel exit status ready")
break
except socket.timeout as exc:
- raise_from(Exception(
- 'Socket timeout during execution of command: '
- '{0}\nBuffer content:\n{1}'.format(cmd, buf)), exc)
- tmp = buf.replace(cmd.replace('\n', ''), '')
+ raise Exception(
+ f"Socket timeout during execution of command: {cmd}\n"
+ f"Buffer content:\n{buf}"
+ ) from exc
+ tmp = buf.replace(cmd.replace(u"\n", u""), u"")
for item in prompt:
- tmp.replace(item, '')
+ tmp.replace(item, u"")
return tmp
@staticmethod
@@ -349,7 +360,8 @@ class SSH(object):
"""
chan.close()
- def scp(self, local_path, remote_path, get=False, timeout=30,
+ def scp(
+ self, local_path, remote_path, get=False, timeout=30,
wildcard=False):
"""Copy files from local_path to remote_path or vice versa.
@@ -369,19 +381,23 @@ class SSH(object):
:type wildcard: bool
"""
if not get:
- logger.trace('SCP {0} to {1}:{2}'.format(
- local_path, self._ssh.get_transport().getpeername(),
- remote_path))
+ logger.trace(
+ f"SCP {local_path} to "
+ f"{self._ssh.get_transport().getpeername()}:{remote_path}"
+ )
else:
- logger.trace('SCP {0}:{1} to {2}'.format(
- self._ssh.get_transport().getpeername(), remote_path,
- local_path))
+ logger.trace(
+ f"SCP {self._ssh.get_transport().getpeername()}:{remote_path} "
+ f"to {local_path}"
+ )
# SCPCLient takes a paramiko transport as its only argument
if not wildcard:
scp = SCPClient(self._ssh.get_transport(), socket_timeout=timeout)
else:
- scp = SCPClient(self._ssh.get_transport(), sanitize=lambda x: x,
- socket_timeout=timeout)
+ scp = SCPClient(
+ self._ssh.get_transport(), sanitize=lambda x: x,
+ socket_timeout=timeout
+ )
start = time()
if not get:
scp.put(local_path, remote_path)
@@ -389,7 +405,7 @@ class SSH(object):
scp.get(remote_path, local_path)
scp.close()
end = time()
- logger.trace('SCP took {0} seconds'.format(end-start))
+ logger.trace(f"SCP took {end-start} seconds")
def exec_cmd(node, cmd, timeout=600, sudo=False, disconnect=False):
@@ -411,50 +427,27 @@ def exec_cmd(node, cmd, timeout=600, sudo=False, disconnect=False):
:rtype: tuple(int, str, str)
"""
if node is None:
- raise TypeError('Node parameter is None')
+ raise TypeError(u"Node parameter is None")
if cmd is None:
- raise TypeError('Command parameter is None')
+ raise TypeError(u"Command parameter is None")
if not cmd:
- raise ValueError('Empty command parameter')
+ raise ValueError(u"Empty command parameter")
ssh = SSH()
- if node.get('host_port') is not None:
- ssh_node = dict()
- ssh_node['host'] = '127.0.0.1'
- ssh_node['port'] = node['port']
- ssh_node['username'] = node['username']
- ssh_node['password'] = node['password']
- import pexpect
- options = '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
- tnl = '-L {port}:127.0.0.1:{port}'.format(port=node['port'])
- ssh_cmd = 'ssh {tnl} {op} {user}@{host} -p {host_port}'.\
- format(tnl=tnl, op=options, user=node['host_username'],
- host=node['host'], host_port=node['host_port'])
- logger.trace('Initializing local port forwarding:\n{ssh_cmd}'.
- format(ssh_cmd=ssh_cmd))
- child = pexpect.spawn(ssh_cmd)
- child.expect('.* password: ')
- logger.trace(child.after)
- child.sendline(node['host_password'])
- child.expect('Welcome .*')
- logger.trace(child.after)
- logger.trace('Local port forwarding finished.')
- else:
- ssh_node = node
-
try:
- ssh.connect(ssh_node)
+ ssh.connect(node)
except SSHException as err:
- logger.error("Failed to connect to node" + repr(err))
+ logger.error(f"Failed to connect to node {node[u'host']}\n{err!r}")
return None, None, None
try:
if not sudo:
- (ret_code, stdout, stderr) = ssh.exec_command(cmd, timeout=timeout)
+ ret_code, stdout, stderr = ssh.exec_command(cmd, timeout=timeout)
else:
- (ret_code, stdout, stderr) = ssh.exec_command_sudo(
- cmd, timeout=timeout)
+ ret_code, stdout, stderr = ssh.exec_command_sudo(
+ cmd, timeout=timeout
+ )
except SSHException as err:
logger.error(repr(err))
return None, None, None
@@ -497,19 +490,16 @@ def exec_cmd_no_error(
"""
for _ in range(retries + 1):
ret_code, stdout, stderr = exec_cmd(
- node, cmd, timeout=timeout, sudo=sudo, disconnect=disconnect)
+ node, cmd, timeout=timeout, sudo=sudo, disconnect=disconnect
+ )
if ret_code == 0:
break
sleep(1)
else:
- msg = 'Command execution failed: "{cmd}"\nRC: {rc}\n{stderr}'.format(
- cmd=cmd, rc=ret_code, stderr=stderr)
+ msg = f"Command execution failed: '{cmd}'\nRC: {ret_code}\n{stderr}"
logger.info(msg)
if message:
- if include_reason:
- msg = message + '\n' + msg
- else:
- msg = message
+ msg = f"{message}\n{msg}" if include_reason else message
raise RuntimeError(msg)
return stdout, stderr
@@ -540,13 +530,11 @@ def scp_node(
try:
ssh.connect(node)
except SSHException as exc:
- raise_from(RuntimeError(
- 'Failed to connect to {host}!'.format(host=node['host'])), exc)
+ raise RuntimeError(f"Failed to connect to {node[u'host']}!") from exc
try:
ssh.scp(local_path, remote_path, get, timeout)
except SCPException as exc:
- raise_from(RuntimeError(
- 'SCP execution failed on {host}!'.format(host=node['host'])), exc)
+ raise RuntimeError(f"SCP execution failed on {node[u'host']}!") from exc
finally:
if disconnect:
ssh.disconnect()
diff --git a/resources/libraries/python/tcp.py b/resources/libraries/python/tcp.py
index f3a24cbd06..62cff2f4ff 100644
--- a/resources/libraries/python/tcp.py
+++ b/resources/libraries/python/tcp.py
@@ -11,27 +11,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""TCP util library.
-"""
+"""TCP util library."""
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-class TCPUtils(object):
- """Implementation of the TCP utilities.
- """
- www_root_dir = '{rmt_fw_dir}/{wrk_www}'\
- .format(rmt_fw_dir=Constants.REMOTE_FW_DIR,
- wrk_www=Constants.RESOURCES_TP_WRK_WWW)
+class TCPUtils:
+ """Implementation of the TCP utilities."""
+
+ www_root_dir = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_TP_WRK_WWW}"
def __init__(self):
pass
@classmethod
- def start_vpp_http_server_params(cls, node, http_static_plugin,
- prealloc_fifos, fifo_size,
- private_segment_size):
+ def start_vpp_http_server_params(
+ cls, node, http_static_plugin, prealloc_fifos, fifo_size,
+ private_segment_size):
"""Start the test HTTP server internal application or
the HTTP static server plugin internal applicatoin on the given node.
@@ -73,16 +70,11 @@ class TCPUtils(object):
:type fifo_size: str
:type private_segment_size: str
"""
- if http_static_plugin:
- cmd = 'http static server www-root {www_root} '\
- 'prealloc-fifos {prealloc_fifos} fifo-size {fifo_size}'\
- ' private-segment-size {pvt_seg_size}'\
- .format(www_root=cls.www_root_dir,
- prealloc_fifos=prealloc_fifos, fifo_size=fifo_size,
- pvt_seg_size=private_segment_size)
- else:
- cmd = 'test http server static prealloc-fifos {prealloc_fifos} '\
- 'fifo-size {fifo_size} private-segment-size {pvt_seg_size}'\
- .format(prealloc_fifos=prealloc_fifos, fifo_size=fifo_size,
- pvt_seg_size=private_segment_size)
+ cmd = f"http static server www-root {cls.www_root_dir} " \
+ f"prealloc-fifos {prealloc_fifos} fifo-size {fifo_size} " \
+ f"private-segment-size {private_segment_size}" \
+ if http_static_plugin \
+ else f"test http server static prealloc-fifos {prealloc_fifos} " \
+ f"fifo-size {fifo_size} private-segment-size {private_segment_size}"
+
PapiSocketExecutor.run_cli_cmd(node, cmd)
diff --git a/resources/libraries/python/telemetry/SPAN.py b/resources/libraries/python/telemetry/SPAN.py
deleted file mode 100644
index 268a268a0d..0000000000
--- a/resources/libraries/python/telemetry/SPAN.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# 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:
-#
-# 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.
-
-"""SPAN setup library"""
-
-from resources.libraries.python.topology import Topology
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-
-
-class SPAN(object):
- """Class contains methods for setting up SPAN mirroring on DUTs."""
-
- def __init__(self):
- """Initializer."""
- pass
-
- @staticmethod
- def vpp_get_span_configuration(node, is_l2=False):
- """Get full SPAN configuration from VPP node.
-
- Used by Honeycomb.
-
- :param node: DUT node.
- :type node: dict
-
- :returns: Full SPAN configuration as list. One list entry for every
- source/destination interface pair.
- :rtype: list of dict
- """
- cmd = "sw_interface_span_dump"
- args = dict(
- is_l2=1 if is_l2 else 0
- )
- with PapiSocketExecutor(node) as papi_exec:
- details = papi_exec.add(cmd, **args).get_details()
-
- return details
-
- @staticmethod
- def vpp_get_span_configuration_by_interface(node, dst_interface,
- ret_format="sw_if_index"):
- """Get a list of all interfaces currently being mirrored
- to the specified interface.
-
- Used by Honeycomb.
-
- :param node: DUT node.
- :param dst_interface: Name, sw_if_index or key of interface.
- :param ret_format: Optional. Desired format of returned interfaces.
- :type node: dict
- :type dst_interface: str or int
- :type ret_format: string
- :returns: List of SPAN source interfaces for the provided destination
- interface.
- :rtype: list
- """
-
- data = SPAN.vpp_get_span_configuration(node)
-
- dst_int = Topology.convert_interface_reference(
- node, dst_interface, "sw_if_index")
- src_interfaces = []
- for item in data:
- if item["sw_if_index_to"] == dst_int:
- src_interfaces.append(item["sw_if_index_from"])
-
- if ret_format != "sw_if_index":
- src_interfaces = [
- Topology.convert_interface_reference(
- node, interface, ret_format
- ) for interface in src_interfaces]
-
- return src_interfaces
diff --git a/resources/libraries/python/telemetry/__init__.py b/resources/libraries/python/telemetry/__init__.py
deleted file mode 100644
index cc11de329f..0000000000
--- a/resources/libraries/python/telemetry/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-__init__ file for resources/libraries/python/telemetry
-"""
diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py
index 91578a5ccf..46a6628a0a 100644
--- a/resources/libraries/python/topology.py
+++ b/resources/libraries/python/topology.py
@@ -17,13 +17,14 @@ import re
from collections import Counter
-from yaml import load
+from yaml import safe_load
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError
-from robot.api.deco import keyword
-__all__ = ["DICT__nodes", 'Topology', 'NodeType', 'SocketType']
+__all__ = [
+ u"DICT__nodes", u"Topology", u"NodeType", u"SocketType", u"NodeSubTypeTG"
+]
def load_topo_from_yaml():
@@ -32,46 +33,48 @@ def load_topo_from_yaml():
:returns: Nodes from loaded topology.
"""
try:
- topo_path = BuiltIn().get_variable_value("${TOPOLOGY_PATH}")
+ topo_path = BuiltIn().get_variable_value(u"${TOPOLOGY_PATH}")
except RobotNotRunningError:
return ''
with open(topo_path) as work_file:
- return load(work_file.read())['nodes']
+ return safe_load(work_file.read())[u"nodes"]
# pylint: disable=invalid-name
-class NodeType(object):
+class NodeType:
"""Defines node types used in topology dictionaries."""
# Device Under Test (this node has VPP running on it)
- DUT = 'DUT'
+ DUT = u"DUT"
# Traffic Generator (this node has traffic generator on it)
- TG = 'TG'
+ TG = u"TG"
# Virtual Machine (this node running on DUT node)
- VM = 'VM'
+ VM = u"VM"
-class NodeSubTypeTG(object):
+class NodeSubTypeTG:
"""Defines node sub-type TG - traffic generator."""
# T-Rex traffic generator
- TREX = 'TREX'
+ TREX = u"TREX"
# Moongen
- MOONGEN = 'MOONGEN'
+ MOONGEN = u"MOONGEN"
# IxNetwork
- IXNET = 'IXNET'
+ IXNET = u"IXNET"
-class SocketType(object):
+
+class SocketType:
"""Defines socket types used in topology dictionaries."""
# VPP Socket PAPI
- PAPI = 'PAPI'
+ PAPI = u"PAPI"
# VPP PAPI Stats (legacy option until stats are migrated to Socket PAPI)
- STATS = 'STATS'
+ STATS = u"STATS"
+
DICT__nodes = load_topo_from_yaml()
-class Topology(object):
+class Topology:
"""Topology data manipulation and extraction methods.
Defines methods used for manipulation and extraction of data from
@@ -103,10 +106,10 @@ class Topology(object):
node[path[0]] = value
return
if path[0] not in node:
- node[path[0]] = {}
+ node[path[0]] = dict()
elif isinstance(node[path[0]], str):
- node[path[0]] = {} if node[path[0]] == '' \
- else {node[path[0]]: ''}
+ node[path[0]] = dict() if node[path[0]] == u"" \
+ else {node[path[0]]: u""}
self.add_node_item(node[path[0]], value, path[1:])
@staticmethod
@@ -123,9 +126,9 @@ class Topology(object):
max_ports = 1000000
iface = None
for i in range(1, max_ports):
- if node['interfaces'].get(str(ptype) + str(i)) is None:
+ if node[u"interfaces"].get(str(ptype) + str(i)) is None:
iface = str(ptype) + str(i)
- node['interfaces'][iface] = dict()
+ node[u"interfaces"][iface] = dict()
break
return iface
@@ -140,7 +143,7 @@ class Topology(object):
:returns: Nothing
"""
try:
- node['interfaces'].pop(iface_key)
+ node[u"interfaces"].pop(iface_key)
except KeyError:
pass
@@ -154,9 +157,9 @@ class Topology(object):
:type ptype: str
:returns: Nothing
"""
- for if_key in list(node['interfaces']):
+ for if_key in list(node[u"interfaces"]):
if if_key.startswith(str(ptype)):
- node['interfaces'].pop(if_key)
+ node[u"interfaces"].pop(if_key)
@staticmethod
def remove_all_added_ports_on_all_duts_from_topology(nodes):
@@ -166,12 +169,13 @@ class Topology(object):
:type nodes: dict
:returns: Nothing
"""
- port_types = ('subinterface', 'vlan_subif', 'memif', 'tap', 'vhost',
- 'loopback', 'gre_tunnel', 'vxlan_tunnel', 'eth_bond',
- 'eth_avf')
+ port_types = (
+ u"subinterface", u"vlan_subif", u"memif", u"tap", u"vhost",
+ u"loopback", u"gre_tunnel", u"vxlan_tunnel", u"eth_bond", u"eth_avf"
+ )
for node_data in nodes.values():
- if node_data['type'] == NodeType.DUT:
+ if node_data[u"type"] == NodeType.DUT:
for ptype in port_types:
Topology.remove_all_ports(node_data, ptype)
@@ -183,10 +187,10 @@ class Topology(object):
:type node: dict
:returns: Nothing
"""
- reg_ex = re.compile(r'port\d+_vif\d+')
- for if_key in list(node['interfaces']):
+ reg_ex = re.compile(r"port\d+_vif\d+")
+ for if_key in list(node[u"interfaces"]):
if re.match(reg_ex, if_key):
- node['interfaces'].pop(if_key)
+ node[u"interfaces"].pop(if_key)
@staticmethod
def remove_all_added_vif_ports_on_all_duts_from_topology(nodes):
@@ -198,7 +202,7 @@ class Topology(object):
:returns: Nothing
"""
for node_data in nodes.values():
- if node_data['type'] == NodeType.DUT:
+ if node_data[u"type"] == NodeType.DUT:
Topology.remove_all_vif_ports(node_data)
@staticmethod
@@ -212,7 +216,7 @@ class Topology(object):
:type iface_key: str
:type sw_if_index: int
"""
- node['interfaces'][iface_key]['vpp_sw_index'] = int(sw_if_index)
+ node[u"interfaces"][iface_key][u"vpp_sw_index"] = int(sw_if_index)
@staticmethod
def update_interface_name(node, iface_key, name):
@@ -225,7 +229,7 @@ class Topology(object):
:type iface_key: str
:type name: str
"""
- node['interfaces'][iface_key]['name'] = str(name)
+ node[u"interfaces"][iface_key][u"name"] = str(name)
@staticmethod
def update_interface_mac_address(node, iface_key, mac_address):
@@ -238,7 +242,7 @@ class Topology(object):
:type iface_key: str
:type mac_address: str
"""
- node['interfaces'][iface_key]['mac_address'] = str(mac_address)
+ node[u"interfaces"][iface_key][u"mac_address"] = str(mac_address)
@staticmethod
def update_interface_pci_address(node, iface_key, pci_address):
@@ -251,7 +255,7 @@ class Topology(object):
:type iface_key: str
:type pci_address: str
"""
- node['interfaces'][iface_key]['pci_address'] = str(pci_address)
+ node[u"interfaces"][iface_key][u"pci_address"] = str(pci_address)
@staticmethod
def update_interface_vlan(node, iface_key, vlan):
@@ -264,7 +268,7 @@ class Topology(object):
:type iface_key: str
:type vlan: str
"""
- node['interfaces'][iface_key]['vlan'] = int(vlan)
+ node[u"interfaces"][iface_key][u"vlan"] = int(vlan)
@staticmethod
def update_interface_vhost_socket(node, iface_key, vhost_socket):
@@ -277,7 +281,7 @@ class Topology(object):
:type iface_key: str
:type vhost_socket: str
"""
- node['interfaces'][iface_key]['vhost_socket'] = str(vhost_socket)
+ node[u"interfaces"][iface_key][u"vhost_socket"] = str(vhost_socket)
@staticmethod
def update_interface_memif_socket(node, iface_key, memif_socket):
@@ -290,7 +294,7 @@ class Topology(object):
:type iface_key: str
:type memif_socket: str
"""
- node['interfaces'][iface_key]['memif_socket'] = str(memif_socket)
+ node[u"interfaces"][iface_key][u"memif_socket"] = str(memif_socket)
@staticmethod
def update_interface_memif_id(node, iface_key, memif_id):
@@ -303,7 +307,7 @@ class Topology(object):
:type iface_key: str
:type memif_id: str
"""
- node['interfaces'][iface_key]['memif_id'] = str(memif_id)
+ node[u"interfaces"][iface_key][u"memif_id"] = str(memif_id)
@staticmethod
def update_interface_memif_role(node, iface_key, memif_role):
@@ -316,7 +320,7 @@ class Topology(object):
:type iface_key: str
:type memif_role: str
"""
- node['interfaces'][iface_key]['memif_role'] = str(memif_role)
+ node[u"interfaces"][iface_key][u"memif_role"] = str(memif_role)
@staticmethod
def update_interface_tap_dev_name(node, iface_key, dev_name):
@@ -330,7 +334,7 @@ class Topology(object):
:type dev_name: str
:returns: Nothing
"""
- node['interfaces'][iface_key]['dev_name'] = str(dev_name)
+ node[u"interfaces"][iface_key][u"dev_name"] = str(dev_name)
@staticmethod
def get_node_by_hostname(nodes, hostname):
@@ -343,7 +347,7 @@ class Topology(object):
:returns: Node dictionary or None if not found.
"""
for node in nodes.values():
- if node['host'] == hostname:
+ if node[u"host"] == hostname:
return node
return None
@@ -357,11 +361,11 @@ class Topology(object):
:returns: Links in the topology.
:rtype: list
"""
- links = []
+ links = list()
for node in nodes.values():
- for interface in node['interfaces'].values():
- link = interface.get('link')
+ for interface in node[u"interfaces"].values():
+ link = interface.get(u"link")
if link is not None:
if link not in links:
links.append(link)
@@ -382,9 +386,9 @@ class Topology(object):
:returns: Interface key from topology file
:rtype: string
"""
- interfaces = node['interfaces']
+ interfaces = node[u"interfaces"]
retval = None
- for if_key, if_val in interfaces.iteritems():
+ for if_key, if_val in interfaces.items():
k_val = if_val.get(key)
if k_val is not None:
if k_val == value:
@@ -406,7 +410,7 @@ class Topology(object):
:returns: Interface key.
:rtype: str
"""
- return Topology._get_interface_by_key_value(node, "name", iface_name)
+ return Topology._get_interface_by_key_value(node, u"name", iface_name)
@staticmethod
def get_interface_by_link_name(node, link_name):
@@ -422,7 +426,7 @@ class Topology(object):
:returns: Interface key of the interface connected to the given link.
:rtype: str
"""
- return Topology._get_interface_by_key_value(node, "link", link_name)
+ return Topology._get_interface_by_key_value(node, u"link", link_name)
def get_interfaces_by_link_names(self, node, link_names):
"""Return dictionary of dictionaries {"interfaceN", interface name}.
@@ -439,14 +443,12 @@ class Topology(object):
links.
:rtype: dict
"""
- retval = {}
- interface_key_tpl = "interface{}"
+ retval = dict()
interface_number = 1
for link_name in link_names:
interface = self.get_interface_by_link_name(node, link_name)
- interface_name = self.get_interface_name(node, interface)
- interface_key = interface_key_tpl.format(str(interface_number))
- retval[interface_key] = interface_name
+ retval[f"interface{str(interface_number)}"] = \
+ self.get_interface_name(node, interface)
interface_number += 1
return retval
@@ -465,8 +467,9 @@ class Topology(object):
:returns: Interface name of the interface connected to the given link.
:rtype: str
"""
- return Topology._get_interface_by_key_value(node, "vpp_sw_index",
- sw_if_index)
+ return Topology._get_interface_by_key_value(
+ node, u"vpp_sw_index", sw_if_index
+ )
@staticmethod
def get_interface_sw_index(node, iface_key):
@@ -480,8 +483,8 @@ class Topology(object):
:rtype: int or None
"""
try:
- if isinstance(iface_key, basestring):
- return node['interfaces'][iface_key].get('vpp_sw_index')
+ if isinstance(iface_key, str):
+ return node[u"interfaces"][iface_key].get(u"vpp_sw_index")
# TODO: use only iface_key, do not use integer
return int(iface_key)
except (KeyError, ValueError):
@@ -499,10 +502,10 @@ class Topology(object):
:raises TypeError: If provided interface name is not a string.
"""
try:
- if not isinstance(iface_name, basestring):
- raise TypeError("Interface name must be a string.")
+ if not isinstance(iface_name, str):
+ raise TypeError(u"Interface name must be a string.")
iface_key = Topology.get_interface_by_name(node, iface_name)
- return node['interfaces'][iface_key].get('vpp_sw_index')
+ return node[u"interfaces"][iface_key].get(u"vpp_sw_index")
except (KeyError, ValueError):
return None
@@ -519,7 +522,7 @@ class Topology(object):
:rtype: int
"""
try:
- return node['interfaces'][iface_key].get('mtu')
+ return node[u"interfaces"][iface_key].get(u"mtu")
except KeyError:
return None
@@ -536,7 +539,7 @@ class Topology(object):
:rtype: str
"""
try:
- return node['interfaces'][iface_key].get('name')
+ return node[u"interfaces"][iface_key].get(u"name")
except KeyError:
return None
@@ -562,21 +565,25 @@ class Topology(object):
if isinstance(interface, int):
key = Topology.get_interface_by_sw_index(node, interface)
if key is None:
- raise RuntimeError("Interface with sw_if_index={0} does not "
- "exist in topology.".format(interface))
+ raise RuntimeError(
+ f"Interface with sw_if_index={interface} does not exist "
+ f"in topology."
+ )
elif interface in Topology.get_node_interfaces(node):
key = interface
- elif interface in Topology.get_links({"dut": node}):
+ elif interface in Topology.get_links({u"dut": node}):
key = Topology.get_interface_by_link_name(node, interface)
- elif isinstance(interface, basestring):
+ elif isinstance(interface, str):
key = Topology.get_interface_by_name(node, interface)
if key is None:
- raise RuntimeError("Interface with key, name or link name "
- "\"{0}\" does not exist in topology."
- .format(interface))
+ raise RuntimeError(
+ f"Interface with key, name or link name \"{interface}\" "
+ f"does not exist in topology."
+ )
else:
- raise TypeError("Type of interface argument must be integer"
- " or string.")
+ raise TypeError(
+ u"Type of interface argument must be integer or string."
+ )
return key
@staticmethod
@@ -602,17 +609,18 @@ class Topology(object):
key = Topology.convert_interface_reference_to_key(node, interface)
conversions = {
- "key": lambda x, y: y,
- "name": Topology.get_interface_name,
- "sw_if_index": Topology.get_interface_sw_index
+ u"key": lambda x, y: y,
+ u"name": Topology.get_interface_name,
+ u"sw_if_index": Topology.get_interface_sw_index
}
try:
return conversions[wanted_format](node, key)
except KeyError:
- raise ValueError("Unrecognized return value wanted: {0}."
- "Valid options are key, name, sw_if_index"
- .format(wanted_format))
+ raise ValueError(
+ f"Unrecognized return value wanted: {wanted_format}."
+ f"Valid options are key, name, sw_if_index"
+ )
@staticmethod
def get_interface_numa_node(node, iface_key):
@@ -628,7 +636,7 @@ class Topology(object):
:rtype: int
"""
try:
- return node['interfaces'][iface_key].get('numa_node')
+ return node[u"interfaces"][iface_key].get(u"numa_node")
except KeyError:
return None
@@ -653,7 +661,7 @@ class Topology(object):
numa_list = []
for if_key in iface_keys:
try:
- numa_list.append(node['interfaces'][if_key].get('numa_node'))
+ numa_list.append(node[u"interfaces"][if_key].get(u"numa_node"))
except KeyError:
pass
@@ -676,7 +684,7 @@ class Topology(object):
:returns: Return MAC or None if not found.
"""
try:
- return node['interfaces'][iface_key].get('mac_address')
+ return node[u"interfaces"][iface_key].get(u"mac_address")
except KeyError:
return None
@@ -691,7 +699,7 @@ class Topology(object):
:returns: Return IP4 or None if not found.
"""
try:
- return node['interfaces'][iface_key].get('ip4_address', None)
+ return node[u"interfaces"][iface_key].get(u"ip4_address")
except KeyError:
return None
@@ -712,11 +720,11 @@ class Topology(object):
"""
link_name = None
# get link name where the interface belongs to
- for if_key, if_val in node['interfaces'].iteritems():
- if if_key == 'mgmt':
+ for if_key, if_val in node[u"interfaces"].items():
+ if if_key == u"mgmt":
continue
if if_key == iface_key:
- link_name = if_val['link']
+ link_name = if_val[u"link"]
break
if link_name is None:
@@ -725,13 +733,13 @@ class Topology(object):
# find link
for node_data in nodes_info.values():
# skip self
- if node_data['host'] == node['host']:
+ if node_data[u"host"] == node[u"host"]:
continue
for if_key, if_val \
- in node_data['interfaces'].iteritems():
- if 'link' not in if_val:
+ in node_data[u"interfaces"].items():
+ if u"link" not in if_val:
continue
- if if_val['link'] == link_name:
+ if if_val[u"link"] == link_name:
return node_data, if_key
return None
@@ -746,7 +754,7 @@ class Topology(object):
:returns: Return PCI address or None if not found.
"""
try:
- return node['interfaces'][iface_key].get('pci_address')
+ return node[u"interfaces"][iface_key].get(u"pci_address")
except KeyError:
return None
@@ -761,7 +769,7 @@ class Topology(object):
:returns: Return interface driver or None if not found.
"""
try:
- return node['interfaces'][iface_key].get('driver')
+ return node[u"interfaces"][iface_key].get(u"driver")
except KeyError:
return None
@@ -776,7 +784,7 @@ class Topology(object):
:returns: Return interface vlan or None if not found.
"""
try:
- return node['interfaces'][iface_key].get('vlan')
+ return node[u"interfaces"][iface_key].get(u"vlan")
except KeyError:
return None
@@ -789,7 +797,7 @@ class Topology(object):
:returns: Return list of keys of all interfaces.
:rtype: list
"""
- return node['interfaces'].keys()
+ return node[u"interfaces"].keys()
@staticmethod
def get_node_link_mac(node, link_name):
@@ -802,9 +810,9 @@ class Topology(object):
:returns: MAC address string.
:rtype: str
"""
- for port in node['interfaces'].values():
- if port.get('link') == link_name:
- return port.get('mac_address')
+ for port in node[u"interfaces"].values():
+ if port.get(u"link") == link_name:
+ return port.get(u"mac_address")
return None
@staticmethod
@@ -818,27 +826,26 @@ class Topology(object):
:returns: List of link names occupied by the node.
:rtype: None or list of string
"""
- interfaces = node['interfaces']
+ interfaces = node[u"interfaces"]
link_names = []
for interface in interfaces.values():
- if 'link' in interface:
- if (filter_list is not None) and ('model' in interface):
+ if u"link" in interface:
+ if (filter_list is not None) and (u"model" in interface):
for filt in filter_list:
- if filt == interface['model']:
- link_names.append(interface['link'])
- elif (filter_list is not None) and ('model' not in interface):
- logger.trace('Cannot apply filter on interface: {}'
- .format(str(interface)))
+ if filt == interface[u"model"]:
+ link_names.append(interface[u"link"])
+ elif (filter_list is not None) and (u"model" not in interface):
+ logger.trace(
+ f"Cannot apply filter on interface: {str(interface)}"
+ )
else:
- link_names.append(interface['link'])
+ link_names.append(interface[u"link"])
if not link_names:
link_names = None
return link_names
- @keyword('Get active links connecting "${node1}" and "${node2}"')
- def get_active_connecting_links(self, node1, node2,
- filter_list_node1=None,
- filter_list_node2=None):
+ def get_active_connecting_links(
+ self, node1, node2, filter_list_node1=None, filter_list_node2=None):
"""Return list of link names that connect together node1 and node2.
:param node1: Node topology dictionary.
@@ -853,29 +860,27 @@ class Topology(object):
:rtype: list
"""
- logger.trace("node1: {}".format(str(node1)))
- logger.trace("node2: {}".format(str(node2)))
+ logger.trace(f"node1: {str(node1)}")
+ logger.trace(f"node2: {str(node2)}")
node1_links = self._get_node_active_link_names(
- node1,
- filter_list=filter_list_node1)
+ node1, filter_list=filter_list_node1
+ )
node2_links = self._get_node_active_link_names(
- node2,
- filter_list=filter_list_node2)
+ node2, filter_list=filter_list_node2
+ )
connecting_links = None
if node1_links is None:
- logger.error("Unable to find active links for node1")
+ logger.error(u"Unable to find active links for node1")
elif node2_links is None:
- logger.error("Unable to find active links for node2")
+ logger.error(u"Unable to find active links for node2")
else:
connecting_links = list(set(node1_links).intersection(node2_links))
return connecting_links
- @keyword('Get first active connecting link between node "${node1}" and '
- '"${node2}"')
def get_first_active_connecting_link(self, node1, node2):
- """
+ """Get first link connecting the two nodes together.
:param node1: Connected node.
:param node2: Connected node.
@@ -887,11 +892,9 @@ class Topology(object):
"""
connecting_links = self.get_active_connecting_links(node1, node2)
if not connecting_links:
- raise RuntimeError("No links connecting the nodes were found")
+ raise RuntimeError(u"No links connecting the nodes were found")
return connecting_links[0]
- @keyword('Get egress interfaces name on "${node1}" for link with '
- '"${node2}"')
def get_egress_interfaces_name_for_nodes(self, node1, node2):
"""Get egress interfaces on node1 for link with node2.
@@ -902,24 +905,22 @@ class Topology(object):
:returns: Egress interfaces.
:rtype: list
"""
- interfaces = []
+ interfaces = list()
links = self.get_active_connecting_links(node1, node2)
if not links:
- raise RuntimeError('No link between nodes')
- for interface in node1['interfaces'].values():
- link = interface.get('link')
+ raise RuntimeError(u"No link between nodes")
+ for interface in node1[u"interfaces"].values():
+ link = interface.get(u"link")
if link is None:
continue
if link in links:
continue
- name = interface.get('name')
+ name = interface.get(u"name")
if name is None:
continue
interfaces.append(name)
return interfaces
- @keyword('Get first egress interface name on "${node1}" for link with '
- '"${node2}"')
def get_first_egress_interface_for_nodes(self, node1, node2):
"""Get first egress interface on node1 for link with node2.
@@ -932,11 +933,9 @@ class Topology(object):
"""
interfaces = self.get_egress_interfaces_name_for_nodes(node1, node2)
if not interfaces:
- raise RuntimeError('No egress interface for nodes')
+ raise RuntimeError(u"No egress interface for nodes")
return interfaces[0]
- @keyword('Get link data useful in circular topology test from tg "${tgen}"'
- ' dut1 "${dut1}" dut2 "${dut2}"')
def get_links_dict_from_nodes(self, tgen, dut1, dut2):
"""Return link combinations used in tests in circular topology.
@@ -970,12 +969,14 @@ class Topology(object):
tg_traffic_links = [dut1_tg_link, dut2_tg_link]
dut1_bd_links = [dut1_dut2_link, dut1_tg_link]
dut2_bd_links = [dut1_dut2_link, dut2_tg_link]
- topology_links = {'DUT1_DUT2_LINK': dut1_dut2_link,
- 'DUT1_TG_LINK': dut1_tg_link,
- 'DUT2_TG_LINK': dut2_tg_link,
- 'TG_TRAFFIC_LINKS': tg_traffic_links,
- 'DUT1_BD_LINKS': dut1_bd_links,
- 'DUT2_BD_LINKS': dut2_bd_links}
+ topology_links = {
+ u"DUT1_DUT2_LINK": dut1_dut2_link,
+ u"DUT1_TG_LINK": dut1_tg_link,
+ u"DUT2_TG_LINK": dut2_tg_link,
+ u"TG_TRAFFIC_LINKS": tg_traffic_links,
+ u"DUT1_BD_LINKS": dut1_bd_links,
+ u"DUT2_BD_LINKS": dut2_bd_links
+ }
return topology_links
@staticmethod
@@ -987,7 +988,7 @@ class Topology(object):
:returns: True if node is type of TG, otherwise False.
:rtype: bool
"""
- return node['type'] == NodeType.TG
+ return node[u"type"] == NodeType.TG
@staticmethod
def get_node_hostname(node):
@@ -998,7 +999,7 @@ class Topology(object):
:returns: Hostname or IP address.
:rtype: str
"""
- return node['host']
+ return node[u"host"]
@staticmethod
def get_node_arch(node):
@@ -1011,10 +1012,10 @@ class Topology(object):
:rtype: str
"""
try:
- return node['arch']
+ return node[u"arch"]
except KeyError:
- node['arch'] = 'x86_64'
- return 'x86_64'
+ node[u"arch"] = u"x86_64"
+ return u"x86_64"
@staticmethod
def get_cryptodev(node):
@@ -1026,7 +1027,7 @@ class Topology(object):
:rtype: str
"""
try:
- return node['cryptodev']
+ return node[u"cryptodev"]
except KeyError:
return None
@@ -1040,7 +1041,7 @@ class Topology(object):
:rtype: str
"""
try:
- return node['uio_driver']
+ return node[u"uio_driver"]
except KeyError:
return None
@@ -1055,7 +1056,7 @@ class Topology(object):
:returns: Return iface_key or None if not found.
"""
try:
- node['interfaces'][iface_key]['numa_node'] = numa_node_id
+ node[u"interfaces"][iface_key][u"numa_node"] = numa_node_id
return iface_key
except KeyError:
return None
@@ -1070,9 +1071,9 @@ class Topology(object):
:type node: dict
:type socket_type: SocketType
:type socket_id: str
- :type socket path: str
+ :type socket_path: str
"""
- path = ['sockets', socket_type, socket_id]
+ path = [u"sockets", socket_type, socket_id]
self.add_node_item(node, socket_path, path)
@staticmethod
@@ -1084,12 +1085,12 @@ class Topology(object):
:type node: dict
:type socket_type: SocketType
:returns: Node sockets or None if not found.
- :rtype: list
+ :rtype: dict
"""
try:
if socket_type:
- return node['sockets'][socket_type]
- return node['sockets']
+ return node[u"sockets"][socket_type]
+ return node[u"sockets"]
except KeyError:
return None
@@ -1101,5 +1102,5 @@ class Topology(object):
:type node: dict
"""
for node in nodes.values():
- if 'sockets' in node.keys():
- node.pop('sockets')
+ if u"sockets" in list(node.keys()):
+ node.pop(u"sockets")
diff --git a/resources/libraries/robot/crypto/ipsec.robot b/resources/libraries/robot/crypto/ipsec.robot
index a37c18db77..33702a43ae 100644
--- a/resources/libraries/robot/crypto/ipsec.robot
+++ b/resources/libraries/robot/crypto/ipsec.robot
@@ -17,28 +17,28 @@
| Library | resources.libraries.python.IPsecUtil
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.IPv6Util
-| ...
+|
| Documentation | IPsec keywords.
*** Keywords ***
| Generate keys for IPSec
| | [Documentation] | Generate keys for IPsec.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - crypto_alg - Encryption algorithm. Type: enum
| | ... | - integ_alg - Integrity algorithm. Type: enum
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - encr_key - Encryption key. Type: string
| | ... | - auth_key - Integrity key. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
| | ... | \| Generate keys for IPSec \| ${encr_alg} \| ${auth_alg} \|
-| | ...
+| |
| | [Arguments] | ${crypto_alg} | ${integ_alg}
-| | ...
+| |
| | ${encr_key_len}= | Get Crypto Alg Key Len | ${crypto_alg}
| | ${encr_key}= | Generate Random String | ${encr_key_len}
| | ${auth_key_len}= | Get Integ Alg Key Len | ${integ_alg}
@@ -48,26 +48,26 @@
| Configure path for IPSec test
| | [Documentation] | Setup path for IPsec testing TG<-->DUT1.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure path for IPSec test \|
-| | ...
+| |
| | Set Interface State | ${dut1} | ${dut1_if1} | up
| | Set Interface State | ${dut1} | ${dut1_if2} | up
| | Vpp Node Interfaces Ready Wait | ${dut1}
| Configure topology for IPv4 IPsec testing
| | [Documentation] | Setup topology for IPv4 IPsec testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - dut_tun_ip - DUT tunnel IP address. Type: string
| | ... | - dut_src_ip - DUT source IP address. Type: string
| | ... | - tg_tun_ip - TG tunnel IP address. Type: string
| | ... | - tg_src_ip - TG source IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 IPsec testing \|
-| | ...
+| |
| | Configure path for IPSec test
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
@@ -87,16 +87,16 @@
| Configure topology for IPv6 IPsec testing
| | [Documentation] | Setup topology fo IPv6 IPsec testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - dut_tun_ip - DUT tunnel IP address. Type: string
| | ... | - dut_src_ip - DUT source IP address. Type: string
| | ... | - tg_tun_ip - TG tunnel IP address. Type: string
| | ... | - tg_src_ip - TG source IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 IPsec testing \|
-| | ...
+| |
| | Configure path for IPSec test
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -117,7 +117,7 @@
| Configure manual keyed connection for IPSec
| | [Documentation] | Setup IPsec manual keyed connection on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node to setup IPsec on. Type: dictionary
| | ... | - interface - Interface to enable IPsec on. Type: string
@@ -131,11 +131,11 @@
| | ... | - r_ip - Remote IP address. Type: string
| | ... | - l_tunnel - Local tunnel IP address (optional). Type: string
| | ... | - r_tunnel - Remote tunnel IP address (optional). Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - l_sa_id
| | ... | - r_sa_id
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
@@ -143,12 +143,12 @@
| | ... | \| GigabitEthernet0/8/0 \| ${encr_alg} \| sixteenbytes_key \
| | ... | \| ${auth_alg} \| twentybytessecretkey \| ${1000} \| ${1001} \
| | ... | \| 192.168.4.4 \| 192.168.3.3 \| 192.168.100.3 \| 192.168.100.2 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${interface} | ${crypto_alg} | ${crypto_key}
| | ... | ${integ_alg} | ${integ_key} | ${l_spi} | ${r_spi} | ${l_ip}
| | ... | ${r_ip} | ${l_tunnel}=${None} | ${r_tunnel}=${None}
| | ... | ${is_ipv6}=${FALSE}
-| | ...
+| |
| | Set Test Variable | ${l_sa_id} | ${10}
| | Set Test Variable | ${r_sa_id} | ${20}
| | ${spd_id}= | Set Variable | ${1}
@@ -185,7 +185,7 @@
| | ... | DUT1-DUT2 links. Set routing for encrypted traffic on both DUT nodes
| | ... | with prefix /8 and next hop of neighbour DUT or TG interface IPv4
| | ... | address.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | ${dut1_if1_ip4} | 24
diff --git a/resources/libraries/robot/dpdk/default.robot b/resources/libraries/robot/dpdk/default.robot
index 4b8ec0b08b..00c0691864 100644
--- a/resources/libraries/robot/dpdk/default.robot
+++ b/resources/libraries/robot/dpdk/default.robot
@@ -22,23 +22,23 @@
| Start L2FWD on all DUTs
| | [Documentation] | Start the l2fwd with M worker threads and rxqueues N and
| | ... | jumbo support frames on/off on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start L2FWD on all DUTs \| ${1} \| ${1} \| ${False} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']}
| | | ... | ${${dut}_if1} | ${${dut}_if2}
| | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']}
@@ -58,27 +58,28 @@
| | | Run keyword if | ${thr_count_int} > 1
| | | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD
| | | Set Tags | ${thr_count_int}T${cpu_count_int}C
+| | END
| Start L3FWD on all DUTs
| | [Documentation] | Start the l3fwd with M worker threads and rxqueues N and
| | ... | jumbo support frames on/off on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start L3FWD on all DUTs \| ${1} \| ${1} \| ${False} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']}
| | | ... | ${${dut}_if1} | ${${dut}_if2}
| | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']}
@@ -99,3 +100,4 @@
| | | Run keyword if | ${thr_count_int} > 1
| | | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD
| | | Set Tags | ${thr_count_int}T${cpu_count_int}C
+| | END
diff --git a/resources/libraries/robot/features/acl.robot b/resources/libraries/robot/features/acl.robot
index a70a34c2db..fa94507994 100644
--- a/resources/libraries/robot/features/acl.robot
+++ b/resources/libraries/robot/features/acl.robot
@@ -19,17 +19,17 @@
| | [Documentation]
| | ... | Configure MACIP ACL with required number of not-hitting permit ACEs
| | ... | plus two hitting ACEs for both traffic directions.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - dut_if1 - DUT node interface1 name (Optional). Type: string
| | ... | - dut_if2 - DUT node interface2 name (Optional). Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure MACIP ACLs \| ${nodes['DUT1']} \| GigabitEthernet0/7/0 \
| | ... | \| GigabitEthernet0/8/0 \|
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - src_ip_start - Source IP address start. Type: string
| | ... | - ip_step - IP address step. Type: string
@@ -52,23 +52,23 @@
| | ... | Type: string
| | ... | - tg_mac_mask - MAC address mask for traffic streams.
| | ... | 00:00:00:00:00:00 is a wildcard mask. Type: string
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE}
-| | ...
+| |
| | ${src_ip_int} = | IP To Int | ${src_ip_start}
| | ${src_ip_int} = | Evaluate | ${src_ip_int} - ${ip_step}
-| | ...
+| |
| | ${ip_limit} = | Set Variable | 255.255.255.255
| | ${ip_limit_int} = | IP To Int | ${ip_limit}
-| | ...
+| |
| | ${src_mac_int} = | Mac To Int | ${src_mac_start}
| | ${src_mac_int} = | Evaluate | ${src_mac_int} - ${src_mac_step}
-| | ...
+| |
| | ${mac_limit} = | Set Variable | ff:ff:ff:ff:ff:ff
| | ${mac_limit_int} = | Mac To Int | ${mac_limit}
-| | ...
+| |
| | ${acl}= | Set Variable | ipv4 permit
-| | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
+| | FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
| | | ${src_ip_int} = | Evaluate | ${src_ip_int} + ${ip_step}
| | | ${src_mac_int} = | Evaluate | ${src_mac_int} + ${src_mac_step}
| | | ${ipv4_limit_reached}= | Set Variable If
@@ -90,6 +90,7 @@
| | | ${acl}= | Catenate | ${acl} | ip ${src_ip}/32
| | | ... | mac ${src_mac} | mask ${src_mac_mask},
| | | Exit For Loop If | '${ipv4_limit_reached}' == '${TRUE}' or '${mac_limit_reached}' == '${TRUE}'
+| | END
| | ${acl0}= | Catenate | ${acl}
| | ... | ipv4 ${acl_action} ip ${tg_stream1_subnet} mac ${tg_stream1_mac}
| | ... | mask ${tg_mac_mask}
@@ -109,17 +110,17 @@
| | [Documentation]
| | ... | Configure ACL with required number of not-hitting permit ACEs plus two
| | ... | hitting ACEs for both traffic directions.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - dut_if1 - DUT node interface1 name (Optional). Type: string
| | ... | - dut_if2 - DUT node interface2 name (Optional). Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure IPv4 ACLs \| ${nodes['DUT1']} \| GigabitEthernet0/7/0 \
| | ... | \| GigabitEthernet0/8/0 \|
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - src_ip_start - Source IP address start. Type: string
| | ... | - dst_ip_start - Destination IP address start. Type: string
@@ -137,7 +138,7 @@
| | ... | Type: string
| | ... | - trex_stream2_subnet - IP subnet used by T-Rex in direction 1->0.
| | ... | Type: string
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE}
| | ${src_ip_int} = | Evaluate
| | ... | int(ipaddress.ip_address(unicode($src_ip_start))) - $ip_step
@@ -152,7 +153,7 @@
| | ${dport}= | Evaluate | $dport_start - $port_step
| | ${port_limit}= | Set Variable | ${65535}
| | ${acl}= | Set Variable | ipv4 permit
-| | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
+| | FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number}
| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step
| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step
| | | ${sport}= | Evaluate | $sport + $port_step
@@ -184,6 +185,7 @@
| | | ... | sport ${sport} | dport ${dport},
| | | Exit For Loop If
| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True
+| | END
| | ${acl}= | Catenate | ${acl}
| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet},
| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet}
@@ -203,28 +205,29 @@
| Configure ACLs on a single interface
| | [Documentation]
| | ... | Configure ACL
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - dut_if - DUT node interface name. Type: string
| | ... | - acl_apply_type - To what path apply the ACL - input or output.
| | ... | - acl_action - Action for the rule - deny, permit, permit+reflect.
| | ... | - subnets - Subnets to apply the specific ACL. Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure ACLs on a single interface \| ${nodes['DUT1']}
| | ... | \| ... \| GigabitEthernet0/7/0 \| input \| permit | 0.0.0.0/0
-| | ...
+| |
| | [Arguments] | ${dut} | ${dut_if} | ${acl_apply_type} | ${acl_action}
| | ... | @{subnets}
| | Set Test variable | ${acl} | ${EMPTY}
-| | :FOR | ${subnet} | IN | @{subnets}
+| | FOR | ${subnet} | IN | @{subnets}
| | | ${acl} = | Run Keyword If | '${acl}' == '${EMPTY}'
| | | ... | Set Variable | ipv4 ${acl_action} src ${subnet}
| | | ... | ELSE
| | | ... | Catenate | SEPARATOR=", " | ${acl}
| | | ... | ipv4 ${acl_action} src ${subnet}
+| | END
| | Add Replace Acl Multi Entries | ${dut} | rules=${acl}
| | @{acl_list} = | Create List | ${0}
| | Set Acl List For Interface | ${dut} | ${dut_if} | ${acl_apply_type}
@@ -239,17 +242,17 @@
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24
| | ... | and next hop of neighbour DUT interface IPv4 address.
| | ... | Apply required ACL rules to DUT1 interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ip_nr - Number of IPs to be used. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing fwith IPv4 ACLs on DUT1 \
| | ... | in 3-node circular topology \|
-| | ...
+| |
| | [Arguments] | ${ip_nr}=${1}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -258,21 +261,22 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
-| | :FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
+| |
+| | FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2
| | | VPP Add IP Neighbor
| | | ... | ${dut1} | ${dut1_if1} | 10.10.10.${number} | ${tg_if1_mac}
| | | VPP Add IP Neighbor
| | | ... | ${dut} | ${dut_if2} | 20.20.20.${number} | ${tg_if2_mac}
+| | END
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | 10.10.10.1 | 24
| | VPP Interface Set IP Address
@@ -283,12 +287,12 @@
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address
| | ... | ${dut2} | ${dut2_if1} | 1.1.1.2 | 30
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Configure IPv4 ACLs | ${dut1} | ${dut1_if1} | ${dut1_if2}
diff --git a/resources/libraries/robot/features/gbp.robot b/resources/libraries/robot/features/gbp.robot
index 8495475639..57ddf6dd1a 100644
--- a/resources/libraries/robot/features/gbp.robot
+++ b/resources/libraries/robot/features/gbp.robot
@@ -13,26 +13,26 @@
*** Settings ***
| Library | resources.libraries.python.GBP
-| ...
+|
| Documentation | GBP keywords.
*** Keywords ***
| Initialize GBP routing domains on node
| | [Documentation]
| | ... | Initialize GBP routing domains on node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of baseline interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize GBP routing domains on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | ${hexa_id}= | Convert To Hex | ${id} | length=2 | lowercase=yes
| | | ${dut_lo}= | VPP Create Loopback | ${nodes['${dut}']}
| | | ... | mac=ba:dc:00:ff:ee:${hexa_id}
@@ -80,20 +80,22 @@
| | | ... | ${nodes['${dut}']} | ${200} | ${300} | acl_index=${0}
| | | GBP Contract Add Del
| | | ... | ${nodes['${dut}']} | ${300} | ${200} | acl_index=${0}
+| | END
| Initialize GBP routing domains
| | [Documentation]
| | ... | Initialize GBP routing domains on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of GBP routing domains. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize GBP routing domains \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize GBP routing domains on node | ${dut} | count=${count}
+| | END
| | Set interfaces in path up
diff --git a/resources/libraries/robot/features/policer.robot b/resources/libraries/robot/features/policer.robot
index 962f4cf2be..bbabdd7632 100644
--- a/resources/libraries/robot/features/policer.robot
+++ b/resources/libraries/robot/features/policer.robot
@@ -14,7 +14,7 @@
*** Settings ***
| Library | resources.libraries.python.Classify
| Library | resources.libraries.python.Policer
-| ...
+|
| Documentation | Policer keywords
*** Keywords ***
@@ -23,7 +23,7 @@
| | ... | Setup of 2r3c color-aware or color-blind policer with dst IPv4 match
| | ... | on all DUT nodes in 2-node / 3-node circular topology. Policer is
| | ... | applied on links TG - DUTx.
-| | ...
+| |
| | ${policer_index}= | Policer Set Configuration | ${dut1} | policer1 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
| | ... | Mark_and_Transmit | Transmit | ${t} | exceed_dscp=${dscp}
@@ -35,7 +35,7 @@
| | ... | hit_next_index=${policer_index} | opaque_index=${pre_color}
| | Policer Classify Set Interface | ${dut1} | ${dut1_if1}
| | ... | ip4_table_index=${table_idx}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -44,7 +44,7 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Policer Set Configuration | ${dut} | policer2 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
@@ -65,7 +65,7 @@
| | ... | Setup of 2r3c color-aware or color-blind policer with dst IPv6 match
| | ... | on all DUT nodes in 2-node / 3-node circular topology. Policer is
| | ... | applied on links TG - DUTx.
-| | ...
+| |
| | ${policer_index}= | Policer Set Configuration | ${dut1} | policer1 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
| | ... | Mark_and_Transmit | Transmit | ${t} | exceed_dscp=${dscp}
@@ -77,7 +77,7 @@
| | ... | hit_next_index=${policer_index} | opaque_index=${pre_color}
| | Policer Classify Set Interface | ${dut1} | ${dut1_if1}
| | ... | ip6_table_index=${table_idx}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -86,7 +86,7 @@
| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
-| | ...
+| |
| | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Policer Set Configuration | ${dut} | policer2 | ${cir}
| | ... | ${eir} | ${cb} | ${eb} | pps | Closest | 2R3C_RFC_2698 | Transmit
@@ -105,16 +105,17 @@
| Show Classify Tables Verbose on all DUTs
| | [Documentation] | Show classify tables verbose on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show Classify Tables Verbose on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show Classify Tables Verbose | ${nodes['${dut}']}
+| | END
diff --git a/resources/libraries/robot/ip/ip4.robot b/resources/libraries/robot/ip/ip4.robot
index 84f422e8bc..961c0b3c43 100644
--- a/resources/libraries/robot/ip/ip4.robot
+++ b/resources/libraries/robot/ip/ip4.robot
@@ -14,7 +14,7 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.IPUtil
-| ...
+|
| Documentation | IPv4 keywords
*** Keywords ***
@@ -26,25 +26,25 @@
| | ... | links. In case of 3-node topology setup IPv4 adresses with /30 prefix
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /24
| | ... | and next hop of neighbour DUT interface IPv4 address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - remote_host1_ip - IP address of remote host1 (Optional).
| | ... | Type: string
| | ... | - remote_host2_ip - IP address of remote host2 (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding in circular topology \
| | ... | \| 192.168.0.1 \| 192.168.0.2 \|
-| | ...
+| |
| | [Arguments] | ${remote_host1_ip}=${NONE} | ${remote_host2_ip}=${NONE}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -59,7 +59,7 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 20.20.20.2 | ${tg_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 10.10.10.1 | 24
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -70,14 +70,14 @@
| | ... | 1.1.1.2 | 30
| | VPP Interface Set IP Address | ${dut} | ${dut_if2}
| | ... | 20.20.20.1 | 24
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 32
| | ... | gateway=10.10.10.2 | interface=${dut1_if1}
@@ -97,25 +97,25 @@
| | [Documentation]
| | ... | Custom setup of IPv4 topology with scalability of ip routes on all
| | ... | DUT nodes in 2-node / 3-node circular topology
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - IP route count. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding with scaling in 3-node circular \
| | ... | topology \| 100000 \|
-| | ...
+| |
| | [Arguments] | ${count}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -154,18 +154,19 @@
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate IPv4 VRF with one physical or
| | ... | virtual interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing with memif pairs \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize IPv4 routing with memif pairs on DUT node | ${dut} | ${count}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -175,28 +176,28 @@
| | ... | Create pairs of Memif interfaces on DUT node. Put each Memif interface
| | ... | to separate IPv4 VRF with one physical or virtual interface
| | ... | to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 routing with memif pairs on DUT node \
| | ... | \| ${dut} \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}
-| | ...
+| |
| | ${dut_index}= | Get Index From List | ${duts} | ${dut}
| | ${last_dut_index}= | Evaluate | ${duts_count} - ${1}
-| | ...
+| |
| | ${tg_if1_net}= | Set Variable | 10.10.10.0
| | ${tg_if2_net}= | Set Variable | 20.20.20.0
-| | ...
+| |
| | ${fib_table_1}= | Set Variable | ${10}
| | Run Keyword If | ${fib_table_1} > ${0}
| | ... | Add Fib Table | ${nodes['${dut}']} | ${fib_table_1}
@@ -220,7 +221,7 @@
| | ... | ${${prev_node}_${prev_if}}
| | VPP Add IP Neighbor
| | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${ip_net_if1}.1 | ${prev_if_mac}
-| | ...
+| |
| | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${count}
| | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2}
| | ${ip_base_if2}= | Evaluate | ${ip_base_if1} + ${1}
@@ -243,10 +244,10 @@
| | ... | ${${next_node}_${next_if}}
| | VPP Add IP Neighbor
| | ... | ${nodes['${dut}']} | ${${dut}_if2} | ${ip_net_if2}.2 | ${next_if_mac}
-| | ...
+| |
| | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1}
| | ${ip_base_start}= | Set Variable | ${31}
-| | :FOR | ${number} | IN RANGE | 1 | ${count+${1}}
+| | FOR | ${number} | IN RANGE | 1 | ${count+${1}}
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
| | | Set up memif interfaces on DUT node | ${nodes['${dut}']}
@@ -291,6 +292,7 @@
| | | ... | ${memif1} | ${ip_net_memif2}.1 | ${memif_if2_mac}
| | | VPP Add IP Neighbor | ${nodes['${dut}']}
| | | ... | ${memif2} | ${ip_net_memif1}.1 | ${memif_if1_mac}
+| | END
| Initialize IPv4 forwarding with vhost in 2-node circular topology
| | [Documentation]
@@ -302,24 +304,24 @@
| | ... | DUT-TG links. Set routing on DUT nodes in all FIB tables with prefix
| | ... | /8 and next hop of neighbour IPv4 address. Setup ARP on all VPP
| | ... | interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
| | ... | - testpmd_mac - Switch for testpmd_mac test configuration.
| | ... | Type: boolean
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-${VM_ID}-1
| | ... | - /var/run/vpp/sock-${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv4 forwarding with Vhost-User initialized in a 2-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1} | ${testpmd_mac}=${FALSE}
-| | ...
+| |
| | Set interfaces in path up
| | ${fib_table_1}= | Set Variable | ${101}
| | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes}
@@ -337,7 +339,7 @@
| | ... | interface=${dut1_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=200.0.0.2
| | ... | interface=${dut1_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -373,6 +375,7 @@
| | | Run Keyword If | ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=1.1.1.2
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv4 forwarding with vhost in 3-node circular topology
| | [Documentation]
@@ -384,22 +387,22 @@
| | ... | DUT-TG links and /30 prefix on DUT1-DUT2 link. Set routing on all DUT
| | ... | nodes in all FIB tables with prefix /8 and next hop of neighbour IPv4
| | ... | address. Setup ARP on all VPP interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-\${VM_ID}-1
| | ... | - /var/run/vpp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv4 forwarding with Vhost-User initialized in a 3-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1} | ${testpmd_mac}=${FALSE}
-| | ...
+| |
| | Set interfaces in path up
| | ${fib_table_1}= | Set Variable | ${101}
| | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes}
@@ -429,7 +432,7 @@
| | ... | interface=${dut2_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut2} | 20.0.0.0 | 8 | gateway=200.0.0.2
| | ... | interface=${dut2_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -498,6 +501,7 @@
| | | Run Keyword If | ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut2} | 10.0.0.0 | 8 | gateway=1.1.1.2
| | | ... | interface=${dut2-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces in circular topology
| | [Documentation]
@@ -510,7 +514,7 @@
| | ... | with /30 prefix on VLAN and set routing on both DUT nodes with prefix
| | ... | /30. Set next hop of neighbour DUT interface IPv4 address. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_if1_net - TG interface 1 IP subnet used by traffic generator.
| | ... | Type: integer
@@ -518,25 +522,25 @@
| | ... | Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces\
| | ... | in circular topology \| 10.10.10.0 \| 20.20.20.0 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -547,7 +551,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
diff --git a/resources/libraries/robot/ip/ip6.robot b/resources/libraries/robot/ip/ip6.robot
index c4ef0b7c1f..715a5dd353 100644
--- a/resources/libraries/robot/ip/ip6.robot
+++ b/resources/libraries/robot/ip/ip6.robot
@@ -16,7 +16,7 @@
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.IPv6Util
| Library | resources.libraries.python.NodePath
-| ...
+|
| Documentation | IPv6 keywords
*** Keywords ***
@@ -28,25 +28,25 @@
| | ... | links. In case of 3-node topology setup IPv6 adresses with /64 prefix
| | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64
| | ... | and next hop of neighbour DUT interface IPv4 address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - remote_host1_ip - IP address of remote host1 (Optional).
| | ... | Type: string
| | ... | - remote_host2_ip - IP address of remote host2 (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding in circular topology \
| | ... | \| 3ffe:5f::1 \| 3ffe:5f::2 \|
-| | ...
+| |
| | [Arguments] | ${remote_host1_ip}=${NONE} | ${remote_host2_ip}=${NONE}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -61,23 +61,23 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2001:2::2 | ${tg_if2_mac}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:1::1 | 64
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:3::1 | 64
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 2001:3::2 | 64
| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2001:2::1 | 64
-| | ...
+| |
| | Vpp All Ra Suppress Link Layer | ${nodes}
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:3::2
| | ... | interface=${dut1_if2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 2001:1::0 | 64 | gateway=2001:3::1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128
| | ... | gateway=2001:1::2 | interface=${dut1_if1}
@@ -97,25 +97,25 @@
| | [Documentation]
| | ... | Custom setup of IPv6 topology with scalability of ip routes on all
| | ... | DUT nodes in 2-node / 3-node circular topology
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - IP route count. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding with scaling in circular \
| | ... | topology \| 100000 \|
-| | ...
+| |
| | [Arguments] | ${count}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${prefix}= | Set Variable | 64
| | ${host_prefix}= | Set Variable | 128
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix}
@@ -162,22 +162,22 @@
| | ... | DUT-TG links. Set routing on DUT nodes in all FIB tables with \
| | ... | prefix /64 and next hop of neighbour IPv6 address. Setup neighbours \
| | ... | on all VPP interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - Number of guest VMs. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-${VM_ID}-1
| | ... | - /var/run/vpp/sock-${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| IPv6 forwarding with Vhost-User initialized in a 2-node circular\
| | ... | topology \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1}
-| | ...
+| |
| | Vpp All Ra Suppress Link Layer | ${nodes}
| | Set interfaces in path up
| | ${prefix}= | Set Variable | 64
@@ -199,7 +199,7 @@
| | ... | interface=${dut1_if1} | vrf=${fib_table_1}
| | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:200::2
| | ... | interface=${dut1_if2} | vrf=${fib_table_2}
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${fib_table_1}= | Evaluate | ${100}+${number}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
| | | Configure vhost interfaces | ${dut1}
@@ -221,6 +221,7 @@
| | | ... | interface=${dut1-vhost-${number}-if1} | vrf=${fib_table_1}
| | | Vpp Route Add | ${dut1} | 2001:1::0 | 64 | gateway=1:2::1
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
+| | END
| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces in circular topology
| | [Documentation]
@@ -233,7 +234,7 @@
| | ... | with /64 prefix on VLAN and set routing on both DUT nodes with prefix
| | ... | /64. Set next hop of neighbour DUT interface IPv6 address. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_if1_net - TG interface 1 IPv6 subnet used by traffic generator.
| | ... | Type: integer
@@ -241,25 +242,25 @@
| | ... | Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces\
| | ... | in circular topology \| 2001:1::0 \| 2001:2::0 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -270,7 +271,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | ${prefix}= | Set Variable | 64
| | ${host_prefix}= | Set Variable | 64
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg_if1_mac}
diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot
index bff8b27dbf..bb44fa1a18 100644
--- a/resources/libraries/robot/ip/nat.robot
+++ b/resources/libraries/robot/ip/nat.robot
@@ -13,32 +13,32 @@
*** Settings ***
| Library | resources.libraries.python.NATUtil
-| ...
+|
| Documentation | Keywords for NAT feature in VPP.
*** Keywords ***
| Configure inside and outside interfaces
| | [Documentation] | Configure inside and outside interfaces for NAT44.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to set NAT44 interfaces on. Type: dictionary
| | ... | - int_in - Inside interface. Type: string
| | ... | - int_out - Outside interface. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure inside and outside interfaces \| ${nodes['DUT1']} \
| | ... | \| FortyGigabitEtherneta/0/0 \| FortyGigabitEtherneta/0/1 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${int_in} | ${int_out}
-| | ...
+| |
| | ${int_in_name}= | Set variable | ${node['interfaces']['${int_in}']['name']}
| | ${int_out_name}= | Set variable | ${node['interfaces']['${int_out}']['name']}
| | Set NAT44 Interfaces | ${node} | ${int_in_name} | ${int_out_name}
| Configure deterministic mode for NAT44
| | [Documentation] | Set deterministic behaviour of NAT44.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to set deterministic mode for NAT44 on.
| | ... | Type: dictionary
@@ -46,29 +46,29 @@
| | ... | - subnet_in - Inside IP subnet. Type: string
| | ... | - ip_out - Outside IP. Type: string
| | ... | - subnet_out - Outside IP subnet. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure deterministic mode for NAT44 \| ${nodes['DUT1']} \
| | ... | \| 100.0.0.0 \| 12 \| 12.1.1.0 \| 24 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out}
-| | ...
+| |
| | Set NAT44 deterministic | ${node} | ${ip_in} | ${subnet_in} | ${ip_out}
| | ... | ${subnet_out}
| Show NAT verbose
| | [Documentation] | Get the NAT settings on the node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node to show NAT. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show NAT verbose \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${node}
-| | ...
+| |
| | Show NAT | ${node}
| Initialize NAT44 in circular topology
@@ -79,12 +79,12 @@
| | ... | - set ARP
| | ... | - create routes
| | ... | - set NAT44 - only on DUT1
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
@@ -99,7 +99,7 @@
| | ... | Set Variable | ${dut2_if2}
| | ... | ELSE | Set Variable | ${dut1_if2}
| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 12.0.0.1 | 20
-| | ...
+| |
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | VPP Add IP Neighbor
@@ -108,7 +108,7 @@
| | ... | VPP Add IP Neighbor
| | ... | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac}
| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2
| | ... | interface=${dut1_if1}
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -120,7 +120,7 @@
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | 200.0.0.0 | 30 | gateway=11.0.0.1
| | ... | interface=${dut2_if1}
-| | ...
+| |
| | Configure inside and outside interfaces
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if2}
| | Configure deterministic mode for NAT44
diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot
index 6c16ed447f..a85cb70ab9 100644
--- a/resources/libraries/robot/l2/l2_bridge_domain.robot
+++ b/resources/libraries/robot/l2/l2_bridge_domain.robot
@@ -21,28 +21,29 @@
*** Keywords ***
| Show Bridge Domain Data On All DUTs
| | [Documentation] | Show Bridge Domain data on all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | VPP Get Bridge Domain Data | ${nodes['${dut}']}
+| | END
| Create bridge domain
| | [Documentation]
| | ... | Create bridge domain on given VPP node with defined learning status.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${bd_id} - Bridge domain ID. Type: integer
| | ... | - ${learn} - Enable/disable MAC learn. Type: boolean, \
| | ... | default value: ${TRUE}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 2 \|
| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 5 \
| | ... | \| learn=${FALSE} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${bd_id} | ${learn}=${TRUE}
-| | ...
+| |
| | ${learn} = | Set Variable If | ${learn} == ${TRUE} | ${1} | ${0}
| | Create L2 BD | ${dut_node} | ${bd_id} | learn=${learn}
@@ -50,20 +51,20 @@
| | [Documentation]
| | ... | Set given interface admin state to up and add this
| | ... | interface to required L2 bridge domain on defined VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${dut_if} - DUT node interface name. Type: string
| | ... | - ${bd_id} - Bridge domain ID. Type: integer
| | ... | - ${shg} - Split-horizon group ID. Type: integer, default value: 0
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Add interface to bridge domain \| ${nodes['DUT2']} \
| | ... | \| GigabitEthernet0/8/0 \| 3 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${dut_if} | ${bd_id} | ${shg}=0
-| | ...
+| |
| | Set Interface State | ${dut_node} | ${dut_if} | up
| | Add Interface To L2 BD | ${dut_node} | ${dut_if} | ${bd_id} | ${shg}
@@ -72,41 +73,43 @@
| | ... | Setup L2 bridge domain topology by adding two interfaces on DUT into
| | ... | separate bridge domains that are created automatically starting with
| | ... | index 1. Learning is enabled. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of bridge domains interfaces. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| |
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Add Interface To L2 BD
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} | ${id}
| | | Add Interface To L2 BD
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} | ${id}
+| | END
| Initialize L2 bridge domain
| | [Documentation]
| | ... | Setup L2 bridge domain topology by adding two interfaces on each DUT
| | ... | into separate bridge domains that are created automatically starting
| | ... | with index 1. Learning is enabled. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of bridge domains. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 bridge domain on node | ${dut} | count=${count}
+| | END
| Initialize L2 bridge domains with Vhost-User on node
| | [Documentation]
@@ -114,24 +117,24 @@
| | ... | defined VPP node. Add each Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with physical inteface or Vhost-User
| | ... | interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /var/run/vpp/sock-\${VM_ID}-1
| | ... | - /var/run/vpp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User on node \| DUT1 \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_chain}=${1} | ${nf_nodes}=${1}
-| | ...
+| |
| | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain}
| | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain}
| | ${dut_str}= | Convert To Lowercase | ${dut}
@@ -141,7 +144,7 @@
| | Add interface to bridge domain
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2}
| | ... | ${bd_id2}
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes} + 1
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes} + 1
| | | ${qemu_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node}
| | | Configure vhost interfaces
| | | ... | ${nodes['${dut}']}
@@ -153,6 +156,7 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${qemu_id}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${qemu_id}-if2} | ${bd_id2}
+| | END
| Initialize L2 bridge domains with Vhost-User
| | [Documentation]
@@ -160,20 +164,21 @@
| | ... | on all defined VPP nodes. Add each Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with physical inteface or Vhost-User
| | ... | interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 bridge domains with Vhost-User on node
| | | ... | ${dut} | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 bridge domains for multiple chains with Vhost-User
| | [Documentation]
@@ -182,24 +187,25 @@
| | ... | Vhost-User interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Vhost-User interface of another VM.
| | ... | Put all interfaces in path up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - start - Id of first chain, allows to add chains during test.
| | ... | Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains for multiple chains with Vhost-User \
| | ... | \| 3 \| 1 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${start}=${1}
-| | ...
+| |
| | Set interfaces in path up
-| | :FOR | ${nf_chain} | IN RANGE | ${start} | ${nf_chains} + 1
+| | FOR | ${nf_chain} | IN RANGE | ${start} | ${nf_chains} + 1
| | | Initialize L2 bridge domains with Vhost-User
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 bridge domain with VXLANoIPv4 in 3-node circular topology
| | [Documentation]
@@ -208,7 +214,7 @@
| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
| | ... | between DUTs. VXLAN sub-interfaces has same IPv4 address as
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1
| | ... | 24
@@ -232,26 +238,26 @@
| | ... | domain on each DUT. All interfaces are brought up. IPv4 addresses
| | ... | with prefix /32 are configured on interfaces between DUTs. VXLAN
| | ... | sub-interfaces has same IPv4 address as interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - vxlan_count - VXLAN count. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domain with VLAN and VXLANoIPv4 in 3-node \
| | ... | \| circular topology \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${vxlan_count}=${1}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${bd_id_start}= | Set Variable | ${1}
| | ${vni_start} = | Set Variable | ${20}
-| | ...
+| |
| | ${ip_step} = | Set Variable | ${2}
| | ${dut1_ip_start}= | Set Variable | 172.16.0.1
| | ${dut2_ip_start}= | Set Variable | 172.16.0.2
-| | ...
+| |
| | Vpp create multiple VXLAN IPv4 tunnels | node=${dut1}
| | ... | node_vxlan_if=${dut1_if2} | node_vlan_if=${dut1_if1}
| | ... | op_node=${dut2} | op_node_if=${dut2_if1} | n_tunnels=${vxlan_count}
@@ -274,18 +280,18 @@
| | ... | interfaces on each DUT. All interfaces are brought up.
| | ... | IPv4 addresses with prefix /24 are configured on interfaces between
| | ... | DUTs. VXLAN sub-interfaces has same IPv4 address as interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 bridge domains with Vhost-User and VXLANoIPv4 initialized in a\
| | ... | 3-node circular topology \| 1 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1
| | ... | 24
| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2
@@ -317,38 +323,38 @@
| | ... | interfaces on the DUT. All interfaces are brought up.
| | ... | IPv4 addresses with prefix /24 are configured on interfaces between
| | ... | DUT and TG.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_address - Address of physical interface on DUT1. Type: string
| | ... | - dut1_address_subnet - Subnet of the address of physical interface on
-| | ... | DUT1. Type: string
+| | ... | DUT1. Type: string
| | ... | - dut2_address - Address of physical interface on DUT2. Type: string
| | ... | - dut2_address_subnet - Subnet of the address of physical interface on
-| | ... | DUT2. Type: string
+| | ... | DUT2. Type: string
| | ... | - dut1_gw - Address of the _gateway_ to which the traffic will be
-| | ... | forwarded on DUT1. Type: string
+| | ... | forwarded on DUT1. Type: string
| | ... | - dut2_gw - Address of the _gateway_ to which the traffic will be
-| | ... | forwarded on DUT2. Type: string
+| | ... | forwarded on DUT2. Type: string
| | ... | - dut1_vxlans - List of VXLAN params to be configured on DUT1.
-| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | Type: list of dicts, dict params vni, vtep
| | ... | - dut2_vxlans - List of VXLAN params to be configured on DUT2.
-| | ... | Type: list of dicts, dict params vni, vtep
-| | ... | - dut1_route_subnet - Subnet address to forward to _gateway_ on DUT1.
-| | ... | Type: string
-| | ... | - dut1_route_mask - Subnet address mask to forward to _gateway_
-| | ... | on DUT1. Type: string
-| | ... | - dut2_route_subnet - Subnet address to forward to _gateway_ on DUT2.
-| | ... | Type: string
-| | ... | - dut2_route_mask - Subnet address mask to forward to _gateway_
-| | ... | on DUT2. Type: string
-| | ...
+| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | - dut1_route_subnet - Subnet address to forward to _gateway_ on DUT1.
+| | ... | Type: string
+| | ... | - dut1_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT1. Type: string
+| | ... | - dut2_route_subnet - Subnet address to forward to _gateway_ on DUT2.
+| | ... | Type: string
+| | ... | - dut2_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT2. Type: string
+| |
| | ... | *Example:*
-| | ...
+| |
| | [Arguments] | ${dut1_address} | ${dut1_address_subnet} |
| | ... | ${dut2_address} | ${dut2_address_subnet} | ${dut1_gw} | ${dut2_gw} |
| | ... | ${dut1_vxlans} | ${dut2_vxlans} | ${dut1_route_subnet} |
| | ... | ${dut1_route_mask} | ${dut2_route_subnet} | ${dut2_route_mask}
-| | ...
+| |
| | Configure vhost interfaces | ${dut1}
| | ... | /var/run/vpp/sock-1-${dut1_bd_id1}
| | ... | /var/run/vpp/sock-1-${dut1_bd_id2}
@@ -359,14 +365,16 @@
| | ${dut1_bd_id1}= | Set Variable | 1
| | ${dut1_bd_id2}= | Set Variable | 2
| | ${dut2_bd_id1}= | Set Variable | 1
-| | :FOR | ${vxlan} | IN | @{dut1_vxlans}
+| | FOR | ${vxlan} | IN | @{dut1_vxlans}
| | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | ${vxlan.vni}
| | | ... | ${dut1_address} | ${vxlan.vtep}
| | | Add interface to bridge domain | ${dut1} | ${dut1s_vxlan} | ${dut1_bd_id1}
-| | :FOR | ${vxlan} | IN | @{dut2_vxlans}
+| | END
+| | FOR | ${vxlan} | IN | @{dut2_vxlans}
| | | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | ${vxlan.vni}
| | | ... | ${dut2_address} | ${vxlan.vtep}
| | | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${dut2_bd_id1}
+| | END
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${dut1_gw} | ${tg_if1_mac}
| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | ${dut2_gw} | ${tg_if2_mac}
| | Vpp Route Add | ${dut1} | ${dut1_route_subnet} | ${dut1_route_mask}
@@ -385,31 +393,31 @@
| | ... | topology create VLAN sub-interfaces between DUTs. In case of 2-node
| | ... | topology create VLAN sub-interface on dut1-if2 interface. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW uses following test case variables:
| | ... | - dut1 - DUT1 node.
| | ... | - dut2 - DUT2 node.
| | ... | - dut1_if2 - DUT1 interface towards DUT2.
| | ... | - dut2_if1 - DUT2 interface towards DUT1.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with VLAN dot1q sub-interfaces
| | ... | in a 3-node circular topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -420,7 +428,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1}
| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id1}
| | Run Keyword If | '${dut2_status}' == 'PASS'
@@ -437,25 +445,25 @@
| | ... | with physical inteface. In case of 3-node topology create VLAN
| | ... | sub-interfaces between DUTs. In case of 2-node topology create VLAN
| | ... | sub-interface on dut1-if2 interface. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 bridge domains with Vhost-User and VLAN initialized in circular\
| | ... | topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -466,7 +474,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | Configure vhost interfaces | ${dut1}
| | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2}
| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1}
@@ -496,7 +504,7 @@
| | ... | interface towards TG and other Vhost-User interface into L2 bridge
| | ... | domains with learning enabled with VLAN sub-interface. All interfaces
| | ... | are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
@@ -504,16 +512,16 @@
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 bridge domains with Vhost-User and VLAN with VPP\
| | ... | link bonding in a 3-node circular topology \| 1 \| 2 \
| | ... | \| 10 \| pop-1 \| xor \| l34 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
| | ... | ${bond_mode} | ${lb_mode}
-| | ...
+| |
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode}
| | ... | ${lb_mode}
@@ -570,26 +578,26 @@
| | ... | Create pairs of Memif interfaces on DUT node. Put each Memif interface
| | ... | to separate L2 bridge domain with one physical or memif interface
| | ... | to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${nf_id}-\${sid}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs on DUT node \
| | ... | \| ${dut} \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_chain}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True}
-| | ...
+| |
| | ${rxq}= | Run Keyword If | ${auto_scale} == ${True}
| | ... | Set Variable | ${rxq_count_int}
| | ... | ELSE | Set Variable | ${1}
@@ -602,7 +610,7 @@
| | Add interface to bridge domain
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2}
| | ... | ${bd_id2}
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${nf_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node}
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
@@ -615,29 +623,31 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id}-if2} | ${bd_id2}
+| | END
| Initialize L2 Bridge Domain with memif pairs
| | [Documentation]
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate L2 bridge domain with one physical or
| | ... | virtual interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF chain. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 Bridge Domain with memif pairs on DUT node | ${dut}
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
| | | ... | auto_scale=${auto_scale}
+| | END
| Initialize L2 Bridge Domain for multiple chains with memif pairs
| | [Documentation]
@@ -645,23 +655,24 @@
| | ... | with defined number of NF nodes on all defined VPP nodes. Add each
| | ... | Memif interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Memif interface of another NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for multiple chains with memif pairs \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Initialize L2 Bridge Domain with memif pairs | nf_chain=${nf_chain}
| | | ... | nf_nodes=${nf_nodes} | auto_scale=${auto_scale}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -671,26 +682,26 @@
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
| | ... | Memif interface to separate L2 bridge domain with one physical or
| | ... | virtual interface to create a service pipeline on DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chain - NF pipe. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per pipeline. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for pipeline with memif pairs \
| | ... | \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chain}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
+| |
| | ${rxq}= | Run Keyword If | ${auto_scale} == ${True}
| | ... | Set Variable | ${rxq_count_int}
| | ... | ELSE | Set Variable | ${1}
| | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain}
| | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain}
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_1}
@@ -714,6 +725,7 @@
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id_frst}-if1} | ${bd_id1}
| | | Add interface to bridge domain
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${nf_id_last}-if2} | ${bd_id2}
+| | END
| Initialize L2 Bridge Domain for multiple pipelines with memif pairs
| | [Documentation]
@@ -721,24 +733,25 @@
| | ... | with defined number of NF nodes on all defined VPP nodes. Add each
| | ... | Memif interface into L2 bridge domains with learning enabled
| | ... | with physical inteface or Memif interface of another NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of pipelines of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per pipeline. Type: integer
| | ... | - auto_scale - Whether to use same amount of RXQs for memif interface
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for multiple pipelines with memif \
| | ... | pairs \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${auto_scale}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Initialize L2 Bridge Domain for pipeline with memif pairs
| | | ... | nf_chain=${nf_chain} | nf_nodes=${nf_nodes}
| | | ... | auto_scale=${auto_scale}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -751,25 +764,25 @@
| | ... | 3-node topology create VLAN sub-interfaces between DUTs. In case of
| | ... | 2-node topology create VLAN sub-interface on dut1-if2 interface. All
| | ... | interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bd_id1 - Bridge domain ID. Type: integer
| | ... | - bd_id2 - Bridge domain ID. Type: integer
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain with memif pairs and VLAN in circular\
| | ... | topology \| 1 \| 2 \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -780,7 +793,7 @@
| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite}
| | ... | ELSE | Configure L2 tag rewrite method on interfaces
| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite}
-| | ...
+| |
| | ${number}= | Set Variable | ${1}
| | ${sock1}= | Set Variable | memif-DUT1_CNF
| | ${sock2}= | Set Variable | memif-DUT1_CNF
@@ -816,7 +829,7 @@
| | ... | ${bd_id2}
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2}
-| | ...
+| |
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -824,24 +837,24 @@
| | [Documentation]
| | ... | Create single Memif interface on all defined VPP nodes. Put Memif
| | ... | interface to separate L2 bridge domain with one physical interface.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - number - Memif ID. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 Bridge Domain for single memif \| 1 \|
-| | ...
+| |
| | [Arguments] | ${number}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${sock}= | Set Variable | memif-${dut}_CNF
| | | ${sid}= | Evaluate | (${number} * ${2}) - ${1}
| | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock}
@@ -851,6 +864,7 @@
| | | ... | ${number}
| | | Add interface to bridge domain | ${nodes['${dut}']}
| | | ... | ${${dut}-memif-${number}-if1} | ${number}
+| | END
| | Set single interfaces in path up
| | Show Memif on all DUTs | ${nodes}
@@ -860,7 +874,7 @@
| | ... | domain that is created automatically with index 1. Learning is
| | ... | enabled. Interfaces are brought up. Apply required MACIP ACL rules to
| | ... | DUT1 interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2}
| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2}
@@ -872,7 +886,7 @@
| | ... | domain that is created automatically with index 1. Learning is
| | ... | enabled. Interfaces are brought up. Apply required ACL rules to DUT1
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2}
| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2}
diff --git a/resources/libraries/robot/l2/l2_patch.robot b/resources/libraries/robot/l2/l2_patch.robot
index 196d9e5d7e..836e281758 100644
--- a/resources/libraries/robot/l2/l2_patch.robot
+++ b/resources/libraries/robot/l2/l2_patch.robot
@@ -20,7 +20,7 @@
| | [Documentation]
| | ... | Setup L2 patch topology by cross connecting two interfaces on
| | ... | each DUT. Interfaces are brought up.
-| | ...
+| |
| | Set interfaces in path up
| | :FOR | ${dut} | IN | @{duts}
| | | VPP Setup Bidirectional L2 patch
diff --git a/resources/libraries/robot/l2/l2_traffic.robot b/resources/libraries/robot/l2/l2_traffic.robot
index 93506d585e..eac0be446b 100644
--- a/resources/libraries/robot/l2/l2_traffic.robot
+++ b/resources/libraries/robot/l2/l2_traffic.robot
@@ -22,9 +22,9 @@
| | [Documentation] | Send IPv4/IPv6 packet from source interface to \
| | ... | destination interface. Packet can be set with Dot1q or
| | ... | Dot1ad tag(s) when required.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
@@ -37,15 +37,15 @@
| | ... | (Optional). Type: string
| | ... | - vlan1_rx - VLAN (outer) tag on RX side (Optional). Type: integer
| | ... | - vlan2_rx - VLAN inner tag on RX side (Optional). Type: integer
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | _NOTE:_ Default IP is IPv4
-| | ...
+| |
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
@@ -59,12 +59,12 @@
| | ... | \| Send IP packet and verify received packet \| ${nodes['TG']} \
| | ... | \| ${tg_to_dut1} \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \
| | ... | \| encaps_rx=Dot1q \| vlan1_rx=120 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tx_src_port} | ${rx_dst_port}
| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2
| | ... | ${encaps}=${EMPTY} | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY}
| | ... | ${encaps_rx}=${EMPTY} | ${vlan1_rx}=${EMPTY} | ${vlan2_rx}=${EMPTY}
-| | ...
+| |
| | ${tx_src_mac}= | Get Interface Mac | ${tg_node} | ${tx_src_port}
| | ${rx_dst_mac}= | Get Interface Mac | ${tg_node} | ${rx_dst_port}
| | Then Send packet and verify headers
@@ -75,66 +75,30 @@
| | ... | encaps_rx=${encaps_rx} | vlan_rx=${vlan1_rx}
| | ... | vlan_outer_rx=${vlan2_rx}
-| ICMP packet transmission should fail
-| | [Documentation] | Send ICMPv4/ICMPv6 echo request from source interface to
-| | ... | destination interface and expect failure with
-| | ... | ICMP echo Rx timeout error message.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - TG node. Type: dictionary
-| | ... | - src_int - Source interface. Type: string
-| | ... | - dst_int - Destination interface. Type: string
-| | ... | - src_ip - Source IP address (Optional). Type: string
-| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
-| | ... | *Return:*
-| | ...
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | _NOTE:_ Default IP is IPv4
-| | ...
-| | ... | \| ICMP packet transmission should fail\| ${nodes['TG']} \
-| | ... | \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_int} | ${dst_int} |
-| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${src_int}
-| | ${dst_mac}= | Get Interface Mac | ${tg_node} | ${dst_int}
-| | ${src_int_name}= | Get interface name | ${tg_node} | ${src_int}
-| | ${dst_int_name}= | Get interface name | ${tg_node} | ${dst_int}
-| | ${args}= | Traffic Script Gen Arg | ${dst_int_name} | ${src_int_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | Run Keyword And Expect Error | IP echo Rx timeout |
-| | ... | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args}
-
| Send IPv4 bidirectionally and verify received packets
| | [Documentation] | Send IPv4 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
| | ... | - src_ip - Source IP address (Optional). Type: string
| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send IPv4 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=192.168.100.1 |
| | ... | ${dst_ip}=192.168.100.2
-| | ...
+| |
| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
| | Send IP packet and verify received packet
@@ -143,27 +107,27 @@
| Send IPv6 bidirectionally and verify received packets
| | [Documentation] | Send IPv6 packets from both directions,
| | ... | from interface1 to interface2 and from interface2 to interface1.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | - tg_node - TG node. Type: dictionary
| | ... | - src_int - Source interface. Type: string
| | ... | - dst_int - Destination interface. Type: string
| | ... | - src_ip - Source IP address (Optional). Type: string
| | ... | - dst_ip - Destination IP address (Optional). Type: string
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send IPv6 bidirectionally and verify received packets \
| | ... | \| ${nodes['TG']} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${int1} | ${int2} | ${src_ip}=3ffe:63::1 |
| | ... | ${dst_ip}=3ffe:63::2
-| | ...
+| |
| | Send IP packet and verify received packet
| | ... | ${tg_node} | ${int1} | ${int2} | ${src_ip} | ${dst_ip}
| | Send IP packet and verify received packet
diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot
index 42fe837676..a0c1c24a5d 100644
--- a/resources/libraries/robot/l2/l2_xconnect.robot
+++ b/resources/libraries/robot/l2/l2_xconnect.robot
@@ -27,45 +27,47 @@
| | [Documentation]
| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces
| | ... | on each DUT. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of interfaces pairs to connect. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 cross connect on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| |
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | VPP Setup Bidirectional Cross Connect | ${nodes['${dut}']}
| | | ... | ${${dut_str}_${prev_layer}_${id}_1}
| | | ... | ${${dut_str}_${prev_layer}_${id}_2}
+| | END
| Initialize L2 cross connect
| | [Documentation]
| | ... | Setup L2 cross connect topology by connecting RX/TX of two interfaces
| | ... | on each DUT. Interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of interfaces pairs to connect. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 cross connect \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 cross connect on node | ${dut} | count=${count}
+| | END
| Initialize L2 xconnect in 2-node circular topology
| | [Documentation]
| | ... | Setup L2 xconnect topology by cross connecting two interfaces on
| | ... | each DUT. Interfaces are brought up.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Setup Bidirectional Cross Connect | ${dut1} | ${dut1_if1} | ${dut1_if2}
@@ -85,7 +87,7 @@
| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
| | ... | between DUTs. VXLAN sub-interfaces has same IPv4 address as
| | ... | interfaces.
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 | 24
| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 | 24
@@ -103,23 +105,23 @@
| | ... | Create pairs of Vhost-User interfaces for defined number of VMs on
| | ... | defined VPP node. Add each Vhost-User interface into L2 cross-connect
| | ... | with with physical inteface or Vhost-User interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - nf_nodes - VM count. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for VM are defined in following format:
| | ... | - /tmp/sock-\${VM_ID}-1
| | ... | - /tmp/sock-\${VM_ID}-2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
+| |
+| | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1
| | | ${sock1}= | Set Variable | /var/run/vpp/sock-${number}-1
| | | ${sock2}= | Set Variable | /var/run/vpp/sock-${number}-2
| | | ${prev_index}= | Evaluate | ${number}-1
@@ -132,43 +134,45 @@
| | | ... | ${${dut}-vhost-${number}-if1}
| | | Run Keyword If | ${number}==${nf_nodes} | Configure L2XC
| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${number}-if2} | ${${dut}_if2}
+| | END
| Initialize L2 xconnect with Vhost-User
| | [Documentation]
| | ... | Create pairs of Vhost-User interfaces for defined number of VMs on
| | ... | all VPP nodes. Add each Vhost-User interface into L2 cross-connect
| | ... | with with physical inteface or Vhost-User interface of another VM.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_nodes - VM count. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User \| 1 \|
-| | ...
+| |
| | [Arguments] | ${nf_nodes}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 xconnect with Vhost-User on node | ${dut}
| | | ... | nf_nodes=${nf_nodes}
+| | END
| Initialize L2 xconnect with Vhost-User and VLAN in 3-node circular topology
| | [Documentation]
| | ... | Create two Vhost-User interfaces on all defined VPP nodes. Cross
| | ... | connect each Vhost interface with one physical interface.
| | ... | Setup VLAN between DUTs. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| L2 xconnect with Vhost-User and VLAN initialized in a 3-node\
| | ... | circular topology \| 10 \| pop-1 \|
-| | ...
+| |
| | [Arguments] | ${subid} | ${tag_rewrite}
-| | ...
+| |
| | Set interfaces in path up
| | Initialize VLAN dot1q sub-interfaces in circular topology
| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid}
@@ -192,20 +196,20 @@
| | ... | VLAN on BondEthernet interfaces between DUTs. Cross connect one Vhost
| | ... | interface with physical interface towards TG and other Vhost interface
| | ... | with VLAN sub-interface. All interfaces are brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subid - ID of the sub-interface to be created. Type: string
| | ... | - tag_rewrite - Method of tag rewrite. Type: string
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with Vhost-User and VLAN with VPP link\
| | ... | bonding in 3-node circular topology \| 10 \| pop-1 \| xor \| l34 \|
-| | ...
+| |
| | [Arguments] | ${subid} | ${tag_rewrite} | ${bond_mode} | ${lb_mode}
-| | ...
+| |
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode}
| | ... | ${lb_mode}
@@ -258,26 +262,26 @@
| | ... | Create pairs of Memif interfaces on DUT node. Cross connect each Memif
| | ... | interface with one physical interface or virtual interface to create
| | ... | a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: dictionary
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable \${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with memif pairs on DUT node \| ${dut} \
| | ... | \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}
-| | ...
-| | :FOR | ${number} | IN RANGE | 1 | ${count}+1
+| |
+| | FOR | ${number} | IN RANGE | 1 | ${count}+1
| | | ${sock1}= | Set Variable | memif-${dut}_CNF
| | | ${sock2}= | Set Variable | memif-${dut}_CNF
| | | ${prev_index}= | Evaluate | ${number}-1
@@ -290,24 +294,26 @@
| | | ... | ${${dut}-memif-${number}-if1}
| | | Run Keyword If | ${number}==${count} | Configure L2XC
| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${number}-if2} | ${${dut}_if2}
+| | END
| Initialize L2 xconnect with memif pairs
| | [Documentation]
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Cross
| | ... | connect each Memif interface with one physical interface or virtual
| | ... | interface to create a chain accross DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of memif pairs (containers). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect with memif pairs \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize L2 xconnect with memif pairs on DUT node | ${dut} | ${count}
+| | END
| | Set interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
@@ -316,24 +322,24 @@
| | [Documentation]
| | ... | Create single Memif interface on all defined VPP nodes. Cross
| | ... | connect Memif interface with one physical interface.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - number - Memif ID. Type: integer
-| | ...
+| |
| | ... | *Note:*
| | ... | Socket paths for Memif are defined in following format:
| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid}
-| | ...
+| |
| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize L2 xconnect for single memif \| 1 \|
-| | ...
+| |
| | [Arguments] | ${number}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${sock}= | Set Variable | memif-${dut}_CNF
| | | ${sid}= | Evaluate | (${number} * ${2}) - ${1}
| | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock}
@@ -341,6 +347,7 @@
| | | ... | rxq=${rxq_count_int} | txq=${rxq_count_int}
| | | Configure L2XC | ${nodes['${dut}']} | ${${dut}_if1}
| | | ... | ${${dut}-memif-${number}-if1}
+| | END
| | Set single interfaces in path up
| | Show Memif on all DUTs | ${nodes}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif
diff --git a/resources/libraries/robot/l2/tagging.robot b/resources/libraries/robot/l2/tagging.robot
index a48e10c427..273384c5cc 100644
--- a/resources/libraries/robot/l2/tagging.robot
+++ b/resources/libraries/robot/l2/tagging.robot
@@ -15,7 +15,7 @@
| Library | resources.libraries.python.L2Util
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NodePath
-| ...
+|
| Documentation | Keywords for VLAN tests
*** Keywords ***
@@ -23,7 +23,7 @@
| | [Arguments] | ${DUT1} | ${INT1} | ${DUT2} | ${INT2} | ${SUB_ID}
| | ... | ${OUTER_VLAN_ID} | ${INNER_VLAN_ID} | ${TYPE_SUBIF}
| | [Documentation] | Create two subinterfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to add sub-interface.
| | ... | - INT1 - Interface key on which create sub-interface.
@@ -33,13 +33,13 @@
| | ... | - OUTER_VLAN_ID - Outer VLAN ID.
| | ... | - INNER_VLAN_ID - Inner VLAN ID.
| | ... | - TYPE_SUBIF - Type of sub-interface.
-| | ...
+| |
| | ... | _Set testcase variables with name and index of created interfaces:_
| | ... | - subif_name_1
| | ... | - subif_index_1
| | ... | - subif_name_2
| | ... | - subif_index_2
-| | ...
+| |
| | Set Interface State | ${DUT1} | ${INT1} | up
| | Set Interface State | ${DUT2} | ${INT2} | up
| | ${INT1_name}= | Get interface name | ${DUT1} | ${INT1}
@@ -61,26 +61,26 @@
| | [Arguments] | ${DUT1} | ${INT1} | ${DUT2}=${None} | ${INT2}=${None}
| | ... | ${SUB_ID}=10
| | [Documentation] | Create two dot1q subinterfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to add sub-interface.
| | ... | - INT1 - Interface key on which create VLAN sub-interface.
| | ... | - DUT2 - Node to add sub-interface.
| | ... | - INT2 - Interface key on which create VLAN sub-interface.
| | ... | - SUB_ID - ID of the sub-interface to be created.
-| | ...
+| |
| | ... | _Set testcase variables with name and index of created interfaces:_
| | ... | - subif_name_1
| | ... | - subif_index_1
| | ... | - subif_name_2
| | ... | - subif_index_2
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize VLAN dot1q sub-interfaces in circular topology \
| | ... | \| ${nodes['DUT1']} \| ${dut1_if2} \| ${nodes['DUT2']} \
| | ... | \| ${dut1_if2} \| 10 \|
-| | ...
+| |
| | Set Interface State | ${DUT1} | ${INT1} | up
| | Run Keyword Unless | ${DUT2} == ${None}
| | ... | Set Interface State | ${DUT2} | ${INT2} | up
@@ -106,21 +106,21 @@
| | [Arguments] | ${DUT1} | ${SUB_INT1} | ${DUT2}=${None} | ${SUB_INT2}=${None}
| | ... | ${TAG_REWRITE_METHOD}=${None}
| | [Documentation] | Setup tag rewrite on sub-interfaces on DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - DUT1 - Node to rewrite tags.
| | ... | - SUB_INT1 - Interface on which rewrite tags.
| | ... | - DUT2 - Node to rewrite tags.
| | ... | - SUB_INT2 - Interface on which rewrite tags.
| | ... | - TAG_REWRITE_METHOD - Method of tag rewrite.
-| | ...
+| |
| | L2 Vlan tag rewrite | ${DUT1} | ${SUB_INT1} | ${TAG_REWRITE_METHOD}
| | Run Keyword Unless | ${DUT2} == ${None}
| | ... | L2 Vlan tag rewrite | ${DUT2} | ${SUB_INT2} | ${TAG_REWRITE_METHOD}
| Configure L2 tag rewrite method on interface
| | [Documentation] | Set L2 tag rewrite on (sub-)interface on DUT
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - Node to set L2 tag rewrite method. Type: dictionary
| | ... | - interface - (Sub-)interface name or SW index to set L2 tag rewrite
@@ -130,22 +130,22 @@
| | ... | Dot1ad (Optional). Type: boolean
| | ... | - tag1_id - VLAN tag1 ID (Optional). Type: integer
| | ... | - tag2_id - VLAN tag2 ID (Optional). Type: integer
-| | ...
+| |
| | ... | *Return:*
-| | ...
+| |
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure L2 tag rewrite method on interface \| ${nodes['DUT1']} \
| | ... | \| 9 \| pop-1 \|
| | ... | \| Configure L2 tag rewrite method on interface \| ${nodes['DUT2']} \
| | ... | \| 10 \| translate-1-2 \| push_dot1q=${False} \| tag1_id=10 \
| | ... | \| tag1_id=20 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${interface} | ${tag_rewrite_method}
| | ... | ${push_dot1q}=${True} | ${tag1_id}=${None} | ${tag2_id}=${None}
-| | ...
+| |
| | ${result}= | Evaluate | isinstance($interface, int)
| | ${interface_name}= | Run Keyword If | ${result}
| | ... | Set Variable | ${interface}
diff --git a/resources/libraries/robot/lb/load_balancer.robot b/resources/libraries/robot/lb/load_balancer.robot
index 42cac6ae2e..a254acd0f8 100644
--- a/resources/libraries/robot/lb/load_balancer.robot
+++ b/resources/libraries/robot/lb/load_balancer.robot
@@ -20,9 +20,9 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.LoadBalancerUtil
| Library | resources.libraries.python.NodePath
-| ...
+|
| Resource | resources/libraries/robot/shared/interfaces.robot
-| ...
+|
| Documentation | LoadBalancer suite keywords - configuration
*** Keywords ***
@@ -32,23 +32,23 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${0}
| | ... | new_len=${1024}
@@ -60,23 +60,23 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${2} | dscp=${7}
| | ... | new_len=${1024}
@@ -88,25 +88,25 @@
| | ... | circular topology. Get the interface MAC addresses and setup ARP on
| | ... | all VPP interfaces. Setup IPv4 addresses with /24 prefix on DUT-TG
| | ... | links.
-| | ...
+| |
| | Set interfaces in path up
-| | ...
+| |
| | ${fib_table}= | Set Variable | ${0}
| | Add Fib Table | ${dut1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table}
| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table}
-| | ...
+| |
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | 192.168.50.72 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2}
| | ... | 192.168.60.73 | 24
-| | ...
+| |
| | Add Ip Neighbors | ${dut1} | ${dut1_if1} | 192.168.50 | ${tg_if1_mac}
| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac}
-| | ...
+| |
| | Vpp Route Add | ${dut1} | 192.168.50.0 | 24 | interface=${dut1_if1}
| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2}
-| | ...
+| |
| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128}
| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${3}
| | ... | protocol=${17} | port=${20000} | target_port=${3307} | new_len=${1024}
@@ -116,26 +116,27 @@
| Add Ip Neighbors
| | [Documentation] | Add IP neighbors to physical interface on DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node. Type: dictionary
| | ... | - interface - Interface key. Type: string
| | ... | - ip_addr - IP address of the interface. Type: string
| | ... | - mac_addr - MAC address of the interface. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Add Ip Neighbors \| ${dut1} \| ${dut1_if1} \| 192.168.50 \
| | ... | \| ${tg_if1_mac}
-| | ...
+| |
| | [Arguments] | ${node} | ${interface} | ${ip_addr} | ${mac_addr}
-| | ...
-| | :FOR | ${number} | IN RANGE | 74 | 80
+| |
+| | FOR | ${number} | IN RANGE | 74 | 80
| | | VPP Add IP Neighbor
| | | ... | ${node} | ${interface} | ${ip_addr}.${number} | ${mac_addr}
+| | END
| Add Lb As Addresses
| | [Documentation] | Add Lb As Addresses on Vpp node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - VPP node. Type: dictionary
| | ... | - vip_addr - IPv4 address to be used as source for IPv4 traffic.
@@ -143,18 +144,19 @@
| | ... | - as_addr - The application server address. Type: string
| | ... | - protocol - tcp or udp. Type: integer
| | ... | - port - destination port. Type: integer
-| | ... | - is_del - 1 if the VIP should be removed otherwise 0. Type: integer
+| | ... | - is_del - 1 if the VIP should be removed otherwise 0. Type: integer
| | ... | - is_flush - 1 if the sessions related to this AS should be flushed
| | ... | otherwise 0. Type: integer
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Add Lb As Addresses \| ${dut1} \| 90.1.2.1 \| 192.168.60 \
| | ... | \| protocol=${17} \| port=${20000} \|
-| | ...
+| |
| | [Arguments] | ${node} | ${vip_addr} | ${as_addr} | ${protocol}=${255}
| | ... | ${port}=${0} | ${is_del}=${0} | ${is_flush}=${0}
-| | ...
-| | :FOR | ${number} | IN RANGE | 74 | 80
+| |
+| | FOR | ${number} | IN RANGE | 74 | 80
| | | VPP Lb Add Del As
| | | ... | ${node} | vip_addr=${vip_addr} | protocol=${protocol}
| | | ... | port=${port} | as_addr=${as_addr}.${number}
+| | END
diff --git a/resources/libraries/robot/overlay/lisp.robot b/resources/libraries/robot/overlay/lisp.robot
index 826cc3a7b1..f9da0be399 100644
--- a/resources/libraries/robot/overlay/lisp.robot
+++ b/resources/libraries/robot/overlay/lisp.robot
@@ -23,10 +23,10 @@
*** Keywords ***
| Configure topology for IPv4 LISP testing
| | [Documentation] | Setup topology for IPv4 LISP testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 LISP testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
@@ -41,10 +41,10 @@
| Configure topology for IPv6 LISP testing
| | [Documentation] | Setup topology fo IPv6 LISP testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 LISP testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -59,7 +59,7 @@
| Configure LISP in 2-node circular topology
| | [Documentation] | Configure LISP topology in 2-node circular topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1 - DUT1 node. Type: dictionary
| | ... | - dut1_if - DUT1 node interface. Type: string
@@ -70,27 +70,27 @@
| | ... | - is_gpe - To enable GPE. Other than zero to enable Type: integer
| | ... | - vni_table - vni table Eid Table Mapping Type: integer
| | ... | - vrf_table - vrf table Eid Table Mapping Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP in 2-node circular topology \
| | ... | \| ${dut1} \| ${interface_name} \
| | ... | \| None \| ${locator_set} \| ${dut1_eid} \
| | ... | \| ${dut1_static_adjacency} \|
-| | ...
+| |
| | [Arguments]
| | ... | ${dut1} | ${dut1_if} | ${dut1_int_index}
| | ... | ${locator_set} | ${dut1_eid}
| | ... | ${dut1_static_adjacency}
| | ... | ${is_gpe}=0
| | ... | ${vni_table}=0 | ${vrf_table}=0
-| | ...
-# DUT1 settings:
+| |
+| | # DUT1 settings:
| | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
-| | ... | Get Interface Sw Index | ${dut1} | ${dut1_if}
-| | ... | ELSE | Set Variable | ${dut1_int_index}
+| | ... | Get Interface Sw Index | ${dut1} | ${dut1_if}
+| | ... | ELSE | Set Variable | ${dut1_int_index}
| | Enable Lisp | ${dut1}
| | Run keyword if | ${is_gpe} != 0
| | ... | Enable Lisp GPE | ${dut1}
@@ -118,10 +118,10 @@
| Configure topology for IPv6 LISPoIP4 testing
| | [Documentation] | Setup topology fo IPv6 LISPoIPV4 testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv6 LISPoIP4 testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen}
@@ -136,10 +136,10 @@
| Configure topology for IPv4 LISPoIP6 testing
| | [Documentation] | Setup topology fo IPv4 LISPoIPV6 testing.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure topology for IPv4 LISPoIP6 testing \|
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen}
diff --git a/resources/libraries/robot/overlay/lisp_api.robot b/resources/libraries/robot/overlay/lisp_api.robot
index b858ef48a7..21f17d51f1 100644
--- a/resources/libraries/robot/overlay/lisp_api.robot
+++ b/resources/libraries/robot/overlay/lisp_api.robot
@@ -24,24 +24,24 @@
| Generate LISP locator_set data
| | [Documentation] | Generate lisp locator_set data for test
| | ... | the lisp locator_set and locator API.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - locator_set_number - Number how many locator_set data
| | ... | will be generated. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - locator_set_values - New generated locator_set data.
| | ... | - locator_set_values_vat - New generated locator_set data expected\
| | ... | from VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Given Generate LISP locator_set data \| ${nodes['DUT1']} \
| | ... | \| ${locator_set_number} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${locator_set_number}
| | ${locator_set_values} | ${locator_set_values_vat}=
| | ... | Generate Unique Lisp Locator Set Data
@@ -51,40 +51,40 @@
| Configure LISP locator_set data
| | [Documentation] | Set the lisp locator_set and locator on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values - Generated locator_set data from
| | ... | KW locator_set data is prepared, which will be set on the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP locator_set data \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Set Lisp Locator Set | ${dut_node} | ${locator_set_values}
| LISP locator_set shpuld be configured correctly
| | [Documentation] | Test if the locator_set is set correctly on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values_vat - Generated locator_set data from
| | ... | KW locator_set data is prepared, which are expected from VPP via VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP locator_set should be configured correctly \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | local
| | Lisp Locator S Should Be Equal
@@ -92,36 +92,36 @@
| Delete all LISP locator_set from VPP
| | [Documentation] | Delete all lisp locator_set on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - locator_set_values - Generated locator_set data from
| | ... | KW locator_set data is prepared, which was set on the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP locator_set from VPP \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Unset Lisp Locator Set | ${dut_node} | ${locator_set_values}
| LISP locator_set should be unset
| | [Documentation] | Test if all locator_set are unset from VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP locator_set should be unset \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_locator_set}= | Vpp Show Lisp Locator Set | ${dut_node} | ${EMPTY}
| | Lisp Is Empty | ${show_locator_set}
@@ -129,24 +129,24 @@
| Lisp locator_set data use for test reset locator_set are prepared
| | [Documentation] | Generate lisp special type of locator_set data.
| | ... | This data will be use for test reset locator_set.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - locator_set_number - Number how many locator_set data
| | ... | it will generate. Type: integer
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - locator_set_values - New generate locator_set data.
| | ... | - locator_set_values_vat - New generated locator_set data expected\
| | ... | from VAT.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Given Lisp locator_set data use for test reset locator_set \
| | ... | are prepared \| ${nodes['DUT1']} \| ${locator_set_number} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${locator_set_number}
| | ${locator_set_values} | ${locator_set_values_vat}=
| | ... | Generate Duplicate Lisp Locator Set Data
@@ -156,244 +156,244 @@
| Configure LISP eid address
| | [Documentation] | Set the lisp eid address on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Test eid data. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP eid address \| ${nodes['DUT1']} \
| | ... | \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | Vpp Set Lisp Eid Table | ${dut_node} | ${set_eid}
| LISP eid address should be set correctly to eid table
| | [Documentation] | Test if the locator_set is set correctly on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Example eid data, which was set to the VPP node.
| | ... | Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW requires following test case variables:
| | ... | - set_eid - Generated eid data, which will be set to the VPP node.
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP eid address should be set correctly to eid table \
| | ... | \| ${nodes['DUT1']} \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node}
| | Lisp Should Be Equal | ${set_eid} | ${show_eid}
| Delete all LISP eid address from VPP
| | [Documentation] | Delete all lisp eid address from the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_eid - Eid data which will be removed from the VPP node.
| | ... | Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP eid address from VPP \
| | ... | \| ${nodes['DUT1']} \| ${eid_table} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_eid}
| | Vpp Unset Lisp Eid Table | ${dut_node} | ${set_eid}
| LISP eid table should be empty
| | [Documentation] | Test if the eid table is empty.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP eid table should be empty \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_eid}= | Vpp Show Lisp Eid Table | ${dut_node}
| | Lisp Is Empty | ${show_eid}
| Configure LISP map resolver address
| | [Documentation] | Set the lisp map resolver address in the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_map_resolver - Map resolver data, which will be set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Configure LISP map resolver address \| ${nodes['DUT1']} \
| | ... | \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | Vpp Set Lisp Map Resolver | ${dut_node} | ${set_map_resolver}
| LISP map resolver address should be configured correctly
| | [Documentation] | Test if the map resolver address is set correctly
| | ... | on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - set_map_resolver - Map resolver data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP map resolver address should be configured correctly \
| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node}
| | Lisp Should Be Equal | ${set_map_resolver} | ${show_map_resolver}
| Delete all LISP map resolver address from VPP
| | [Documentation] | Delete all lisp map resolver address on the VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - map_resolver - Map resolver data, which will be remove from
| | ... | the VPP. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| When Delete all LISP map resolver address from VPP \
| | ... | \| ${nodes['DUT1']} \| ${map_resolver} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${set_map_resolver}
| | Vpp Unset Lisp Map Resolver | ${dut_node} | ${set_map_resolver}
| LISP map resolver address should be empty
| | [Documentation] | Test if the map resolver are empty.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Then LISP map resolver address should be empty \
| | ... | \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | ${show_map_resolver}= | Vpp Show Lisp Map Resolver | ${dut_node}
| | Lisp Is Empty | ${show_map_resolver}
| Enable LISP
| | [Documentation] | Enable LISP on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Enable LISP \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Enable Disable | ${dut_node} | enable
| LISP should be enabled
| | [Documentation] | Check if the lisp is enabled.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - lisp_status_data - Lisp status data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| LISP should be enabled \| ${nodes['DUT1']} \
| | ... | \| ${lisp_status_data} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${lisp_status_data}
| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node}
| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[1]}
| Disable LISP
| | [Documentation] | Disable LISP on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Disable LISP \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Enable Disable | ${dut_node} | disable
| LISP Should be disabled
| | [Documentation] | LISP Should be disabled.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - lisp_status_data - Lisp status data, which was set on
| | ... | the VPP node. Type: list
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| LISP Should be disabled \| ${nodes['DUT1']} \
| | ... | \| ${lisp_status_data} \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${lisp_status_data}
| | ${show_lisp_stat}= | Vpp Show Lisp State | ${dut_node}
| | Lisp Should Be Equal | ${show_lisp_stat} | ${lisp_status_data[0]}
| Enable Lisp Gpe
| | [Documentation] | Enable Lisp Gpe on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Enable Lisp Gpe \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Gpe Enable Disable | ${dut_node} | enable
| Disable Lisp Gpe
| | [Documentation] | Disable Lisp Gpe on VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Disable Lisp Gpe \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
| | Vpp Lisp Gpe Enable Disable | ${dut_node} | disable
diff --git a/resources/libraries/robot/overlay/lisp_static_adjacency.robot b/resources/libraries/robot/overlay/lisp_static_adjacency.robot
index 55dab37d10..a68bb7e747 100644
--- a/resources/libraries/robot/overlay/lisp_static_adjacency.robot
+++ b/resources/libraries/robot/overlay/lisp_static_adjacency.robot
@@ -18,15 +18,15 @@
| Library | resources.libraries.python.LispSetup.LispLocalEid
| Library | resources.libraries.python.LispSetup.LispLocatorSet
| Library | resources.libraries.python.LispSetup.LispRemoteMapping
-| ...
+|
| Resource | resources/libraries/robot/overlay/lisp_api.robot
-| ...
+|
| Documentation | Lisp static adjacency suite keywords
*** Keywords ***
| Configure LISP topology in 3-node circular topology
| | [Documentation] | Set up Lisp static adjacency topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut1_int_name - DUT1 node interface name. Type: string
@@ -39,17 +39,17 @@
| | ... | - dut2_eid - Dut2 node eid address. Type: dictionary
| | ... | - dut1_static_adjacency - Dut1 static adjacency. Type: dictionary
| | ... | - dut2_static_adjacency - Dut2 static address. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP topology in 3-node circular topology \
| | ... | \| ${dut1_node} \| ${interface_name} \| None \
| | ... | \| ${dut2_node} \| ${interface_name} \| None \
| | ... | \| ${locator_set} \| ${dut1_eid} \| ${dut2_eid} \
| | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
-| | ...
+| |
| | [Arguments] | ${dut1_node} | ${dut1_int_name} | ${dut1_int_index}
| | ... | ${dut2_node} | ${dut2_int_name} | ${dut2_int_index}
| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid}
@@ -99,7 +99,7 @@
| Change LISP Configuration
| | [Documentation] | Change configuration of the Lisp protocol.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut2_node - DUT2 node. Type: dictionary
@@ -118,16 +118,16 @@
| | ... | Type: dictionary
| | ... | - new_dut1_static_adjacency - New DUT1 static adjacency.
| | ... | Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Change LISP Configuration \| ${dut1_node} \| ${dut2_node} \
| | ... | \| ${dut1_to_dut2} \| ${dut2_to_dut1} | "08:00:27:20:e0:0d" \
| | ... | \| "08:00:27:b1:94:b1" \| "6.3.0.1" \| "6.3.0.20" \| "24" \
| | ... | \| ${old_dut1_static_adjacency} \| ${new_dut1_static_adjacency} \|
-| | ...
+| |
| | [Arguments] | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2}
| | ... | ${dut2_to_dut1} | ${dut1_to_dut2_mac} | ${dut2_to_dut1_mac}
| | ... | ${new_dut1_ip} | ${new_dut2_ip} | ${prefix}
diff --git a/resources/libraries/robot/overlay/lispgpe.robot b/resources/libraries/robot/overlay/lispgpe.robot
index 5c611a56a9..1fa84da721 100644
--- a/resources/libraries/robot/overlay/lispgpe.robot
+++ b/resources/libraries/robot/overlay/lispgpe.robot
@@ -25,7 +25,7 @@
*** Keywords ***
| Configure LISP GPE topology in 3-node circular topology
| | [Documentation] | Configure LISP GPE topology in 3-node circular topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_node - DUT1 node. Type: dictionary
| | ... | - dut1_if - DUT1 node interface. Type: string
@@ -38,23 +38,23 @@
| | ... | - dut2_eid - DUT2 node eid address. Type: dictionary
| | ... | - dut1_static_adjacency - DUT1 static adjacency. Type: dictionary
| | ... | - dut2_static_adjacency - DUT2 static adjacency. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Configure LISP GPE topology in 3-node circular topology \| ${dut1_node} \| ${interface_name} \
| | ... | \| None \| ${dut2_node} \| ${interface_name} \| None \
| | ... | \| ${locator_set} \| ${dut1_eid} \| ${dut2_eid} \
| | ... | \| ${dut1_static_adjacency} \| ${dut2_static_adjacency} \|
-| | ...
+| |
| | [Arguments]
| | ... | ${dut1_node} | ${dut1_if} | ${dut1_int_index}
| | ... | ${dut2_node} | ${dut2_if} | ${dut2_int_index}
| | ... | ${locator_set} | ${dut1_eid} | ${dut2_eid}
| | ... | ${dut1_static_adjacency} | ${dut2_static_adjacency}
| | ... | ${vni_table}=0 | ${vrf_table}=0
-| | ...
+| |
# DUT1 settings:
| | ${dut1_int_index}= | Run Keyword If | ${dut1_int_index} is None
| | | ... | Get Interface Sw Index | ${dut1_node} | ${dut1_if}
@@ -89,7 +89,7 @@
| | ... | ${dut1_static_adjacency['prefix']}
| | ... | ${dut1_static_adjacency['seid']}
| | ... | ${dut1_static_adjacency['prefix']}
-| | ...
+| |
# DUT2 settings:
| | ${dut2_int_index}= | Run Keyword If | ${dut2_int_index} is None
| | | ... | Get Interface Sw Index | ${dut2_node} | ${dut2_if}
diff --git a/resources/libraries/robot/overlay/srv6.robot b/resources/libraries/robot/overlay/srv6.robot
index dafc0fe566..8ac0343f9a 100644
--- a/resources/libraries/robot/overlay/srv6.robot
+++ b/resources/libraries/robot/overlay/srv6.robot
@@ -19,7 +19,7 @@
| Configure SR LocalSID on DUT
| | [Documentation] | Create SRv6 LocalSID and binds it to a particular\
| | ... | behavior on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create localSID on. Type: dictionary
| | ... | - local_sid - LocalSID IPv6 address. Type: string
@@ -42,9 +42,9 @@
| | ... | to SR-unaware appliance via static proxy). Type: string
| | ... | - sid_list - SID list (Optional, default value: []; required for SRv6
| | ... | endpoint to SR-unaware appliance via static proxy). Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT1']} \| B:: \| end \|
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT1']} \| C:: \
| | ... | \| end.dx2 \| interface=GigabitEthernet0/10/0 \|
@@ -58,12 +58,12 @@
| | ... | \| Configure SR LocalSID on DUT \| ${nodes['DUT2']} \| E:: \
| | ... | \| end.as \| next_hop=10.0.0.1 \| out_if=DUT2_VHOST1 \
| | ... | \| in_if=DUT2_VHOST2 \| src_addr=B:: \| sid_list=['C::', 'D::'] \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${local_sid} | ${behavior}
| | ... | ${interface}=${None} | ${next_hop}=${None} | ${fib_table}=${None}
| | ... | ${out_if}=${None} | ${in_if}=${None} | ${src_addr}=${None}
| | ... | @{sid_list}
-| | ...
+| |
| | Configure SR LocalSID | ${dut_node} | ${local_sid} | ${behavior}
| | ... | interface=${interface} | next_hop=${next_hop} | fib_table=${fib_table}
| | ... | out_if=${out_if} | in_if=${in_if} | src_addr=${src_addr}
@@ -71,55 +71,55 @@
| Show SR LocalSIDs on DUT
| | [Documentation] | Show SRv6 LocalSIDs on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR localSIDs on. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR LocalSIDs on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR LocalSIDs | ${dut_node}
| Configure SR Policy on DUT
| | [Documentation] | Create SRv6 policy on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create SRv6 policy on. Type: dictionary
| | ... | - bsid - BindingSID - local SID IPv6 address. Type: string
| | ... | - mode - Encapsulation / insertion mode. Type: string
| | ... | - sid_list - SID list. Type: list
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR Policy on DUT \| ${nodes['DUT2']} \| A:: \| encap \
| | ... | \| B::\| C:: \|
| | ... | \| Configure SR Policy on DUT \| ${nodes['DUT2']} \| D:: \| insert \
| | ... | \| E::\| F:: \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${bsid} | ${mode} | @{sid_list}
-| | ...
+| |
| | Configure SR Policy | ${dut_node} | ${bsid} | ${sid_list} | mode=${mode}
| Show SR Policies on DUT
| | [Documentation] | Show SRv6 policies on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR policies on. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Policies on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR Policies | ${dut_node}
| Configure SR Steer on DUT
| | [Documentation] | Create SRv6 steering policy on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to create SR steering policy on.
| | ... | Type: dictionary
@@ -131,99 +131,102 @@
| | ... | in case of L3 mode). Type: string
| | ... | - prefix - IP address prefix (Optional, default value: None; required
| | ... | for L3 mode). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure SR Steer on DUT \| ${nodes['DUT1']} \| L2 \| B:: \
| | ... | \| interface=GigabitEthernet0/10/0 \|
| | ... | \| Configure SR Steer on DUT \| ${nodes['DUT1']} \| L3 \| C:: \
| | ... | \| ip_address=2001::1 \| prefix=64 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${mode} | ${bsid}
| | ... | ${interface}=${None} | ${ip_addr}=${None} | ${prefix}=${None}
-| | ...
+| |
| | Configure SR Steer | ${dut_node} | ${mode} | ${bsid}
| | ... | interface=${interface} | ip_addr=${ip_addr} | prefix=${prefix}
| Show SR Steering Policies on DUT
| | [Documentation] | Show SRv6 steering policies on the given DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to show SR steering policies on.
| | ... | Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Steering Policies on DUT \| ${nodes['DUT1']} \|
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | Show SR Steering Policies | ${dut_node}
| Set SR Encaps Source Address on DUT
| | [Documentation] | Set SRv6 encapsulation source address on the given DUT
| | ... | node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node where to set SRv6 encapsulation source address
| | ... | on. Type: dictionary
| | ... | - ip6_addr - Local SID IPv6 address. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set SR Encaps Source Address on DUT \| ${nodes['DUT1']} \| B:: \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${ip6_addr}
-| | ...
+| |
| | Set SR Encaps Source Address | ${dut_node} | ip6_addr=${ip6_addr}
| Show SR Policies on all DUTs
| | [Documentation] | Show SRv6 policies on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Policies on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR Policies | ${nodes['${dut}']}
+| | END
| Show SR Steering Policies on all DUTs
| | [Documentation] | Show SRv6 steering policies on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR Steering Policies on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR Steering Policies | ${nodes['${dut}']}
+| | END
| Show SR LocalSIDs on all DUTs
| | [Documentation] | Show SRv6 LocalSIDs on all DUT nodes in topology.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nodes - Topology. Type: dictionary
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Show SR LocalSIDs on all DUTs \| ${nodes} \|
-| | ...
+| |
| | [Arguments] | ${nodes}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show SR LocalSIDs | ${nodes['${dut}']}
+| | END
| Initialize IPv6 forwarding over SRv6 with encapsulation with '${n}' x SID '${prepos}' decapsulation in 3-node circular topology
| | [Documentation]
@@ -232,7 +235,7 @@
| | ... | VPP interfaces. Setup IPv6 addresses on all interfaces. Set segment
| | ... | routing for IPv6 for required number of SIDs and configure IPv6 routes
| | ... | on both DUT nodes.
-| | ...
+| |
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
| | VPP Interface Set IP Address
@@ -242,12 +245,13 @@
| | VPP Interface Set IP Address
| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix}
| | Vpp All Ra Suppress Link Layer | ${nodes}
-| | :FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
+| | FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2
| | | ${hexa_nr}= | Convert To Hex | ${number}
| | | VPP Add IP Neighbor | ${dut1}
| | | ... | ${dut1_if1} | ${tg_if1_ip6_subnet}${hexa_nr} | ${tg_if1_mac}
| | | VPP Add IP Neighbor | ${dut2}
| | | ... | ${dut2_if2} | ${tg_if2_ip6_subnet}${hexa_nr} | ${tg_if2_mac}
+| | END
| | VPP Add IP Neighbor
| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac}
| | VPP Add IP Neighbor
@@ -314,11 +318,11 @@
| | ... | interfaces. Setup IPv6 addresses on all interfaces. Set segment
| | ... | routing for IPv6 with defined behaviour function and configure IPv6
| | ... | routes on both DUT nodes.
-| | ...
+| |
| | ... | *Note:*
| | ... | KW uses test variable rxq_count_int set by KW Add worker threads
| | ... | and rxqueues to all DUTs
-| | ...
+| |
| | ${sock1}= | Set Variable | memif-DUT1_CNF
| | ${sock2}= | Set Variable | memif-DUT2_CNF
| | Set up memif interfaces on DUT node | ${dut1} | ${sock1} | ${sock1}
@@ -331,8 +335,9 @@
| | ... | ${rxq_count_int}
| | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if1}
| | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if2}
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Show Memif | ${nodes['${dut}']}
+| | END
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix}
| | VPP Interface Set IP Address
diff --git a/resources/libraries/robot/overlay/vxlan.robot b/resources/libraries/robot/overlay/vxlan.robot
index f03abdc11a..f98514e2a2 100644
--- a/resources/libraries/robot/overlay/vxlan.robot
+++ b/resources/libraries/robot/overlay/vxlan.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
-| ...
+|
| Documentation | VXLAN keywords.
*** Keywords ***
| Get VXLAN dump
| | [Documentation] | Get VXLAN dump.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node data. Type: dictionary
| | ... | - interface - Interface on the VPP node (Optional). Type: string
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${interface}=${None}
-| | ...
+| |
| | [Return] | ${vxlan_dump}
-| | ...
+| |
| | ${vxlan_dump}= | VXLAN Dump | ${dut_node} | ${interface}
diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot
index 7c7c7bbceb..13acce1524 100644
--- a/resources/libraries/robot/performance/performance_configuration.robot
+++ b/resources/libraries/robot/performance/performance_configuration.robot
@@ -18,25 +18,25 @@
| Initialize LISP IPv4 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 addresses on all DUT nodes and TG \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - duts_prefix - ip prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP IPv4 forwarding in 3-node circular topology \
| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \
| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address}
| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac}
| | VPP Add IP Neighbor
@@ -55,20 +55,20 @@
| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology
| | [Documentation] | Setup Lisp GPE IPv4 forwarding over IPsec.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - encr_alg - Encryption algorithm. Type: string
| | ... | - auth_alg - Authentication algorithm. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology\
| | ... | \| ${encr_alg} \| ${auth_alg}
-| | ...
+| |
| | [Arguments] | ${encr_alg} | ${auth_alg}
-| | ...
+| |
| | Generate keys for IPSec | ${encr_alg} | ${auth_alg}
| | Initialize LISP IPv4 forwarding in 3-node circular topology
| | ... | ${dut1_to_dut2_ip4} | ${dut1_to_tg_ip4} | ${dut2_to_dut1_ip4}
@@ -90,25 +90,25 @@
| Initialize LISP IPv6 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string
| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string
| | ... | - duts_prefix - ip prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Initialize LISP IPv6 forwarding in 3-node circular topology \
| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \
| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address}
| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${prefix}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_address} | ${prefix}
@@ -129,7 +129,7 @@
| Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_ip6_address - IPv6 address from DUT1 to DUT2.
| | ... | Type: string
@@ -139,20 +139,20 @@
| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string
| | ... | - prefix4 - IPv4 prefix. Type: int
| | ... | - prefix6 - IPv6 prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Lisp IPv4 over IPv6 forwarding initialized in a 3-node circular \
| | ... | topology \| ${dut1_dut2_ip6_address} \| ${dut1_tg_ip4_address} \
| | ... | \| ${dut2_dut1_ip6_address} \| ${dut2_tg_ip4_address} \
| | ... | \| ${prefix4} \| ${prefix6} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_ip6_address} | ${dut1_tg_ip4_address}
| | ... | ${dut2_dut1_ip6_address} | ${dut2_tg_ip4_address}
| | ... | ${prefix4} | ${prefix6}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1}
| | ... | ${dut1_tg_ip4_address} | ${prefix4}
@@ -173,7 +173,7 @@
| Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
| | ... | Don`t set route.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut1_dut2_ip4_address - IPv4 address from DUT1 to DUT2.
| | ... | Type: string
@@ -183,20 +183,20 @@
| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string
| | ... | - prefix4 - IPv4 prefix. Type: int
| | ... | - prefix6 - IPv6 prefix. Type: int
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Lisp IPv6 over IPv4 forwarding initialized in a 3-node circular \
| | ... | topology \| ${dut1_dut2_ip4_address} \| ${dut1_tg_ip6_address} \
| | ... | \| ${dut2_dut1_ip4_address} \| ${dut2_tg_ip6_address} \
| | ... | \| ${prefix6} \| ${prefix4} \|
-| | ...
+| |
| | [Arguments] | ${dut1_dut2_ip4_address} | ${dut1_tg_ip6_address}
| | ... | ${dut2_dut1_ip4_address} | ${dut2_tg_ip6_address}
| | ... | ${prefix6} | ${prefix4}
-| | ...
+| |
| | Set interfaces in path up
| | VPP Interface Set IP Address
| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address} | ${prefix6}
diff --git a/resources/libraries/robot/performance/performance_limits.robot b/resources/libraries/robot/performance/performance_limits.robot
index a80ca2f8d5..82688ac9c6 100644
--- a/resources/libraries/robot/performance/performance_limits.robot
+++ b/resources/libraries/robot/performance/performance_limits.robot
@@ -21,19 +21,19 @@
| | [Documentation]
| | ... | Framesize can be either integer in case of a single packet
| | ... | in stream, or set of packets in case of IMIX type or simmilar.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize. Type: integer or string
-| | ...
+| |
| | ... | *Returns:*
| | ... | Average frame size. Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Get Average Frame Size \| IMIX_v4_1 \|
-| | ...
+| |
| | [Arguments] | ${frame_size}
-| | ...
+| |
| | Return From Keyword If | '${frame_size}' == 'IMIX_v4_1' | ${353.83333}
| | ${frame_size} = | Convert To Number | ${frame_size}
| | Return From Keyword | ${frame_size}
@@ -50,31 +50,31 @@
| | ... | whitelisted NIC names.
| | ... | The mapping is hardcoded in nic_limits.yaml
| | ... | TODO: Make the mapping from NIC names case insensistive.
-| | ...
+| |
| | ... | TODO: Make pps limit also definable per NIC.
-| | ...
+| |
| | ... | This keyword computes maximal unidirectional transmit rate
| | ... | and jumbo boolean (some suites need that for configuration decisions).
| | ... | To streamline suite autogeneration, both input and output values
| | ... | are communicated as test (or broader scope) variables,
| | ... | instead of explicit arguments and return values.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
-| | ... | - nic_name - Name of bottleneck NIC. Type: string
-| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
-| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
-| | ...
+| | ... | - nic_name - Name of bottleneck NIC. Type: string
+| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
+| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
+| |
| | ... | *Test variables set:*
-| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
-| | ... | Type: float
-| | ... | - jumbo - Jumbo boolean, true if jumbo packet support
-| | ... | has to be enabled. Type: boolean
-| | ...
+| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
+| | ... | Type: float
+| | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
+| | ... | enabled. Type: boolean
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set test Variable \| \${frame_size} \| IMIX_v4_1 \|
| | ... | \| Set Max Rate And Jumbo \|
-| | ...
+| |
| | # Negative overhead is possible, if DUT-DUT traffic is less encapsulated
| | # than TG-DUT traffic.
| | # TODO: Re-check overhead values in suites with both traffics encapsulated.
diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot
index f917a0c0cd..eac7fe0075 100644
--- a/resources/libraries/robot/performance/performance_utils.robot
+++ b/resources/libraries/robot/performance/performance_utils.robot
@@ -24,7 +24,7 @@
| Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl
| Library | resources.libraries.python.Trace
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Documentation
| ... | Performance suite keywords - utilities to find and verify NDR and PDR.
@@ -38,19 +38,19 @@
| | ... | Input rates are understood as uni-directional,
| | ... | reported result contains aggregate rates.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
-| | ...
+| |
| | ... | TODO: Should the trial duration of the additional
| | ... | measurements be configurable?
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - final_relative_width - Maximal width multiple of upper. Type: float
@@ -61,19 +61,19 @@
| | ... | - doublings - How many doublings to do when expanding [1]. Type: int
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Find NDR and PDR intervals using optimized search \| \${0.005} \
| | ... | \| \${0.005} \| \${30.0} \| \${1.0} \| \${2} \| \${600.0} \| \${2} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${0.005}
| | ... | ${final_relative_width}=${0.005} | ${final_trial_duration}=${30.0}
| | ... | ${initial_trial_duration}=${1.0}
| | ... | ${number_of_intermediate_phases}=${2} | ${timeout}=${720.0}
| | ... | ${doublings}=${2} | ${traffic_directions}=${2}
-| | ...
+| |
| | ${result} = | Perform optimized ndrpdr search | ${frame_size}
| | ... | ${traffic_profile} | ${10000} | ${max_rate}
| | ... | ${packet_loss_ratio} | ${final_relative_width}
@@ -91,17 +91,17 @@
| | [Documentation]
| | ... | Display the number of packets lost (bidirectionally)
| | ... | due to reconfiguration under traffic.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - result - Result of bidirectional measurtement.
-| | ... | Type: ReceiveRateMeasurement
-| | ...
+| | ... | Type: ReceiveRateMeasurement
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display Reconfig Test Message \| \${result} \|
-| | ...
+| |
| | [Arguments] | ${result}
-| | ...
+| |
| | Set Test Message | Packets lost due to reconfig: ${result.loss_count}
| | ${time_lost} = | Evaluate | ${result.loss_count} / ${result.target_tr}
| | Set Test Message | ${\n}Implied time lost: ${time_lost} | append=yes
@@ -112,19 +112,19 @@
| | ... | aggregate throughput using MLRsearch algorithm.
| | ... | Input rates are understood as uni-directional.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
-| | ...
+| |
| | ... | TODO: Should the trial duration of the additional
| | ... | measurements be configurable?
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - final_relative_width - Maximal width multiple of upper. Type: float
@@ -135,22 +135,22 @@
| | ... | - doublings - How many doublings to do when expanding [1]. Type: int
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Lower bound for bi-directional throughput at given PLR. Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| \${throughpt}= \| Find Throughput Using MLRsearch \| \${0} \
| | ... | \| \${0.001} \| \${10.0}\| \${1.0} \| \${1} \| \${720.0} \| \${2} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${0.0}
| | ... | ${final_relative_width}=${0.001} | ${final_trial_duration}=${10.0}
| | ... | ${initial_trial_duration}=${1.0}
| | ... | ${number_of_intermediate_phases}=${1} | ${timeout}=${720.0}
| | ... | ${doublings}=${2} | ${traffic_directions}=${2}
-| | ...
+| |
| | ${result} = | Perform optimized ndrpdr search | ${frame_size}
| | ... | ${traffic_profile} | ${10000} | ${max_rate}
| | ... | ${packet_loss_ratio} | ${final_relative_width}
@@ -169,28 +169,28 @@
| | ... | reported result contains aggregate rates.
| | ... | Currently, the min_rate value is hardcoded to match test teardowns.
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - packet_loss_ratio - Accepted loss during search. Type: float
| | ... | - timeout - Stop when search duration is longer [s]. Type: float
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Find critical load using PLR search \| \${1e-7} \| \${120} \
| | ... | \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${packet_loss_ratio}=${1e-7} | ${timeout}=${1800.0}
| | ... | ${traffic_directions}=${2}
-| | ...
+| |
| | ${min_rate} = | Set Variable | ${10000}
| | ${average} | ${stdev} = | Perform soak search | ${frame_size}
| | ... | ${traffic_profile} | ${min_rate} | ${max_rate}
@@ -211,20 +211,20 @@
| | ... | Bandwidth is calculated as:
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | The given result should contain latency data as well.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - text - Flavor text describing which bound is this. Type: string
| | ... | - rate_total - Total (not per stream) measured Tr [pps]. Type: float
| | ... | - frame_size - L2 Frame Size [B]. Type: integer
| | ... | - latency - Latency data to display if non-empty. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display single bound \| NDR lower bound \| \${12345.67} \
| | ... | \| \${64} \| show_latency=\${EMPTY} \|
-| | ...
+| |
| | [Arguments] | ${text} | ${rate_total} | ${frame_size} | ${latency}=${EMPTY}
-| | ...
+| |
| | ${bandwidth_total} = | Evaluate | ${rate_total} * (${frame_size}+20)*8 / 1e9
| | Set Test Message | ${\n}${text}: ${rate_total} pps, | append=yes
| | Set Test Message | ${bandwidth_total} Gbps (initial) | append=yes
@@ -242,18 +242,18 @@
| | ... | Bandwidth is calculated as:
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | The given result should contain latency data as well.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | *Arguments:*
| | ... | - result - Measured result data per stream [pps]. Type: NdrPdrResult
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display result of NDRPDR search \| \${result} \|
-| | ...
+| |
| | [Arguments] | ${result}
-| | ...
+| |
| | ${frame_size} = | Get Average Frame Size | ${frame_size}
| | Display single bound | NDR_LOWER
| | ... | ${result.ndr_interval.measured_low.transmit_rate} | ${frame_size}
@@ -277,22 +277,22 @@
| | ... | (Throughput * (L2 Frame Size + IPG) * 8)
| | ... | TODO: Do we want to report some latency data,
| | ... | even if not measured at the reported bounds?.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | *Arguments:*
| | ... | - avg - Estimated average critical load [pps]. Type: float
| | ... | - stdev - Standard deviation of critical load [pps]. Type: float
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Lower and upper bound of critical load [pps]. Type: 2-tuple of float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Display result of soak search \| \${100000} \| \${100} \|
-| | ...
+| |
| | [Arguments] | ${avg} | ${stdev}
-| | ...
+| |
| | ${frame_size} = | Get Average Frame Size | ${frame_size}
| | ${avg} = | Convert To Number | ${avg}
| | ${stdev} = | Convert To Number | ${stdev}
@@ -306,18 +306,18 @@
| | [Documentation]
| | ... | Extract loss ratio of lower bound of the interval.
| | ... | Fail if it does not reach the allowed value.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - interval - Measured interval. Type: ReceiveRateInterval
| | ... | - packet_loss_ratio - Accepted loss (0.0 for NDR). Type: float
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Check NDRPDR interval validity \| \${result.pdr_interval} \
| | ... | \| \${0.005} \|
-| | ...
+| |
| | [Arguments] | ${interval} | ${packet_loss_ratio}=${0.0}
-| | ...
+| |
| | ${lower_bound} = | Set Variable | ${interval.measured_low}
| | ${lower_bound_lf} = | Set Variable | ${lower_bound.loss_fraction}
| | Return From Keyword If | ${lower_bound_lf} <= ${packet_loss_ratio}
@@ -337,21 +337,21 @@
| | ... | additional data for debug purposes.
| | ... | Currently, just "Traffic should pass with no loss" is called.
| | ... | TODO: Move latency measurements from optimized search here.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - result - Measured result data per stream [pps]. Type: NdrPdrResult
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - traffic_profile - Topology profile. Type: string
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Perform additional measurements based on NDRPDR result \
| | ... | \| \${result} \| \${64} \| 3-node-IPv4 \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${result} | ${framesize} | ${traffic_profile}
| | ... | ${traffic_directions}=${2}
-| | ...
+| |
| | ${duration}= | Set Variable | ${2.0}
| | ${rate_sum}= | Set Variable | ${result.ndr_interval.measured_low.target_tr}
| | ${rate_per_stream}= | Evaluate | ${rate_sum} / float(${traffic_directions})
@@ -363,7 +363,7 @@
| | [Documentation]
| | ... | Send traffic at specified rate. No packet loss is accepted at loss
| | ... | evaluation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - duration - Duration of traffic run [s]. Type: integer
| | ... | - rate - Rate for sending packets. Type: string
@@ -374,15 +374,15 @@
| | ... | Type: boolean
| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic.
| | ... | Type: int
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Traffic should pass with no loss \| \${10} \| 4.0mpps \| \${64} \
| | ... | \| 3-node-IPv4 \| \${2} \|
-| | ...
+| |
| | [Arguments] | ${duration} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${fail_on_loss}=${True} | ${traffic_directions}=${2}
-| | ...
+| |
| | Send traffic at specified rate | ${duration} | ${rate} | ${frame_size}
| | ... | ${traffic_profile} | traffic_directions=${traffic_directions}
| | Run Keyword If | ${fail_on_loss} | No traffic loss occurred
@@ -390,16 +390,16 @@
| Traffic should pass with maximum rate
| | [Documentation]
| | ... | Send traffic at maximum rate.
-| | ...
+| |
| | ... | Some inputs are read from variables to streamline suites.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: int or str
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
| | ... | Type: float
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - subsamples - How many trials in this measurement. Type: int
| | ... | - trial_duration - Duration of single trial [s]. Type: float
@@ -408,16 +408,16 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Traffic should pass with maximum rate \| \${1} \| \${10.0} \
| | ... | \| \${False} \| \${2} \| \${0} \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${trial_duration}=${PERF_TRIAL_DURATION}
| | ... | ${fail_no_traffic}=${True} | ${subsamples}=${PERF_TRIAL_MULTIPLICITY}
| | ... | ${traffic_directions}=${2} | ${tx_port}=${0} | ${rx_port}=${1}
-| | ...
+| |
| | ${results} = | Send traffic at specified rate | ${trial_duration}
| | ... | ${max_rate}pps | ${frame_size} | ${traffic_profile} | ${subsamples}
| | ... | ${traffic_directions} | ${tx_port} | ${rx_port}
@@ -433,7 +433,7 @@
| | ... | Send traffic at specified rate.
| | ... | Return list of measured receive rates.
| | ... | The rate argument should be TRex friendly, so it should include "pps".
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - trial_duration - Duration of single trial [s]. Type: float
| | ... | - rate - Rate for sending packets. Type: string
@@ -446,16 +446,16 @@
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
| | ... | - pkt_trace - True to enable packet trace. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send traffic at specified rate \| \${1.0} \| 4.0mpps \| \${64} \
| | ... | \| 3-node-IPv4 \| \${10} \| \${2} \| \${0} | \${1} \| \${False}
-| | ...
+| |
| | [Arguments] | ${trial_duration} | ${rate} | ${frame_size}
| | ... | ${traffic_profile} | ${subsamples}=${1} | ${traffic_directions}=${2}
| | ... | ${tx_port}=${0} | ${rx_port}=${1} | ${pkt_trace}=${False}
-| | ...
+| |
| | Clear and show runtime counters with running traffic | ${trial_duration}
| | ... | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${traffic_directions} | ${tx_port} | ${rx_port}
@@ -466,7 +466,7 @@
| | Run Keyword If | ${dut_stats}==${True}
| | ... | VPP enable elog traces on all DUTs | ${nodes}
| | ${results} = | Create List
-| | :FOR | ${i} | IN RANGE | ${subsamples}
+| | FOR | ${i} | IN RANGE | ${subsamples}
| | | # The following line is skipping some default arguments,
| | | # that is why subsequent arguments have to be named.
| | | Send traffic on tg | ${trial_duration} | ${rate} | ${frame_size}
@@ -476,6 +476,7 @@
| | | ${rx} = | Get Received
| | | ${rr} = | Evaluate | ${rx} / ${trial_duration}
| | | Append To List | ${results} | ${rr}
+| | END
| | Run Keyword If | ${dut_stats}==${True} | Show event logger on all DUTs
| | ... | ${nodes}
| | Run Keyword If | ${dut_stats}==${True} | Show statistics on all DUTs
@@ -489,7 +490,7 @@
| | ... | Start traffic at specified rate then clear runtime counters on all
| | ... | DUTs. Wait for specified amount of time and capture runtime counters
| | ... | on all DUTs. Finally stop traffic
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - duration - Duration of traffic run [s]. Type: integer
| | ... | - rate - Unidirectional rate for sending packets. Type: string
@@ -500,15 +501,15 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Clear and show runtime counters with running traffic \| \${10} \
| | ... | \| 4.0mpps \| \${64} \| 3-node-IPv4 \| \${2} \| \${0} \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${duration} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | ${traffic_directions}=${2} | ${tx_port}=${0} | ${rx_port}=${1}
-| | ...
+| |
| | # Duration of -1 means we will stop traffic manually.
| | Send traffic on tg | ${-1} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | warmup_time=${0} | async_call=${True} | latency=${False}
@@ -524,13 +525,13 @@
| Start Traffic on Background
| | [Documentation]
| | ... | Start traffic at specified rate then return control to Robot.
-| | ...
+| |
| | ... | This keyword is useful if the test needs to do something
| | ... | while traffic is running.
| | ... | Just a wrapper around L1 keyword.
| | ... |
| | ... | TODO: How to make sure the traffic is stopped on any failure?
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
@@ -541,15 +542,15 @@
| | ... | Type: int
| | ... | - tx_port - TX port of TG, default 0. Type: integer
| | ... | - rx_port - RX port of TG, default 1. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start Traffic on Background \| 4.0mpps \| \${2} \| \${0} \
| | ... | \| \${1} \|
-| | ...
+| |
| | [Arguments] | ${rate} | ${traffic_directions}=${2} | ${tx_port}=${0}
| | ... | ${rx_port}=${1}
-| | ...
+| |
| | # Duration of -1 means we will stop traffic manually.
| | Send traffic on tg | ${-1} | ${rate} | ${frame_size} | ${traffic_profile}
| | ... | warmup_time=${0} | async_call=${True} | latency=${False}
@@ -560,17 +561,17 @@
| | [Documentation]
| | ... | Stop the running traffic, return measurement result.
| | ... | For bidirectional traffic, the reported values are bi-directional.
-| | ...
+| |
| | ... | Just a wrapper around L1 keyword.
| | ... |
| | ... | TODO: Tolerate if traffic was not started.
-| | ...
+| |
| | ... | *Returns:*
| | ... | - Measurement result. Type: ReceiveRateMeasurement
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \${result}= \| Stop Running Traffic \|
-| | ...
+| |
| | ${result}= | Stop traffic on tg
| | Return From Keyword | ${result}
diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot
index f440768df5..0b5cd3ee2b 100644
--- a/resources/libraries/robot/shared/container.robot
+++ b/resources/libraries/robot/shared/container.robot
@@ -13,7 +13,7 @@
*** Settings ***
| Documentation | Keywords related to linux containers
-| ...
+|
| Library | resources.libraries.python.CpuUtils
| Library | resources.libraries.python.topology.Topology
| Variables | resources/libraries/python/Constants.py
@@ -21,7 +21,7 @@
*** Keywords ***
| Construct container on all DUTs
| | [Documentation] | Construct 1 CNF of specific technology on all DUT nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
| | ... | value: ${1}
@@ -30,27 +30,28 @@
| | ... | - nf_chain: Chain ID (Optional). Type: integer, default value: ${1}
| | ... | - nf_node: Node ID (Optional). Type: integer, default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct container on all DUTs \| 1 \| 1 \| 1 \| 1 \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${nf_chain}=${1}
| | ... | ${nf_node}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | Construct container on DUT | ${dut}
| | | ... | ${nf_chains} | ${nf_nodes} | ${nf_chain}
| | | ... | ${nf_node} | ${auto_scale} | ${pinning}
+| | END
| Construct container on DUT
| | [Documentation] | Construct 1 CNF of specific technology on specific DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to construct the CNF on. Type: string
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
@@ -60,20 +61,20 @@
| | ... | - nf_chain: Chain ID (Optional). Type: integer, default value: ${1}
| | ... | - nf_node: Node ID (Optional). Type: integer, default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct container on DUT \| DUT1 \| 1 \| 1 \| 1 \| 1 \|
| | ... | \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${dut}
| | ... | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${nf_chain}=${1}
| | ... | ${nf_node}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | ${nf_dtcr_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${nf_dtcr}
| | ${nf_dtcr}= | Run Keyword If | '${nf_dtcr_status}' == 'PASS'
@@ -112,27 +113,27 @@
| Construct chain of containers
| | [Documentation] | Construct 1 chain of 1..N CNFs on selected/all DUT nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains. Type: integer
| | ... | - nf_nodes: Total number of nodes per chain. Type: integer
| | ... | - nf_chain: Chain ID. Type: integer
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct chain of containers \| 1 \| 1 \| 1 \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${nf_chain}=${1} | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
-| | :FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
+| |
+| | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1
| | | Run Keyword If | '${dut}' == '${None}'
| | | ... | Construct container on all DUTs
| | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | nf_chain=${nf_chain}
@@ -141,68 +142,70 @@
| | | ... | Construct container on DUT | ${dut}
| | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | nf_chain=${nf_chain}
| | | ... | nf_node=${nf_node} | auto_scale=${auto_scale} | pinning=${pinning}
+| | END
| Construct chains of containers
| | [Documentation] | Construct 1..N chains of 1..N CNFs on selected/all DUT
| | ... | nodes.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains (Optional). Type: integer, default
-| | ... | value: ${1}
+| | ... | value: ${1}
| | ... | - nf_nodes: Total number of nodes per chain (Optional). Type: integer,
-| | ... | default value: ${1}
+| | ... | default value: ${1}
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${True}
-| | ...
+| | ... | containers. Type: boolean, default value: ${True}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Construct chains of containers \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
-| | :FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
+| |
+| | FOR | ${nf_chain} | IN RANGE | 1 | ${nf_chains}+1
| | | Construct chain of containers
| | | ... | dut=${dut} | nf_chains=${nf_chains} | nf_nodes=${nf_nodes}
| | | ... | nf_chain=${nf_chain} | auto_scale=${auto_scale} | pinning=${pinning}
+| | END
| Acquire all '${group}' containers
| | [Documentation] | Acquire all container(s) in specific container group on
| | ... | all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Acquire all containers
| Create all '${group}' containers
| | [Documentation] | Create/deploy all container(s) in specific container group
| | ... | on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Create all containers
| Start VPP in all '${group}' containers
| | [Documentation] | Start VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Start VPP In All Containers
| Restart VPP in all '${group}' containers
| | [Documentation] | Restart VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Restart VPP In All Containers
| Configure VPP in all '${group}' containers
| | [Documentation] | Configure VPP on all container(s) in specific container
| | ... | group on all DUT nodes.
-| | ...
+| |
| | ... | *Test (or broader scope) variables read:*
-| | ... | - container_chain_topology - Topology type used for configuring CNF
-| | ... | (VPP) in container. Type: string
-| | ...
+| | ... | - container_chain_topology - Topology type used for configuring CNF
+| | ... | (VPP) in container. Type: string
+| |
| | ${dut1_if2} = | Get Variable Value | \${dut1_if2} | ${None}
| | ${dut2_if2} = | Get Variable Value | \${dut2_if2} | ${None}
| | Run Keyword If | '${container_chain_topology}' == 'chain_ip4'
@@ -227,37 +230,37 @@
| Stop all '${group}' containers
| | [Documentation] | Stop all container(s) in specific container group on all
| | ... | DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Stop all containers
| Destroy all '${group}' containers
| | [Documentation] | Destroy all container(s) in specific container group on
| | ... | all DUT nodes.
-| | ...
+| |
| | Run Keyword | ${group}.Destroy all containers
| Start containers for test
| | [Documentation]
| | ... | Start containers for test.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut: DUT node to start the containers on. Run on all nodes if None.
-| | ... | Type: string or None
+| | ... | Type: string or None
| | ... | - nf_chains: Total number of chains. Type: integer
| | ... | - nf_nodes: Total number of nodes per chain. Type: integer
| | ... | - auto_scale - If True, use same amount of Dataplane threads for
-| | ... | network function as DUT, otherwise use single physical core for
-| | ... | every network function. Type: boolean
+| | ... | network function as DUT, otherwise use single physical core for
+| | ... | every network function. Type: boolean
| | ... | - pinning: Set True if CPU pinning should be done on starting
-| | ... | containers. Type: boolean, default value: ${False}
-| | ...
+| | ... | containers. Type: boolean, default value: ${False}
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Start containers for test \| 1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut}=${None} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${auto_scale}=${True} | ${pinning}=${True}
-| | ...
+| |
| | Set Test Variable | @{container_groups} | @{EMPTY}
| | Set Test Variable | ${container_group} | CNF
| | Set Test Variable | ${nf_nodes}
diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot
index c0b61fcea9..26fcbb0c3f 100644
--- a/resources/libraries/robot/shared/default.robot
+++ b/resources/libraries/robot/shared/default.robot
@@ -15,11 +15,11 @@
| Variables | resources/libraries/python/topology.py
| Variables | resources/libraries/python/PapiHistory.py
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Library | Collections
| Library | OperatingSystem
| Library | String
-| ...
+|
| Library | resources.libraries.python.Classify
| Library | resources.libraries.python.CpuUtils
| Library | resources.libraries.python.CoreDumpUtil
@@ -40,7 +40,7 @@
| Library | resources.libraries.python.Trace
| Library | resources.libraries.python.VppCounters
| Library | resources.libraries.python.VPPUtil
-| ...
+|
| Resource | resources/libraries/robot/lb/load_balancer.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
| Resource | resources/libraries/robot/features/acl.robot
@@ -77,45 +77,46 @@
| | [Documentation] | Verify if Crypto QAT device virtual functions are
| | ... | initialized on all DUTs. If parameter force_init is set to True, then
| | ... | try to initialize/disable.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - crypto_type - Crypto device type - HW_DH895xcc or HW_C3xxx.
| | ... | Type: string, default value: HW_DH895xcc
| | ... | - numvfs - Number of VFs to initialize, 0 - disable the VFs
| | ... | Type: integer, default value: ${32}
| | ... | - force_init - Force to initialize. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
-| | ...
+| |
| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${False}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}
| | | ... | ${numvfs} | force_init=${force_init}
+| | END
| Configure kernel module on all DUTs
| | [Documentation] | Verify if specific kernel module is loaded on all DUTs.
| | ... | If parameter force_load is set to True, then try to load.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - module - Module to verify. Type: string
| | ... | - force_load - Try to load module. Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure kernel module on all DUTs \| ${True} \|
-| | ...
+| |
| | [Arguments] | ${module} | ${force_load}=${False}
-| | ...
+| |
| | Verify Kernel Module on All DUTs | ${nodes} | ${module}
| | ... | force_load=${force_load}
| Create base startup configuration of VPP on all DUTs
| | [Documentation] | Create base startup configuration of VPP to all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Import Library | resources.libraries.python.VppConfigGenerator
| | | ... | WITH NAME | ${dut}
| | | Run keyword | ${dut}.Set Node | ${nodes['${dut}']}
@@ -132,6 +133,7 @@
| | | Run keyword | ${dut}.Add IP6 Hash Buckets | 2000000
| | | Run keyword | ${dut}.Add IP6 Heap Size | 4G
| | | Run keyword | ${dut}.Add IP Heap Size | 4G
+| | END
| Add worker threads to all DUTs
| | [Documentation] | Setup worker threads in vpp startup configuration on all
@@ -142,25 +144,25 @@
| | ... | RXQ are computed automatically by dividing thread count with number 2
| | ... | (TODO: Add division by actual number of interfaces). User can manually
| | ... | override RX, RXD, TXD parameters if needed.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - phy_cores - Number of physical cores to use. Type: integer
| | ... | - rx_queues - Number of RX queues. Type: integer
| | ... | - rxd - Number of RX descriptors. Type: integer
| | ... | - txd - Number of TX descriptors. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Add worker threads to all DUTs \| ${1} \| ${1} \|
-| | ...
+| |
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${rxd}=${None}
| | ... | ${txd}=${None}
-| | ...
+| |
| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
| | ${thr_count_int} | Convert to Integer | ${phy_cores}
| | ${rxd_count_int}= | Set variable | ${rxd}
| | ${txd_count_int}= | Set variable | ${txd}
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | @{if_list}= | Run Keyword If | '${if1_status}' == 'PASS'
@@ -201,6 +203,7 @@
| | | Run keyword if | ${thr_count_int} > 1
| | | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD
| | | Set Tags | ${thr_count_int}T${cpu_count_int}C
+| | END
| | Set Test Variable | ${smt_used}
| | Set Test Variable | ${thr_count_int}
| | Set Test Variable | ${cpu_count_int}
@@ -211,8 +214,8 @@
| Add DPDK pci devices to all DUTs
| | [Documentation]
| | ... | Add PCI devices to VPP configuration file.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | ${if1_pci}= | Run Keyword If | '${if1_status}' == 'PASS'
@@ -250,18 +253,20 @@
| | | ... | Set Test Variable | ${${dut}_if2_1_pci} | ${if2_1_pci}
| | | Run Keyword Unless | '${if2_status}' == 'PASS'
| | | ... | Set Test Variable | ${${dut}_if2_2_pci} | ${if2_2_pci}
+| | END
| Add DPDK no PCI to all DUTs
| | [Documentation] | Add DPDK no-pci to VPP startup configuration to all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Add DPDK no PCI
+| | END
| Add VLAN strip offload switch off between DUTs in 3-node single link topology
| | [Documentation]
| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
| | ... | configuration file.
-| | ...
+| |
| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_pci}
| | ... | vlan-strip-offload | off
| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_pci}
@@ -271,7 +276,7 @@
| | [Documentation]
| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
| | ... | configuration file
-| | ...
+| |
| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_1_pci}
| | ... | vlan-strip-offload | off
| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_2_pci}
@@ -283,33 +288,36 @@
| Add NAT to all DUTs
| | [Documentation] | Add NAT configuration to all DUTs.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Add NAT
+| | END
| Write startup configuration on all VPP DUTs
| | [Documentation] | Write VPP startup configuration without restarting VPP.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Write Config
+| | END
| Apply startup configuration on all VPP DUTs
| | [Documentation] | Write VPP startup configuration and restart VPP on all
| | ... | DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - with_trace - Enable packet trace after VPP restart Type: boolean
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Apply startup configuration on all VPP DUTs \| False \|
-| | ...
+| |
| | [Arguments] | ${with_trace}=${False}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run keyword | ${dut}.Apply Config
| | | Add New Socket | ${nodes['${dut}']} | PAPI | ${dut} | ${SOCKSVR_PATH}
| | | Add New Socket | ${nodes['${dut}']} | STATS | ${dut} | ${SOCKSTAT_PATH}
+| | END
| | Save VPP PIDs
| | Enable Coredump Limit VPP on All DUTs | ${nodes}
| | Update All Interface Data On All Nodes | ${nodes} | skip_tg=${True}
@@ -319,20 +327,21 @@
| | [Documentation] | Get PIDs of VPP processes from all DUTs in topology and\
| | ... | set it as a test variable. The PIDs are stored as dictionary items\
| | ... | where the key is the host and the value is the PID.
-| | ...
+| |
| | ${setup_vpp_pids}= | Get VPP PIDs | ${nodes}
| | ${keys}= | Get Dictionary Keys | ${setup_vpp_pids}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${key} | IN | @{keys}
+| | FOR | ${key} | IN | @{keys}
| | | ${pid}= | Get From Dictionary | ${setup_vpp_pids} | ${key}
| | | Run Keyword If | $pid is None | FAIL | No VPP PID found on node ${key}
+| | END
| | Set Test Variable | ${setup_vpp_pids}
| Verify VPP PID in Teardown
| | [Documentation] | Check if the VPP PIDs on all DUTs are the same at the end\
| | ... | of test as they were at the begining. If they are not, only a message\
| | ... | is printed on console and to log. The test will not fail.
-| | ...
+| |
| | ${teardown_vpp_pids}= | Get VPP PIDs | ${nodes}
| | ${err_msg}= | Catenate | ${SUITE NAME} - ${TEST NAME}
| | ... | \nThe VPP PIDs are not equal!\nTest Setup VPP PIDs:
@@ -346,7 +355,7 @@
# TODO: Cleanup when VIRL is gone.
| Set up functional test
| | [Documentation] | Common test setup for functional tests.
-| | ...
+| |
| | Restart Vpp Service On All Duts | ${nodes}
| | Verify Vpp On All Duts | ${nodes}
| | VPP Enable Traces On All Duts | ${nodes}
@@ -355,14 +364,15 @@
| | Update All Interface Data On All Nodes | ${nodes}
| | Reset PAPI History On All DUTs | ${nodes}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Add New Socket | ${nodes['${dut}']} | PAPI | ${dut} | ${SOCKSVR_PATH}
| | | Add New Socket | ${nodes['${dut}']} | STATS | ${dut} | ${SOCKSTAT_PATH}
+| | END
# TODO: Cleanup when VIRL is gone.
| Tear down functional test
| | [Documentation] | Common test teardown for functional tests.
-| | ...
+| |
| | Remove All Added Ports On All DUTs From Topology | ${nodes}
| | Show Packet Trace on All DUTs | ${nodes}
| | Show PAPI History On All DUTs | ${nodes}
diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot
index 74f10c4ef6..3d2b70d065 100644
--- a/resources/libraries/robot/shared/interfaces.robot
+++ b/resources/libraries/robot/shared/interfaces.robot
@@ -13,18 +13,19 @@
*** Settings ***
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NodePath
+| Library | resources.libraries.python.VhostUser
*** Keywords ***
| Set interfaces in path up
| | [Documentation]
| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set
| | ... | maximal MTU.*
-| | ...
+| |
# TODO: Rework KW to set all interfaces in path UP and set MTU (including
# software interfaces. Run KW at the start phase of VPP setup to split
# from other "functional" configuration. This will allow modularity of this
# library
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -41,7 +42,8 @@
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_1} | up
| | | Run Keyword Unless | '${if2_status}' == 'PASS'
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_2} | up
-| | :FOR | ${dut} | IN | @{duts}
+| | END
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -58,18 +60,19 @@
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_1}
| | | Run Keyword Unless | '${if2_status}' == 'PASS'
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_2}
+| | END
| | All VPP Interfaces Ready Wait | ${nodes} | retries=${300}
| Set single interfaces in path up
| | [Documentation]
| | ... | *Set UP state on single VPP interfaces in path on all DUT nodes and set
| | ... | maximal MTU.*
-| | ...
+| |
# TODO: Rework KW to set all interfaces in path UP and set MTU (including
# software interfaces. Run KW at the start phase of VPP setup to split
# from other "functional" configuration. This will allow modularity of this
# library
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -78,7 +81,8 @@
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up
| | | Run Keyword Unless | '${if1_status}' == 'PASS'
| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up
-| | :FOR | ${dut} | IN | @{duts}
+| | END
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error
| | | ... | Variable Should Exist | ${${dut}_if1}
| | | Run Keyword If | '${if1_status}' == 'PASS'
@@ -87,79 +91,82 @@
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_1}
| | | Run Keyword Unless | '${if1_status}' == 'PASS'
| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2}
+| | END
| | All VPP Interfaces Ready Wait | ${nodes}
| Get Vhost dump
| | [Documentation] | Get vhost-user dump.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node data. Type: dictionary
-| | ...
+| |
| | [Arguments] | ${dut_node}
-| | ...
+| |
| | [Return] | ${vhost_dump}
-| | ...
+| |
| | ${vhost_dump}= | Vhost User Dump | ${dut_node}
| Initialize layer interface on node
| | [Documentation]
| | ... | Baseline interfaces variables to be created.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of baseline interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | Set Test Variable | ${${dut_str}_if_${id}_1} | ${${dut_str}_if1}
| | | Set Test Variable | ${${dut_str}_if_${id}_2} | ${${dut_str}_if2}
+| | END
| Initialize layer interface
| | [Documentation]
| | ... | Physical interfaces variables to be created on all DUTs.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of untagged interfaces variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer interface \| 1 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer interface on node | ${dut} | count=${count}
+| | END
| | Set Test Variable | ${prev_layer} | if
| Pre-initialize layer driver
| | [Documentation]
| | ... | Pre-initialize driver based interfaces on each DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core].
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Pre-initialize layer driver \| vfio-pci \|
-| | ...
+| |
| | [Arguments] | ${driver}
-| | ...
+| |
| | Run Keyword | Pre-initialize layer ${driver} on all DUTs
| Pre-initialize layer vfio-pci on all DUTs
| | [Documentation]
| | ... | Pre-initialize vfio-pci driver by adding related sections to startup
| | ... | config on all DUTs.
-| | ...
+| |
| | Add DPDK pci devices to all DUTs
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | ${dut}.Add DPDK No Tx Checksum Offload
| | | Run Keyword | ${dut}.Add DPDK Log Level | debug
| | | Run Keyword | ${dut}.Add DPDK Uio Driver | vfio-pci
@@ -172,67 +179,69 @@
| | | ... | ${dut}.Add DPDK Dev Default TXD | ${txd_count_int}
| | | Run Keyword If | '${crypto_type}' != '${None}'
| | | ... | ${dut}.Add DPDK Cryptodev | ${thr_count_int}
+| | END
| Pre-initialize layer avf on all DUTs
| | [Documentation]
| | ... | Pre-initialize avf driver. Currently no operation.
-| | ...
+| |
| | No operation
| Pre-initialize layer rdma-core on all DUTs
| | [Documentation]
| | ... | Pre-initialize rdma-core driver. Currently no operation.
-| | ...
+| |
| | No operation
| Initialize layer driver
| | [Documentation]
| | ... | Initialize driver based interfaces on each DUT. Interfaces are
| | ... | brought up.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core].
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer driver \| vfio-pci \|
-| | ...
+| |
| | [Arguments] | ${driver}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword | Initialize layer ${driver} on node | ${dut}
+| | END
| | Set Test Variable | ${prev_layer} | vf
| | Set interfaces in path up
| Initialize layer vfio-pci on node
| | [Documentation]
| | ... | Initialize vfio-pci interfaces on DUT. Currently no operation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer vfio-pci on node \| DUT1 \|
-| | ...
+| |
| | [Arguments] | ${dut}
-| | ...
+| |
| | No operation
| Initialize layer avf on node
| | [Documentation]
| | ... | Initialize AVF interfaces on DUT.
-| | ...
+| |
| | ... | *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}
@@ -258,16 +267,16 @@
| Initialize layer rdma-core on node
| | [Documentation]
| | ... | Initialize rdma-core (MLX) interfaces on DUT.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer rdma-core 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}
@@ -294,19 +303,19 @@
| | [Documentation]
| | ... | Bonded interface and variables to be created on across east and
| | ... | west DUT's node interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
| | ... | - count - Number of bond interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer bonding on node \| DUT1 \| xor \| l34 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | ${if_index}= | VPP Create Bond Interface
| | ... | ${nodes['${dut}']} | ${bond_mode} | load_balance=${lb_mode}
@@ -316,29 +325,31 @@
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1} | ${if_index}
| | VPP Enslave Physical Interface
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2} | ${if_index}
-| | :FOR | ${id} | IN RANGE | 1 | ${count} + 1
+| | FOR | ${id} | IN RANGE | 1 | ${count} + 1
| | | Set Test Variable | ${${dut_str}_bond_${id}_1} | ${if_index}
| | | Set Test Variable | ${${dut_str}_bond_${id}_2} | ${if_index}
+| | END
| Initialize layer bonding
| | [Documentation]
| | ... | Bonded interfaces and variables to be created on all DUT's interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - bond_mode - Link bonding mode. Type: string
| | ... | - lb_mode - Load balance mode. Type: string
| | ... | - count - Number of bond interface variables. Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer bonding \| xor \| l34 \| 1 \|
-| | ...
+| |
| | [Arguments] | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer bonding on node
| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode}
| | | ... | count=${count}
+| | END
| | Set Test Variable | ${prev_layer} | bond
| Initialize layer dot1q on node for chain
@@ -346,19 +357,19 @@
| | ... | Optionally create tag popping subinterface per chain.
| | ... | Return interface indices for dot1q layer interfaces,
| | ... | or Nones if subinterfaces are not created.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - id - Positive index of the chain. Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
-| | ...
+| | ... | Type: boolean
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer dot1q on node for chain \| DUT1 \| 1 \| True \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${id} | ${vlan_per_chain}=${True}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain}
| | ... | ${NONE} | ${NONE}
@@ -389,31 +400,31 @@
| | [Documentation]
| | ... | Dot1q interfaces and variables to be created on all DUT's node
| | ... | interfaces.
-| | ...
+| |
| | ... | TODO: Unify names for number of chains/pipelines/instances/interfaces.
| | ... | Chose names and descriptions that makes sense for both
| | ... | nf_density and older tests.
| | ... | Note that with vlan_per_chain=False it is not a number of interfaces.
| | ... | At least not number of real interfaces, just number of aliases.
| | ... | This TODO applies also to all keywords with nf_chains argument.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of chains. Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
+| | ... | Type: boolean
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer dot1q on node \| DUT1 \| 3 \| True \| 2 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True}
| | ... | ${start}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
-| | :FOR | ${id} | IN RANGE | ${start} | ${count} + 1
+| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
| | | ${if1_index} | ${if2_index}= | Initialize layer dot1q on node for chain
| | | ... | dut=${dut} | id=${id} | vlan_per_chain=${vlan_per_chain}
| | | # First id results in non-None indices, after that _1_ are defined.
@@ -423,25 +434,27 @@
| | | ... | ${${dut_str}_dot1q_1_2} | ${if2_index}
| | | Set Test Variable | ${${dut_str}_dot1q_${id}_1} | ${if1_index}
| | | Set Test Variable | ${${dut_str}_dot1q_${id}_2} | ${if2_index}
+| | END
| Initialize layer dot1q
| | [Documentation]
| | ... | Dot1q interfaces and variables to be created on all DUT's interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of chains. Type: integer
| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain.
-| | ... | Type: boolean
+| | ... | Type: boolean
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | \| Initialize layer dot1q \| 3 \| True \| 2 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer dot1q on node | ${dut} | count=${count}
| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start}
+| | END
| | Set Test Variable | ${prev_layer} | dot1q
| Initialize layer ip4vxlan on node
@@ -450,19 +463,19 @@
| | ... | physical and vxlan interfaces on each DUT. All interfaces are brought
| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces
| | ... | towards TG. VXLAN sub-interfaces has same IPv4 address as interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
| | ... | - count - Number of vxlan interfaces. Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Initialize layer ip4vxlan on node \| DUT1 \| 3 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${dut} | ${count}=${1} | ${start}=${1}
-| | ...
+| |
| | ${dut_str}= | Convert To Lowercase | ${dut}
| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1}
@@ -470,7 +483,7 @@
| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address
| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2}
| | ... | 172.26.0.1 | 24
-| | :FOR | ${id} | IN RANGE | ${start} | ${count} + 1
+| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1
| | | ${subnet}= | Evaluate | ${id} - 1
| | | ${vni}= | Evaluate | ${id} - 1
| | | ${ip4vxlan_1}= | Create VXLAN interface
@@ -503,29 +516,31 @@
| | | ... | ${${dut_str}_ip4vxlan_${id}_1} | ${ip4vxlan_1}
| | | Set Test Variable
| | | ... | ${${dut_str}_ip4vxlan_${id}_2} | ${ip4vxlan_2}
+| | END
| Initialize layer ip4vxlan
| | [Documentation]
| | ... | VXLAN interfaces and variables to be created on all DUT's interfaces.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - count - Number of vxlan interfaces. Type: integer
| | ... | - start - Id of first chain, allows adding chains during test.
-| | ... | Type: integer
-| | ...
+| | ... | Type: integer
+| |
| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \|
-| | ...
+| |
| | [Arguments] | ${count}=${1} | ${start}=${1}
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Initialize layer ip4vxlan on node | ${dut} | count=${count}
| | ... | start=${start}
+| | END
| | Set Test Variable | ${prev_layer} | ip4vxlan
| Configure vhost interfaces
| | [Documentation]
| | ... | Create two Vhost-User interfaces on defined VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${sock1} - Socket path for first Vhost-User interface. Type: string
@@ -534,22 +549,22 @@
| | ... | Type: string
| | ... | - ${vhost_if2} - Name of the second Vhost-User interface (Optional).
| | ... | Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${vhost_if1}} - First Vhost-User interface.
| | ... | - ${${vhost_if2}} - Second Vhost-User interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure vhost interfaces \
| | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \|
| | ... | \| Configure vhost interfaces \
| | ... | \| ${nodes['DUT2']} \| /tmp/sock1 \| /tmp/sock2 \| dut2_vhost_if1 \
| | ... | \| dut2_vhost_if2 \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vhost_if1}=vhost_if1
| | ... | ${vhost_if2}=vhost_if2
-| | ...
+| |
| | ${vhost_1}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock1}
| | ${vhost_2}= | Vpp Create Vhost User Interface | ${dut_node} | ${sock2}
| | ${vhost_1_key}= | Get Interface By SW Index | ${dut_node} | ${vhost_1}
diff --git a/resources/libraries/robot/shared/memif.robot b/resources/libraries/robot/shared/memif.robot
index a0fae656f9..50051ca413 100644
--- a/resources/libraries/robot/shared/memif.robot
+++ b/resources/libraries/robot/shared/memif.robot
@@ -13,14 +13,14 @@
*** Settings ***
| Documentation | Memif interface keyword library.
-| ...
+|
| Library | resources.libraries.python.Memif
| Variables | resources/libraries/python/Constants.py
*** Keywords ***
| Set up memif interfaces on DUT node
| | [Documentation] | Create two Memif interfaces on given VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - filename1 - Socket filename for 1st Memif interface. Type: string
@@ -35,13 +35,13 @@
| | ... | - txq - TX queues; 0 means do not set (Optional). Type: integer,
| | ... | default value: ${1}
| | ... | - role - Memif role (Optional). Type: string, default value: SLAVE
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${memif_if1}} - 1st Memif interface.
| | ... | - ${${memif_if2}} - 2nd Memif interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up memif interfaces on DUT node \
| | ... | \| ${nodes['DUT1']} \| sock1 \| sock2 \| 1 \|
| | ... | \| Set up memif interfaces on DUT node \
@@ -49,11 +49,11 @@
| | ... | \| dut2_memif_if1 \| dut2_memif_if2 \| 1 \| 1 \| SLAVE \|
| | ... | \| ${nodes['DUT2']} \| sock1 \| sock2 \| 1 \| rxq=0 \| txq=0 \
| | ... | \| dcr_uuid=_a5730a0a-2ba1-4fe9-91bd-79b9828e968e \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${filename1} | ${filename2} | ${mid}=${1}
| | ... | ${memif_if1}=memif_if1 | ${memif_if2}=memif_if2 | ${rxq}=${1}
| | ... | ${txq}=${1} | ${role}=SLAVE
-| | ...
+| |
| | ${sid_1}= | Evaluate | (${mid}*2)-1
| | ${sid_2}= | Evaluate | (${mid}*2)
| | ${memif_1}= | Create memif interface | ${dut_node}
@@ -69,7 +69,7 @@
| Set up single memif interface on DUT node
| | [Documentation] | Create single Memif interface on given VPP node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - dut_node - DUT node. Type: dictionary
| | ... | - filename - Socket filename for Memif interface. Type: string
@@ -80,19 +80,19 @@
| | ... | - rxq - RX queues (Optional). Type: integer
| | ... | - txq - TX queues (Optional). Type: integer
| | ... | - role - Memif role (Optional). Type: string
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variable:
| | ... | - ${${memif_if}} - Memif interface.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up single memif interface on DUT node \
| | ... | \| ${nodes['DUT1']} \| sock1 \| 1 \| dut1_memif_if1 \| 1 \| 1 \
| | ... | \| SLAVE \|
-| | ...
+| |
| | [Arguments] | ${dut_node} | ${filename} | ${mid}=${1} | ${sid}=${1}
| | ... | ${memif_if}=memif_if1 | ${rxq}=${1} | ${txq}=${1} | ${role}=SLAVE
-| | ...
+| |
| | ${memif}= | Create memif interface | ${dut_node} | ${filename}${mid}-${sid}
| | ... | ${mid} | ${sid} | rxq=${rxq} | txq=${txq} | role=${role}
| | Set Interface State | ${dut_node} | ${memif} | up
diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot
index d5cc5836fb..513cfe8045 100644
--- a/resources/libraries/robot/shared/suite_setup.robot
+++ b/resources/libraries/robot/shared/suite_setup.robot
@@ -20,7 +20,7 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.TrafficGenerator
| Library | resources.tools.wrk.wrk
-| ...
+|
| Documentation | Suite setup keywords.
*** Keywords ***
@@ -31,7 +31,7 @@
| | ... | Compute path for testing on two given nodes in circular topology
| | ... | based on interface model provided as an argument and set
| | ... | corresponding suite variables.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - duts - List of DUT nodes
| | ... | - duts_count - Number of DUT nodes.
@@ -45,21 +45,22 @@
| | ... | - dut{n}_if1_mac - 1st DUT interface MAC address.
| | ... | - dut{n}_if2 - 2nd DUT interface.
| | ... | - dut{n}_if2_mac - 2nd DUT interface MAC address.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | ${nic_model_list}= | Create list | ${nic_name}
| | Append Node | ${nodes['TG']}
| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | Append Node | ${nodes['${dut}']} | filter_list=${nic_model_list}
+| | END
| | Append Node | ${nodes['TG']}
| | Compute Path | always_same_link=${FALSE}
| | ${tg_if1} | ${tg}= | Next Interface
-| | :FOR | ${dut} | IN | @{duts}
+| | FOR | ${dut} | IN | @{duts}
| | | ${dutx_if1} | ${dutx}= | Next Interface
| | | ${dutx_if2} | ${dutx}= | Next Interface
| | | ${dutx_if1_mac}= | Get Interface MAC | ${dutx} | ${dutx_if1}
@@ -70,6 +71,7 @@
| | | Set Suite Variable | ${${dut_str}_if2} | ${dutx_if2}
| | | Set Suite Variable | ${${dut_str}_if1_mac} | ${dutx_if1_mac}
| | | Set Suite Variable | ${${dut_str}_if2_mac} | ${dutx_if2_mac}
+| | END
| | ${tg_if2} | ${tg}= | Next Interface
| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
@@ -81,8 +83,9 @@
| | Set Suite Variable | ${tg_if1_mac}
| | Set Suite Variable | ${tg_if2}
| | Set Suite Variable | ${tg_if2_mac}
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite setup Action For ${action}
+| | END
| Setup suite double link
| | [Documentation]
@@ -91,10 +94,10 @@
| | ... | Compute path for testing on three given nodes in circular topology
| | ... | with double link between DUTs based on interface model provided as an
| | ... | argument and set corresponding suite variables.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - duts - List of DUT nodes
| | ... | - duts_count - Number of DUT nodes.
@@ -111,9 +114,9 @@
| | ... | - dut2_if1_1 - DUT2 interface 1 towards DUT1.
| | ... | - dut2_if1_2 - DUT2 interface 2 towards DUT1.
| | ... | - dut2_if2 - DUT2 interface towards TG.
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | ${nic_model_list}= | Create list | ${nic_name}
| | # Compute path TG - DUT1 with single link in between
| | Append Node | ${nodes['TG']}
@@ -160,13 +163,14 @@
| | Set Suite Variable | ${dut2_if1_1}
| | Set Suite Variable | ${dut2_if1_2}
| | Set Suite Variable | ${dut2_if2}
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite setup Action For ${action}
+| | END
| Additional Suite Setup Action For performance
| | [Documentation]
| | ... | Additional Setup for suites which uses performance measurement.
-| | ...
+| |
| | Run Keyword If | ${duts_count} == 1
| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
| | ... | ${dut1} | ${dut1_if1} | ${dut1} | ${dut1_if2} | ${osi_layer}
@@ -177,32 +181,34 @@
| Additional Suite Setup Action For scapy
| | [Documentation]
| | ... | Additional Setup for suites which uses scapy as Traffic generator.
-| | ...
+| |
| | Set Interface State | ${tg} | ${tg_if1} | up
| | Set Interface State | ${tg} | ${tg_if2} | up
| Additional Suite Setup Action For dpdk
| | [Documentation]
| | ... | Additional Setup for suites which uses dpdk.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${dut_str}= | Convert To Lowercase | ${dut}
| | | Initialize DPDK Environment | ${nodes['${dut}']}
| | | ... | ${${dut_str}_if1} | ${${dut_str}_if2}
+| | END
| Additional Suite Setup Action For performance_avf
| | [Documentation]
| | ... | Additional Setup for suites which uses performance measurement over
| | ... | SRIOV AVF.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | ${if1_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if1}
| | | ... | numvfs=${1} | osi_layer=${osi_layer}
| | | ${if2_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if2}
| | | ... | numvfs=${1} | osi_layer=${osi_layer}
-# Currently only one AVF is supported.
+| | # Currently only one AVF is supported.
| | | Set Suite Variable | ${${dut}_if1_vf0} | ${if1_avf_arr[0]}
| | | Set Suite Variable | ${${dut}_if2_vf0} | ${if2_avf_arr[0]}
+| | END
| | Run Keyword If | ${duts_count} == 1
| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
| | ... | ${dut1} | ${dut1_if1_vf0} | ${dut1} | ${dut1_if2_vf0} | ${osi_layer}
@@ -213,16 +219,17 @@
| Additional Suite Setup Action For avf
| | [Documentation]
| | ... | Additional Setup for suites which uses SRIOV AVF.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
-# Currently only one AVF is supported.
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | # Currently only one AVF is supported.
| | | Set Suite Variable | ${${dut}_if1_vf0} | ${${dut}_if1}
| | | Set Suite Variable | ${${dut}_if2_vf0} | ${${dut}_if2}
+| | END
| Additional Suite Setup Action For ipsechw
| | [Documentation]
| | ... | Additional Setup for suites which uses QAT HW.
-| | ...
+| |
| | ${numvfs}= | Set Variable If
| | ... | '${crypto_type}' == 'HW_DH895xcc' | ${32}
| | ... | '${crypto_type}' == 'HW_C3xxx' | ${16}
@@ -233,7 +240,7 @@
| Additional Suite Setup Action For wrk
| | [Documentation]
| | ... | Additional Setup for suites which uses WRK TG.
-| | ...
+| |
| | Iface update numa node | ${tg}
# Make sure TRex is stopped
| | ${running}= | Is TRex running | ${tg}
diff --git a/resources/libraries/robot/shared/suite_teardown.robot b/resources/libraries/robot/shared/suite_teardown.robot
index 3d976106f4..993d83838f 100644
--- a/resources/libraries/robot/shared/suite_teardown.robot
+++ b/resources/libraries/robot/shared/suite_teardown.robot
@@ -16,33 +16,35 @@
*** Settings ***
| Library | resources.libraries.python.DPDK.DPDKTools
| Library | resources.libraries.python.TrafficGenerator
-| ...
+|
| Documentation | Suite teardown keywords.
*** Keywords ***
| Tear down suite
| | [Documentation]
| | ... | Common suite teardown for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional teardown action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
-| | :FOR | ${action} | IN | @{actions}
+| |
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite Tear Down Action For ${action}
+| | END
| | Remove All Added VIF Ports On All DUTs From Topology | ${nodes}
| Additional Suite Tear Down Action For performance
| | [Documentation]
| | ... | Additional teardown for suites which uses performance measurement.
-| | ...
+| |
| | Teardown traffic generator | ${tg}
| Additional Suite Tear Down Action For dpdk
| | [Documentation]
| | ... | Additional teardown for suites which uses dpdk.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Cleanup DPDK Environment
| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${${dut}_if2}
+| | END
diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot
index c90ed68a79..941b90490a 100644
--- a/resources/libraries/robot/shared/test_setup.robot
+++ b/resources/libraries/robot/shared/test_setup.robot
@@ -15,27 +15,29 @@
*** Settings ***
| Library | resources.libraries.python.PapiHistory
-| ...
+|
| Documentation | Test Setup keywords.
*** Keywords ***
| Setup test
| | [Documentation]
| | ... | Common test setup for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | Reset PAPI History On All DUTs | ${nodes}
| | Create base startup configuration of VPP on all DUTs
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Test Setup Action For ${action}
+| | END
| Additional Test Setup Action For namespace
| | [Documentation]
| | ... | Additional Setup for tests which uses namespace.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Clean Up Namespaces | ${nodes['${dut}']}
+| | END
diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot
index 336cff5dad..1e7d011fca 100644
--- a/resources/libraries/robot/shared/test_teardown.robot
+++ b/resources/libraries/robot/shared/test_teardown.robot
@@ -18,19 +18,19 @@
| Library | resources.libraries.python.PapiHistory
| Library | resources.libraries.python.topology.Topology
| Variables | resources/libraries/python/Constants.py
-| ...
+|
| Documentation | Test teardown keywords.
*** Keywords ***
| Tear down test
| | [Documentation]
| | ... | Common test teardown for tests.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional teardown action. Type: list
-| | ...
+| |
| | [Arguments] | @{actions}
-| | ...
+| |
| | Remove All Added Ports On All DUTs From Topology | ${nodes}
| | Show PAPI History On All DUTs | ${nodes}
| | Show Log On All DUTs | ${nodes}
@@ -38,14 +38,15 @@
| | ... | Get Core Files on All Nodes | ${nodes}
| | Run Keyword If Test Failed
| | ... | Verify VPP PID in Teardown
-| | :FOR | ${action} | IN | @{actions}
+| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Test Tear Down Action For ${action}
+| | END
| | Clean Sockets On All Nodes | ${nodes}
| Additional Test Tear Down Action For performance
| | [Documentation]
| | ... | Additional teardown for tests which uses performance measurement.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Send traffic at specified rate | ${PERF_TRIAL_DURATION} | 10000pps
| | ... | ${frame_size} | ${traffic_profile} | pkt_trace=${True}
@@ -53,20 +54,21 @@
| Additional Test Tear Down Action For packet_trace
| | [Documentation]
| | ... | Additional teardown for tests which uses packet trace.
-| | ...
+| |
| | Show Packet Trace on All DUTs | ${nodes}
| Additional Test Tear Down Action For container
| | [Documentation]
| | ... | Additional teardown for tests which uses containers.
-| | ...
-| | :FOR | ${container_group} | IN | @{container_groups}
+| |
+| | FOR | ${container_group} | IN | @{container_groups}
| | | Destroy all '${container_group}' containers
+| | END
| Additional Test Tear Down Action For vhost
| | [Documentation]
| | ... | Additional teardown for tests which uses vhost(s) and VM(s).
-| | ...
+| |
| | Show VPP vhost on all DUTs | ${nodes}
| | ${vnf_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Keyword Should Exist | vnf_manager.Kill All VMs
@@ -75,29 +77,32 @@
| Additional Test Tear Down Action For nat
| | [Documentation]
| | ... | Additional teardown for tests which uses NAT feature.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Run Keyword If Test Failed
| | | ... | Show NAT verbose | ${nodes['${dut}']}
+| | END
| Additional Test Tear Down Action For namespace
| | [Documentation]
| | ... | Additional teardown for tests which uses namespace.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Clean Up Namespaces | ${nodes['${dut}']}
+| | END
| Additional Test Tear Down Action For linux_bridge
| | [Documentation]
| | ... | Additional teardown for tests which uses linux_bridge.
-| | ...
-| | :FOR | ${dut} | IN | @{duts}
+| |
+| | FOR | ${dut} | IN | @{duts}
| | | Linux Del Bridge | ${nodes['${dut}']} | ${bid_TAP}
+| | END
| Additional Test Tear Down Action For acl
| | [Documentation]
| | ... | Additional teardown for tests which uses ACL feature.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Vpp Log Plugin Acl Settings | ${dut1}
| | Run Keyword If Test Failed
@@ -106,7 +111,7 @@
| Additional Test Tear Down Action For macipacl
| | [Documentation]
| | ... | Additional teardown for tests which uses MACIP ACL feature.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Vpp Log Macip Acl Settings | ${dut1}
| | Run Keyword If Test Failed
@@ -115,14 +120,14 @@
| Additional Test Tear Down Action For classify
| | [Documentation]
| | ... | Additional teardown for tests which uses classify tables.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Show Classify Tables Verbose on all DUTs | ${nodes}
| Additional Test Tear Down Action For srv6
| | [Documentation]
| | ... | Additional teardown for tests which uses SRv6.
-| | ...
+| |
| | Run Keyword If Test Failed
| | ... | Show SR Policies on all DUTs | ${nodes}
| | Run Keyword If Test Failed
diff --git a/resources/libraries/robot/shared/testing_path.robot b/resources/libraries/robot/shared/testing_path.robot
index 2bd0d9f938..696e7397a5 100644
--- a/resources/libraries/robot/shared/testing_path.robot
+++ b/resources/libraries/robot/shared/testing_path.robot
@@ -18,17 +18,17 @@
*** Keywords ***
| Configure path in 2-node circular topology
| | [Documentation] | Compute path for testing on two given nodes in circular
-| | ... | topology and set corresponding test case variables.
-| | ...
+| | ... | topology and set corresponding test case variables.
+| |
| | ... | *Arguments:*
| | ... | - ${tg_node} - TG node. Type: dictionary
| | ... | - ${dut_node} - DUT node. Type: dictionary
| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
-| | ... | parameter in circular topology. Type: dictionary
-| | ...
+| | ... | parameter in circular topology. Type: dictionary
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following test case variables:
| | ... | - ${tg_node} - TG node.
| | ... | - ${tg_to_dut_if1} - 1st TG interface towards DUT.
@@ -40,12 +40,12 @@
| | ... | - ${tg_to_dut_if2_mac}
| | ... | - ${dut_to_tg_if1_mac}
| | ... | - ${dut_to_tg_if2_mac}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${dut_node} | ${tg2_node}
| | Should Be Equal | ${tg_node} | ${tg2_node}
| | Append Nodes | ${tg_node} | ${dut_node} | ${tg_node}
@@ -71,24 +71,24 @@
| Set interfaces in 2-node circular topology up
| | [Documentation] | Set UP state on interfaces in 2-node path on nodes and
-| | ... | wait for all interfaces are ready. Requires more than
-| | ... | one link between nodes.
-| | ...
+| | ... | wait for all interfaces are ready. Requires more than one link
+| | ... | between nodes.
+| |
| | ... | *Arguments:*
| | ... | - No arguments.
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned.
-| | ...
+| |
| | ... | _NOTE:_ This KW uses test variables sets in
-| | ... | "Configure path in 2-node circular topology" KW.
-| | ...
+| | ... | "Configure path in 2-node circular topology" KW.
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
| | ... | \| And Set interfaces in 2-node circular topology up \|
-| | ...
+| |
| | Set Interface State | ${tg_node} | ${tg_to_dut_if1} | up
| | Set Interface State | ${tg_node} | ${tg_to_dut_if2} | up
| | Set Interface State | ${dut_node} | ${dut_to_tg_if1} | up
@@ -97,15 +97,15 @@
| Configure path in 3-node circular topology
| | [Documentation] | Compute path for testing on three given nodes in circular
-| | ... | topology and set corresponding test case variables.
-| | ...
+| | ... | topology and set corresponding test case variables.
+| |
| | ... | *Arguments:*
| | ... | - ${tg_node} - TG node. Type: dictionary
| | ... | - ${dut1_node} - DUT1 node. Type: dictionary
| | ... | - ${dut2_node} - DUT2 node. Type: dictionary
| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
-| | ... | parameter in circular topology. Type: dictionary
-| | ...
+| | ... | parameter in circular topology. Type: dictionary
+| |
| | ... | *Return:*
| | ... | - No value returned
| | ... |
@@ -125,12 +125,12 @@
| | ... | - ${dut1_to_dut2_mac}
| | ... | - ${dut2_to_tg_mac}
| | ... | - ${dut2_to_dut1_mac}
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node}
| | Should Be Equal | ${tg_node} | ${tg2_node}
| | Append Nodes | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node}
@@ -167,22 +167,22 @@
| | [Documentation]
| | ... | Set UP state on interfaces in 3-node path on nodes and \
| | ... | wait until all interfaces are ready.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - No arguments.
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned.
-| | ...
+| |
| | ... | _NOTE:_ This KW uses test variables sets in
| | ... | "Configure path in 3-node circular topology" KW.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
| | ... | \| And Set interfaces in 3-node circular topology up \|
-| | ...
+| |
| | Set Interface State | ${tg_node} | ${tg_to_dut1} | up
| | Set Interface State | ${tg_node} | ${tg_to_dut2} | up
| | Set Interface State | ${dut1_node} | ${dut1_to_tg} | up
@@ -197,14 +197,14 @@
| | ... | Compute path for testing on three given nodes in circular \
| | ... | topology with double link and set corresponding \
| | ... | test case variables.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${tg_node} - TG node. Type: dictionary
| | ... | - ${dut1_node} - DUT1 node. Type: dictionary
| | ... | - ${dut2_node} - DUT2 node. Type: dictionary
| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node
| | ... | parameter in circular topology. Type: dictionary
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned.
| | ... |
@@ -236,12 +236,12 @@
| | ... | - ${dut2_to_dut1_if2} - DUT2 interface towards DUT1 interface 2.
| | ... | - ${dut2_to_dut1_mac_if1} - DUT2 towards DUT1 MAC address interface 1.
| | ... | - ${dut2_to_dut1_mac_if2} - DUT2 towards DUT1 MAC address interface 2.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node}
| | Should Be Equal | ${tg_node} | ${tg2_node}
| | # Compute path TG - DUT1 with two links in between
@@ -321,22 +321,22 @@
| | [Documentation]
| | ... | Set UP state on interfaces in 3-node double link path \
| | ... | wait until all interfaces are ready.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - No arguments.
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned.
-| | ...
+| |
| | ... | _NOTE:_ This KW uses test variables sets in
| | ... | "Configure path in double-link 3-node circular topology" KW.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \
| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \|
| | ... | \| Interfaces in Double-Link 3-node testing are UP \|
-| | ...
+| |
| | Set Interface State | ${tg_node} | ${tg_to_dut1_if1} | up
| | Set Interface State | ${tg_node} | ${tg_to_dut1_if2} | up
| | Set Interface State | ${tg_node} | ${tg_to_dut2_if1} | up
@@ -356,24 +356,24 @@
| | [Documentation]
| | ... | Set UP state on interfaces in 2-node or 3-node path on nodes and \
| | ... | wait until all interfaces are ready.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - No arguments.
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned.
-| | ...
+| |
| | ... | _NOTE:_ This KW uses test variables sets in\
| | ... | "Configure path in 2-node circular topology" or\
| | ... | "Configure path in 3-node circular topology" KW.
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure interfaces in path up \|
-| | ...
+| |
| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Variable Should Exist | ${dut2}
-| | ...
+| |
| | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Set interfaces in 3-node circular topology up
| | ... | ELSE
diff --git a/resources/libraries/robot/shared/traffic.robot b/resources/libraries/robot/shared/traffic.robot
index df74017f6a..9358daf2d7 100644
--- a/resources/libraries/robot/shared/traffic.robot
+++ b/resources/libraries/robot/shared/traffic.robot
@@ -20,7 +20,7 @@
| Library | resources.libraries.python.Policer
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.TrafficScriptExecutor
-| ...
+|
| Documentation | Traffic keywords
*** Keywords ***
@@ -28,12 +28,12 @@
| | [Documentation] | Sends packet from IP (with source mac) to IP\
| | ... | (with dest mac). There has to be 4 MAC addresses when using\
| | ... | 2-node + xconnect (one for each eth).
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -55,23 +55,23 @@
| | ... | Type: integer
| | ... | - traffic_script - Scapy Traffic script used for validation.
| | ... | Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify headers \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_dst_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${encaps_tx}=${EMPTY} | ${vlan_tx}=${EMPTY}
| | ... | ${vlan_outer_tx}=${EMPTY} | ${encaps_rx}=${EMPTY}
| | ... | ${vlan_rx}=${EMPTY} | ${vlan_outer_rx}=${EMPTY}
| | ... | ${traffic_script}=send_ip_check_headers
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_dst_port}
| | ${args}= | Catenate | --tg_src_mac ${tx_src_mac}
@@ -98,12 +98,12 @@
| | [Documentation] | Sends packet from ip (with specified mac) to ip\
| | ... | (with dest mac). Using keyword : Send packet And Check Headers\
| | ... | and subsequently checks the return value.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -113,12 +113,12 @@
| | ... | - rx_port - Interface of TG-if1. Type: string
| | ... | - rx_src_mac - MAC address of DUT1-if2. Type: string
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Packet transmission from port to port should fail \
| | ... | \| ${nodes['TG']} \| 10.0.0.1 \ \| 32.0.0.1 \| eth2 \
| | ... | \| 08:00:27:a2:52:5b \| eth3 \| 08:00:27:4d:ca:7a \
@@ -126,7 +126,7 @@
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac ${tx_src_mac}
@@ -137,425 +137,9 @@
| | ... | Run Traffic Script On Node | send_ip_check_headers.py
| | ... | ${tg_node} | ${args}
-| Send packet and verify ARP request
-| | [Documentation] | Send IP packet from tx_port and check if ARP Request\
-| | ... | packet is received on rx_port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_src_ip - Source IP address of transferred packet (TG-if1).
-| | ... | Type: string
-| | ... | - tx_dst_ip - Destination IP address of transferred packet (TG-if2).
-| | ... | Type: string
-| | ... | - tx_port - Interface from which the IP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - tx_dst_mac - Destination MAC address of IP packet (DUT-if1).
-| | ... | Type: string
-| | ... | - rx_port - Interface where the IP packet is received (TG-if2).
-| | ... | Type: string
-| | ... | - rx_src_mac - Source MAC address of ARP packet (DUT-if2).
-| | ... | Type: string
-| | ... | - rx_arp_src_ip - Source IP address of ARP packet (DUT-if2).
-| | ... | Type: string
-| | ... | - rx_arp_dst_ip - Destination IP address of ARP packet. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check ARP Packet \| ${nodes['TG']} \| 16.0.0.1 \
-| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \
-| | ... | \| eth4 \| 08:00:27:5b:49:dd \| 192.168.2.1 \| 192.168.2.2 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_src_ip} | ${tx_dst_ip} | ${tx_port}
-| | ... | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac} | ${rx_arp_src_ip}
-| | ... | ${rx_arp_dst_ip}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_dst_mac ${tx_dst_mac}
-| | ... | --rx_src_mac ${rx_src_mac} | --tx_src_ip ${tx_src_ip}
-| | ... | --tx_dst_ip ${tx_dst_ip} | --tx_if ${tx_port_name}
-| | ... | --rx_if ${rx_port_name} | --rx_arp_src_ip ${rx_arp_src_ip}
-| | ... | --rx_arp_dst_ip ${rx_arp_dst_ip}
-| | Run Traffic Script On Node | send_icmp_check_arp.py | ${tg_node} | ${args}
-
-| Send TCP or UDP packet and verify received packet
-| | [Documentation] | Sends TCP or UDP packet with specified source\
-| | ... | and destination port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_ip - IP of source interface (TG-if1). Type: integer
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer
-| | ... | - tx_port - Source interface (TG-if1). Type: string
-| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string
-| | ... | - rx_port - Destionation interface (TG-if1). Type: string
-| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string
-| | ... | - protocol - Type of protocol. Type: string
-| | ... | - source_port - Source TCP/UDP port. Type: string or integer
-| | ... | - destination_port - Destination TCP/UDP port. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send TCP or UDP packet and verify received packet \
-| | ... | \| ${nodes['TG']} \| 16.0.0.1 \| 32.0.0.1 \| eth2 \
-| | ... | \| 08:00:27:cc:4f:54 \| eth4 \| 08:00:27:c9:6a:d5 \| TCP \| 20 \
-| | ... | 80 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | ${tx_mac}
-| | ... | ${rx_port} | ${rx_mac} | ${protocol} | ${source_port}
-| | ... | ${destination_port}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_mac ${tx_mac} | --rx_mac ${rx_mac}
-| | ... | --src_ip ${src_ip} | --dst_ip ${dst_ip}
-| | ... | --tx_if ${tx_port_name} | --rx_if ${rx_port_name}
-| | ... | --protocol ${protocol} | --source_port ${source_port}
-| | ... | --destination_port ${destination_port}
-| | Run Traffic Script On Node | send_tcp_udp.py
-| | ... | ${tg_node} | ${args}
-
-| TCP or UDP packet transmission should fail
-| | [Documentation] | Sends TCP or UDP packet with specified source\
-| | ... | and destination port.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_ip - IP of source interface (TG-if1). Type: integer
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer
-| | ... | - tx_port - Source interface (TG-if1). Type: string
-| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string
-| | ... | - rx_port - Destionation interface (TG-if1). Type: string
-| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string
-| | ... | - protocol - Type of protocol. Type: string
-| | ... | - source_port - Source TCP/UDP port. Type: string or integer
-| | ... | - destination_port - Destination TCP/UDP port. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| TCP or UDP packet transmission should fail \| ${nodes['TG']} \
-| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \
-| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| TCP \| 20 \| 80 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | ${tx_mac}
-| | ... | ${rx_port} | ${rx_mac} | ${protocol} | ${source_port}
-| | ... | ${destination_port}
-| | ...
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate | --tx_mac ${tx_mac} | --rx_mac ${rx_mac}
-| | ... | --src_ip ${src_ip} | --dst_ip ${dst_ip} | --tx_if ${tx_port_name}
-| | ... | --rx_if ${rx_port_name} | --protocol ${protocol}
-| | ... | --source_port ${source_port} | --destination_port ${destination_port}
-| | Run Keyword And Expect Error | TCP/UDP Rx timeout
-| | ... | Run Traffic Script On Node | send_tcp_udp.py
-| | ... | ${tg_node} | ${args}
-
-| Receive and verify router advertisement packet
-| | [Documentation] | Wait until RA packet is received and then verify\
-| | ... | specific fields of received RA packet.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - node - Node where to check for RA packet. Type: dictionary
-| | ... | - rx_port - Interface where the packet is received. Type: string
-| | ... | - src_mac - MAC address of source interface from which the link-local\
-| | ... | IPv6 address is constructed and checked. Type: string
-| | ... | - interval - Configured retransmit interval. Optional. Type: integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Receive and verify router advertisement packet \
-| | ... | \| ${nodes['DUT1']} \| eth2 \| 08:00:27:cc:4f:54 \|
-| | ...
-| | [Arguments] | ${node} | ${rx_port} | ${src_mac} | ${interval}=${0}
-| | ...
-| | ${rx_port_name}= | Get interface name | ${node} | ${rx_port}
-| | ${args}= | Catenate | --rx_if ${rx_port_name} | --src_mac ${src_mac}
-| | ... | --interval ${interval}
-| | Run Traffic Script On Node | check_ra_packet.py | ${node} | ${args}
-
-| Send router solicitation and verify response
-| | [Documentation] | Send RS packet, wait for response and then verify\
-| | ... | specific fields of received RA packet.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - TG node to send RS packet from. Type: dictionary
-| | ... | - dut_node - DUT node to send RS packet to. Type: dictionary
-| | ... | - rx_port - Interface where the packet is sent from. Type: string
-| | ... | - tx_port - Interface where the packet is sent to. Type: string
-| | ... | - src_ip - Source IP address of RS packet. Optional. If not provided,\
-| | ... | link local address will be used. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send router solicitation and verify response \
-| | ... | \| ${nodes['TG']} \| ${nodes['DUT1']} \| eth2 \
-| | ... | \| GigabitEthernet0/8/0 \| 10::10 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${dut_node} | ${tx_port} | ${rx_port}
-| | ... | ${src_ip}=''
-| | ...
-| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${tx_port}
-| | ${dst_mac}= | Get Interface Mac | ${dut_node} | ${rx_port}
-| | ${src_int_name}= | Get interface name | ${tg_node} | ${tx_port}
-| | ${dst_int_name}= | Get interface name | ${dut_node} | ${rx_port}
-| | ${args}= | Catenate | --rx_if ${dst_int_name} | --tx_if ${src_int_name}
-| | ... | --src_mac ${src_mac} | --dst_mac ${dst_mac} | --src_ip ${src_ip}
-| | Run Traffic Script On Node | send_rs_check_ra.py
-| | ... | ${tg_node} | ${args}
-
-| Send ARP Request
-| | [Documentation] | Send ARP Request and check if the ARP Response is\
-| | ... | received.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)<->(if1)DUT
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_port - Interface from which the ARP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - src_mac - Source MAC address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_mac - Target MAC address which is expected in the response
-| | ... | (DUT-if1). Type: string
-| | ... | - src_ip - Source IP address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_ip - Target IP address of ARP packet (DUT-if1).
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send ARP Request \| ${nodes['TG']} \| eth3 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \
-| | ... | \| 10.0.0.100 \| 192.168.1.5 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_port} | ${src_mac} | ${tgt_mac} | ${src_ip}
-| | ... | ${tgt_ip}
-| | ...
-| | ${args}= | Catenate | --tx_if ${tx_port} | --src_mac ${src_mac}
-| | ... | --dst_mac ${tgt_mac} | --src_ip ${src_ip} | --dst_ip ${tgt_ip}
-| | Run Traffic Script On Node | arp_request.py | ${tg_node} | ${args}
-
-| ARP request should fail
-| | [Documentation] | Send ARP Request and the ARP Response should not\
-| | ... | be received.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)<->(if1)DUT
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_port - Interface from which the ARP packet is sent (TG-if1).
-| | ... | Type: string
-| | ... | - src_mac - Source MAC address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_mac - Target MAC address which is expected in the response
-| | ... | (DUT-if1). Type: string
-| | ... | - src_ip - Source IP address of ARP packet (TG-if1).
-| | ... | Type: string
-| | ... | - tgt_ip - Target IP address of ARP packet (DUT-if1).
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| ARP request should fail \| ${nodes['TG']} \| eth3 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \
-| | ... | \| 10.0.0.100 \| 192.168.1.5 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_port} | ${src_mac} | ${tgt_mac} | ${src_ip}
-| | ... | ${tgt_ip}
-| | ...
-| | ${args}= | Catenate | --tx_if ${tx_port} | --src_mac ${src_mac}
-| | ... | --dst_mac ${tgt_mac} | --src_ip ${src_ip} | --dst_ip ${tgt_ip}
-| | Run Keyword And Expect Error | ARP reply timeout
-| | ... | Run Traffic Script On Node | arp_request.py | ${tg_node} | ${args}
-
-| Send packets and verify multipath routing
-| | [Documentation] | Send 100 IP ICMP packets traffic and check if it is\
-| | ... | divided into two paths.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - src_port - Interface of TG-if1. Type: string
-| | ... | - dst_port - Interface of TG-if2. Type: string
-| | ... | - src_ip - IP of source interface (TG-if1). Type: string
-| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
-| | ... | - tx_src_mac - MAC address of TG-if1. Type: string
-| | ... | - tx_dst_mac - MAC address of DUT-if1. Type: string
-| | ... | - rx_src_mac - MAC address of DUT-if2. Type: string
-| | ... | - rx_dst_mac_1 - MAC address of interface for path 1. Type: string
-| | ... | - rx_dst_mac_2 - MAC address of interface for path 2. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check Multipath Routing \| ${nodes['TG']} \
-| | ... | \| eth2 \| eth3 \| 16.0.0.1 \| 32.0.0.1 \
-| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:c9:6a:d5 \| 08:00:27:54:59:f9 \
-| | ... | \| 02:00:00:00:00:02 \| 02:00:00:00:00:03 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${src_port} | ${dst_port} | ${src_ip} | ${dst_ip}
-| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_src_mac} | ${rx_dst_mac_1}
-| | ... | ${rx_dst_mac_2}
-| | ...
-| | ${src_port_name}= | Get interface name | ${tg_node} | ${src_port}
-| | ${dst_port_name}= | Get interface name | ${tg_node} | ${dst_port}
-| | ${args}= | Catenate | --tx_if ${src_port_name}
-| | ... | --rx_if ${dst_port_name} | --src_ip ${src_ip} | --dst_ip ${dst_ip}
-| | ... | --tg_if1_mac ${tx_src_mac} | --dut_if1_mac ${tx_dst_mac}
-| | ... | --dut_if2_mac ${rx_src_mac} | --path_1_mac ${rx_dst_mac_1}
-| | ... | --path_2_mac ${rx_dst_mac_2}
-| | Run Traffic Script On Node | send_icmp_check_multipath.py | ${tg_node}
-| | ... | ${args}
-
-| Send IPv4 ping packet and verify headers
-| | [Documentation] | Send ICMP Echo Request message from source port of source\
-| | ... | node to destination port of destination node and check the received\
-| | ... | ICMP Echo Reply message for correctness inlcuding source and\
-| | ... | destination IPv4 and MAC addresses and ttl value. If the destination\
-| | ... | node is TG type the ttl of received ICMP Echo Request message is\
-| | ... | checked too and corresponding ICMP Echo Reply message is created.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tx_node - Source node to execute scripts on (mostly TG).
-| | ... | Type: dictionary
-| | ... | - tx_port - Source interface of tx_node. Type: string
-| | ... | - rx_node - Destinantion node. Type: dictionary
-| | ... | - rx_port - Destination interface of rx_node. Type: string
-| | ... | - src_ip - IP address of source interface or source remote host.
-| | ... | Type: string
-| | ... | - dst_ip - IP address of destination interface or destination remote
-| | ... | host. Type: string
-| | ... | - first_hop_mac - Destination MAC address for the first hop in
-| | ... | the path. Type: string
-| | ... | - hops - Expected number of hops. Type: string or integer
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send IPv4 ping packet and verify headers \| ${nodes['TG']} \
-| | ... | \| eth2 \| ${nodes['DUT1']} \| eth3 \| 16.0.0.1 \| 32.0.0.1 \
-| | ... | \| 08:00:27:cc:4f:54 \| 1 \|
-| | ...
-| | [Arguments] | ${tx_node} | ${tx_port} | ${rx_node} | ${rx_port}
-| | ... | ${src_ip} | ${dst_ip} | ${first_hop_mac} | ${hops}
-| | ...
-| | ${src_mac}= | Get interface MAC | ${tx_node} | ${tx_port}
-| | ${dst_mac}= | Get interface MAC | ${rx_node} | ${rx_port}
-| | ${is_dst_tg}= | Is TG node | ${rx_node}
-| | ${tx_port_name}= | Get interface name | ${tx_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${rx_node} | ${rx_port}
-| | ${args}= | Traffic Script Gen Arg | ${rx_port_name} | ${tx_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --hops ${hops}
-| | ... | --first_hop_mac ${first_hop_mac} | --is_dst_tg ${is_dst_tg}
-| | Run Traffic Script On Node | ipv4_ping_ttl_check.py | ${tx_node} | ${args}
-
-| Send IPv6 echo request packet and verify headers
-| | [Documentation] | Send ICMPv6 Echo Request message from source port of\
-| | ... | source node to destination port of destination node and check\
-| | ... | the received ICMPv6 Echo Reply message for correctness inlcuding\
-| | ... | source and destination IPv4 and MAC addresses and hlim value. If\
-| | ... | the destination node is TG type the hlim of received ICMP Echo\
-| | ... | Request message is checked too and corresponding ICMP Echo Reply\
-| | ... | message is created and sent.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
-| | ... | - tx_node - Source node to execute scripts on (mostly TG).
-| | ... | Type: dictionary
-| | ... | - tx_port - Source interface of tx_node. Type: string
-| | ... | - rx_node - Destinantion node. Type: dictionary
-| | ... | - rx_port - Destination interface of rx_node. Type: string
-| | ... | - src_ip - IPv6 address of source interface or source remote host.
-| | ... | Type: string
-| | ... | - dst_ip - IPv6 address of destination interface or destination remote
-| | ... | host. Type: string
-| | ... | - src_nh_mac - Destination MAC address for the first hop in
-| | ... | the path in direction from source node. Type: string
-| | ... | - hops - Expected number of hops. Type: string or integer
-| | ... | - dst_nh_mac - Destination MAC address for the first hop in
-| | ... | the path in direction from destination node (Optional). Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send IPv6 echo request packet and verify headers \
-| | ... | \| ${nodes['TG']} \| eth2 \| ${nodes['DUT1']} \| eth3 \| 3ffe:5f::1 \
-| | ... | \| 3ffe:5f::2 \| 08:00:27:cc:4f:54 \| 1 \|
-| | ...
-| | [Arguments] | ${tx_node} | ${tx_port} | ${rx_node} | ${rx_port} | ${src_ip}
-| | ... | ${dst_ip} | ${src_nh_mac} | ${hops} | ${dst_nh_mac}=${NONE}
-| | ...
-| | ${src_mac}= | Get interface MAC | ${tx_node} | ${tx_port}
-| | ${dst_mac}= | Get interface MAC | ${rx_node} | ${rx_port}
-| | ${is_dst_tg}= | Is TG node | ${rx_node}
-| | ${tx_port_name}= | Get interface name | ${tx_node} | ${tx_port}
-| | ${rx_port_name}= | Get interface name | ${rx_node} | ${rx_port}
-| | ${args}= | Traffic Script Gen Arg | ${rx_port_name} | ${tx_port_name}
-| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args}= | Catenate | ${args} | --h_num ${hops} | --src_nh_mac ${src_nh_mac}
-| | ... | --dst_nh_mac ${dst_nh_mac} | --is_dst_tg ${is_dst_tg}
-| | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tx_node} | ${args}
-
| Send packet and verify marking
| | [Documentation] | Send packet and verify DSCP of the received packet.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - TG node. Type: dictionary
| | ... | - tx_if - TG transmit interface. Type: string
@@ -564,15 +148,15 @@
| | ... | - dst_mac - Packet destination MAC. Type: string
| | ... | - src_ip - Packet source IP address. Type: string
| | ... | - dst_ip - Packet destination IP address. Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| Send packet and verify marking \| ${nodes['TG']} \| eth1 \| eth2 \
| | ... | \| 08:00:27:87:4d:f7 \| 52:54:00:d4:d8:22 \| 192.168.122.2 \
| | ... | \| 192.168.122.1 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${tx_if} | ${rx_if} | ${src_mac} | ${dst_mac}
| | ... | ${src_ip} | ${dst_ip}
-| | ...
+| |
| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_if}
| | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_if}
| | ${args}= | Traffic Script Gen Arg | ${rx_if_name} | ${tx_if_name}
@@ -584,7 +168,7 @@
| Send VXLAN encapsulated packet and verify received packet
| | [Documentation] | Send VXLAN encapsulated Ethernet frame and check \
| | ... | received one.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_node - Node where to run traffic script. Type: dictionary
| | ... | - tx_if - Interface from where send VXLAN packet. Type: string
@@ -599,17 +183,17 @@
| | ... | - rx_dst_ip - Destination IP address of received VXLAN packet.
| | ... | Type: string
| | ... | - rx_vni - VNI of received VXLAN packet. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send VXLAN encapsulated packet and verify received packet \
| | ... | \| ${tg_node} \| port4 \| port4 \
| | ... | \| fa:16:3e:6d:f9:c5 \| fa:16:3e:e6:6d:9a \| 192.168.0.1 \
| | ... | \| 192.168.0.2 \| ${101} \| 192.168.0.2 \| 192.168.0.1 \| ${102} \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
| | ... | ${tx_src_mac} | ${tx_dst_mac}
| | ... | ${tx_src_ip} | ${tx_dst_ip} | ${tx_vni}
@@ -630,187 +214,10 @@
| | Run Traffic Script On Node | send_vxlan_check_vxlan.py | ${tg_node}
| | ... | ${args}
-| Send Packet And Check Received Copies
-| | [Documentation] | Sends an ARP or ICMP packet from TG to DUT using one\
-| | ... | link, then receive a copy of both the sent packet and the DUT's reply\
-| | ... | on the second link.
-| | ...
-| | ... | Used by Honeycomb.
-| | ...
-| | ... | *Arguments:*
-| | ...
-| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
-| | ... | - tx_src_port - First interface on TG. Type: string
-| | ... | - tx_src_mac - MAC address of the first interface on TG. Type: string
-| | ... | - tx_dst_mac - MAC address of the first interface on DUT. Type: string
-| | ... | - rx_port - Second interface on TG. Type: string
-| | ... | - src_ip - Packet source IP address. Type: string
-| | ... | - dst_ip - Packet destination IP address. Type: string
-| | ... | - ptype - Type of payload, ARP, ICMP or ICMPv6. Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send Packet And Check Received Copies \| ${nodes['TG']} \| eth1 \
-| | ... | \| 8:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
-| | ... | \| eth3 \| 192.168.0.2 \| 192.168.0.3 \| ARP \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_src_port}
-| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port}
-| | ... | ${src_ip} | ${dst_ip} | ${ptype}
-| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
-| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
-| | ${args}= | Catenate
-| | ... | --tg_src_mac ${tx_src_mac} --dut_if1_mac ${tx_dst_mac}
-| | ... | --src_ip ${src_ip} --dst_ip ${dst_ip}
-| | ... | --tx_if ${tx_port_name} --rx_if | ${rx_port_name}
-| | ... | --ptype ${ptype}
-| | Run Traffic Script On Node | span_check.py | ${tg_node} |
-| | ... | ${args}
-
-| Send ICMPv4 and check received GRE header
-| | [Documentation] | Send ICMPv4 packet and check if received packed contains \
-| | ... | correct GRE, IP, MAC headers.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string
-| | ... | - rx_if - Interface where to receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of ICMP packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address of GRE packet.
-| | ... | Type: string
-| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string
-| | ... | - inner_dst_ip - Destination IP address of ICMP packet.
-| | ... | Type: string
-| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - outer_dst_ip - Destination IP address of GRE packet.
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send ICMPv4 and check received GRE header \
-| | ... | \| ${tg_node} \| ${tg_to_dut_if1} \| ${tg_to_dut_if2} \
-| | ... | \| ${tx_dst_mac} \| ${rx_dst_mac} \| ${net1_host_address} \
-| | ... | \| ${net2_host_address} \| ${dut1_ip_address} \| ${dut2_ip_address} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${rx_dst_mac}
-| | ... | ${inner_src_ip} | ${inner_dst_ip}
-| | ... | ${outer_src_ip} | ${outer_dst_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip}
-| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip}
-| | Run Traffic Script On Node
-| | ... | send_icmp_check_gre_headers.py | ${tg_node} | ${args}
-
-| Send GRE and check received ICMPv4 header
-| | [Documentation] | Send IPv4 ICMPv4 packet encapsulated into GRE and \
-| | ... | check IP, MAC headers on received packed.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send ICPMv4 packet. Type: string
-| | ... | - rx_if - Interface where receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of GRE packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address of ICMP packet.
-| | ... | Type: string
-| | ... | - inner_src_ip - Source IP address of ICMP packet. Type: string
-| | ... | - inner_dst_ip - Destination IP address of ICMP packet.
-| | ... | Type: string
-| | ... | - outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - outer_dst_ip - Destination IP address of GRE packet.
-| | ... | Type: string
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Send GRE and check received ICMPv4 header \| ${tg_node} \
-| | ... | \| ${tg_to_dut_if2} \| ${tg_to_dut_if1} \| ${tx_dst_mac} \
-| | ... | \| ${rx_dst_mac} \| ${net2_host_address} \| ${net1_host_address} \
-| | ... | \| ${dut2_ip_address} \| ${dut1_ip_address} \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${rx_dst_mac}
-| | ... | ${inner_src_ip} | ${inner_dst_ip}
-| | ... | ${outer_src_ip} | ${outer_dst_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --inner_src_ip | ${inner_src_ip} | --inner_dst_ip | ${inner_dst_ip}
-| | ... | --outer_src_ip | ${outer_src_ip} | --outer_dst_ip | ${outer_dst_ip}
-| | Run Traffic Script On Node
-| | ... | send_gre_check_icmp_headers.py | ${tg_node} | ${args}
-
-| Send GRE and check received GRE header
-| | [Documentation] | Send IPv4 UDP packet encapsulated into GRE and \
-| | ... | check if received packed contains correct MAC GRE, IP, UDP headers.
-| | ...
-| | ... | *Arguments:*
-| | ... | - tg_node - Node where to run traffic script. Type: dictionary
-| | ... | - tx_if - Interface from where send GRE packet. Type: string
-| | ... | - rx_if - Interface where to receive GRE packet. Type: string
-| | ... | - tx_dst_mac - Destination MAC address of transferred packet.
-| | ... | Type: string
-| | ... | - tx_src_mac - Source MAC address of transferred packet. Type: string
-| | ... | - tx_outer_dst_ip - Destination IP address of GRE packet. Type: string
-| | ... | - tx_outer_src_ip - Source IP address of GRE packet. Type: string
-| | ... | - tx_inner_dst_ip - Destination IP address of UDP packet. Type: string
-| | ... | - tx_inner_src_ip - Source IP address of UDP packet. Type: string
-| | ... | - rx_dst_mac - Expected destination MAC address. Type: string
-| | ... | - rx_src_mac - Expected source MAC address. Type: string
-| | ... | - rx_outer_dst_ip - Expected destination IP address of received GRE
-| | ... | packet. Type: string
-| | ... | - rx_outer_src_ip - Expected source IP address of received GRE
-| | ... | packet. Type: string
-| | ...
-| | ... | __Note:__
-| | ... | rx_inner_dst_ip and rx_inner_src_ip should be same as transferred
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned
-| | ...
-| | ... | *Example:*
-| | ... | \| Send GRE and check received GRE header \| ${tg_node} \
-| | ... | \| port3 \| port3 \| 08:00:27:f3:be:f0 \| 08:00:27:46:2b:4c \
-| | ... | \| 10.0.0.1 \| 10.0.0.2 \| 192.168.3.100 \| 192.168.2.100 \
-| | ... | \| 08:00:27:46:2b:4c \| 08:00:27:f3:be:f0 \| 10.0.0.3 \| 10.0.0.1 \|
-| | ...
-| | [Arguments] | ${tg_node} | ${tx_if} | ${rx_if}
-| | ... | ${tx_dst_mac} | ${tx_src_mac}
-| | ... | ${tx_outer_dst_ip} | ${tx_outer_src_ip}
-| | ... | ${tx_inner_dst_ip} | ${tx_inner_src_ip}
-| | ... | ${rx_dst_mac} | ${rx_src_mac}
-| | ... | ${rx_outer_dst_ip} | ${rx_outer_src_ip}
-| | ${tx_if_name}= | Get interface name | ${tg_node} | ${tx_if}
-| | ${rx_if_name}= | Get interface name | ${tg_node} | ${rx_if}
-| | ${args}= | Catenate | --tx_if | ${tx_if_name} | --rx_if | ${rx_if_name}
-| | ... | --tx_dst_mac | ${tx_dst_mac} | --tx_src_mac | ${tx_src_mac}
-| | ... | --tx_outer_dst_ip | ${tx_outer_dst_ip}
-| | ... | --tx_outer_src_ip | ${tx_outer_src_ip}
-| | ... | --tx_inner_dst_ip | ${tx_inner_dst_ip}
-| | ... | --tx_inner_src_ip | ${tx_inner_src_ip}
-| | ... | --rx_dst_mac | ${rx_dst_mac}
-| | ... | --rx_src_mac | ${rx_src_mac}
-| | ... | --rx_outer_dst_ip | ${rx_outer_dst_ip}
-| | ... | --rx_outer_src_ip | ${rx_outer_src_ip}
-| | Run Traffic Script On Node
-| | ... | send_gre_check_gre_headers.py | ${tg_node} | ${args}
-
| Send ICMP echo request and verify answer
| | [Documentation] | Run traffic script that waits for ICMP reply and ignores
| | ... | all other packets.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - tg_node - TG node where run traffic script. Type: dictionary
| | ... | - tg_interface - TG interface where send ICMP echo request.
@@ -820,17 +227,17 @@
| | ... | - dst_ip - Destination IP address. Type: string
| | ... | - src_ip - Source IP address. Type: string
| | ... | - timeout - Wait timeout in seconds (Default: 10). Type: integer
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send ICMP echo request and verify answer \
| | ... | \| ${nodes['TG']} \| eth2 \
| | ... | \| 08:00:27:46:2b:4c \| 08:00:27:66:b8:57 \
| | ... | \| 192.168.23.10 \| 192.168.23.1 \| 10 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${tg_interface}
| | ... | ${dst_mac} | ${src_mac} | ${dst_ip} | ${src_ip} | ${timeout}=${10}
-| | ...
+| |
| | ${tg_interface_name}= | Get interface name | ${tg_node} | ${tg_interface}
| | ${args}= | Catenate | --rx_if ${tg_interface_name}
| | ... | --tx_if ${tg_interface_name} | --dst_mac ${dst_mac}
@@ -842,7 +249,7 @@
| Send IPsec Packet and verify ESP encapsulation in received packet
| | [Documentation] | Send IPsec packet from TG to DUT. Receive IPsec packet\
| | ... | from DUT on TG and verify ESP encapsulation.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - TG node. Type: dictionary
| | ... | - tx_interface - TG Interface 1. Type: string
@@ -861,7 +268,7 @@
| | ... | - r_ip - Remote IP address. Type: string
| | ... | - l_tunnel - Local tunnel IP address (optional). Type: string
| | ... | - r_tunnel - Remote tunnel IP address (optional). Type: string
-| | ...
+| |
| | ... | *Example:*
| | ... | \| ${encr_alg}= \| Crypto Alg AES CBC 128 \|
| | ... | \| ${auth_alg}= \| Integ Alg SHA1 96 \|
@@ -871,12 +278,12 @@
| | ... | \| sixteenbytes_key \| ${auth_alg} \| twentybytessecretkey \
| | ... | \| ${1001} \| ${1000} \| 192.168.3.3 \| 192.168.4.4 \| 192.168.100.2 \
| | ... | \| 192.168.100.3 \|
-| | ...
+| |
| | [Arguments] | ${node} | ${tx_interface} | ${rx_interface} | ${tx_dst_mac}
| | ... | ${rx_src_mac} | ${crypto_alg} | ${crypto_key} | ${integ_alg}
| | ... | ${integ_key} | ${l_spi} | ${r_spi} | ${l_ip} | ${r_ip}
| | ... | ${l_tunnel}=${None} | ${r_tunnel}=${None}
-| | ...
+| |
| | ${tx_src_mac}= | Get Interface Mac | ${node} | ${tx_interface}
| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_interface}
| | ${rx_dst_mac}= | Get Interface Mac | ${node} | ${tx_interface}
@@ -899,12 +306,12 @@
| Send packet and verify LISP encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -916,21 +323,21 @@
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP encap \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \| 10.0.1.1 \
| | ... | \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
@@ -944,12 +351,12 @@
| Send packet and verify LISP GPE encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP-GPE encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
-| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -961,22 +368,22 @@
| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP GPE encap \| ${nodes['TG']} \
| | ... | \| 10.0.0.1 \| 32.0.0.1 \
| | ... | \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \
| | ... | \| 10.0.1.1 \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port} |
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
@@ -990,12 +397,12 @@
| Send packet and verify LISPoTunnel encap
| | [Documentation] | Send ICMP packet to DUT out one interface and receive\
| | ... | a LISP encapsulated packet on the other interface.
-| | ...
+| |
| | ... | *Arguments:*
-| | ...
+| |
| | ... | _NOTE:_ Arguments are based on topology:
| | ... | TG(if1)->(if1)DUT(if2)->TG(if2)
-| | ...
+| |
| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary
| | ... | - src_ip - IP of source interface (TG-if1). Type: string
| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string
@@ -1008,21 +415,21 @@
| | ... | - src_rloc - configured RLOC source address. Type: string
| | ... | - dst_rloc - configured RLOC destination address. Type: string
| | ... | - ot_mode - overlay tunnel mode. Type: string
-| | ...
+| |
| | ... | *Return:*
| | ... | - No value returned
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Send packet and verify LISP encap \| ${nodes['TG']} \| 10.0.0.1 \
| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \
| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \| 10.0.1.1 \
| | ... | \| 10.0.1.2 \|
-| | ...
+| |
| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port}
| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac}
| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc} | ${ot_mode}
-| | ...
+| |
| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port}
| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port}
| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac
diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot
index c6e5373c8b..bdb1964bd3 100644
--- a/resources/libraries/robot/shared/vm.robot
+++ b/resources/libraries/robot/shared/vm.robot
@@ -21,7 +21,7 @@
| | [Documentation]
| | ... | Start 1..N chains of 1..N QEMU guests (VNFs) with two vhost-user\
| | ... | interfaces and interconnecting NF.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - nf_chains - Number of chains of NFs. Type: integer
| | ... | - nf_nodes - Number of NFs nodes per chain. Type: integer
@@ -34,16 +34,16 @@
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
| | ... | - vnf - Network function as a payload. Type: string
| | ... | - pinning - Whether to pin QEMU VMs to specific cores
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure chains of VMs connected via vhost-user
| | ... | \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \| True \|
-| | ...
+| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False}
| | ... | ${perf_qemu_qsz}=${1024} | ${use_tuned_cfs}=${False}
| | ... | ${auto_scale}=${True} | ${vnf}=vpp | ${pinning}=${True}
-| | ...
+| |
| | Import Library | resources.libraries.python.QemuManager | ${nodes}
| | ... | WITH NAME | vnf_manager
| | Run Keyword | vnf_manager.Construct VMs on all nodes
@@ -61,7 +61,7 @@
| | [Documentation]
| | ... | Start 1..N chains of 1..N QEMU guests (VNFs) with two vhost-user\
| | ... | interfaces and interconnecting NF on single DUT node.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - node - DUT node. Type: dictionary
| | ... | - nf_chains - Number of chains of NFs. Type: integer
@@ -75,18 +75,18 @@
| | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean
| | ... | - vnf - Network function as a payload. Type: string
| | ... | - pinning - Whether to pin QEMU VMs to specific cores
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Configure chains of NFs connected via vhost-user on single node
| | ... | \| DUT1 \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \|
| | ... | True \|
-| | ...
+| |
| | [Arguments] | ${node} | ${nf_chains}=${1} | ${nf_nodes}=${1}
| | ... | ${jumbo}=${False} | ${perf_qemu_qsz}=${1024}
| | ... | ${use_tuned_cfs}=${False} | ${auto_scale}=${True} | ${vnf}=vpp
| | ... | ${pinning}=${True}
-| | ...
+| |
| | Import Library | resources.libraries.python.QemuManager | ${nodes}
| | ... | WITH NAME | vnf_manager
| | Run Keyword | vnf_manager.Initialize
diff --git a/resources/libraries/robot/tcp/tcp_setup.robot b/resources/libraries/robot/tcp/tcp_setup.robot
index 91192639c1..718070979f 100644
--- a/resources/libraries/robot/tcp/tcp_setup.robot
+++ b/resources/libraries/robot/tcp/tcp_setup.robot
@@ -15,9 +15,9 @@
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.tcp.TCPUtils
-| ...
+|
| Resource | resources/libraries/robot/ip/ip4.robot
-| ...
+|
| Documentation | L2 keywords to set up VPP to test tcp.
*** Keywords ***
@@ -25,7 +25,7 @@
| | [Documentation]
| | ... | Configure IP address on the port, set it up and start HTTP server on
| | ... | the VPP.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - http_static_plugin - Use the HTTP static plugin http server.
| | ... | Type: boolean
@@ -34,15 +34,15 @@
| | ... | - fifo_size - FIFO size in kB. Type: string
| | ... | - private_segment_size - Private segment size. Number + unit.
| | ... | Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Set up HTTP server with paramters on the VPP node \| ${true}\
| | ... | \| 400 \| 4096 \| 2g \|
-| | ...
+| |
| | [Arguments] | ${http_static_plugin} | ${prealloc_fifos} | ${fifo_size}
| | ... | ${private_segment_size}
-| | ...
+| |
| | Set Interface State | ${dut1} | ${dut1_if1} | up
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.10.2 | 24
| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 192.168.20.2 | 24
diff --git a/resources/libraries/robot/wrk/wrk_utils.robot b/resources/libraries/robot/wrk/wrk_utils.robot
index 1c65228130..1f6261af5a 100644
--- a/resources/libraries/robot/wrk/wrk_utils.robot
+++ b/resources/libraries/robot/wrk/wrk_utils.robot
@@ -17,7 +17,7 @@
| Library | resources.libraries.python.DUTSetup
| Library | resources.libraries.python.TrafficGenerator
| Library | resources.libraries.python.topology.Topology
-| ...
+|
| Documentation | L2 keywords to set up wrk and to measure performance
| ... | parameters using wrk.
@@ -25,17 +25,17 @@
| Measure throughput
| | [Documentation]
| | ... | Measure throughput using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure throughput \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | bw
| | Set test message | ${output}
@@ -43,17 +43,17 @@
| Measure requests per second
| | [Documentation]
| | ... | Measure number of requests per second using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure requests per second \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | rps
| | Set test message | ${output}
@@ -61,17 +61,17 @@
| Measure connections per second
| | [Documentation]
| | ... | Measure number of connections per second using wrk.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - ${profile} - The name of the wrk traffic profile defining the
| | ... | traffic. Type: string
-| | ...
+| |
| | ... | *Example:*
-| | ...
+| |
| | ... | \| Measure connections per second \| wrk-bw-1url-1core-50con \|
-| | ...
+| |
| | [Arguments] | ${profile}
-| | ...
+| |
| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2}
| | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | cps
| | Set test message | ${output}
diff --git a/resources/test_data/lisp/api/lisp_api_resources.py b/resources/test_data/lisp/api/lisp_api_resources.py
deleted file mode 100644
index cc97f1c0e3..0000000000
--- a/resources/test_data/lisp/api/lisp_api_resources.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for Lisp API test suite."""
-
-# Lisp status example test data.
-lisp_status = [{"gpe_status":"disabled",
- "feature_status":"disabled"},
- {"gpe_status":"enabled",
- "feature_status":"enabled"}]
-
-# Example lisp local eid we want set to VPP
-# and then check if it is set correctly.
-eid_table = [{'eid': '192.168.0.0',
- 'vni': 0,
- 'eid-prefix-len': 24,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '192.168.1.0',
- 'vni': 0,
- 'eid-prefix-len': 24,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '192.168.2.0',
- 'vni': 0,
- 'eid-prefix-len': 24,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '192.168.3.0',
- 'vni': 0,
- 'eid-prefix-len': 24,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '10:1::',
- 'vni': 0,
- 'eid-prefix-len': 64,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '10:2::',
- 'vni': 0,
- 'eid-prefix-len': 64,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0},
- {'eid': '10:3::',
- 'vni': 0,
- 'eid-prefix-len': 64,
- 'locator': [],
- 'locator-set': 'ls1',
- 'ttl': 0,
- 'authoritative': 0}]
-
-# Expected data from VPP via VAT
-eid_table_vat = [
- {
- "action": 0,
- "is_local": 1,
- "eid": "192.168.0.0/24",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "192.168.1.0/24",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "192.168.2.0/24",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "192.168.3.0/24",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "10:1::/64",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "10:2::/64",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- },
- {
- "action": 0,
- "is_local": 1,
- "eid": "10:3::/64",
- "vni": 0,
- "ttl": 0,
- "authoritative": 0
- }
-]
-
-# Example lisp map resolvers data we want set to VPP
-# and then check if it is set correctly.
-map_resolver = [{'map resolver': '192.169.0.1'},
- {'map resolver': '192.169.1.1'},
- {'map resolver': '192.169.2.1'},
- {'map resolver': '12:1::1'},
- {'map resolver': '12:2::1'}]
diff --git a/resources/test_data/lisp/ipv4_ipsec_lispgpe_ipv4/ipv4_ipsec_lispgpe_ipv4.py b/resources/test_data/lisp/ipv4_ipsec_lispgpe_ipv4/ipv4_ipsec_lispgpe_ipv4.py
deleted file mode 100644
index 9ec54c5d4b..0000000000
--- a/resources/test_data/lisp/ipv4_ipsec_lispgpe_ipv4/ipv4_ipsec_lispgpe_ipv4.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip4-lispgpe-ip4 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip4 = '6.6.3.1'
-dut2_to_dut1_ip4 = '6.6.3.2'
-dut1_to_tg_ip4 = '6.6.1.1'
-dut2_to_tg_ip4 = '6.6.2.1'
-tg1_ip4 = '6.6.1.2'
-tg2_ip4 = '6.6.2.2'
-prefix4 = 24
-
-dut1_to_dut2_ip4_static_adjacency = {'vni': 0,
- 'deid': '6.6.2.0',
- 'rloc': '6.6.3.2',
- 'seid': '6.6.1.0',
- 'prefix': 24}
-dut2_to_dut1_ip4_static_adjacency = {'vni': 0,
- 'deid': '6.6.1.0',
- 'seid': '6.6.2.0',
- 'rloc': '6.6.3.1',
- 'prefix': 24}
-
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.6.1.0',
- 'prefix': 24}
-dut2_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.6.2.0',
- 'prefix': 24}
-
-fib_table_1 = 1
-dut1_dut2_vni = 1
-
-dut2_spi = 1000
-dut1_spi = 1001
-ESP_PROTO = 50
diff --git a/resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py b/resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
deleted file mode 100644
index d5cfb8b6cd..0000000000
--- a/resources/test_data/lisp/ipv4_lispgpe_ipv4/ipv4_lispgpe_ipv4.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip4-lispgpe-ip4 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-tg1_ip4 = '6.0.1.1'
-dut1_to_tg_ip4 = '6.0.1.2'
-
-dut1_vif1_ip4 = '6.0.2.1'
-vm1_vif1_ip4 = '6.0.2.2'
-
-vm1_vif2_ip4 = '6.0.3.1'
-dut1_vif2_ip4 = '6.0.3.2'
-
-dut1_to_dut2_ip4 = '6.0.4.1'
-dut2_to_dut1_ip4 = '6.0.4.2'
-
-dut2_to_tg_ip4 = '6.0.5.1'
-tg2_ip4 = '6.0.5.2'
-
-src_ip_range = '6.0.1.0'
-dst_ip_range = '6.0.5.0'
-
-vm1_vif1_mac = '52:54:00:00:04:01'
-vm1_vif2_mac = '52:54:00:00:04:02'
-
-vhost_ip = '6.6.1.3'
-
-prefix4 = 24
-
-dut1_to_dut2_ip4_static_adjacency = {'vni': 0,
- 'deid': dst_ip_range,
- 'seid': src_ip_range,
- 'rloc': dut2_to_dut1_ip4,
- 'prefix': prefix4}
-dut2_to_dut1_ip4_static_adjacency = {'vni': 0,
- 'deid': src_ip_range,
- 'seid': dst_ip_range,
- 'rloc': dut1_to_dut2_ip4,
- 'prefix': prefix4}
-
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': src_ip_range,
- 'prefix': prefix4}
-dut2_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': dst_ip_range,
- 'prefix': prefix4}
-
-fib_table_1 = 1
-dut1_dut2_vni = 1
-
-sock1 = "/tmp/sock1"
-sock2 = "/tmp/sock2"
-
-bid = 10
diff --git a/resources/test_data/lisp/ipv4_lispgpe_ipv6/ipv4_lispgpe_ipsec_ipv6.py b/resources/test_data/lisp/ipv4_lispgpe_ipv6/ipv4_lispgpe_ipsec_ipv6.py
deleted file mode 100644
index 019b81f349..0000000000
--- a/resources/test_data/lisp/ipv4_lispgpe_ipv6/ipv4_lispgpe_ipsec_ipv6.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip4-lispgpe-ip6 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '2001:cdba:3::1'
-dut2_to_dut1_ip6 = '2001:cdba:3::2'
-dut1_to_tg_ip4 = '6.0.1.1'
-dut2_to_tg_ip4 = '6.0.2.1'
-tg1_ip4 = '6.0.1.2'
-tg2_ip4 = '6.0.2.2'
-prefix4 = 24
-prefix6 = 64
-vhost_ip = '6.6.1.3'
-lisp_gpe_int = 'lisp_gpe0'
-
-dut1_to_dut2_ip_static_adjacency = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.1.0',
- 'rloc': dut2_to_dut1_ip6,
- 'prefix': 24}
-dut2_to_dut1_ip_static_adjacency = {'vni': 0,
- 'deid': '6.0.1.0',
- 'seid': '6.0.2.0',
- 'rloc': dut1_to_dut2_ip6,
- 'prefix': 24}
-
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.1.0',
- 'prefix': 24}
-dut2_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.2.0',
- 'prefix': 24}
-
-dut1_fib_table = '1'
-dut2_fib_table = '2'
-
-dut2_spi = 1000
-dut1_spi = 1001
-ESP_PROTO = 50
-sock1 = '/tmp/sock1'
-sock2 = '/tmp/sock2'
-bid = 10
diff --git a/resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py b/resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py
deleted file mode 100644
index 735b023d5a..0000000000
--- a/resources/test_data/lisp/ipv6_lispgpe_ipv4/ipv6_lispgpe_ipsec_ipv4.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip6-ipsec-lispgpe-ip4 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv6 Lisp static mapping configuration
-dut1_to_dut2_ip4 = '6.6.3.1'
-dut2_to_dut1_ip4 = '6.6.3.2'
-dut1_to_tg_ip6 = '2001:cdba:1::1'
-dut2_to_tg_ip6 = '2001:cdba:2::1'
-tg1_ip6 = '2001:cdba:1::2'
-tg2_ip6 = '2001:cdba:2::2'
-prefix4 = 24
-prefix6 = 64
-vhost_ip = '2001:cdba:6::3'
-lisp_gpe_int = 'lisp_gpe0'
-
-dut1_to_dut2_ip_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:2::0',
- 'seid': '2001:cdba:1::0',
- 'rloc': dut2_to_dut1_ip4,
- 'prefix': 64}
-dut2_to_dut1_ip_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:1::0',
- 'seid': '2001:cdba:2::0',
- 'rloc': dut1_to_dut2_ip4,
- 'prefix': 64}
-
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:1::0',
- 'prefix': 64}
-dut2_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:2::0',
- 'prefix': 64}
-
-fib_table_1 = 1
-dut1_dut2_vni = 1
-
-dut2_spi = 1000
-dut1_spi = 1001
-ESP_PROTO = 50
-sock1 = '/tmp/sock1'
-sock2 = '/tmp/sock2'
-bid = 10
diff --git a/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipsec_ipv6.py b/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipsec_ipv6.py
deleted file mode 100644
index 5d79e4b0eb..0000000000
--- a/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipsec_ipv6.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip6-ipsec-lispgpe-ip6 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '2001:cdba:3::1'
-dut2_to_dut1_ip6 = '2001:cdba:3::2'
-dut1_to_tg_ip6 = '2001:cdba:1::1'
-dut2_to_tg_ip6 = '2001:cdba:2::1'
-tg1_ip6 = '2001:cdba:1::2'
-tg2_ip6 = '2001:cdba:2::2'
-prefix6 = 64
-
-dut1_to_dut2_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:2::0',
- 'rloc': dut2_to_dut1_ip6,
- 'seid': '2001:cdba:1::0',
- 'prefix': 64}
-dut2_to_dut1_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:1::0',
- 'seid': '2001:cdba:2::0',
- 'rloc': dut1_to_dut2_ip6,
- 'prefix': 64}
-
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:1::0',
- 'prefix': 64}
-dut2_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:2::0',
- 'prefix': 64}
-
-dut1_fib_table = '1'
-dut2_fib_table = '2'
diff --git a/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py b/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
deleted file mode 100644
index 9f7fa3c926..0000000000
--- a/resources/test_data/lisp/ipv6_lispgpe_ipv6/ipv6_lispgpe_ipv6.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for ip6-lispgpe-ip6 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '2001:cdba:3::1'
-dut2_to_dut1_ip6 = '2001:cdba:3::2'
-dut1_to_tg_ip6 = '2001:cdba:1::1'
-dut2_to_tg_ip6 = '2001:cdba:2::1'
-tg1_ip6 = '2001:cdba:1::2'
-tg2_ip6 = '2001:cdba:2::2'
-prefix6 = 64
-
-vhost_ip = '2001:cdba:6::9'
-
-dut1_to_dut2_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:2::0',
- 'rloc': '2001:cdba:3::2',
- 'seid': '2001:cdba:1::0',
- 'prefix': 64}
-dut2_to_dut1_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:cdba:1::0',
- 'seid': '2001:cdba:2::0',
- 'rloc': '2001:cdba:3::1',
- 'prefix': 64}
-
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:1::0',
- 'prefix': 64}
-dut2_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:cdba:2::0',
- 'prefix': 64}
-
-fib_table_1 = 1
-dut1_dut2_vni = 1
-
-sock1 = "/tmp/sock1"
-sock2 = "/tmp/sock2"
-bid = 10
diff --git a/resources/test_data/lisp/l2/l2_ipv4.py b/resources/test_data/lisp/l2/l2_ipv4.py
deleted file mode 100644
index 7edccbc9ca..0000000000
--- a/resources/test_data/lisp/l2/l2_ipv4.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for Eth-IPv4-ICMPv4-LISPGpe-IP4 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-lisp_dut_settings = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1,
- 'bd': 10,
- 'vni': 5}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip4 = '10.0.3.1'
-dut2_to_dut1_ip4 = '10.0.3.2'
-dut1_to_tg_ip4 = '10.0.1.1'
-dut2_to_tg_ip4 = '10.0.2.1'
-tg1_ip4 = '10.0.1.2'
-tg2_ip4 = '10.0.2.2'
-prefix4 = 24
-vpp_bd_id = 10
-tg_if1_mac = '08:22:22:22:22:11'
-tg_if2_mac = '08:22:22:22:22:22'
-
-dut1_to_dut2_ip4_static_adjacency = {'eid': tg_if2_mac,
- 'seid': tg_if1_mac,
- 'rloc': dut2_to_dut1_ip4,
- 'int': 'dut1_to_dut2',
- 'map_res': '10.0.0.2'}
-dut2_to_dut1_ip4_static_adjacency = {'eid': tg_if1_mac,
- 'seid': tg_if2_mac,
- 'rloc': dut1_to_dut2_ip4,
- 'map_res': '10.0.0.1',
- 'int': 'dut2_to_dut1'}
diff --git a/resources/test_data/lisp/l2/l2_ipv6.py b/resources/test_data/lisp/l2/l2_ipv6.py
deleted file mode 100644
index 2e158828a3..0000000000
--- a/resources/test_data/lisp/l2/l2_ipv6.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for Eth-IP6-ICMPv6-LISPGpe-IP6 encapsulation test suite."""
-
-# Lisp default global value
-locator_name = 'tst_locator'
-
-# Lisp default locator_set value
-lisp_dut_settings = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1,
- 'bd': 10,
- 'vni': 5}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '2001:cdba:3::1'
-dut2_to_dut1_ip6 = '2001:cdba:3::2'
-dut1_to_tg_ip6 = '2001:cdba:1::1'
-dut2_to_tg_ip6 = '2001:cdba:2::1'
-tg1_ip6 = '2001:cdba:1::2'
-tg2_ip6 = '2001:cdba:2::2'
-prefix6 = 64
-vpp_bd_id = 10
-tg_if1_mac = '08:22:22:22:22:11'
-tg_if2_mac = '08:22:22:22:22:22'
-
-dut1_to_dut2_ip6_static_adjacency = {'eid': tg_if2_mac,
- 'seid': tg_if1_mac,
- 'rloc': dut2_to_dut1_ip6,
- 'int': 'dut1_to_dut2',
- 'map_res': tg2_ip6}
-dut2_to_dut1_ip6_static_adjacency = {'eid': tg_if1_mac,
- 'seid': tg_if2_mac,
- 'rloc': dut1_to_dut2_ip6,
- 'map_res': tg1_ip6,
- 'int': 'dut2_to_dut1'}
diff --git a/resources/test_data/lisp/lisp.py b/resources/test_data/lisp/lisp.py
index 4539f8208d..f6a4152fda 100644
--- a/resources/test_data/lisp/lisp.py
+++ b/resources/test_data/lisp/lisp.py
@@ -14,80 +14,98 @@
"""Test variables of lisp and lispgpe (ip4/ip6) encapsulation test suite."""
# Lisp default global value
-locator_name = 'tst_locator'
+locator_name = b"tst_locator"
# Test configuration data
-tg_if1_ip4= '6.0.0.2'
-tg_if2_ip4= '6.0.1.2'
-dut_if1_ip4= '6.0.0.1'
-dut_if2_ip4= '6.0.1.1'
-tg_if2_ip6= '6:0:1::2'
-dut_if2_ip6= '6:0:1::1'
+tg_if1_ip4= u"6.0.0.2"
+tg_if2_ip4= u"6.0.1.2"
+dut_if1_ip4= u"6.0.0.1"
+dut_if2_ip4= u"6.0.1.1"
+tg_if2_ip6= u"6:0:1::2"
+dut_if2_ip6= u"6:0:1::1"
ip4_plen= 24
-src_ip4= '6.0.0.2'
-dst_ip4= '6.0.2.2'
+src_ip4= u"6.0.0.2"
+dst_ip4= u"6.0.2.2"
src_rloc4= dut_if2_ip4
dst_rloc4= tg_if2_ip4
src_rloc6= dut_if2_ip6
dst_rloc6= tg_if2_ip6
#IP6 over IP4 LISP configuration data
-tg_if1_ip6= '6::2'
-dut_if1_ip6= '6:0:0::1'
-src_ip6= '6::2'
-dst_ip6= '6:0:2::2'
+tg_if1_ip6= u"6::2"
+dut_if1_ip6= u"6:0:0::1"
+src_ip6= u"6::2"
+dst_ip6= u"6:0:2::2"
ip6_plen=64
# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
+duts_locator_set = {
+ u"locator_name": locator_name,
+ u"priority": 1,
+ u"weight": 1
+}
# IPv4 Lisp static mapping configuration
-dut1_to_tg_ip4_static_adjacency = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.0.0',
- 'rloc': '6.0.1.2',
- 'prefix': 24}
+dut1_to_tg_ip4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"6.0.2.0",
+ u"seid": u"6.0.0.0",
+ u"rloc": u"6.0.1.2",
+ u"prefix": 24
+}
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.0.0',
- 'prefix': 24}
+dut1_ip4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"6.0.0.0",
+ u"prefix": 24
+}
# IPv6 Lisp static mapping configuration
-dut1_to_tg_ip6_static_adjacency = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:0::0',
- 'rloc': '6:0:1::2',
- 'prefix': 64}
+dut1_to_tg_ip6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"6:0:2::0",
+ u"seid": u"6:0:0::0",
+ u"rloc": u"6:0:1::2",
+ u"prefix": 64
+}
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:0::0',
- 'prefix': 64}
+dut1_ip6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"6:0:0::0",
+ u"prefix": 64
+}
#IPv6 over IPv4 LISP mapping
-dut1_ip6o4_static_adjacency = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:0::0',
- 'rloc': '6.0.1.2',
- 'prefix': 64}
-dut1_ip6o4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:0::0',
- 'prefix': 64}
+dut1_ip6o4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"6:0:2::0",
+ u"seid": u"6:0:0::0",
+ u"rloc": u"6.0.1.2",
+ u"prefix": 64
+}
+dut1_ip6o4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"6:0:0::0",
+ u"prefix": 64
+}
#IPv4 over IPv6 LISP mapping
-dut1_ip4o6_static_adjacency = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.0.0',
- 'rloc': '6:0:1::2',
- 'prefix': 24}
-dut1_ip4o6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.0.0',
- 'prefix': 24}
+dut1_ip4o6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"6.0.2.0",
+ u"seid": u"6.0.0.0",
+ u"rloc": u"6:0:1::2",
+ u"prefix": 24
+}
+dut1_ip4o6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"6.0.0.0",
+ u"prefix": 24
+}
diff --git a/resources/test_data/lisp/performance/lisp_static_adjacency.py b/resources/test_data/lisp/performance/lisp_static_adjacency.py
index 11648b91a3..29ab80ad73 100644
--- a/resources/test_data/lisp/performance/lisp_static_adjacency.py
+++ b/resources/test_data/lisp/performance/lisp_static_adjacency.py
@@ -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:
@@ -14,111 +14,145 @@
"""Test variables for Lisp remote static mapping test suite."""
# Lisp default global value
-locator_name = 'ls1'
+locator_name = b"ls1"
# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
+duts_locator_set = {
+ u"locator_name": locator_name,
+ u"priority": 1,
+ u"weight": 1
+}
# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip4 = '1.1.1.1'
-dut2_to_dut1_ip4 = '1.1.1.2'
-dut1_to_tg_ip4 = '10.10.10.1'
-dut2_to_tg_ip4 = '20.20.20.1'
+dut1_to_dut2_ip4 = u"1.1.1.1"
+dut2_to_dut1_ip4 = u"1.1.1.2"
+dut1_to_tg_ip4 = u"10.10.10.1"
+dut2_to_tg_ip4 = u"20.20.20.1"
prefix4 = 24
-dut1_ip4_static_adjacency = {'vni': 0,
- 'deid': '20.20.20.0',
- 'seid': '10.10.10.0',
- 'rloc': '1.1.1.2',
- 'prefix': 24}
-dut2_ip4_static_adjacency = {'vni': 0,
- 'deid': '10.10.10.0',
- 'seid': '20.20.20.0',
- 'rloc': '1.1.1.1',
- 'prefix': 24}
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '10.10.10.0',
- 'prefix': 24}
-dut2_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '20.20.20.0',
- 'prefix': 24}
+dut1_ip4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"20.20.20.0",
+ u"seid": u"10.10.10.0",
+ u"rloc": u"1.1.1.2",
+ u"prefix": 24
+}
+dut2_ip4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"10.10.10.0",
+ u"seid": u"20.20.20.0",
+ u"rloc": u"1.1.1.1",
+ u"prefix": 24
+}
+dut1_ip4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"10.10.10.0",
+ u"prefix": 24
+}
+dut2_ip4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"20.20.20.0",
+ u"prefix": 24
+}
# IPv6 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '2001:3::1'
-dut2_to_dut1_ip6 = '2001:3::2'
-dut1_to_tg_ip6 = '2001:1::1'
-dut2_to_tg_ip6 = '2001:2::1'
+dut1_to_dut2_ip6 = u"2001:3::1"
+dut2_to_dut1_ip6 = u"2001:3::2"
+dut1_to_tg_ip6 = u"2001:1::1"
+dut2_to_tg_ip6 = u"2001:2::1"
prefix6 = 64
-dut1_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:2::0',
- 'seid': '2001:1::0',
- 'rloc': '2001:3::2',
- 'prefix': 64}
-dut2_ip6_static_adjacency = {'vni': 0,
- 'deid': '2001:1::0',
- 'seid': '2001:2::0',
- 'rloc': '2001:3::1',
- 'prefix': 64}
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:1::0',
- 'prefix': 64}
-dut2_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:2::0',
- 'prefix': 64}
+dut1_ip6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"2001:2::0",
+ u"seid": u"2001:1::0",
+ u"rloc": u"2001:3::2",
+ u"prefix": 64
+}
+dut2_ip6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"2001:1::0",
+ u"seid": u"2001:2::0",
+ u"rloc": u"2001:3::1",
+ u"prefix": 64
+}
+dut1_ip6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"2001:1::0",
+ u"prefix": 64
+}
+dut2_ip6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"2001:2::0",
+ u"prefix": 64
+}
# IPv4 over IPv6 Lisp static mapping configuration
-dut1_to_dut2_ip4o6 = '2001:3::1'
-dut2_to_dut1_ip4o6 = '2001:3::2'
-dut1_to_tg_ip4o6 = '10.10.10.1'
-dut2_to_tg_ip4o6 = '20.20.20.1'
+dut1_to_dut2_ip4o6 = u"2001:3::1"
+dut2_to_dut1_ip4o6 = u"2001:3::2"
+dut1_to_tg_ip4o6 = u"10.10.10.1"
+dut2_to_tg_ip4o6 = u"20.20.20.1"
tg_prefix4o6 = 24
dut_prefix4o6 = 64
-dut1_ip4o6_static_adjacency = {'vni': 0,
- 'deid': '20.20.20.0',
- 'seid': '10.10.10.0',
- 'rloc': '2001:3::2',
- 'prefix': 24}
-dut2_ip4o6_static_adjacency = {'vni': 0,
- 'deid': '10.10.10.0',
- 'seid': '20.20.20.0',
- 'rloc': '2001:3::1',
- 'prefix': 24}
-dut1_ip4o6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '10.10.10.0',
- 'prefix': 24}
-dut2_ip4o6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '20.20.20.0',
- 'prefix': 24}
+dut1_ip4o6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"20.20.20.0",
+ u"seid": u"10.10.10.0",
+ u"rloc": u"2001:3::2",
+ u"prefix": 24
+}
+dut2_ip4o6_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"10.10.10.0",
+ u"seid": u"20.20.20.0",
+ u"rloc": u"2001:3::1",
+ u"prefix": 24
+}
+dut1_ip4o6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"10.10.10.0",
+ u"prefix": 24
+}
+dut2_ip4o6_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"20.20.20.0",
+ u"prefix": 24
+}
# IPv6 over IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6o4 = '1.1.1.1'
-dut2_to_dut1_ip6o4 = '1.1.1.2'
-dut1_to_tg_ip6o4 = '2001:1::1'
-dut2_to_tg_ip6o4 = '2001:2::1'
+dut1_to_dut2_ip6o4 = u"1.1.1.1"
+dut2_to_dut1_ip6o4 = u"1.1.1.2"
+dut1_to_tg_ip6o4 = u"2001:1::1"
+dut2_to_tg_ip6o4 = u"2001:2::1"
tg_prefix6o4 = 64
dut_prefix6o4 = 24
-dut1_ip6o4_static_adjacency = {'vni': 0,
- 'deid': '2001:2::0',
- 'seid': '2001:1::0',
- 'rloc': '1.1.1.2',
- 'prefix': 64}
-dut2_ip6o4_static_adjacency = {'vni': 0,
- 'deid': '2001:1::0',
- 'seid': '2001:2::0',
- 'rloc': '1.1.1.1',
- 'prefix': 64}
-dut1_ip6o4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:1::0',
- 'prefix': 64}
-dut2_ip6o4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '2001:2::0',
- 'prefix': 64}
+dut1_ip6o4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"2001:2::0",
+ u"seid": u"2001:1::0",
+ u"rloc": u"1.1.1.2",
+ u"prefix": 64
+}
+dut2_ip6o4_static_adjacency = {
+ u"vni": 0,
+ u"deid": u"2001:1::0",
+ u"seid": u"2001:2::0",
+ u"rloc": u"1.1.1.1",
+ u"prefix": 64
+}
+dut1_ip6o4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"2001:1::0",
+ u"prefix": 64
+}
+dut2_ip6o4_eid = {
+ u"locator_name": locator_name,
+ u"vni": 0,
+ u"eid": u"2001:2::0",
+ u"prefix": 64
+}
diff --git a/resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py b/resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
deleted file mode 100644
index 334dcbfe3d..0000000000
--- a/resources/test_data/lisp/static_adjacency/lisp_static_adjacency.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Test variables for Lisp remote static mapping test suite."""
-
-# Lisp default global value
-locator_name = 'ls1'
-fib_table1 = 1
-dut1_dut2_vni = 1
-sock1 = '/tmp/sock1'
-sock2 = '/tmp/sock2'
-bid = 10
-vhost_ip = '6:6:1::3'
-
-# Lisp default locator_set value
-duts_locator_set = {'locator_name': locator_name,
- 'priority': 1,
- 'weight': 1}
-
-# IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip4 = '6.0.3.1'
-dut2_to_dut1_ip4 = '6.0.3.2'
-dut1_to_tg_ip4 = '6.0.1.1'
-dut2_to_tg_ip4 = '6.0.2.1'
-tg1_ip4 = '6.0.1.2'
-tg2_ip4 = '6.0.2.2'
-prefix4 = 24
-dut1_to_dut2_ip4_static_adjacency = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.1.0',
- 'rloc': '6.0.3.2',
- 'prefix': 24}
-dut2_to_dut1_ip4_static_adjacency = {'vni': 0,
- 'deid': '6.0.1.0',
- 'seid': '6.0.2.0',
- 'rloc': '6.0.3.1',
- 'prefix': 24}
-dut1_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.1.0',
- 'prefix': 24}
-dut2_ip4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.2.0',
- 'prefix': 24}
-dut2_to_dut1_ip4_reconf = '6.0.3.20'
-dut1_to_dut2_ip4_static_adjacency_reconf = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.1.0',
- 'rloc': '6.0.3.20',
- 'prefix': 24}
-
-# IPv6 Lisp static mapping configuration
-dut1_to_dut2_ip6 = '6:0:3::1'
-dut2_to_dut1_ip6 = '6:0:3::2'
-dut1_to_tg_ip6 = '6:0:1::1'
-dut2_to_tg_ip6 = '6:0:2::1'
-tg1_ip6 = '6:0:1::2'
-tg2_ip6 = '6:0:2::2'
-prefix6 = 64
-dut1_to_dut2_ip6_static_adjacency = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:1::0',
- 'rloc': '6:0:3::2',
- 'prefix': 64}
-dut2_to_dut1_ip6_static_adjacency = {'vni': 0,
- 'deid': '6:0:1::0',
- 'seid': '6:0:2::0',
- 'rloc': '6:0:3::1',
- 'prefix': 64}
-dut1_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:1::0',
- 'prefix': 64}
-dut2_ip6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:2::0',
- 'prefix': 64}
-dut2_to_dut1_ip6_reconf = '6:0:3::20'
-dut1_to_dut2_ip6_static_adjacency_reconf = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:1::0',
- 'rloc': '6:0:3::20',
- 'prefix': 64}
-
-# IPv4 over IPv6 Lisp static mapping configuration
-dut1_to_dut2_ip4o6 = '6:0:3::1'
-dut2_to_dut1_ip4o6 = '6:0:3::2'
-dut1_to_tg_ip4o6 = '6.0.1.1'
-dut2_to_tg_ip4o6 = '6.0.2.1'
-tg1_ip4o6 = '6.0.1.2'
-tg2_ip4o6 = '6.0.2.2'
-tg_prefix4o6 = 24
-dut_prefix4o6 = 64
-dut1_ip4o6_static_adjacency = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.1.0',
- 'rloc': '6:0:3::2',
- 'prefix': 24}
-dut2_ip4o6_static_adjacency = {'vni': 0,
- 'deid': '6.0.1.0',
- 'seid': '6.0.2.0',
- 'rloc': '6:0:3::1',
- 'prefix': 24}
-dut1_ip4o6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.1.0',
- 'prefix': 24}
-dut2_ip4o6_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6.0.2.0',
- 'prefix': 24}
-dut2_to_dut1_ip4o6_reconf = '6:0:3::20'
-dut1_ip4o6_static_adjacency_reconf = {'vni': 0,
- 'deid': '6.0.2.0',
- 'seid': '6.0.1.0',
- 'rloc': '6:0:3::20',
- 'prefix': 24}
-
-# IPv6 over IPv4 Lisp static mapping configuration
-dut1_to_dut2_ip6o4 = '6.0.3.1'
-dut2_to_dut1_ip6o4 = '6.0.3.2'
-dut1_to_tg_ip6o4 = '6:0:1::1'
-dut2_to_tg_ip6o4 = '6:0:2::1'
-tg1_ip6o4 = '6:0:1::2'
-tg2_ip6o4 = '6:0:2::2'
-tg_prefix6o4 = 64
-dut_prefix6o4 = 24
-dut1_ip6o4_static_adjacency = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:1::0',
- 'rloc': '6.0.3.2',
- 'prefix': 64}
-dut2_ip6o4_static_adjacency = {'vni': 0,
- 'deid': '6:0:1::0',
- 'seid': '6:0:2::0',
- 'rloc': '6.0.3.1',
- 'prefix': 64}
-dut1_ip6o4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:1::0',
- 'prefix': 64}
-dut2_ip6o4_eid = {'locator_name': locator_name,
- 'vni': 0,
- 'eid': '6:0:2::0',
- 'prefix': 64}
-dut2_to_dut1_ip6o4_reconf = '6.0.3.20'
-dut1_ip6o4_static_adjacency_reconf = {'vni': 0,
- 'deid': '6:0:2::0',
- 'seid': '6:0:1::0',
- 'rloc': '6.0.3.20',
- 'prefix': 64}
diff --git a/resources/tools/doc_gen/gen_rst.py b/resources/tools/doc_gen/gen_rst.py
index c6d82817ee..28223e22c7 100755
--- a/resources/tools/doc_gen/gen_rst.py
+++ b/resources/tools/doc_gen/gen_rst.py
@@ -16,52 +16,52 @@ from os import walk, listdir
from os.path import isfile, isdir, join, getsize
# Temporary working directory. It is created and deleted by run_doc.sh
-WORKING_DIR = "tmp"
+WORKING_DIR = u"tmp"
# Directory with resources to be documented.
-RESOURCES_DIR = "resources"
+RESOURCES_DIR = u"resources"
# Directory with libraries (python, robot) to be documented.
-LIB_DIR = "libraries"
+LIB_DIR = u"libraries"
# Directory with tests (func, perf) to be documented.
-TESTS_DIR = "tests"
+TESTS_DIR = u"tests"
-PY_EXT = ".py"
-RF_EXT = ".robot"
+PY_EXT = u".py"
+RF_EXT = u".robot"
-PATH_PY_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, "python")
-PATH_RF_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, "robot")
+PATH_PY_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, u"python")
+PATH_RF_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, u"robot")
PATH_TESTS = join(WORKING_DIR, TESTS_DIR)
# Sections in rst files
-rst_toc = """
+rst_toc = u"""
.. toctree::
"""
-rst_py_module = """
+rst_py_module = u"""
.. automodule:: {}.{}
:members:
:undoc-members:
:show-inheritance:
"""
-rst_rf_suite_setup = """
+rst_rf_suite_setup = u"""
.. robot-settings::
:source: {}
"""
-rst_rf_variables = """
+rst_rf_variables = u"""
.. robot-variables::
:source: {}
"""
-rst_rf_keywords = """
+rst_rf_keywords = u"""
.. robot-keywords::
:source: {}
"""
-rst_rf_tests = """
+rst_rf_tests = u"""
.. robot-tests::
:source: {}
"""
@@ -104,9 +104,9 @@ def create_file_name(path, start):
:returns: File name.
:rtype: str
"""
- dir_list = path.split('/')
+ dir_list = path.split(u"/")
start_index = dir_list.index(start)
- return ".".join(dir_list[start_index:-1]) + ".rst"
+ return u".".join(dir_list[start_index:-1]) + u".rst"
def create_rst_file_names_set(files, start):
@@ -139,7 +139,7 @@ def scan_dir(path):
dirs = list()
items = listdir(path)
for item in items:
- if isfile(join(path, item)) and "__init__" not in item:
+ if isfile(join(path, item)) and u"__init__" not in item:
files.append(item)
elif isdir(join(path, item)):
dirs.append(item)
@@ -158,7 +158,7 @@ def write_toc(fh, path, dirs):
"""
fh.write(rst_toc)
for dir in dirs:
- fh.write(" {}.{}\n".format('.'.join(path), dir))
+ fh.write(f" {u'.'.join(path)}.{dir}\n")
def write_module_title(fh, module_name):
@@ -170,20 +170,20 @@ def write_module_title(fh, module_name):
:type fh: BinaryIO
:type module_name: str
"""
- title = "{} suite".format(module_name)
- fh.write("\n{}\n{}\n".format(title, '-' * len(title)))
+ title = f"{module_name} suite"
+ fh.write(f"\n{title}\n{u'-' * len(title)}")
def generate_py_rst_files():
"""Generate all rst files for all python modules."""
- dirs_ignore_list = ["__pycache__", ]
+ dirs_ignore_list = [u"__pycache__", ]
py_libs = get_files(PATH_PY_LIBS, PY_EXT)
file_names = create_rst_file_names_set(py_libs, RESOURCES_DIR)
for file_name in file_names:
- path = join(WORKING_DIR, *file_name.split('.')[:-1])
+ path = join(WORKING_DIR, *file_name.split(u".")[:-1])
dirs, files = scan_dir(path)
for item in dirs_ignore_list:
@@ -194,23 +194,25 @@ def generate_py_rst_files():
break
full_path = join(WORKING_DIR, file_name)
- with open(full_path, mode='a') as fh:
+ with open(full_path, mode="a") as fh:
if getsize(full_path) == 0:
- package = file_name.split('.')[-2]
- fh.write("{}\n".format(package))
- fh.write('=' * len("{}".format(package)))
- module_path = file_name.split('.')[:-1]
+ package = file_name.split(u".")[-2]
+ fh.write(f"{package}\n")
+ fh.write(u"=" * len(f"{package}"))
+ module_path = file_name.split(u".")[:-1]
if dirs:
write_toc(fh, module_path, dirs)
for file in files:
- module_name = file.split('.')[0]
+ module_name = file.split(u".")[0]
write_module_title(fh, module_name)
- fh.write(rst_py_module.format('.'.join(module_path),
- module_name))
+ fh.write(rst_py_module.format(
+ u".".join(module_path), module_name)
+ )
-def generate_rf_rst_files(file_names, incl_tests=True, incl_keywords=True,
- incl_suite_setup=False, incl_variables=False):
+def generate_rf_rst_files(
+ file_names, incl_tests=True, incl_keywords=True, incl_suite_setup=False,
+ incl_variables=False):
"""Generate rst files for the given robot modules.
:param file_names: List of file names to be included in the documentation
@@ -230,20 +232,20 @@ def generate_rf_rst_files(file_names, incl_tests=True, incl_keywords=True,
"""
for file_name in file_names:
- path = join(WORKING_DIR, *file_name.split('.')[:-1])
+ path = join(WORKING_DIR, *file_name.split(u".")[:-1])
dirs, files = scan_dir(path)
full_path = join(WORKING_DIR, file_name)
- with open(full_path, mode='a') as fh:
+ with open(full_path, mode="a") as fh:
if getsize(full_path) == 0:
- package = file_name.split('.')[-2]
- fh.write("{}\n".format(package))
- fh.write('=' * len("{}".format(package)) + '\n')
- module_path = file_name.split('.')[:-1]
+ package = file_name.split(u".")[-2]
+ fh.write(f"{package}\n")
+ fh.write(u"=" * len(f"{package}") + u"\n")
+ module_path = file_name.split(u".")[:-1]
if dirs:
write_toc(fh, module_path, dirs)
for file in files:
- module_name = file.split('.')[0]
+ module_name = file.split(u".")[0]
write_module_title(fh, module_name)
path = join(join(*module_path), module_name + RF_EXT)
if incl_suite_setup:
@@ -273,12 +275,12 @@ def generate_tests_rst_files():
tests = get_files(PATH_TESTS, RF_EXT)
file_names = create_rst_file_names_set(tests, TESTS_DIR)
- generate_rf_rst_files(file_names,
- incl_suite_setup=True,
- incl_variables=True)
+ generate_rf_rst_files(
+ file_names, incl_suite_setup=True, incl_variables=True
+ )
-if __name__ == '__main__':
+if __name__ == u"__main__":
# Generate all rst files:
generate_py_rst_files()
diff --git a/resources/tools/doc_gen/src/conf.py b/resources/tools/doc_gen/src/conf.py
index 1ebbbe7921..9be0baea53 100644
--- a/resources/tools/doc_gen/src/conf.py
+++ b/resources/tools/doc_gen/src/conf.py
@@ -19,7 +19,7 @@
import os
import sys
-sys.path.insert(0, os.path.abspath('.'))
+sys.path.insert(0, os.path.abspath(u"."))
# -- General configuration ------------------------------------------------
@@ -31,31 +31,31 @@ sys.path.insert(0, os.path.abspath('.'))
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.doctest',
- 'sphinxcontrib_robotdoc',
+ u"sphinx.ext.autodoc",
+ u"sphinx.ext.doctest",
+ u"sphinxcontrib_robotdoc"
]
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = [u"_templates"]
-# The suffix(es) of source filenames.
+# The suffix(es) of source file names.
# You can specify multiple suffix as a list of string:
#
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
+# source_suffix = [u".rst", u".md"]
+source_suffix = u".rst"
# The encoding of source files.
#
# source_encoding = 'utf-8-sig'
# The master toctree document.
-master_doc = 'index'
+master_doc = u"index"
# General information about the project.
-project = u'CSIT'
-copyright = u'2018, FD.io'
-author = u'CSIT'
+project = u"CSIT"
+copyright = u"2018, FD.io"
+author = u"CSIT"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -85,7 +85,7 @@ language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+exclude_patterns = [u"_build", u"Thumbs.db", u".DS_Store"]
# The reST default role (used for this markup: `text`) to use for all
# documents.
@@ -107,7 +107,7 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = u"sphinx"
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
@@ -124,8 +124,8 @@ todo_include_todos = False
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
-# html_theme = 'alabaster'
-html_theme = 'sphinx_rtd_theme'
+# html_theme =u"alabaster"
+html_theme = u"sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
@@ -134,21 +134,21 @@ html_theme = 'sphinx_rtd_theme'
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = ['env/lib/python2.7/site-packages/sphinx_rtd_theme']
+html_theme_path = [u"env/lib/python2.7/site-packages/sphinx_rtd_theme"]
# The name for this set of Sphinx documents.
# "<project> v<release> documentation" by default.
#
-html_title = u'CSIT Documentation'
+html_title = u"CSIT Documentation"
# A shorter title for the navigation bar. Default is the same as html_title.
#
-html_short_title = u'CSIT'
+html_short_title = u"CSIT"
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#
-html_logo = 'fdio_logo.png'
+html_logo = u"fdio_logo.png"
# The name of an image file (relative to this directory) to use as a favicon of
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
@@ -159,7 +159,7 @@ html_logo = 'fdio_logo.png'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = [u"_static"]
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
@@ -241,7 +241,7 @@ html_show_sourcelink = True
# html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
-htmlhelp_basename = 'csitdoc'
+htmlhelp_basename = u"csitdoc"
# -- Options for LaTeX output ---------------------------------------------
@@ -267,8 +267,7 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
- (master_doc, 'CSIT.tex', u'CSIT Documentation',
- u'CSIT', 'manual'),
+ (master_doc, u"CSIT.tex", u"CSIT Documentation", u"CSIT", u"manual"),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -309,8 +308,7 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- (master_doc, 'CSIT', u'CSIT Documentation',
- [author], 1)
+ (master_doc, u"CSIT", u"CSIT Documentation", [author], 1)
]
# If true, show URL addresses after external links.
@@ -324,9 +322,9 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- (master_doc, 'CSIT', u'CSIT Documentation',
- author, 'CSIT', 'One line description of project.',
- 'Miscellaneous'),
+ (master_doc, u"CSIT", u"CSIT Documentation",
+ author, u"CSIT", u"One line description of project.",
+ u"Miscellaneous"),
]
# Documents to append as an appendix to all manuals.
diff --git a/resources/tools/integrated/check_crc.py b/resources/tools/integrated/check_crc.py
index 3d5c30a6d6..157bd9e86d 100644
--- a/resources/tools/integrated/check_crc.py
+++ b/resources/tools/integrated/check_crc.py
@@ -27,38 +27,41 @@ from resources.libraries.python.VppApiCrc import VppApiCrcChecker
# TODO: Read FDIO_VPP_DIR environment variable, or some other input,
# instead of using hardcoded relative path?
-API_DIR = op.normpath(op.join(
- op.dirname(op.abspath(__file__)), "..", "..", "..", "..",
- "build-root", "install-vpp-native", "vpp", "share", "vpp", "api"))
+API_DIR = op.normpath(
+ op.join(
+ op.dirname(op.abspath(__file__)), u"..", u"..", u"..", u"..",
+ u"build-root", u"install-vpp-native", u"vpp", u"share", u"vpp", u"api"
+ )
+)
CHECKER = VppApiCrcChecker(API_DIR)
try:
CHECKER.report_initial_conflicts(report_missing=True)
except RuntimeError as err:
- sys.stderr.write("{err!r}\n".format(err=err))
+ sys.stderr.write(f"{err!r}\n")
sys.stderr.write(
- "\n"
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
- "\n"
- "VPP CSIT API CHECK FAIL!\n"
- "\n"
- "This means the patch under test has missing messages,\n"
- "or messages with unexpected CRCs compared to what CSIT needs.\n"
- "Either this Change and/or its ancestors were editing .api files,\n"
- "or your chain is not rebased upon the recent enough VPP codebase.\n"
- "\n"
- "Please rebase the patch to see if that fixes the problem.\n"
- "If that fails email csit-dev@lists.fd.io for a new\n"
- "operational branch supporting the api changes.\n"
- "\n"
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
+ u"\n"
+ u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
+ u"\n"
+ u"VPP CSIT API CHECK FAIL!\n"
+ u"\n"
+ u"This means the patch under test has missing messages,\n"
+ u"or messages with unexpected CRCs compared to what CSIT needs.\n"
+ u"Either this Change and/or its ancestors were editing .api files,\n"
+ u"or your chain is not rebased upon the recent enough VPP codebase.\n"
+ u"\n"
+ u"Please rebase the patch to see if that fixes the problem.\n"
+ u"If that fails email csit-dev@lists.fd.io for a new\n"
+ u"operational branch supporting the api changes.\n"
+ u"\n"
+ u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
)
sys.exit(1)
else:
sys.stderr.write(
- "\n"
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
- "\n"
- "VPP CSIT API CHECK PASS!\n"
- "\n"
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
+ u"\n"
+ u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
+ u"\n"
+ u"VPP CSIT API CHECK PASS!\n"
+ u"\n"
+ u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
)
diff --git a/resources/tools/papi/vpp_papi_provider.py b/resources/tools/papi/vpp_papi_provider.py
index 676f5491dd..6f3b06663a 100755
--- a/resources/tools/papi/vpp_papi_provider.py
+++ b/resources/tools/papi/vpp_papi_provider.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,14 +34,13 @@ VPP-stats:
"""
import argparse
-import binascii
import json
import os
import sys
# Client name
-CLIENT_NAME = 'csit_papi'
+CLIENT_NAME = u"csit_papi"
# Sphinx creates auto-generated documentation by importing the python source
@@ -50,7 +49,7 @@ CLIENT_NAME = 'csit_papi'
# the whole vpp api if the user only wishes to generate the test documentation.
try:
- do_import = False if os.getenv("NO_VPP_PAPI") == "1" else True
+ do_import = bool(not os.getenv(u"NO_VPP_PAPI") == u"1")
except KeyError:
do_import = True
@@ -61,9 +60,9 @@ if do_import:
# TODO: Find a better way to import papi modules.
modules_path = None
- for root, dirs, files in os.walk('/usr/lib'):
+ for root, dirs, files in os.walk(u"/usr/lib"):
for name in files:
- if name == 'vpp_papi.py':
+ if name == u"vpp_papi.py":
modules_path = os.path.split(root)[0]
break
if modules_path:
@@ -71,7 +70,7 @@ if do_import:
from vpp_papi import VPP
from vpp_papi.vpp_stats import VPPStats
else:
- raise RuntimeError('vpp_papi module not found')
+ raise RuntimeError(u"vpp_papi module not found")
def _convert_reply(api_r):
@@ -89,7 +88,7 @@ def _convert_reply(api_r):
:returns: Processed API reply / a part of API reply.
:rtype: dict
"""
- unwanted_fields = ['count', 'index', 'context']
+ unwanted_fields = [u"count", u"index", u"context"]
def process_value(val):
"""Process value.
@@ -100,29 +99,31 @@ def _convert_reply(api_r):
:rtype: dict or str or int
"""
if isinstance(val, dict):
- for val_k, val_v in val.iteritems():
+ for val_k, val_v in val.items():
val[str(val_k)] = process_value(val_v)
return val
elif isinstance(val, list):
for idx, val_l in enumerate(val):
val[idx] = process_value(val_l)
return val
- elif hasattr(val, '__int__'):
+ elif isinstance(val, bytes):
+ val.hex()
+ elif hasattr(val, u"__int__"):
return int(val)
- elif hasattr(val, '__str__'):
- return binascii.hexlify(str(val))
+ elif hasattr(val, "__str__"):
+ return str(val).encode(encoding=u"utf-8").hex()
# Next handles parameters not supporting preferred integer or string
# representation to get it logged
- elif hasattr(val, '__repr__'):
+ elif hasattr(val, u"__repr__"):
return repr(val)
else:
return val
reply_dict = dict()
- reply_key = repr(api_r).split('(')[0]
+ reply_key = repr(api_r).split(u"(")[0]
reply_value = dict()
for item in dir(api_r):
- if not item.startswith('_') and item not in unwanted_fields:
+ if not item.startswith(u"_") and item not in unwanted_fields:
reply_value[item] = process_value(getattr(api_r, item))
reply_dict[reply_key] = reply_value
return reply_dict
@@ -141,7 +142,7 @@ def process_json_request(args):
try:
vpp = VPP()
except Exception as err:
- raise RuntimeError('PAPI init failed:\n{err}'.format(err=repr(err)))
+ raise RuntimeError(f"PAPI init failed:\n{err!r}")
reply = list()
@@ -154,15 +155,15 @@ def process_json_request(args):
:rtype: dict or str or int
"""
if isinstance(val, dict):
- for val_k, val_v in val.iteritems():
+ for val_k, val_v in val.items():
val[str(val_k)] = process_value(val_v)
return val
elif isinstance(val, list):
for idx, val_l in enumerate(val):
val[idx] = process_value(val_l)
return val
- elif isinstance(val, unicode):
- return binascii.unhexlify(val)
+ elif isinstance(val, str):
+ return bytes.fromhex(val).decode(encoding=u"utf-8")
elif isinstance(val, int):
return val
else:
@@ -171,8 +172,8 @@ def process_json_request(args):
json_data = json.loads(args.data)
vpp.connect(CLIENT_NAME)
for data in json_data:
- api_name = data['api_name']
- api_args_unicode = data['api_args']
+ api_name = data[u"api_name"]
+ api_args_unicode = data[u"api_args"]
api_reply = dict(api_name=api_name)
api_args = dict()
for a_k, a_v in api_args_unicode.items():
@@ -188,20 +189,18 @@ def process_json_request(args):
else:
converted_reply = _convert_reply(rep)
- api_reply['api_reply'] = converted_reply
+ api_reply[u"api_reply"] = converted_reply
reply.append(api_reply)
except (AttributeError, ValueError) as err:
vpp.disconnect()
- raise RuntimeError('PAPI command {api}({args}) input error:\n{err}'.
- format(api=api_name,
- args=api_args,
- err=repr(err)))
+ raise RuntimeError(
+ f"PAPI command {api_name}({api_args}) input error:\n{err!r}"
+ )
except Exception as err:
vpp.disconnect()
- raise RuntimeError('PAPI command {api}({args}) error:\n{exc}'.
- format(api=api_name,
- args=api_args,
- exc=repr(err)))
+ raise RuntimeError(
+ f"PAPI command {api_name}({api_args}) error:\n{err!r}"
+ )
vpp.disconnect()
return json.dumps(reply)
@@ -220,7 +219,7 @@ def process_stats(args):
try:
stats = VPPStats(args.socket)
except Exception as err:
- raise RuntimeError('PAPI init failed:\n{err}'.format(err=repr(err)))
+ raise RuntimeError(f"PAPI init failed:\n{err!r}")
json_data = json.loads(args.data)
@@ -234,8 +233,7 @@ def process_stats(args):
try:
return json.dumps(reply)
except UnicodeDecodeError as err:
- raise RuntimeError('PAPI reply {reply} error:\n{exc}'.format(
- reply=reply, exc=repr(err)))
+ raise RuntimeError(f"PAPI reply {reply} error:\n{err!r}")
def process_stats_request(args):
@@ -251,16 +249,15 @@ def process_stats_request(args):
try:
stats = VPPStats(args.socket)
except Exception as err:
- raise RuntimeError('PAPI init failed:\n{err}'.format(err=repr(err)))
+ raise RuntimeError(f"PAPI init failed:\n{err!r}")
try:
json_data = json.loads(args.data)
except ValueError as err:
- raise RuntimeError('Input json string is invalid:\n{err}'.
- format(err=repr(err)))
+ raise RuntimeError(f"Input json string is invalid:\n{err!r}")
- papi_fn = getattr(stats, json_data["api_name"])
- reply = papi_fn(**json_data.get("api_args", {}))
+ papi_fn = getattr(stats, json_data[u"api_name"])
+ reply = papi_fn(**json_data.get(u"api_args", {}))
return json.dumps(reply)
@@ -279,32 +276,35 @@ def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
- description=__doc__)
- parser.add_argument("-m", "--method",
- required=True,
- choices=[str(key) for key in process_request.keys()],
- help="Specifies the VPP API methods: 1. request - "
- "simple request / reply; 2. dump - dump function;"
- "3. stats - VPP statistics.")
- parser.add_argument("-d", "--data",
- required=True,
- help="If the method is 'request' or 'dump', data is a "
- "JSON string (list) containing API name(s) and "
- "its/their input argument(s). "
- "If the method is 'stats', data is a JSON string "
- "containing the list of path(s) to the required "
- "data.")
- parser.add_argument("-s", "--socket",
- default="/var/run/vpp/stats.sock",
- help="A file descriptor over the VPP stats Unix domain "
- "socket. It is used only if method=='stats'.")
+ description=__doc__
+ )
+ parser.add_argument(
+ u"-m", u"--method", required=True,
+ choices=[str(key) for key in process_request.keys()],
+ help=u"Specifies the VPP API methods: "
+ u"1. request - simple request / reply; "
+ u"2. dump - dump function;"
+ u"3. stats - VPP statistics."
+ )
+ parser.add_argument(
+ u"-d", u"--data", required=True,
+ help=u"If the method is 'request' or 'dump', data is a JSON string "
+ u"(list) containing API name(s) and its/their input argument(s). "
+ u"If the method is 'stats', data is a JSON string containing t"
+ u"he list of path(s) to the required data."
+ )
+ parser.add_argument(
+ u"-s", u"--socket", default=u"/var/run/vpp/stats.sock",
+ help=u"A file descriptor over the VPP stats Unix domain socket. "
+ u"It is used only if method=='stats'."
+ )
args = parser.parse_args()
return process_request[args.method](args)
-if __name__ == '__main__':
+if __name__ == u"__main__":
sys.stdout.write(main())
sys.stdout.flush()
sys.exit(0)
diff --git a/resources/tools/presentation/environment.py b/resources/tools/presentation/environment.py
index a2fa9a0d5b..7cddb0279c 100644
--- a/resources/tools/presentation/environment.py
+++ b/resources/tools/presentation/environment.py
@@ -24,7 +24,7 @@ import logging
from errors import PresentationError
-class Environment(object):
+class Environment:
"""Setting of the environment:
- set environment variables,
- create directories.
diff --git a/resources/tools/presentation/generator_alerts.py b/resources/tools/presentation/generator_alerts.py
index 3f19230c0f..3a9b5ddfb6 100644
--- a/resources/tools/presentation/generator_alerts.py
+++ b/resources/tools/presentation/generator_alerts.py
@@ -57,7 +57,7 @@ class AlertingError(PresentationError):
format(msg=self._msg, dets=self._details, level=self._level))
-class Alerting(object):
+class Alerting:
"""Class implementing the alerting mechanism.
"""
diff --git a/resources/tools/presentation/input_data_parser.py b/resources/tools/presentation/input_data_parser.py
index e512cf8c47..46c8b9d5b9 100644
--- a/resources/tools/presentation/input_data_parser.py
+++ b/resources/tools/presentation/input_data_parser.py
@@ -1059,7 +1059,7 @@ class ExecutionChecker(ResultVisitor):
pass
-class InputData(object):
+class InputData:
"""Input data
The data is extracted from output.xml files generated by Jenkins jobs and
diff --git a/resources/tools/presentation/specification_parser.py b/resources/tools/presentation/specification_parser.py
index 9852d905ba..16c69ce18c 100644
--- a/resources/tools/presentation/specification_parser.py
+++ b/resources/tools/presentation/specification_parser.py
@@ -26,7 +26,7 @@ from utils import get_last_successful_build_number
from utils import get_last_completed_build_number
-class Specification(object):
+class Specification:
"""Specification of Presentation and analytics layer.
- based on specification specified in the specification YAML file
diff --git a/resources/tools/scripts/compare_perpatch.py b/resources/tools/scripts/compare_perpatch.py
index 9c9bd20023..c2c165c76d 100644
--- a/resources/tools/scripts/compare_perpatch.py
+++ b/resources/tools/scripts/compare_perpatch.py
@@ -44,6 +44,7 @@ def hack(value_list):
ret = tmp[3*eight:-eight]
return tmp # ret
+
iteration = -1
parent_iterations = list()
current_iterations = list()
@@ -52,23 +53,25 @@ while 1:
iteration += 1
parent_lines = list()
current_lines = list()
- filename = "csit_parent/{iter}/results.txt".format(iter=iteration)
+ filename = f"csit_parent/{iteration}/results.txt"
try:
with open(filename) as parent_file:
parent_lines = parent_file.readlines()
except IOError:
break
num_lines = len(parent_lines)
- filename = "csit_current/{iter}/results.txt".format(iter=iteration)
+ filename = f"csit_current/{iteration}/results.txt"
with open(filename) as current_file:
current_lines = current_file.readlines()
if num_lines != len(current_lines):
- print "Number of tests does not match within iteration", iteration
+ print(f"Number of tests does not match within iteration {iteration}")
sys.exit(1)
if num_tests is None:
num_tests = num_lines
elif num_tests != num_lines:
- print "Number of tests does not match previous at iteration", iteration
+ print(
+ f"Number of tests does not match previous at iteration {iteration}"
+ )
sys.exit(1)
parent_iterations.append(parent_lines)
current_iterations.append(current_lines)
@@ -80,13 +83,13 @@ for test_index in range(num_tests):
current_values = list()
for iteration_index in range(len(parent_iterations)):
parent_values.extend(
- json.loads(parent_iterations[iteration_index][test_index]))
+ json.loads(parent_iterations[iteration_index][test_index])
+ )
current_values.extend(
- json.loads(current_iterations[iteration_index][test_index]))
- print "Time-ordered MRR values for parent build: {p}".format(
- p=parent_values)
- print "Time-ordered MRR values for current build: {c}".format(
- c=current_values)
+ json.loads(current_iterations[iteration_index][test_index])
+ )
+ print(f"Time-ordered MRR values for parent build: {parent_values}")
+ print(f"Time-ordered MRR values for current build: {current_values}")
parent_values = hack(parent_values)
current_values = hack(current_values)
parent_max = BitCountingMetadataFactory.find_max_value(parent_values)
@@ -97,35 +100,27 @@ for test_index in range(num_tests):
current_factory = BitCountingMetadataFactory(val_max, parent_stats.avg)
current_stats = current_factory.from_data(current_values)
both_stats = factory.from_data(parent_values + current_values)
- print "Value-ordered MRR values for parent build: {p}".format(
- p=parent_values)
- print "Value-ordered MRR values for current build: {c}".format(
- c=current_values)
+ print(f"Value-ordered MRR values for parent build: {parent_values}")
+ print(f"Value-ordered MRR values for current build: {current_values}")
difference = (current_stats.avg - parent_stats.avg) / parent_stats.avg
- print "Difference of averages relative to parent: {d}%".format(
- d=100 * difference)
- print "Jumpavg representation of parent group: {p}".format(
- p=parent_stats)
- print "Jumpavg representation of current group: {c}".format(
- c=current_stats)
- print "Jumpavg representation of both as one group: {b}".format(
- b=both_stats)
+ print(f"Difference of averages relative to parent: {100 * difference}%")
+ print(f"Jumpavg representation of parent group: {parent_stats}")
+ print(f"Jumpavg representation of current group: {current_stats}")
+ print(f"Jumpavg representation of both as one group: {both_stats}")
bits = parent_stats.bits + current_stats.bits - both_stats.bits
- compared = "longer" if bits >= 0 else "shorter"
- print "Separate groups are {cmp} than single group by {bit} bits".format(
- cmp=compared, bit=abs(bits))
+ compared = u"longer" if bits >= 0 else u"shorter"
+ print(
+ f"Separate groups are {compared} than single group by {abs(bits)} bits"
+ )
classified_list = classifier.classify([parent_stats, current_stats])
if len(classified_list) < 2:
- print "Test test_index {test_index}: normal (no anomaly)".format(
- test_index=test_index)
+ print(f"Test test_index {test_index}: normal (no anomaly)")
continue
anomaly = classified_list[1].metadata.classification
- if anomaly == "regression":
- print "Test test_index {test_index}: anomaly regression".format(
- test_index=test_index)
+ if anomaly == u"regression":
+ print(f"Test test_index {test_index}: anomaly regression")
exit_code = 1
continue
- print "Test test_index {test_index}: anomaly {anomaly}".format(
- test_index=test_index, anomaly=anomaly)
-print "Exit code {code}".format(code=exit_code)
+ print(f"Test test_index {test_index}: anomaly {anomaly}")
+print(f"Exit code {exit_code}")
sys.exit(exit_code)
diff --git a/resources/tools/scripts/topo_reservation.py b/resources/tools/scripts/topo_reservation.py
index e7e1ff6bab..73f6d0e815 100755
--- a/resources/tools/scripts/topo_reservation.py
+++ b/resources/tools/scripts/topo_reservation.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,15 +20,15 @@ simultaneous use of nodes listed in topology file.
As source of truth, TG node from the topology file is used.
"""
-import sys
import argparse
+import sys
import yaml
from resources.libraries.python.ssh import exec_cmd
-RESERVATION_DIR = "/tmp/reservation_dir"
-RESERVATION_NODE = "TG"
+RESERVATION_DIR = u"/tmp/reservation_dir"
+RESERVATION_NODE = u"TG"
def diag_cmd(node, cmd):
@@ -36,10 +36,10 @@ def diag_cmd(node, cmd):
:param node: Node object as parsed from topology file to execute cmd on.
:param cmd: Command to execute.
- :type ssh: dict
+ :type node: dict
:type cmd: str
"""
- print('+ {cmd}'.format(cmd=cmd))
+ print(f"+ {cmd}")
_, stdout, _ = exec_cmd(node, cmd)
print(stdout)
@@ -74,16 +74,18 @@ def main():
Python returns on encountering and unexcepted exception.
"""
parser = argparse.ArgumentParser()
- parser.add_argument("-t", "--topo", required=True,
- help="Topology file")
- parser.add_argument("-c", "--cancel", help="Cancel reservation",
- action="store_true")
- parser.add_argument("-r", "--runtag", required=False, default="Unknown",
- help="Identifier for test run suitable as filename")
+ parser.add_argument(u"-t", u"--topo", required=True, help=u"Topology file")
+ parser.add_argument(
+ u"-c", u"--cancel", help=u"Cancel reservation", action=u"store_true"
+ )
+ parser.add_argument(
+ u"-r", u"--runtag", required=False, default=u"Unknown",
+ help=u"Identifier for test run suitable as filename"
+ )
args = parser.parse_args()
with open(args.topo, "r") as topo_file:
- topology = yaml.load(topo_file.read())['nodes']
+ topology = yaml.safe_load(topo_file.read())[u"nodes"]
# Even if TG is not guaranteed to be a Linux host,
# we are using it, because testing shows SSH access to DUT
@@ -91,39 +93,36 @@ def main():
try:
node = topology[RESERVATION_NODE]
except KeyError:
- print("Topology file does not contain '{node}' node".
- format(node=RESERVATION_NODE))
+ print(f"Topology file does not contain '{RESERVATION_NODE}' node")
return 1
# For system reservation we use mkdir it is an atomic operation and we can
# store additional data (time, client_ID, ..) within reservation directory.
if args.cancel:
- ret, _, err = exec_cmd(node, "rm -r {dir}".format(dir=RESERVATION_DIR))
+ ret, _, err = exec_cmd(node, f"rm -r {RESERVATION_DIR}")
if ret:
- print("Cancellation unsuccessful:\n{err}".format(err=err))
+ print(f"Cancellation unsuccessful:\n{err!r}")
return ret
# Before critical section, output can be outdated already.
- print("Diagnostic commands:")
- # -d and * are to supress "total <size>", see https://askubuntu.com/a/61190
- diag_cmd(node, "ls --full-time -cd '{dir}'/*".format(dir=RESERVATION_DIR))
- print("Attempting testbed reservation.")
+ print(u"Diagnostic commands:")
+ # -d and * are to suppress "total <size>", see https://askubuntu.com/a/61190
+ diag_cmd(node, f"ls --full-time -cd '{RESERVATION_DIR}'/*")
+ print(u"Attempting testbed reservation.")
# Entering critical section.
- ret, _, _ = exec_cmd(node, "mkdir '{dir}'".format(dir=RESERVATION_DIR))
+ ret, _, _ = exec_cmd(node, f"mkdir '{RESERVATION_DIR}'")
# Critical section is over.
if ret:
- _, stdo, _ = exec_cmd(node, "ls '{dir}'/*".format(dir=RESERVATION_DIR))
- print("Testbed already reserved by:\n{stdo}".format(stdo=stdo))
+ _, stdo, _ = exec_cmd(node, f"ls '{RESERVATION_DIR}'/*")
+ print(f"Testbed already reserved by:\n{stdo}")
return 2
# Here the script knows it is the only owner of the testbed.
- print("Reservation success, writing additional info to reservation dir.")
+ print(u"Reservation success, writing additional info to reservation dir.")
ret, _, err = exec_cmd(
- node, "touch '{dir}/{runtag}'"\
- .format(dir=RESERVATION_DIR, runtag=args.runtag))
+ node, f"touch '{RESERVATION_DIR}/{args.runtag}'")
if ret:
- print("Writing test run info failed, but continuing anyway:\n{err}".
- format(err=err))
+ print(f"Writing test run info failed, but continuing anyway:\n{err!r}")
return 0
-if __name__ == "__main__":
+if __name__ == u"__main__":
sys.exit(main())
diff --git a/resources/tools/topology/update_topology.py b/resources/tools/topology/update_topology.py
index 2e267639ef..4ba3a833d0 100755
--- a/resources/tools/topology/update_topology.py
+++ b/resources/tools/topology/update_topology.py
@@ -20,6 +20,7 @@ extracts MAC address from it."""
import sys
import os
import re
+
from argparse import ArgumentParser
import yaml
@@ -36,12 +37,12 @@ def load_topology(args):
:rtype: dict
"""
data = None
- with open(args.topology, 'r') as stream:
+ with open(args.topology, "r") as stream:
try:
- data = yaml.load(stream)
+ data = yaml.safe_load(stream)
except yaml.YAMLError as exc:
- print 'Failed to load topology file: {0}'.format(args.topology)
- print exc
+ print(f"Failed to load topology file: {args.topology}")
+ print(exc)
raise
return data
@@ -60,10 +61,10 @@ def ssh_no_error(ssh, cmd):
"""
ret, stdo, stde = ssh.exec_command(cmd)
if ret != 0:
- print 'Command execution failed: "{}"'.format(cmd)
- print 'stdout: {0}'.format(stdo)
- print 'stderr: {0}'.format(stde)
- raise RuntimeError('Unexpected ssh command failure')
+ print(f"Command execution failed: '{cmd}'")
+ print(f"stdout: {stdo}")
+ print(f"stderr: {stde}")
+ raise RuntimeError(u"Unexpected ssh command failure")
return stdo
@@ -80,11 +81,12 @@ def update_mac_addresses_for_node(node):
:param node: Node from topology.
:type node: dict
"""
- for port_name, port in node['interfaces'].items():
- if 'driver' not in port:
- err_msg = '{0} port {1} has no driver element, exiting'.format(
- node['host'], port_name)
- raise RuntimeError(err_msg)
+ for port_name, port in node[u"interfaces"].items():
+ if u"driver" not in port:
+ raise RuntimeError(
+ f"{node[u'host']} port {port_name} has no driver element, "
+ f"exiting"
+ )
ssh = SSH()
ssh.connect(node)
@@ -92,33 +94,34 @@ def update_mac_addresses_for_node(node):
# TODO: make following SSH commands into one-liner to save on SSH opers
# First unbind from current driver
- drvr_dir_path = '/sys/bus/pci/devices/{0}/driver'.format(
- port['pci_address'])
- cmd = '''\
- if [ -d {0} ]; then
- echo {1} | sudo tee {0}/unbind ;
+ drvr_dir_path = f"/sys/bus/pci/devices/{port[u'pci_address']}/driver"
+ cmd = f'''\
+ if [ -d {drvr_dir_path} ]; then
+ echo {port[u'pci_address']} | sudo tee {drvr_dir_path}/unbind ;
else
true Do not have to do anything, port already unbound ;
- fi'''.format(drvr_dir_path, port['pci_address'])
+ fi'''
ssh_no_error(ssh, cmd)
# Then bind to the 'driver' from topology for given port
- cmd = 'echo {0} | sudo tee /sys/bus/pci/drivers/{1}/bind'.\
- format(port['pci_address'], port['driver'])
+ cmd = f"echo {port[u'pci_address']} | " \
+ f"sudo tee /sys/bus/pci/drivers/{port[u'driver']}/bind"
ssh_no_error(ssh, cmd)
# Then extract the mac address and store it in the topology
- cmd = 'cat /sys/bus/pci/devices/{0}/net/*/address'.format(
- port['pci_address'])
+ cmd = f"cat /sys/bus/pci/devices/{port['pci_address']}/net/*/address"
mac = ssh_no_error(ssh, cmd).strip()
- pattern = re.compile("^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$")
+ pattern = re.compile(u"^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$")
if not pattern.match(mac):
- raise RuntimeError('MAC address read from host {0} {1} is in '
- 'bad format "{2}"'
- .format(node['host'], port['pci_address'], mac))
- print '{0}: Found MAC address of PCI device {1}: {2}'.format(
- node['host'], port['pci_address'], mac)
- port['mac_address'] = mac
+ raise RuntimeError(
+ f"MAC address read from host {node[u'host']} "
+ f"{port[u'pci_address']} is in bad format '{mac}'"
+ )
+ print(
+ f"{node[u'host']}: Found MAC address of PCI device "
+ f"{port[u'pci_address']}: {mac}"
+ )
+ port[u"mac_address"] = mac
def update_nodes_mac_addresses(topology):
@@ -128,7 +131,7 @@ def update_nodes_mac_addresses(topology):
:param topology: Topology information with nodes.
:type topology: dict
"""
- for node in topology['nodes'].values():
+ for node in topology[u"nodes"].values():
update_mac_addresses_for_node(node)
@@ -145,25 +148,28 @@ def dump_updated_topology(topology, args):
if args.output_file:
if not args.force:
if os.path.isfile(args.output_file):
- print ('File {0} already exists. If you want to overwrite this '
- 'file, add -f as a parameter to this script'.format(
- args.output_file))
+ print (
+ f"File {args.output_file} already exists. If you want to "
+ f"overwrite this file, add -f as a parameter to this script"
+ )
return 1
- with open(args.output_file, 'w') as stream:
+ with open(args.output_file, "w") as stream:
yaml.dump(topology, stream, default_flow_style=False)
else:
- print yaml.dump(topology, default_flow_style=False)
+ print(yaml.dump(topology, default_flow_style=False))
return 0
def main():
"""Main function"""
parser = ArgumentParser()
- parser.add_argument('topology', help="Topology yaml file to read")
- parser.add_argument('--output-file', '-o', help='Output file')
- parser.add_argument('-f', '--force', help='Overwrite existing file',
- action='store_const', const=True)
- parser.add_argument('--verbose', '-v', action='store_true')
+ parser.add_argument(u"topology", help=u"Topology yaml file to read")
+ parser.add_argument(u"--output-file", u"-o", help=u"Output file")
+ parser.add_argument(
+ u"-f", u"--force", help=u"Overwrite existing file",
+ action=u"store_const", const=True
+ )
+ parser.add_argument(u"--verbose", u"-v", action=u"store_true")
args = parser.parse_args()
topology = load_topology(args)
@@ -173,5 +179,5 @@ def main():
return ret
-if __name__ == "__main__":
+if __name__ == u"__main__":
sys.exit(main())
diff --git a/resources/tools/trex/trex_server_info.py b/resources/tools/trex/trex_server_info.py
index b9574957a5..e74a63e09d 100755
--- a/resources/tools/trex/trex_server_info.py
+++ b/resources/tools/trex/trex_server_info.py
@@ -28,10 +28,12 @@ Functionality:
import sys
-sys.path.insert(0, "/opt/trex-core-2.61/scripts/automation/"+\
- "trex_control_plane/interactive/")
+sys.path.insert(
+ 0, u"/opt/trex-core-2.61/scripts/automation/trex_control_plane/interactive/"
+)
from trex.stl.api import *
+
def main():
"""Check server info and quit."""
client = STLClient()
@@ -48,5 +50,5 @@ def main():
client.disconnect()
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/tools/trex/trex_stateless_profile.py b/resources/tools/trex/trex_stateless_profile.py
index b888bcdea9..9233f6a5f1 100755
--- a/resources/tools/trex/trex_stateless_profile.py
+++ b/resources/tools/trex/trex_stateless_profile.py
@@ -22,8 +22,9 @@ import argparse
import json
import sys
-sys.path.insert(0, "/opt/trex-core-2.61/scripts/automation/"
- "trex_control_plane/interactive/")
+sys.path.insert(
+ 0, "/opt/trex-core-2.61/scripts/automation/trex_control_plane/interactive/"
+)
from trex.stl.api import *
@@ -54,11 +55,12 @@ def fmt_latency(lat_min, lat_avg, lat_max, hdrh):
except ValueError:
t_max = int(-1)
- return "/".join(str(tmp) for tmp in (t_min, t_avg, t_max, hdrh))
+ return u"/".join(str(tmp) for tmp in (t_min, t_avg, t_max, hdrh))
-def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
- port_1, latency, async_start=False, traffic_directions=2):
+def simple_burst(
+ profile_file, duration, framesize, rate, warmup_time, port_0, port_1,
+ latency, async_start=False, traffic_directions=2):
"""Send traffic and measure packet loss and latency.
Procedure:
@@ -102,17 +104,18 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
total_sent = 0
lost_a = 0
lost_b = 0
- lat_a = "-1/-1/-1/"
- lat_b = "-1/-1/-1/"
+ lat_a = u"-1/-1/-1/"
+ lat_b = u"-1/-1/-1/"
# Read the profile:
try:
- print("### Profile file:\n{}".format(profile_file))
- profile = STLProfile.load(profile_file, direction=0, port_id=0,
- framesize=framesize)
+ print(f"### Profile file:\n{profile_file}")
+ profile = STLProfile.load(
+ profile_file, direction=0, port_id=0, framesize=framesize
+ )
streams = profile.get_streams()
except STLError as err:
- print("Error while loading profile '{0}' {1}".format(profile_file, err))
+ print(f"Error while loading profile '{profile_file}' {err!r}")
sys.exit(1)
try:
@@ -124,7 +127,7 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
client.reset(ports=[port_0, port_1])
client.remove_all_streams(ports=[port_0, port_1])
- if "macsrc" in profile_file:
+ if u"macsrc" in profile_file:
client.set_port_attr(ports=[port_0, port_1], promiscuous=True)
if isinstance(framesize, int):
client.add_streams(streams[0], ports=[port_0])
@@ -144,7 +147,7 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
latency = False
except STLError:
# Disable latency if NIC does not support requested stream type
- print("##### FAILED to add latency streams #####")
+ print(u"##### FAILED to add latency streams #####")
latency = False
ports = [port_0]
if traffic_directions > 1:
@@ -167,18 +170,16 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
# Read the stats after the test:
stats = client.get_stats()
- print("##### Warmup statistics #####")
- print(json.dumps(stats, indent=4, separators=(',', ': ')))
+ print(u"##### Warmup statistics #####")
+ print(json.dumps(stats, indent=4, separators=(u",", u": ")))
- lost_a = stats[port_0]["opackets"] - stats[port_1]["ipackets"]
+ lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"]
if traffic_directions > 1:
- lost_b = stats[port_1]["opackets"] - stats[port_0]["ipackets"]
+ lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
- print("\npackets lost from {p_0} --> {p_1}: {v} pkts".format(
- p_0=port_0, p_1=port_1, v=lost_a))
+ print(f"\npackets lost from {port_0} --> {port_1}: {lost_a} pkts")
if traffic_directions > 1:
- print("packets lost from {p_1} --> {p_0}: {v} pkts".format(
- p_0=port_0, p_1=port_1, v=lost_b))
+ print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
# Clear the stats before injecting:
client.clear_stats()
@@ -191,10 +192,10 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
if async_start:
# For async stop, we need to export the current snapshot.
xsnap0 = client.ports[0].get_xstats().reference_stats
- print("Xstats snapshot 0: {s!r}".format(s=xsnap0))
+ print(f"Xstats snapshot 0: {xsnap0!r}")
if traffic_directions > 1:
xsnap1 = client.ports[1].get_xstats().reference_stats
- print("Xstats snapshot 1: {s!r}".format(s=xsnap1))
+ print(f"Xstats snapshot 1: {xsnap1!r}")
else:
# Block until done:
client.wait_on_traffic(ports=ports, timeout=duration+30)
@@ -206,38 +207,36 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
# Read the stats after the test
stats = client.get_stats()
- print("##### Statistics #####")
- print(json.dumps(stats, indent=4, separators=(',', ': ')))
+ print(u"##### Statistics #####")
+ print(json.dumps(stats, indent=4, separators=(u",", u": ")))
- lost_a = stats[port_0]["opackets"] - stats[port_1]["ipackets"]
+ lost_a = stats[port_0][u"opackets"] - stats[port_1][u"ipackets"]
if traffic_directions > 1:
- lost_b = stats[port_1]["opackets"] - stats[port_0]["ipackets"]
+ lost_b = stats[port_1][u"opackets"] - stats[port_0][u"ipackets"]
# Stats index is not a port number, but "pgid".
# TODO: Find out what "pgid" means.
if latency:
- lat_obj = stats["latency"][0]["latency"]
+ lat_obj = stats[u"latency"][0][u"latency"]
lat_a = fmt_latency(
- str(lat_obj["total_min"]), str(lat_obj["average"]),
- str(lat_obj["total_max"]), str(lat_obj["hdrh"]))
+ str(lat_obj[u"total_min"]), str(lat_obj[u"average"]),
+ str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"]))
if traffic_directions > 1:
- lat_obj = stats["latency"][1]["latency"]
+ lat_obj = stats[u"latency"][1][u"latency"]
lat_b = fmt_latency(
- str(lat_obj["total_min"]), str(lat_obj["average"]),
- str(lat_obj["total_max"]), str(lat_obj["hdrh"]))
+ str(lat_obj[u"total_min"]), str(lat_obj[u"average"]),
+ str(lat_obj[u"total_max"]), str(lat_obj[u"hdrh"]))
if traffic_directions > 1:
- total_sent = stats[0]["opackets"] + stats[1]["opackets"]
- total_rcvd = stats[0]["ipackets"] + stats[1]["ipackets"]
+ total_sent = stats[0][u"opackets"] + stats[1][u"opackets"]
+ total_rcvd = stats[0][u"ipackets"] + stats[1][u"ipackets"]
else:
- total_sent = stats[port_0]["opackets"]
- total_rcvd = stats[port_1]["ipackets"]
+ total_sent = stats[port_0][u"opackets"]
+ total_rcvd = stats[port_1][u"ipackets"]
- print("\npackets lost from {p_0} --> {p_1}: {v} pkts".format(
- p_0=port_0, p_1=port_1, v=lost_a))
+ print(f"\npackets lost from {port_0} --> {port_1}: {lost_a} pkts")
if traffic_directions > 1:
- print("packets lost from {p_1} --> {p_0}: {v} pkts".format(
- p_0=port_0, p_1=port_1, v=lost_b))
+ print(f"packets lost from {port_1} --> {port_0}: {lost_b} pkts")
except STLError as ex_error:
print(ex_error, file=sys.stderr)
@@ -250,11 +249,12 @@ def simple_burst(profile_file, duration, framesize, rate, warmup_time, port_0,
else:
if client:
client.disconnect()
- print("rate={0!r}, totalReceived={1}, totalSent={2}, "
- "frameLoss={3}, latencyStream0(usec)={4}, "
- "latencyStream1(usec)={5}, targetDuration={d!r}".
- format(rate, total_rcvd, total_sent, lost_a + lost_b,
- lat_a, lat_b, d=duration))
+ print(
+ f"rate={rate!r}, totalReceived={total_rcvd}, "
+ f"totalSent={total_sent}, frameLoss={lost_a + lost_b}, "
+ f"latencyStream0(usec)={lat_a}, latencyStream1(usec)={lat_b}, "
+ f"targetDuration={duration!r}"
+ )
def main():
@@ -264,44 +264,46 @@ def main():
function.
"""
parser = argparse.ArgumentParser()
- parser.add_argument("-p", "--profile",
- required=True,
- type=str,
- help="Python traffic profile.")
- parser.add_argument("-d", "--duration",
- required=True,
- type=float,
- help="Duration of traffic run.")
- parser.add_argument("-s", "--frame_size",
- required=True,
- help="Size of a Frame without padding and IPG.")
- parser.add_argument("-r", "--rate",
- required=True,
- help="Traffic rate with included units (%, pps).")
- parser.add_argument("-w", "--warmup_time",
- type=float,
- default=5.0,
- help="Traffic warm-up time in seconds, 0 = disable.")
- parser.add_argument("--port_0",
- required=True,
- type=int,
- help="Port 0 on the traffic generator.")
- parser.add_argument("--port_1",
- required=True,
- type=int,
- help="Port 1 on the traffic generator.")
- parser.add_argument("--async_start",
- action="store_true",
- default=False,
- help="Non-blocking call of the script.")
- parser.add_argument("--latency",
- action="store_true",
- default=False,
- help="Add latency stream.")
- parser.add_argument("--traffic_directions",
- type=int,
- default=2,
- help="Send bi- (2) or uni- (1) directional traffic.")
+ parser.add_argument(
+ u"-p", u"--profile", required=True, type=str,
+ help=u"Python traffic profile."
+ )
+ parser.add_argument(
+ u"-d", u"--duration", required=True, type=float,
+ help=u"Duration of traffic run."
+ )
+ parser.add_argument(
+ u"-s", u"--frame_size", required=True,
+ help=u"Size of a Frame without padding and IPG."
+ )
+ parser.add_argument(
+ u"-r", u"--rate", required=True,
+ help=u"Traffic rate with included units (%, pps)."
+ )
+ parser.add_argument(
+ u"-w", u"--warmup_time", type=float, default=5.0,
+ help=u"Traffic warm-up time in seconds, 0 = disable."
+ )
+ parser.add_argument(
+ u"--port_0", required=True, type=int,
+ help=u"Port 0 on the traffic generator."
+ )
+ parser.add_argument(
+ u"--port_1", required=True, type=int,
+ help=u"Port 1 on the traffic generator."
+ )
+ parser.add_argument(
+ u"--async_start", action=u"store_true", default=False,
+ help=u"Non-blocking call of the script."
+ )
+ parser.add_argument(
+ u"--latency", action=u"store_true", default=False,
+ help=u"Add latency stream."
+ )
+ parser.add_argument(
+ u"--traffic_directions", type=int, default=2,
+ help=u"Send bi- (2) or uni- (1) directional traffic."
+ )
args = parser.parse_args()
@@ -310,17 +312,13 @@ def main():
except ValueError:
framesize = args.frame_size
- simple_burst(profile_file=args.profile,
- duration=args.duration,
- framesize=framesize,
- rate=args.rate,
- warmup_time=args.warmup_time,
- port_0=args.port_0,
- port_1=args.port_1,
- latency=args.latency,
- async_start=args.async_start,
- traffic_directions=args.traffic_directions)
+ simple_burst(
+ profile_file=args.profile, duration=args.duration, framesize=framesize,
+ rate=args.rate, warmup_time=args.warmup_time, port_0=args.port_0,
+ port_1=args.port_1, latency=args.latency, async_start=args.async_start,
+ traffic_directions=args.traffic_directions
+ )
-if __name__ == '__main__':
+if __name__ == u"__main__":
main()
diff --git a/resources/tools/trex/trex_stateless_stop.py b/resources/tools/trex/trex_stateless_stop.py
index 3fc599a5a4..45f4838e9d 100755
--- a/resources/tools/trex/trex_stateless_stop.py
+++ b/resources/tools/trex/trex_stateless_stop.py
@@ -28,12 +28,14 @@ Functionality:
"""
import argparse
-from collections import OrderedDict # Needed to parse xstats representation.
-import sys
import json
+import sys
-sys.path.insert(0, "/opt/trex-core-2.61/scripts/automation/"+\
- "trex_control_plane/interactive/")
+from collections import OrderedDict # Needed to parse xstats representation.
+
+sys.path.insert(
+ 0, u"/opt/trex-core-2.61/scripts/automation/trex_control_plane/interactive/"
+)
from trex.stl.api import *
@@ -41,9 +43,13 @@ def main():
"""Stop traffic if any is running. Report xstats."""
parser = argparse.ArgumentParser()
parser.add_argument(
- "--xstat0", type=str, default="", help="Reference xstat object if any.")
+ u"--xstat0", type=str, default=u"",
+ help=u"Reference xstat object if any."
+ )
parser.add_argument(
- "--xstat1", type=str, default="", help="Reference xstat object if any.")
+ u"--xstat1", type=str, default=u"",
+ help=u"Reference xstat object if any."
+ )
args = parser.parse_args()
client = STLClient()
@@ -71,26 +77,27 @@ def main():
finally:
client.disconnect()
- print("##### statistics port 0 #####")
- print(json.dumps(xstats0, indent=4, separators=(',', ': ')))
- print("##### statistics port 1 #####")
- print(json.dumps(xstats1, indent=4, separators=(',', ': ')))
+ print(u"##### statistics port 0 #####")
+ print(json.dumps(xstats0, indent=4, separators=(u",", u": ")))
+ print(u"##### statistics port 1 #####")
+ print(json.dumps(xstats1, indent=4, separators=(u",", u": ")))
- tx_0, rx_0 = xstats0["tx_good_packets"], xstats0["rx_good_packets"]
- tx_1, rx_1 = xstats1["tx_good_packets"], xstats1["rx_good_packets"]
+ tx_0, rx_0 = xstats0[u"tx_good_packets"], xstats0[u"rx_good_packets"]
+ tx_1, rx_1 = xstats1[u"tx_good_packets"], xstats1[u"rx_good_packets"]
lost_a, lost_b = tx_0 - rx_1, tx_1 - rx_0
- print("\npackets lost from 0 --> 1: {0} pkts".format(lost_a))
- print("packets lost from 1 --> 0: {0} pkts".format(lost_b))
+ print(f"\npackets lost from 0 --> 1: {lost_a} pkts")
+ print(f"packets lost from 1 --> 0: {lost_b} pkts")
total_rcvd, total_sent = rx_0 + rx_1, tx_0 + tx_1
total_lost = total_sent - total_rcvd
# TODO: Add latency.
print(
- "rate='unknown', totalReceived={rec}, totalSent={sen}, frameLoss={los},"
- " latencyStream0(usec)=-1/-1/-1, latencyStream1(usec)=-1/-1/-1,"
- " targetDuration='manual'".format(
- rec=total_rcvd, sen=total_sent, los=total_lost))
+ f"rate='unknown', totalReceived={total_rcvd}, totalSent={total_sent}, "
+ f"frameLoss={total_lost}, latencyStream0(usec)=-1/-1/-1, "
+ f"latencyStream1(usec)=-1/-1/-1, targetDuration='manual'"
+ )
+
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/tools/wrk/wrk.py b/resources/tools/wrk/wrk.py
index 84d17ee7a1..381e9b9da0 100644
--- a/resources/tools/wrk/wrk.py
+++ b/resources/tools/wrk/wrk.py
@@ -66,18 +66,18 @@ def check_wrk(tg_node):
command is not availble.
"""
- if tg_node['type'] != NodeType.TG:
- raise RuntimeError('Node type is not a TG.')
+ if tg_node[u"type"] != NodeType.TG:
+ raise RuntimeError(u"Node type is not a TG.")
ssh = SSH()
ssh.connect(tg_node)
ret, _, _ = ssh.exec_command(
- "sudo -E "
- "sh -c '{0}/resources/tools/wrk/wrk_utils.sh installed'".
- format(Constants.REMOTE_FW_DIR))
+ f"sudo -E sh -c '{Constants.REMOTE_FW_DIR}/resources/tools/"
+ f"wrk/wrk_utils.sh installed'"
+ )
if int(ret) != 0:
- raise RuntimeError('WRK is not installed on TG node.')
+ raise RuntimeError(u"WRK is not installed on TG node.")
def run_wrk(tg_node, profile_name, tg_numa, test_type, warm_up=False):
@@ -98,102 +98,103 @@ def run_wrk(tg_node, profile_name, tg_numa, test_type, warm_up=False):
:raises: RuntimeError if node type is not a TG.
"""
- if tg_node['type'] != NodeType.TG:
- raise RuntimeError('Node type is not a TG.')
+ if tg_node[u"type"] != NodeType.TG:
+ raise RuntimeError(u"Node type is not a TG.")
# Parse and validate the profile
- profile_path = ("resources/traffic_profiles/wrk/{0}.yaml".
- format(profile_name))
+ profile_path = f"resources/traffic_profiles/wrk/{profile_name}.yaml"
profile = WrkTrafficProfile(profile_path).traffic_profile
cores = CpuUtils.cpu_list_per_node(tg_node, tg_numa)
- first_cpu = cores[profile["first-cpu"]]
+ first_cpu = cores[profile[u"first-cpu"]]
- if len(profile["urls"]) == 1 and profile["cpus"] == 1:
+ if len(profile[u"urls"]) == 1 and profile[u"cpus"] == 1:
params = [
- "traffic_1_url_1_core",
+ u"traffic_1_url_1_core",
str(first_cpu),
- str(profile["nr-of-threads"]),
- str(profile["nr-of-connections"]),
- "{0}s".format(profile["duration"]),
- "'{0}'".format(profile["header"]),
- str(profile["timeout"]),
- str(profile["script"]),
- str(profile["latency"]),
- "'{0}'".format(" ".join(profile["urls"]))
+ str(profile[u"nr-of-threads"]),
+ str(profile[u"nr-of-connections"]),
+ f"{profile[u'duration']}s",
+ f"'{profile[u'header']}'",
+ str(profile[u"timeout"]),
+ str(profile[u"script"]),
+ str(profile[u"latency"]),
+ f"'{u' '.join(profile[u'urls'])}'"
]
if warm_up:
warm_up_params = deepcopy(params)
- warm_up_params[4] = "10s"
- elif len(profile["urls"]) == profile["cpus"]:
+ warm_up_params[4] = u"10s"
+ elif len(profile[u"urls"]) == profile[u"cpus"]:
params = [
- "traffic_n_urls_n_cores",
+ u"traffic_n_urls_n_cores",
str(first_cpu),
- str(profile["nr-of-threads"]),
- str(profile["nr-of-connections"]),
- "{0}s".format(profile["duration"]),
- "'{0}'".format(profile["header"]),
- str(profile["timeout"]),
- str(profile["script"]),
- str(profile["latency"]),
- "'{0}'".format(" ".join(profile["urls"]))
+ str(profile[u"nr-of-threads"]),
+ str(profile[u"nr-of-connections"]),
+ f"{profile[u'duration']}s",
+ f"'{profile[u'header']}'",
+ str(profile[u"timeout"]),
+ str(profile[u"script"]),
+ str(profile[u"latency"]),
+ f"'{u' '.join(profile[u'urls'])}'"
]
if warm_up:
warm_up_params = deepcopy(params)
- warm_up_params[4] = "10s"
+ warm_up_params[4] = u"10s"
else:
params = [
- "traffic_n_urls_m_cores",
+ u"traffic_n_urls_m_cores",
str(first_cpu),
- str(profile["cpus"] / len(profile["urls"])),
- str(profile["nr-of-threads"]),
- str(profile["nr-of-connections"]),
- "{0}s".format(profile["duration"]),
- "'{0}'".format(profile["header"]),
- str(profile["timeout"]),
- str(profile["script"]),
- str(profile["latency"]),
- "'{0}'".format(" ".join(profile["urls"]))
+ str(profile[u"cpus"] // len(profile[u"urls"])),
+ str(profile[u"nr-of-threads"]),
+ str(profile[u"nr-of-connections"]),
+ f"{profile[u'duration']}s",
+ f"'{profile[u'header']}'",
+ str(profile[u"timeout"]),
+ str(profile[u"script"]),
+ str(profile[u"latency"]),
+ f"'{u' '.join(profile[u'urls'])}'"
]
if warm_up:
warm_up_params = deepcopy(params)
- warm_up_params[5] = "10s"
+ warm_up_params[5] = u"10s"
- args = " ".join(params)
+ args = u" ".join(params)
ssh = SSH()
ssh.connect(tg_node)
if warm_up:
- warm_up_args = " ".join(warm_up_params)
+ warm_up_args = u" ".join(warm_up_params)
ret, _, _ = ssh.exec_command(
- "{0}/resources/tools/wrk/wrk_utils.sh {1}".
- format(Constants.REMOTE_FW_DIR, warm_up_args), timeout=1800)
+ f"{Constants.REMOTE_FW_DIR}/resources/tools/wrk/wrk_utils.sh "
+ f"{warm_up_args}", timeout=1800
+ )
if int(ret) != 0:
- raise RuntimeError('wrk runtime error.')
+ raise RuntimeError(u"wrk runtime error.")
sleep(60)
ret, stdout, _ = ssh.exec_command(
- "{0}/resources/tools/wrk/wrk_utils.sh {1}".
- format(Constants.REMOTE_FW_DIR, args), timeout=1800)
+ f"{Constants.REMOTE_FW_DIR}/resources/tools/wrk/wrk_utils.sh {args}",
+ timeout=1800
+ )
if int(ret) != 0:
raise RuntimeError('wrk runtime error.')
stats = _parse_wrk_output(stdout)
- log_msg = "\nMeasured values:\n"
- if test_type == "cps":
- log_msg += "Connections/sec: Avg / Stdev / Max / +/- Stdev\n"
- for item in stats["rps-stats-lst"]:
- log_msg += "{0} / {1} / {2} / {3}\n".format(*item)
- log_msg += "Total cps: {0}cps\n".format(stats["rps-sum"])
- elif test_type == "rps":
- log_msg += "Requests/sec: Avg / Stdev / Max / +/- Stdev\n"
- for item in stats["rps-stats-lst"]:
- log_msg += "{0} / {1} / {2} / {3}\n".format(*item)
- log_msg += "Total rps: {0}rps\n".format(stats["rps-sum"])
- elif test_type == "bw":
- log_msg += "Transfer/sec: {0}Bps".format(stats["bw-sum"])
+ log_msg = u"\nMeasured values:\n"
+ if test_type == u"cps":
+ log_msg += u"Connections/sec: Avg / Stdev / Max / +/- Stdev\n"
+ for item in stats[u"rps-stats-lst"]:
+ log_msg += f"{0} / {1} / {2} / {3}\n".format(*item)
+ log_msg += f"Total cps: {stats[u'rps-sum']}cps\n"
+ elif test_type == u"rps":
+ log_msg += u"Requests/sec: Avg / Stdev / Max / +/- Stdev\n"
+ for item in stats[u"rps-stats-lst"]:
+ log_msg += f"{0} / {1} / {2} / {3}\n".format(*item)
+ log_msg += f"Total rps: {stats[u'rps-sum']}rps\n"
+ elif test_type == u"bw":
+ log_msg += f"Transfer/sec: {stats[u'bw-sum']}Bps"
logger.info(log_msg)
@@ -210,47 +211,52 @@ def _parse_wrk_output(msg):
:raises: WrkError if the message does not include the results.
"""
- if "Thread Stats" not in msg:
- raise WrkError("The output of wrk does not include the results.")
+ if u"Thread Stats" not in msg:
+ raise WrkError(u"The output of wrk does not include the results.")
msg_lst = msg.splitlines(False)
stats = {
- "latency-dist-lst": list(),
- "latency-stats-lst": list(),
- "rps-stats-lst": list(),
- "rps-lst": list(),
- "bw-lst": list(),
- "rps-sum": 0,
- "bw-sum": None
+ u"latency-dist-lst": list(),
+ u"latency-stats-lst": list(),
+ u"rps-stats-lst": list(),
+ u"rps-lst": list(),
+ u"bw-lst": list(),
+ u"rps-sum": 0,
+ u"bw-sum": None
}
for line in msg_lst:
- if "Latency Distribution" in line:
+ if u"Latency Distribution" in line:
# Latency distribution - 50%, 75%, 90%, 99%
pass
- elif "Latency" in line:
+ elif u"Latency" in line:
# Latency statistics - Avg, Stdev, Max, +/- Stdev
pass
- elif "Req/Sec" in line:
+ elif u"Req/Sec" in line:
# rps statistics - Avg, Stdev, Max, +/- Stdev
- stats["rps-stats-lst"].append((
- _evaluate_number(re.search(REGEX_RPS_STATS, line).group(1)),
- _evaluate_number(re.search(REGEX_RPS_STATS, line).group(2)),
- _evaluate_number(re.search(REGEX_RPS_STATS, line).group(3)),
- _evaluate_number(re.search(REGEX_RPS_STATS, line).group(4))))
- elif "Requests/sec:" in line:
+ stats[u"rps-stats-lst"].append(
+ (
+ _evaluate_number(re.search(REGEX_RPS_STATS, line).group(1)),
+ _evaluate_number(re.search(REGEX_RPS_STATS, line).group(2)),
+ _evaluate_number(re.search(REGEX_RPS_STATS, line).group(3)),
+ _evaluate_number(re.search(REGEX_RPS_STATS, line).group(4))
+ )
+ )
+ elif u"Requests/sec:" in line:
# rps (cps)
- stats["rps-lst"].append(
- _evaluate_number(re.search(REGEX_RPS, line).group(1)))
- elif "Transfer/sec:" in line:
+ stats[u"rps-lst"].append(
+ _evaluate_number(re.search(REGEX_RPS, line).group(1))
+ )
+ elif u"Transfer/sec:" in line:
# BW
- stats["bw-lst"].append(
- _evaluate_number(re.search(REGEX_BW, line).group(1)))
+ stats[u"bw-lst"].append(
+ _evaluate_number(re.search(REGEX_BW, line).group(1))
+ )
- for item in stats["rps-stats-lst"]:
- stats["rps-sum"] += item[0]
- stats["bw-sum"] = sum(stats["bw-lst"])
+ for item in stats[u"rps-stats-lst"]:
+ stats[u"rps-sum"] += item[0]
+ stats[u"bw-sum"] = sum(stats[u"bw-lst"])
return stats
@@ -270,23 +276,24 @@ def _evaluate_number(num):
try:
val_num = float(val.group(1))
except ValueError:
- raise WrkError("The output of wrk does not include the results "
- "or the format of results has changed.")
+ raise WrkError(
+ u"The output of wrk does not include the results or the format "
+ u"of results has changed."
+ )
val_mul = val.group(2).lower()
if val_mul:
- if "k" in val_mul:
+ if u"k" in val_mul:
val_num *= 1000
- elif "m" in val_mul:
+ elif u"m" in val_mul:
val_num *= 1000000
- elif "g" in val_mul:
+ elif u"g" in val_mul:
val_num *= 1000000000
- elif "b" in val_mul:
+ elif u"b" in val_mul:
pass
- elif "%" in val_mul:
+ elif u"%" in val_mul:
pass
- elif "" in val_mul:
+ elif u"" in val_mul:
pass
else:
- raise WrkError("The multiplicand {0} is not defined.".
- format(val_mul))
+ raise WrkError(f"The multiplicand {val_mul} is not defined.")
return val_num
diff --git a/resources/tools/wrk/wrk_errors.py b/resources/tools/wrk/wrk_errors.py
index 3173dd4223..2cdd76815a 100644
--- a/resources/tools/wrk/wrk_errors.py
+++ b/resources/tools/wrk/wrk_errors.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -29,7 +29,7 @@ class WrkError(Exception):
- relevant data if there are any collected (optional parameter details).
"""
- def __init__(self, msg, details=''):
+ def __init__(self, msg, details=u""):
"""Sets the exception message and the level.
:param msg: Short description of the encountered problem.
diff --git a/resources/tools/wrk/wrk_traffic_profile_parser.py b/resources/tools/wrk/wrk_traffic_profile_parser.py
index 1d40aa3d8a..1994b6195d 100644
--- a/resources/tools/wrk/wrk_traffic_profile_parser.py
+++ b/resources/tools/wrk/wrk_traffic_profile_parser.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 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:
@@ -26,22 +26,26 @@ from robot.api import logger
from resources.tools.wrk.wrk_errors import WrkError
-class WrkTrafficProfile(object):
+class WrkTrafficProfile:
"""The wrk traffic profile.
"""
- MANDATORY_PARAMS = ("urls",
- "first-cpu",
- "cpus",
- "duration",
- "nr-of-threads",
- "nr-of-connections")
-
- INTEGER_PARAMS = (("cpus", 1),
- ("first-cpu", 0),
- ("duration", 1),
- ("nr-of-threads", 1),
- ("nr-of-connections", 1))
+ MANDATORY_PARAMS = (
+ u"urls",
+ u"first-cpu",
+ u"cpus",
+ u"duration",
+ u"nr-of-threads",
+ u"nr-of-connections"
+ )
+
+ INTEGER_PARAMS = (
+ (u"cpus", 1),
+ (u"first-cpu", 0),
+ (u"duration", 1),
+ (u"nr-of-threads", 1),
+ (u"nr-of-connections", 1)
+ )
def __init__(self, profile_name):
"""Read the traffic profile from the yaml file.
@@ -57,29 +61,34 @@ class WrkTrafficProfile(object):
self.profile_name = profile_name
try:
- with open(self.profile_name, 'r') as profile_file:
+ with open(self.profile_name, "r") as profile_file:
self.traffic_profile = load(profile_file)
except IOError as err:
- raise WrkError(msg="An error occurred while opening the file '{0}'."
- .format(self.profile_name),
- details=str(err))
+ raise WrkError(
+ msg=f"An error occurred while opening the file "
+ f"'{self.profile_name}'.", details=str(err)
+ )
except YAMLError as err:
- raise WrkError(msg="An error occurred while parsing the traffic "
- "profile '{0}'.".format(self.profile_name),
- details=str(err))
+ raise WrkError(
+ msg=f"An error occurred while parsing the traffic profile "
+ f"'{self.profile_name}'.", details=str(err)
+ )
self._validate_traffic_profile()
if self.traffic_profile:
- logger.debug("\nThe wrk traffic profile '{0}' is valid.\n".
- format(self.profile_name))
- logger.debug("wrk traffic profile '{0}':".format(self.profile_name))
+ logger.debug(
+ f"\nThe wrk traffic profile '{self.profile_name}' is valid.\n"
+ )
+ logger.debug(f"wrk traffic profile '{self.profile_name}':")
logger.debug(pformat(self.traffic_profile))
else:
- logger.debug("\nThe wrk traffic profile '{0}' is invalid.\n".
- format(self.profile_name))
- raise WrkError("\nThe wrk traffic profile '{0}' is invalid.\n".
- format(self.profile_name))
+ logger.debug(
+ f"\nThe wrk traffic profile '{self.profile_name}' is invalid.\n"
+ )
+ raise WrkError(
+ f"\nThe wrk traffic profile '{self.profile_name}' is invalid.\n"
+ )
def __repr__(self):
return pformat(self.traffic_profile)
@@ -94,8 +103,9 @@ class WrkTrafficProfile(object):
doc/wrk_lld.rst
"""
- logger.debug("\nValidating the wrk traffic profile '{0}'...\n".
- format(self.profile_name))
+ logger.debug(
+ f"\nValidating the wrk traffic profile '{self.profile_name}'...\n"
+ )
if not (self._validate_mandatory_structure()
and self._validate_mandatory_values()
and self._validate_optional_values()
@@ -110,14 +120,14 @@ class WrkTrafficProfile(object):
"""
# Level 1: Check if the profile is a dictionary:
if not isinstance(self.traffic_profile, dict):
- logger.error("The wrk traffic profile must be a dictionary.")
+ logger.error(u"The wrk traffic profile must be a dictionary.")
return False
# Level 2: Check if all mandatory parameters are present:
is_valid = True
for param in self.MANDATORY_PARAMS:
if self.traffic_profile.get(param, None) is None:
- logger.error("The parameter '{0}' in mandatory.".format(param))
+ logger.error(f"The parameter '{param}' in mandatory.")
is_valid = False
return is_valid
@@ -129,8 +139,8 @@ class WrkTrafficProfile(object):
"""
# Level 3: Mandatory params: Check if urls is a list:
is_valid = True
- if not isinstance(self.traffic_profile["urls"], list):
- logger.error("The parameter 'urls' must be a list.")
+ if not isinstance(self.traffic_profile[u"urls"], list):
+ logger.error(u"The parameter 'urls' must be a list.")
is_valid = False
# Level 3: Mandatory params: Check if integers are not below minimum
@@ -147,60 +157,64 @@ class WrkTrafficProfile(object):
"""
is_valid = True
# Level 4: Optional params: Check if script is present:
- script = self.traffic_profile.get("script", None)
+ script = self.traffic_profile.get(u"script", None)
if script is not None:
if not isinstance(script, str):
- logger.error("The path to LuaJIT script in invalid")
+ logger.error(u"The path to LuaJIT script in invalid")
is_valid = False
else:
if not isfile(script):
- logger.error("The file '{0}' does not exist.".
- format(script))
+ logger.error(f"The file '{script}' does not exist.")
is_valid = False
else:
- self.traffic_profile["script"] = None
- logger.debug("The optional parameter 'LuaJIT script' is not "
- "defined. No problem.")
+ self.traffic_profile[u"script"] = None
+ logger.debug(
+ u"The optional parameter 'LuaJIT script' is not defined. "
+ u"No problem."
+ )
# Level 4: Optional params: Check if header is present:
- header = self.traffic_profile.get("header", None)
+ header = self.traffic_profile.get(u"header", None)
if header is not None:
if isinstance(header, dict):
- header = ", ".join("{0}: {1}".format(*item)
- for item in header.items())
- self.traffic_profile["header"] = header
+ header = u", ".join(
+ f"{0}: {1}".format(*item) for item in header.items()
+ )
+ self.traffic_profile[u"header"] = header
elif not isinstance(header, str):
- logger.error("The parameter 'header' type is not valid.")
+ logger.error(u"The parameter 'header' type is not valid.")
is_valid = False
if not header:
- logger.error("The parameter 'header' is defined but "
- "empty.")
+ logger.error(u"The parameter 'header' is defined but empty.")
is_valid = False
else:
- self.traffic_profile["header"] = None
- logger.debug("The optional parameter 'header' is not defined. "
- "No problem.")
+ self.traffic_profile[u"header"] = None
+ logger.debug(
+ u"The optional parameter 'header' is not defined. No problem."
+ )
# Level 4: Optional params: Check if latency is present:
- latency = self.traffic_profile.get("latency", None)
+ latency = self.traffic_profile.get(u"latency", None)
if latency is not None:
if not isinstance(latency, bool):
- logger.error("The parameter 'latency' must be boolean.")
+ logger.error(u"The parameter 'latency' must be boolean.")
is_valid = False
else:
- self.traffic_profile["latency"] = False
- logger.debug("The optional parameter 'latency' is not defined. "
- "No problem.")
+ self.traffic_profile[u"latency"] = False
+ logger.debug(
+ u"The optional parameter 'latency' is not defined. No problem."
+ )
# Level 4: Optional params: Check if timeout is present:
- if 'timeout' in self.traffic_profile:
- if not self._validate_int_param('timeout', 1):
+ if u"timeout" in self.traffic_profile:
+ if not self._validate_int_param(u"timeout", 1):
is_valid = False
else:
- self.traffic_profile["timeout"] = None
- logger.debug("The optional parameter 'timeout' is not defined. "
- "No problem.")
+ self.traffic_profile[u"timeout"] = None
+ logger.debug(
+ u"The optional parameter 'timeout' is not defined. No problem."
+ )
return is_valid
@@ -211,9 +225,10 @@ class WrkTrafficProfile(object):
:rtype: bool
"""
# Level 5: Check urls and cpus:
- if self.traffic_profile["cpus"] % len(self.traffic_profile["urls"]):
- logger.error("The number of CPUs must be a multiple of the "
- "number of URLs.")
+ if self.traffic_profile[u"cpus"] % len(self.traffic_profile[u"urls"]):
+ logger.error(
+ u"The number of CPUs must be a multiple of the number of URLs."
+ )
return False
return True
@@ -229,7 +244,7 @@ class WrkTrafficProfile(object):
:rtype: bool
"""
value = self._traffic_profile[param]
- if isinstance(value, (str, unicode)):
+ if isinstance(value, str):
if value.isdigit():
value = int(value)
else:
@@ -237,8 +252,9 @@ class WrkTrafficProfile(object):
if isinstance(value, int) and value >= minimum:
self.traffic_profile[param] = value
return True
- logger.error("The parameter '{param}' must be an integer and "
- "at least {minimum}".format(param=param, minimum=minimum))
+ logger.error(
+ f"The parameter '{param}' must be an integer and at least {minimum}"
+ )
return False
@property
diff --git a/resources/traffic_profiles/trex/profile_trex_stateless_base_class.py b/resources/traffic_profiles/trex/profile_trex_stateless_base_class.py
index b5a4ba9a11..6576cb7bdf 100755
--- a/resources/traffic_profiles/trex/profile_trex_stateless_base_class.py
+++ b/resources/traffic_profiles/trex/profile_trex_stateless_base_class.py
@@ -24,18 +24,19 @@ from string import ascii_letters
from trex.stl.api import *
-class TrafficStreamsBaseClass(object):
+class TrafficStreamsBaseClass:
"""Base class for stream profiles for T-rex traffic generator."""
+
STREAM_TABLE = {
- 'IMIX_v4': [
- {'size': 60, 'pps': 28, 'isg': 0},
- {'size': 590, 'pps': 20, 'isg': 0.1},
- {'size': 1514, 'pps': 4, 'isg': 0.2}
+ u"IMIX_v4": [
+ {u"size": 60, u"pps": 28, u"isg": 0},
+ {u"size": 590, u"pps": 20, u"isg": 0.1},
+ {u"size": 1514, u"pps": 4, u"isg": 0.2}
],
'IMIX_v4_1': [
- {'size': 64, 'pps': 28, 'isg': 0},
- {'size': 570, 'pps': 16, 'isg': 0.1},
- {'size': 1518, 'pps': 4, 'isg': 0.2}
+ {u"size": 64, u"pps": 28, u"isg": 0},
+ {u"size": 570, u"pps": 16, u"isg": 0.1},
+ {u"size": 1518, u"pps": 4, u"isg": 0.2}
]
}
@@ -56,7 +57,7 @@ class TrafficStreamsBaseClass(object):
:returns: The generated payload.
:rtype: str
"""
- payload = ""
+ payload = u""
for _ in range(length):
payload += choice(ascii_letters)
@@ -78,11 +79,11 @@ class TrafficStreamsBaseClass(object):
ip1 = socket.inet_pton(socket.AF_INET6, start_ip)
ip2 = socket.inet_pton(socket.AF_INET6, end_ip)
- hi1, lo1 = struct.unpack('!QQ', ip1)
- hi2, lo2 = struct.unpack('!QQ', ip2)
+ hi1, lo1 = struct.unpack(u"!QQ", ip1)
+ hi2, lo2 = struct.unpack(u"!QQ", ip2)
if ((hi1 << 64) | lo1) > ((hi2 << 64) | lo2):
- raise ValueError("IPv6: start_ip is greater then end_ip")
+ raise ValueError(u"IPv6: start_ip is greater then end_ip")
return lo1, abs(int(lo1) - int(lo2))
@@ -124,18 +125,22 @@ class TrafficStreamsBaseClass(object):
# Direction 0 --> 1
pkt_a = STLPktBuilder(
- pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1)
+ pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1
+ )
# Direction 1 --> 0
pkt_b = STLPktBuilder(
- pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2)
+ pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2
+ )
# Packets for latency measurement:
# Direction 0 --> 1
pkt_lat_a = STLPktBuilder(
- pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1)
+ pkt=base_pkt_a / self._gen_payload(payload_len), vm=vm1
+ )
# Direction 1 --> 0
pkt_lat_b = STLPktBuilder(
- pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2)
+ pkt=base_pkt_b / self._gen_payload(payload_len), vm=vm2
+ )
# Create the streams:
# Direction 0 --> 1
@@ -147,26 +152,29 @@ class TrafficStreamsBaseClass(object):
# Streams for latency measurement:
# Direction 0 --> 1
- lat_stream1 = STLStream(packet=pkt_lat_a,
- flow_stats=STLFlowLatencyStats(pg_id=0),
- mode=STLTXCont(pps=9000))
+ lat_stream1 = STLStream(
+ packet=pkt_lat_a, flow_stats=STLFlowLatencyStats(pg_id=0),
+ mode=STLTXCont(pps=9000)
+ )
# Direction 1 --> 0
# second traffic stream with a phase of 10ns (inter-stream gap)
- lat_stream2 = STLStream(packet=pkt_lat_b, isg=10.0,
- flow_stats=STLFlowLatencyStats(pg_id=1),
- mode=STLTXCont(pps=9000))
+ lat_stream2 = STLStream(
+ packet=pkt_lat_b, isg=10.0,
+ flow_stats=STLFlowLatencyStats(pg_id=1),
+ mode=STLTXCont(pps=9000)
+ )
return [stream1, stream2, lat_stream1, lat_stream2]
# Frame size is defined as a string, e.g.IMIX_v4_1:
elif isinstance(self.framesize, str):
- stream1 = []
- stream2 = []
+ stream1 = list()
+ stream2 = list()
for stream in self.STREAM_TABLE[self.framesize]:
- payload_len_a = max(0, stream['size'] - len(base_pkt_a) - 4)
- payload_len_b = max(0, stream['size'] - len(base_pkt_b) - 4)
+ payload_len_a = max(0, stream[u"size"] - len(base_pkt_a) - 4)
+ payload_len_b = max(0, stream[u"size"] - len(base_pkt_b) - 4)
# Create a base packet and pad it to size
pkt_a = STLPktBuilder(
pkt=base_pkt_a / self._gen_payload(payload_len_a),
@@ -176,12 +184,14 @@ class TrafficStreamsBaseClass(object):
vm=vm2)
# Create the streams:
- stream1.append(STLStream(packet=pkt_a,
- isg=stream['isg'],
- mode=STLTXCont(pps=stream['pps'])))
- stream2.append(STLStream(packet=pkt_b,
- isg=stream['isg'],
- mode=STLTXCont(pps=stream['pps'])))
+ stream1.append(STLStream(
+ packet=pkt_a, isg=stream[u"isg"],
+ mode=STLTXCont(pps=stream[u"pps"]))
+ )
+ stream2.append(STLStream(
+ packet=pkt_b, isg=stream[u"isg"],
+ mode=STLTXCont(pps=stream[u"pps"]))
+ )
streams = list()
streams.extend(stream1)
streams.extend(stream2)
@@ -198,6 +208,6 @@ class TrafficStreamsBaseClass(object):
:returns: Traffic streams.
:rtype: list
"""
- self.framesize = kwargs['framesize']
+ self.framesize = kwargs[u"framesize"]
return self.create_streams()
diff --git a/resources/traffic_scripts/arp_request.py b/resources/traffic_scripts/arp_request.py
deleted file mode 100755
index 8c5b9c7c47..0000000000
--- a/resources/traffic_scripts/arp_request.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Send an ARP request and verify the reply"""
-
-import sys
-
-from scapy.all import Ether, ARP
-
-from resources.libraries.python.PacketVerifier import Interface
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def parse_arguments():
- """Parse arguments of the script passed through command line
-
- :return: tuple of parsed arguments
- """
- args = TrafficScriptArg(['src_if', 'src_mac', 'dst_mac',
- 'src_ip', 'dst_ip'])
-
- # check for mandatory parameters
- params = (args.get_arg('tx_if'),
- args.get_arg('src_mac'),
- args.get_arg('dst_mac'),
- args.get_arg('src_ip'),
- args.get_arg('dst_ip'))
- if None in params:
- raise Exception('Missing mandatory parameter(s)!')
-
- return params
-
-
-def arp_request_test():
- """Send ARP request, expect a reply and verify its fields.
-
- returns: test status
- :raises RuntimeError: ARP reply timeout.
- """
- test_passed = False
- (src_if, src_mac, dst_mac, src_ip, dst_ip) = parse_arguments()
-
- interface = Interface(src_if)
-
- # build an ARP request
- arp_request = (Ether(src=src_mac, dst='ff:ff:ff:ff:ff:ff') /
- ARP(psrc=src_ip, hwsrc=src_mac, pdst=dst_ip,
- hwdst='ff:ff:ff:ff:ff:ff'))
-
- # send the request
- interface.send_pkt(arp_request)
-
- try:
- # wait for APR reply
- ether = interface.recv_pkt()
-
- if not ether:
- raise RuntimeError("ARP reply timeout")
-
- # verify received packet
-
- if not ether.haslayer(ARP):
- raise RuntimeError('Unexpected packet: does not contain ARP ' +
- 'header "{}"'.format(ether.__repr__()))
-
- arp = ether['ARP']
- arp_reply = 2
-
- if arp.op != arp_reply:
- raise RuntimeError('expected op={}, received {}'.format(arp_reply,
- arp.op))
- if arp.ptype != 0x800:
- raise RuntimeError('expected ptype=0x800, received {}'.
- format(arp.ptype))
- if arp.hwlen != 6:
- raise RuntimeError('expected hwlen=6, received {}'.
- format(arp.hwlen))
- if arp.plen != 4:
- raise RuntimeError('expected plen=4, received {}'.format(arp.plen))
- if arp.hwsrc != dst_mac:
- raise RuntimeError('expected hwsrc={}, received {}'.
- format(dst_mac, arp.hwsrc))
- if arp.psrc != dst_ip:
- raise RuntimeError('expected psrc={}, received {}'.
- format(dst_ip, arp.psrc))
- if arp.hwdst != src_mac:
- raise RuntimeError('expected hwdst={}, received {}'.
- format(src_mac, arp.hwdst))
- if arp.pdst != src_ip:
- raise RuntimeError('expected pdst={}, received {}'.
- format(src_ip, arp.pdst))
- test_passed = True
-
- except RuntimeError as ex:
- print 'Error occurred: {}'.format(ex)
-
- return test_passed
-
-
-def main():
- """Run the test and collect result"""
- if arp_request_test():
- sys.exit(0)
- else:
- sys.exit(1)
-
-if __name__ == '__main__':
- main()
diff --git a/resources/traffic_scripts/check_ra_packet.py b/resources/traffic_scripts/check_ra_packet.py
deleted file mode 100755
index 9717c7db95..0000000000
--- a/resources/traffic_scripts/check_ra_packet.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Router advertisement check script."""
-
-import sys
-import ipaddress
-
-from scapy.layers.inet6 import IPv6, ICMPv6ND_RA, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def mac_to_ipv6_linklocal(mac):
- """Transfer MAC address into specific link-local IPv6 address.
-
- :param mac: MAC address to be transferred.
- :type mac: str
- :return: IPv6 link-local address.
- :rtype: str
- """
- # Remove the most common delimiters: dots, dashes, etc.
- mac_value = int(mac.translate(None, ' .:-'), 16)
-
- # Split out the bytes that slot into the IPv6 address
- # XOR the most significant byte with 0x02, inverting the
- # Universal / Local bit
- high2 = mac_value >> 32 & 0xffff ^ 0x0200
- high1 = mac_value >> 24 & 0xff
- low1 = mac_value >> 16 & 0xff
- low2 = mac_value & 0xffff
-
- return 'fe80::{:04x}:{:02x}ff:fe{:02x}:{:04x}'.format(
- high2, high1, low1, low2)
-
-
-def main():
- """Check packets on specific port and look for the Router Advertisement
- part.
- """
-
- args = TrafficScriptArg(['src_mac', 'interval'])
-
- rx_if = args.get_arg('rx_if')
- src_mac = args.get_arg('src_mac')
- interval = int(args.get_arg('interval'))
- rxq = RxQueue(rx_if)
-
- # receive ICMPv6ND_RA packet
- while True:
- ether = rxq.recv(max(5, interval))
- if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- # Check if received packet contains layer RA and check other values
- if not ether.haslayer(ICMPv6ND_RA):
- raise RuntimeError('Not an RA packet received {0}'.
- format(ether.__repr__()))
-
- src_address = ipaddress.IPv6Address(unicode(ether['IPv6'].src))
- dst_address = ipaddress.IPv6Address(unicode(ether['IPv6'].dst))
- link_local = ipaddress.IPv6Address(unicode(mac_to_ipv6_linklocal(src_mac)))
- all_nodes_multicast = ipaddress.IPv6Address(u'ff02::1')
-
- if src_address != link_local:
- raise RuntimeError('Source address ({0}) not matching link local '
- 'address ({1})'.format(src_address, link_local))
- if dst_address != all_nodes_multicast:
- raise RuntimeError('Packet destination address ({0}) is not the all'
- ' nodes multicast address ({1}).'.
- format(dst_address, all_nodes_multicast))
- if ether[IPv6].hlim != 255:
- raise RuntimeError('Hop limit not correct: {0}!=255'.
- format(ether[IPv6].hlim))
-
- ra_code = ether[ICMPv6ND_RA].code
- if ra_code != 0:
- raise RuntimeError('ICMP code: {0} not correct. '.format(ra_code))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/check_dhcp_discover.py b/resources/traffic_scripts/dhcp/check_dhcp_discover.py
deleted file mode 100755
index 2fdc5b7fbf..0000000000
--- a/resources/traffic_scripts/dhcp/check_dhcp_discover.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that receives an DHCP packet on given interface and check if
-is correct DHCP DISCOVER message.
-"""
-
-import sys
-
-from scapy.layers.inet import UDP_SERVICES
-
-from resources.libraries.python.PacketVerifier import RxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(['rx_src_mac'], ['hostname'])
-
- rx_if = args.get_arg('rx_if')
- rx_src_mac = args.get_arg('rx_src_mac')
- hostname = args.get_arg('hostname')
-
- rx_dst_mac = 'ff:ff:ff:ff:ff:ff'
- rx_src_ip = '0.0.0.0'
- rx_dst_ip = '255.255.255.255'
- boot_request = 1
- dhcp_magic = 'c\x82Sc'
-
- rxq = RxQueue(rx_if)
-
- ether = rxq.recv(10)
-
- if ether is None:
- raise RuntimeError("DHCP DISCOVER Rx timeout.")
-
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC address error.")
- print "Destination MAC address: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC address error.")
- print "Source MAC address: OK."
-
- if ether['IP'].dst != rx_dst_ip:
- raise RuntimeError("Destination IP address error.")
- print "Destination IP address: OK."
-
- if ether['IP'].src != rx_src_ip:
- raise RuntimeError("Source IP address error.")
- print "Source IP address: OK."
-
- if ether['IP']['UDP'].dport != UDP_SERVICES.bootps:
- raise RuntimeError("UDP destination port error.")
- print "UDP destination port: OK."
-
- if ether['IP']['UDP'].sport != UDP_SERVICES.bootpc:
- raise RuntimeError("UDP source port error.")
- print "UDP source port: OK."
-
- bootp = ether['BOOTP']
-
- if bootp.op != boot_request:
- raise RuntimeError("BOOTP message type error.")
- print "BOOTP message type: OK"
-
- if bootp.ciaddr != '0.0.0.0':
- raise RuntimeError("BOOTP client IP address error.")
- print "BOOTP client IP address: OK"
-
- if bootp.yiaddr != '0.0.0.0':
- raise RuntimeError("BOOTP 'your' (client) IP address error.")
- print "BOOTP 'your' (client) IP address: OK"
-
- if bootp.siaddr != '0.0.0.0':
- raise RuntimeError("BOOTP next server IP address error.")
- print "BOOTP next server IP address: OK"
-
- if bootp.giaddr != '0.0.0.0':
- raise RuntimeError("BOOTP relay agent IP address error.")
- print "BOOTP relay agent IP address: OK"
-
- chaddr = bootp.chaddr[:bootp.hlen].encode('hex')
- if chaddr != rx_src_mac.replace(':', ''):
- raise RuntimeError("BOOTP client hardware address error.")
- print "BOOTP client hardware address: OK"
-
- # Check hostname
- if bootp.sname != 64*'\x00':
- raise RuntimeError("BOOTP server name error.")
- print "BOOTP server name: OK"
-
- # Check boot file
- if bootp.file != 128*'\x00':
- raise RuntimeError("BOOTP boot file name error.")
- print "BOOTP boot file name: OK"
-
- # Check bootp magic
- if bootp.options != dhcp_magic:
- raise RuntimeError("DHCP magic error.")
- print "DHCP magic: OK"
-
- # Check options
- dhcp_options = ether['DHCP options'].options
-
- # Option 12
- hn = filter(lambda x: x[0] == 'hostname', dhcp_options)
- if hostname:
- try:
- if hn[0][1] != hostname:
- raise RuntimeError("Client's hostname doesn't match.")
- except IndexError:
- raise RuntimeError("Option list doesn't contain hostname option.")
- else:
- if len(hn) != 0:
- raise RuntimeError("Option list contains hostname option.")
- print "Option 12 hostname: OK"
-
- # Option 53
- mt = filter(lambda x: x[0] == 'message-type', dhcp_options)[0][1]
- if mt != 1:
- raise RuntimeError("Option 53 message-type error.")
- print "Option 53 message-type: OK"
-
- # Option 55
- prl = filter(lambda x: x[0] == 'param_req_list', dhcp_options)[0][1]
- if prl != '\x01\x1c\x02\x03\x0f\x06w\x0c,/\x1ay*':
- raise RuntimeError("Option 55 param_req_list error.")
- print "Option 55 param_req_list: OK"
-
- # Option 255
- if 'end' not in dhcp_options:
- raise RuntimeError("end option error.")
- print "end option: OK"
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/check_dhcp_request.py b/resources/traffic_scripts/dhcp/check_dhcp_request.py
deleted file mode 100755
index 522f2f507c..0000000000
--- a/resources/traffic_scripts/dhcp/check_dhcp_request.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an DHCP OFFER message and checks if the DHCP
-REQUEST contains all required fields."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import IP, UDP, UDP_SERVICES
-from scapy.layers.dhcp import BOOTP, DHCP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def is_discover(pkt):
- """If DHCP message type option is set to dhcp discover return True,
- else return False. False is returned also if exception occurs."""
- dhcp_discover = 1
- try:
- dhcp_options = pkt['BOOTP']['DHCP options'].options
- message_type = filter(lambda x: x[0] == 'message-type',
- dhcp_options)
- message_type = message_type[0][1]
- return message_type == dhcp_discover
- except:
- return False
-
-
-def is_request(pkt):
- """If DHCP message type option is DHCP REQUEST return True,
- else return False. False is returned also if exception occurs."""
- dhcp_request = 3
- try:
- dhcp_options = pkt['BOOTP']['DHCP options'].options
- message_type = filter(lambda x: x[0] == 'message-type',
- dhcp_options)
- message_type = message_type[0][1]
- return message_type == dhcp_request
- except:
- return False
-
-
-def main():
- """Main function of the script file."""
- args = TrafficScriptArg(['client_mac', 'server_mac', 'server_ip',
- 'client_ip', 'client_mask'],
- ['hostname', 'offer_xid'])
-
- server_if = args.get_arg('rx_if')
- server_mac = args.get_arg('server_mac')
- server_ip = args.get_arg('server_ip')
-
- client_mac = args.get_arg('client_mac')
- client_ip = args.get_arg('client_ip')
- client_mask = args.get_arg('client_mask')
-
- hostname = args.get_arg('hostname')
- offer_xid = args.get_arg('offer_xid')
-
- rx_src_ip = '0.0.0.0'
- rx_dst_ip = '255.255.255.255'
-
- rxq = RxQueue(server_if)
- txq = TxQueue(server_if)
- sent_packets = []
-
- for _ in range(10):
- dhcp_discover = rxq.recv(10)
- if is_discover(dhcp_discover):
- break
- else:
- raise RuntimeError("DHCP DISCOVER Rx error.")
-
- dhcp_offer = Ether(src=server_mac, dst=dhcp_discover.src)
- dhcp_offer /= IP(src=server_ip, dst="255.255.255.255")
- dhcp_offer /= UDP(sport=67, dport=68)
- dhcp_offer /= BOOTP(op=2,
- # if offer_xid differs from xid value in DHCP DISCOVER
- # the DHCP OFFER has to be discarded
- xid=int(offer_xid) if offer_xid
- else dhcp_discover['BOOTP'].xid,
- yiaddr=client_ip,
- siaddr=server_ip,
- chaddr=dhcp_discover['BOOTP'].chaddr)
- dhcp_offer_options = [("message-type", "offer"), # Option 53
- ("subnet_mask", client_mask), # Option 1
- ("server_id", server_ip), # Option 54, dhcp server
- ("lease_time", 43200), # Option 51
- "end"]
- dhcp_offer /= DHCP(options=dhcp_offer_options)
-
- txq.send(dhcp_offer)
- sent_packets.append(dhcp_offer)
-
- max_other_pkts = 10
- for _ in range(0, max_other_pkts):
- dhcp_request = rxq.recv(5, sent_packets)
- if not dhcp_request:
- raise RuntimeError("DHCP REQUEST Rx timeout.")
- if is_request(dhcp_request):
- break
- else:
- raise RuntimeError("Max RX packet limit reached.")
-
- if offer_xid:
- # if offer_xid differs from xid value in DHCP DISCOVER the DHCP OFFER
- # has to be discarded
- raise RuntimeError("DHCP REQUEST received. DHCP OFFER with wrong XID "
- "has not been discarded.")
-
- # CHECK ETHER, IP, UDP
- if dhcp_request.dst != dhcp_discover.dst:
- raise RuntimeError("Destination MAC error.")
- print "Destination MAC: OK."
-
- if dhcp_request.src != dhcp_discover.src:
- raise RuntimeError("Source MAC error.")
- print "Source MAC: OK."
-
- if dhcp_request['IP'].dst != rx_dst_ip:
- raise RuntimeError("Destination IP error.")
- print "Destination IP: OK."
-
- if dhcp_request['IP'].src != rx_src_ip:
- raise RuntimeError("Source IP error.")
- print "Source IP: OK."
-
- if dhcp_request['IP']['UDP'].dport != UDP_SERVICES.bootps:
- raise RuntimeError("BOOTPs error.")
- print "BOOTPs: OK."
-
- if dhcp_request['IP']['UDP'].sport != UDP_SERVICES.bootpc:
- raise RuntimeError("BOOTPc error.")
- print "BOOTPc: OK."
-
- # CHECK BOOTP
- if dhcp_request['BOOTP'].op != dhcp_discover['BOOTP'].op:
- raise RuntimeError("BOOTP operation error.")
- print "BOOTP operation: OK"
-
- if dhcp_request['BOOTP'].xid != dhcp_discover['BOOTP'].xid:
- raise RuntimeError("BOOTP XID error.")
- print "BOOTP XID: OK"
-
- if dhcp_request['BOOTP'].ciaddr != '0.0.0.0':
- raise RuntimeError("BOOTP ciaddr error.")
- print "BOOTP ciaddr: OK"
-
- ca = dhcp_request['BOOTP'].chaddr[:dhcp_request['BOOTP'].hlen].encode('hex')
- if ca != client_mac.replace(':', ''):
- raise RuntimeError("BOOTP client hardware address error.")
- print "BOOTP client hardware address: OK"
-
- if dhcp_request['BOOTP'].options != dhcp_discover['BOOTP'].options:
- raise RuntimeError("DHCP options error.")
- print "DHCP options: OK"
-
- # CHECK DHCP OPTIONS
- dhcp_options = dhcp_request['DHCP options'].options
-
- hn = filter(lambda x: x[0] == 'hostname', dhcp_options)
- if hostname:
- try:
- if hn[0][1] != hostname:
- raise RuntimeError("Client's hostname doesn't match.")
- except IndexError:
- raise RuntimeError("Option list doesn't contain hostname option.")
- else:
- if len(hn) != 0:
- raise RuntimeError("Option list contains hostname option.")
- print "Option 12 hostname: OK"
-
- # Option 50
- ra = filter(lambda x: x[0] == 'requested_addr', dhcp_options)[0][1]
- if ra != client_ip:
- raise RuntimeError("Option 50 requested_addr error.")
- print "Option 50 requested_addr: OK"
-
- # Option 53
- mt = filter(lambda x: x[0] == 'message-type', dhcp_options)[0][1]
- if mt != 3: # request
- raise RuntimeError("Option 53 message-type error.")
- print "Option 53 message-type: OK"
-
- # Option 54
- sid = filter(lambda x: x[0] == 'server_id', dhcp_options)[0][1]
- if sid != server_ip:
- raise RuntimeError("Option 54 server_id error.")
- print "Option 54 server_id: OK"
-
- # Option 55
- prl = filter(lambda x: x[0] == 'param_req_list', dhcp_options)[0][1]
- if prl != '\x01\x1c\x02\x03\x0f\x06w\x0c,/\x1ay*':
- raise RuntimeError("Option 55 param_req_list error.")
- print "Option 55 param_req_list: OK"
-
- # Option 255
- if 'end' not in dhcp_options:
- raise RuntimeError("end option error.")
- print "end option: OK"
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/check_dhcp_request_ack.py b/resources/traffic_scripts/dhcp/check_dhcp_request_ack.py
deleted file mode 100755
index 8a3839cda7..0000000000
--- a/resources/traffic_scripts/dhcp/check_dhcp_request_ack.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends a DHCP ACK message when DHCP REQUEST message is
-received."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import IP, UDP
-from scapy.layers.dhcp import BOOTP, DHCP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def is_discover(pkt):
- """If DHCP message type option is set to dhcp discover return True,
- else return False. False is returned also if exception occurs."""
- dhcp_discover = 1
- try:
- dhcp_options = pkt['BOOTP']['DHCP options'].options
- message_type = filter(lambda x: x[0] == 'message-type',
- dhcp_options)
- message_type = message_type[0][1]
- return message_type == dhcp_discover
- except:
- return False
-
-
-def is_request(pkt):
- """If DHCP message type option is DHCP REQUEST return True,
- else return False. False is returned also if exception occurs."""
- dhcp_request = 3
- try:
- dhcp_options = pkt['BOOTP']['DHCP options'].options
- message_type = filter(lambda x: x[0] == 'message-type',
- dhcp_options)
- message_type = message_type[0][1]
- return message_type == dhcp_request
- except:
- return False
-
-
-def main():
- """Main function of the script file."""
- args = TrafficScriptArg(['server_mac', 'server_ip', 'client_ip',
- 'client_mask', 'lease_time'])
-
- server_if = args.get_arg('rx_if')
- server_mac = args.get_arg('server_mac')
- server_ip = args.get_arg('server_ip')
-
- client_ip = args.get_arg('client_ip')
- client_mask = args.get_arg('client_mask')
-
- lease_time = int(args.get_arg('lease_time'))
-
- rxq = RxQueue(server_if)
- txq = TxQueue(server_if)
- sent_packets = []
-
- for _ in range(10):
- dhcp_discover = rxq.recv(10)
- if is_discover(dhcp_discover):
- break
- else:
- raise RuntimeError("DHCP DISCOVER Rx error.")
-
- dhcp_offer = Ether(src=server_mac, dst=dhcp_discover.src)
- dhcp_offer /= IP(src=server_ip, dst="255.255.255.255")
- dhcp_offer /= UDP(sport=67, dport=68)
- dhcp_offer /= BOOTP(op=2,
- xid=dhcp_discover['BOOTP'].xid,
- yiaddr=client_ip,
- siaddr=server_ip,
- chaddr=dhcp_discover['BOOTP'].chaddr)
- dhcp_offer_options = [("message-type", "offer"), # Option 53
- ("subnet_mask", client_mask), # Option 1
- ("server_id", server_ip), # Option 54, dhcp server
- ("lease_time", lease_time), # Option 51
- "end"]
- dhcp_offer /= DHCP(options=dhcp_offer_options)
-
- txq.send(dhcp_offer)
- sent_packets.append(dhcp_offer)
-
- max_other_pkts = 10
- for _ in range(0, max_other_pkts):
- dhcp_request = rxq.recv(5, sent_packets)
- if not dhcp_request:
- raise RuntimeError("DHCP REQUEST Rx timeout.")
- if is_request(dhcp_request):
- break
- else:
- raise RuntimeError("Max RX packet limit reached.")
-
- # Send dhcp ack
- dhcp_ack = Ether(src=server_mac, dst=dhcp_request.src)
- dhcp_ack /= IP(src=server_ip, dst="255.255.255.255")
- dhcp_ack /= UDP(sport=67, dport=68)
- dhcp_ack /= BOOTP(op=2,
- xid=dhcp_request['BOOTP'].xid,
- yiaddr=client_ip,
- siaddr=server_ip,
- flags=dhcp_request['BOOTP'].flags,
- chaddr=dhcp_request['BOOTP'].chaddr)
- dhcp_ack_options = [("message-type", "ack"), # Option 53. 5: ACK, 6: NAK
- ("subnet_mask", client_mask), # Option 1
- ("server_id", server_ip), # Option 54, dhcp server
- ("lease_time", lease_time), # Option 51,
- "end"]
- dhcp_ack /= DHCP(options=dhcp_ack_options)
-
- txq.send(dhcp_ack)
- sent_packets.append(dhcp_ack)
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/send_and_check_proxy_discover.py b/resources/traffic_scripts/dhcp/send_and_check_proxy_discover.py
deleted file mode 100755
index d8089713fd..0000000000
--- a/resources/traffic_scripts/dhcp/send_and_check_proxy_discover.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends DHCP DISCOVER packet
- and check if is received on interface."""
-
-import sys
-
-from scapy.all import Ether
-from scapy.layers.inet import IP, UDP
-from scapy.layers.inet import UDP_SERVICES
-from scapy.layers.dhcp import DHCP, BOOTP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def is_discover(pkt):
- """If DHCP message type option is set to dhcp discover return True,
- else return False. False is returned also if exception occurs."""
- dhcp_discover = 1
- try:
- dhcp_options = pkt['BOOTP']['DHCP options'].options
- message_type = filter(lambda x: x[0] == 'message-type',
- dhcp_options)
- message_type = message_type[0][1]
- return message_type == dhcp_discover
- except:
- return False
-
-
-def main():
- """Send DHCP DISCOVER packet."""
-
- args = TrafficScriptArg(['tx_src_ip', 'tx_dst_ip'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- tx_src_ip = args.get_arg('tx_src_ip')
- tx_dst_ip = args.get_arg('tx_dst_ip')
-
- sent_packets = []
-
- dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff") / \
- IP(src=tx_src_ip, dst=tx_dst_ip) / \
- UDP(sport=UDP_SERVICES.bootpc, dport=UDP_SERVICES.bootps) / \
- BOOTP(op=1,) / \
- DHCP(options=[("message-type", "discover"),
- "end"])
-
- sent_packets.append(dhcp_discover)
- txq.send(dhcp_discover)
-
- for _ in range(10):
- dhcp_discover = rxq.recv(2)
- if is_discover(dhcp_discover):
- break
- else:
- raise RuntimeError("DHCP DISCOVER Rx timeout")
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/send_and_check_proxy_messages.py b/resources/traffic_scripts/dhcp/send_and_check_proxy_messages.py
deleted file mode 100755
index 27f148c900..0000000000
--- a/resources/traffic_scripts/dhcp/send_and_check_proxy_messages.py
+++ /dev/null
@@ -1,299 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends DHCP packets."""
-
-import sys
-
-from scapy.all import Ether
-from scapy.layers.inet import IP, UDP
-from scapy.layers.inet import UDP_SERVICES
-from scapy.layers.dhcp import DHCP, BOOTP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def dhcp_discover(tx_if, rx_if, tx_src_ip, tx_dst_ip, server_ip, proxy_ip,
- client_mac):
- """Send and check DHCP DISCOVER proxy packet."""
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp_discover = Ether(src=client_mac, dst="ff:ff:ff:ff:ff:ff") / \
- IP(src=tx_src_ip, dst=tx_dst_ip) / \
- UDP(sport=UDP_SERVICES.bootpc, dport=UDP_SERVICES.bootps) / \
- BOOTP(op=1,) / \
- DHCP(options=[("message-type", "discover"),
- "end"])
-
- sent_packets.append(dhcp_discover)
- txq.send(dhcp_discover)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCP DISCOVER timeout')
-
- if ether[IP].src != proxy_ip:
- raise RuntimeError("Source IP address error.")
- print "Source IP address: OK."
-
- if ether[IP].dst != server_ip:
- raise RuntimeError("Destination IP address error.")
- print "Destination IP address: OK."
-
- if ether[UDP].dport != UDP_SERVICES.bootps:
- raise RuntimeError("UDP destination port error.")
- print "UDP destination port: OK."
-
- if ether[UDP].sport != UDP_SERVICES.bootpc:
- raise RuntimeError("UDP source port error.")
- print "UDP source port: OK."
-
- if ether[DHCP].options[1][0] != 'relay_agent_Information': # option 82
- raise RuntimeError("Relay agent information error.")
- option_82 = ether[DHCP].options[1][1]
-
- if ether[DHCP].options[0][1] != 1: # 1 - DISCOVER message
- raise RuntimeError("DHCP DISCOVER message error.")
- print "DHCP DISCOVER message OK."
-
- return option_82
-
-
-def dhcp_offer(rx_if, tx_if, tx_dst_ip, server_ip, proxy_ip, client_ip,
- server_mac, option_82):
- """Send and check DHCP OFFER proxy packet."""
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp_offer = Ether(src=server_mac, dst="ff:ff:ff:ff:ff:ff") / \
- IP(src=server_ip, dst=tx_dst_ip) / \
- UDP(sport=UDP_SERVICES.bootps, dport=UDP_SERVICES.bootpc) / \
- BOOTP(op=2,
- yiaddr=client_ip,
- siaddr=server_ip) / \
- DHCP(options=
- [("message-type", "offer"),
- ("server_id", server_ip),
- ("relay_agent_Information", option_82),
- "end"])
-
- txq.send(dhcp_offer)
- sent_packets.append(dhcp_offer)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCP OFFER timeout')
-
- if ether[IP].dst != tx_dst_ip:
- raise RuntimeError("Destination IP address error.")
- print "Destination IP address: OK."
-
- if ether[IP].src != proxy_ip:
- raise RuntimeError("Source IP address error.")
- print "Source IP address: OK."
-
- if ether[UDP].dport != UDP_SERVICES.bootpc:
- raise RuntimeError("UDP destination port error.")
- print "UDP destination port: OK."
-
- if ether[UDP].sport != UDP_SERVICES.bootps:
- raise RuntimeError("UDP source port error.")
- print "UDP source port: OK."
-
- if ether[BOOTP].yiaddr != client_ip:
- raise RuntimeError("Client IP address error.")
- print "Client IP address: OK."
-
- if ether[BOOTP].siaddr != server_ip:
- raise RuntimeError("DHCP server IP address error.")
- print "DHCP server IP address: OK."
-
- if ether[DHCP].options[0][1] != 2: # 2 - OFFER message
- raise RuntimeError("DHCP OFFER message error.")
- print "DHCP OFFER message OK."
-
-
-def dhcp_request(tx_if, rx_if, tx_src_ip, tx_dst_ip, server_ip, proxy_ip,
- client_ip, client_mac):
- """Send and check DHCP REQUEST proxy packet."""
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp_request = Ether(src=client_mac, dst="ff:ff:ff:ff:ff:ff") / \
- IP(src=tx_src_ip, dst=tx_dst_ip) / \
- UDP(sport=UDP_SERVICES.bootpc, dport=UDP_SERVICES.bootps) / \
- BOOTP(op=1,
- giaddr=proxy_ip,
- siaddr=server_ip) / \
- DHCP(options=[("message-type", "request"),
- ("server_id", server_ip),
- ("requested_addr", client_ip),
- "end"])
-
- sent_packets.append(dhcp_request)
- txq.send(dhcp_request)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCP REQUEST timeout')
-
- if ether[IP].dst != server_ip:
- raise RuntimeError("Destination IP address error.")
- print "Destination IP address: OK."
-
- if ether[IP].src != proxy_ip:
- raise RuntimeError("Source IP address error.")
- print "Source IP address: OK."
-
- if ether[UDP].dport != UDP_SERVICES.bootps:
- raise RuntimeError("UDP destination port error.")
- print "UDP destination port: OK."
-
- if ether[UDP].sport != UDP_SERVICES.bootpc:
- raise RuntimeError("UDP source port error.")
- print "UDP source port: OK."
-
- if ether[BOOTP].siaddr != server_ip:
- raise RuntimeError("DHCP server IP address error.")
- print "DHCP server IP address: OK."
-
- if ether[DHCP].options[2][1] != client_ip:
- raise RuntimeError("Requested IP address error.")
- print "Requested IP address: OK."
-
- if ether[DHCP].options[3][0] != 'relay_agent_Information': # option 82
- raise RuntimeError("Relay agent information error.")
-
- if ether[DHCP].options[0][1] != 3: # 2 - REQUEST message
- raise RuntimeError("DHCP REQUEST message error.")
- print "DHCP REQUEST message: OK."
-
-
-def dhcp_ack(rx_if, tx_if, tx_dst_ip, server_ip, proxy_ip, client_ip,
- server_mac, option_82):
- """Send and check DHCP ACK proxy packet."""
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- lease_time = 43200 # 12 hours
-
- sent_packets = []
-
- dhcp_ack = Ether(src=server_mac, dst="ff:ff:ff:ff:ff:ff") / \
- IP(src=server_ip, dst=tx_dst_ip) / \
- UDP(sport=UDP_SERVICES.bootps, dport=UDP_SERVICES.bootpc) / \
- BOOTP(op=2,
- yiaddr=client_ip,
- siaddr=server_ip) / \
- DHCP(options=
- [("message-type", "ack"),
- ("server_id", server_ip),
- ("lease_time", lease_time),
- ("relay_agent_Information", option_82),
- "end"])
-
- txq.send(dhcp_ack)
- sent_packets.append(dhcp_ack)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCP ACK timeout')
-
- if ether[IP].dst != tx_dst_ip:
- raise RuntimeError("Destination IP address error.")
- print "Destination IP address: OK."
-
- if ether[IP].src != proxy_ip:
- raise RuntimeError("Source IP address error.")
- print "Source IP address: OK."
-
- if ether[UDP].dport != UDP_SERVICES.bootpc:
- raise RuntimeError("UDP destination port error.")
- print "UDP destination port: OK."
-
- if ether[UDP].sport != UDP_SERVICES.bootps:
- raise RuntimeError("UDP source port error.")
- print "UDP source port: OK."
-
- if ether[BOOTP].yiaddr != client_ip:
- raise RuntimeError("Client IP address error.")
- print "Client IP address: OK."
-
- if ether[BOOTP].siaddr != server_ip:
- raise RuntimeError("DHCP server IP address error.")
- print "DHCP server IP address: OK."
-
- if ether[DHCP].options[2][1] != lease_time:
- raise RuntimeError("DHCP lease time error.")
- print "DHCP lease time OK."
-
- if ether[DHCP].options[0][1] != 5: # 5 - ACK message
- raise RuntimeError("DHCP ACK message error.")
- print "DHCP ACK message OK."
-
-
-def main():
- """Send DHCP proxy messages."""
-
- args = TrafficScriptArg(['server_ip', 'server_mac', 'client_ip',
- 'client_mac', 'proxy_ip'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- tx_src_ip = "0.0.0.0"
- tx_dst_ip = "255.255.255.255"
-
- server_ip = args.get_arg('server_ip')
- client_ip = args.get_arg('client_ip')
- proxy_ip = args.get_arg('proxy_ip')
- client_mac = args.get_arg('client_mac')
- server_mac = args.get_arg('server_mac')
-
- # DHCP DISCOVER
- option_82 = dhcp_discover(tx_if, rx_if, tx_src_ip, tx_dst_ip, server_ip,
- proxy_ip, client_mac)
-
- # DHCP OFFER
- dhcp_offer(tx_if, rx_if, tx_dst_ip, server_ip, proxy_ip, client_ip,
- server_mac, option_82)
-
- # DHCP REQUEST
- dhcp_request(tx_if, rx_if, tx_src_ip, tx_dst_ip, server_ip, proxy_ip,
- client_ip, client_mac)
-
- # DHCP ACK
- dhcp_ack(tx_if, rx_if, tx_dst_ip, server_ip, proxy_ip, client_ip,
- server_mac, option_82)
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/dhcp/send_dhcp_v6_messages.py b/resources/traffic_scripts/dhcp/send_dhcp_v6_messages.py
deleted file mode 100755
index 09742565ee..0000000000
--- a/resources/traffic_scripts/dhcp/send_dhcp_v6_messages.py
+++ /dev/null
@@ -1,372 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends DHCPv6 proxy packets."""
-
-from scapy.layers.dhcp6 import *
-from scapy.layers.inet6 import IPv6, UDP, UDP_SERVICES
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _check_udp_checksum(pkt):
- """Check udp checksum in ip packet.
- Return true if checksum is correct."""
- new = pkt.__class__(str(pkt))
- del new['UDP'].chksum
- new = new.__class__(str(new))
- return new['UDP'].chksum == pkt['UDP'].chksum
-
-
-def _get_dhcpv6_msgtype(msg_index):
- """Return DHCPv6 message type string.
-
- :param msg_index: Index of message type.
- :return: Message type.
- :type msg_index: int
- :rtype msg_str: str
- """
- dhcp6_messages = {
- 1: "SOLICIT",
- 2: "ADVERTISE",
- 3: "REQUEST",
- 4: "CONFIRM",
- 5: "RENEW",
- 6: "REBIND",
- 7: "REPLY",
- 8: "RELEASE",
- 9: "DECLINE",
- 10: "RECONFIGURE",
- 11: "INFORMATION-REQUEST",
- 12: "RELAY-FORW",
- 13: "RELAY-REPL"
- }
- return dhcp6_messages[msg_index]
-
-
-def dhcpv6_solicit(tx_if, rx_if, dhcp_multicast_ip, link_local_ip, proxy_ip,
- server_ip, server_mac, client_duid, client_mac):
- """Send and check DHCPv6 SOLICIT proxy packet.
-
- :param tx_if: Client interface.
- :param rx_if: DHCPv6 server interface.
- :param dhcp_multicast_ip: Servers and relay agents multicast address.
- :param link_local_ip: Client link-local address.
- :param proxy_ip: IP address of DHCPv6 proxy server.
- :param server_ip: IP address of DHCPv6 server.
- :param server_mac: MAC address of DHCPv6 server.
- :param client_duid: Client DHCP Unique Identifier.
- :param client_mac: Client MAC address.
- :type tx_if: str
- :type rx_if: str
- :type dhcp_multicast_ip: str
- :type link_local_ip: str
- :type proxy_ip: str
- :type server_ip: str
- :type server_mac: str
- :type client_duid: str
- :type client_mac: str
- :return interface_id: ID of proxy interface.
- :rtype interface_id: str
- """
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp6_solicit_pkt = Ether(src=client_mac, dst="33:33:00:01:00:02") / \
- IPv6(src=link_local_ip, dst=dhcp_multicast_ip) / \
- UDP(sport=UDP_SERVICES.dhcpv6_client,
- dport=UDP_SERVICES.dhcpv6_server) / \
- DHCP6_Solicit() / \
- DHCP6OptClientId(duid=client_duid)
-
- sent_packets.append(dhcp6_solicit_pkt)
- txq.send(dhcp6_solicit_pkt)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCPv6 SOLICIT timeout')
-
- if ether.dst != server_mac:
- raise RuntimeError("Destination MAC address error: {} != {}".format(
- ether.dst, server_mac))
- print "Destination MAC address: OK."
-
- if ether['IPv6'].src != proxy_ip:
- raise RuntimeError("Source IP address error: {} != {}".format(
- ether['IPv6'].src, proxy_ip))
- print "Source IP address: OK."
-
- if ether['IPv6'].dst != server_ip:
- raise RuntimeError("Destination IP address error: {} != {}".format(
- ether['IPv6'].dst, server_ip))
- print "Destination IP address: OK."
-
- msgtype = _get_dhcpv6_msgtype(ether['IPv6']['UDP']
- ['DHCPv6 Relay Forward Message (Relay Agent/Server Message)'].msgtype)
- if msgtype != 'RELAY-FORW':
- raise RuntimeError("Message type error: {} != RELAY-FORW".format(
- msgtype))
- print "Message type: OK."
-
- linkaddr = ether['IPv6']['UDP']\
- ['DHCPv6 Relay Forward Message (Relay Agent/Server Message)'].linkaddr
- if linkaddr != proxy_ip:
- raise RuntimeError("Proxy IP address error: {} != {}".format(
- linkaddr, proxy_ip))
- print "Proxy IP address: OK."
-
- try:
- interface_id = ether['IPv6']['UDP']\
- ['DHCPv6 Relay Forward Message (Relay Agent/Server Message)']\
- ['Unknown DHCPv6 OPtion']['DHCP6 Interface-Id Option'].ifaceid
- except Exception:
- raise RuntimeError("DHCP6 Interface-Id error!")
-
- return interface_id
-
-
-def dhcpv6_advertise(rx_if, tx_if, link_local_ip, proxy_ip,
- server_ip, server_mac, proxy_to_server_mac, interface_id):
- """Send and check DHCPv6 ADVERTISE proxy packet.
-
- :param rx_if: DHCPv6 server interface.
- :param tx_if: Client interface.
- :param link_local_ip: Client link-local address.
- :param proxy_ip: IP address of DHCPv6 proxy server.
- :param server_ip: IP address of DHCPv6 server.
- :param server_mac: MAC address of DHCPv6 server.
- :param proxy_to_server_mac: MAC address of DHCPv6 proxy interface.
- :param interface_id: ID of proxy interface.
- :type rx_if: str
- :type tx_if: str
- :type link_local_ip: str
- :type proxy_ip: str
- :type server_ip: str
- :type server_mac: str
- :type proxy_to_server_mac: str
- :type interface_id: str
- """
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp6_advertise_pkt = Ether(src=server_mac, dst=proxy_to_server_mac) / \
- IPv6(src=server_ip, dst=proxy_ip) / \
- UDP(sport=UDP_SERVICES.dhcpv6_server,
- dport=UDP_SERVICES.dhcpv6_client) / \
- DHCP6_RelayReply(peeraddr=link_local_ip,
- linkaddr=proxy_ip) / \
- DHCP6OptIfaceId(ifaceid=interface_id) / \
- DHCP6OptRelayMsg() / \
- DHCP6_Advertise()
-
- sent_packets.append(dhcp6_advertise_pkt)
- txq.send(dhcp6_advertise_pkt)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCPv6 ADVERTISE timeout')
-
- if ether['IPv6'].src != proxy_ip:
- raise RuntimeError("Source IP address error: {} != {}".format(
- ether['IPv6'].src, proxy_ip))
- print "Source IP address: OK."
-
- if not _check_udp_checksum(ether['IPv6']):
- raise RuntimeError("Checksum error!")
- print "Checksum: OK."
-
- msgtype = _get_dhcpv6_msgtype(ether['IPv6']['UDP']
- ['DHCPv6 Advertise Message'].msgtype)
- if msgtype != 'ADVERTISE':
- raise RuntimeError("Message type error: {} != ADVERTISE".format(
- msgtype))
- print "Message type: OK."
-
-
-def dhcpv6_request(tx_if, rx_if, dhcp_multicast_ip, link_local_ip, proxy_ip,
- server_ip, client_duid, client_mac):
- """Send and check DHCPv6 REQUEST proxy packet.
-
- :param tx_if: Client interface.
- :param rx_if: DHCPv6 server interface.
- :param dhcp_multicast_ip: Servers and relay agents multicast address.
- :param link_local_ip: Client link-local address.
- :param proxy_ip: IP address of DHCPv6 proxy server.
- :param server_ip: IP address of DHCPv6 server.
- :param client_duid: Client DHCP Unique Identifier.
- :param client_mac: Client MAC address.
- :type tx_if: str
- :type rx_if: str
- :type dhcp_multicast_ip: str
- :type link_local_ip: str
- :type proxy_ip: str
- :type server_ip: str
- :type client_duid: str
- :type client_mac: str
- """
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp6_request_pkt = Ether(src=client_mac, dst="33:33:00:01:00:02") / \
- IPv6(src=link_local_ip, dst=dhcp_multicast_ip) / \
- UDP(sport=UDP_SERVICES.dhcpv6_client,
- dport=UDP_SERVICES.dhcpv6_server) / \
- DHCP6_Request() / \
- DHCP6OptClientId(duid=client_duid)
-
- sent_packets.append(dhcp6_request_pkt)
- txq.send(dhcp6_request_pkt)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCPv6 REQUEST timeout')
-
- if ether['IPv6'].src != proxy_ip:
- raise RuntimeError("Source IP address error: {} != {}".format(
- ether['IPv6'].src, proxy_ip))
- print "Source IP address: OK."
-
- if ether['IPv6'].dst != server_ip:
- raise RuntimeError("Destination IP address error: {} != {}".format(
- ether['IPv6'].dst, server_ip))
- print "Destination IP address: OK."
-
- msgtype = _get_dhcpv6_msgtype(ether['IPv6']['UDP']
- ['DHCPv6 Relay Forward Message (Relay Agent/Server Message)'].msgtype)
- if msgtype != 'RELAY-FORW':
- raise RuntimeError("Message type error: {} != RELAY-FORW".format(
- msgtype))
- print "Message type: OK."
-
- linkaddr = ether['IPv6']['UDP']\
- ['DHCPv6 Relay Forward Message (Relay Agent/Server Message)'].linkaddr
- if linkaddr != proxy_ip:
- raise RuntimeError("Proxy IP address error: {} != {}".format(
- linkaddr, proxy_ip))
- print "Proxy IP address: OK."
-
-
-def dhcpv6_reply(rx_if, tx_if, link_local_ip, proxy_ip, server_ip, server_mac,
- interface_id):
- """Send and check DHCPv6 REPLY proxy packet.
-
- :param rx_if: DHCPv6 server interface.
- :param tx_if: Client interface.
- :param link_local_ip: Client link-local address.
- :param proxy_ip: IP address of DHCPv6 proxy server.
- :param server_ip: IP address of DHCPv6 server.
- :param server_mac: MAC address of DHCPv6 server.
- :param interface_id: ID of proxy interface.
- :type rx_if: str
- :type tx_if: str
- :type link_local_ip: str
- :type proxy_ip: str
- :type server_ip: str
- :type server_mac: str
- :type interface_id: str
- """
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- dhcp_reply_pkt = Ether(src=server_mac) / \
- IPv6(src=server_ip, dst=proxy_ip) / \
- UDP(sport=UDP_SERVICES.dhcpv6_server,
- dport=UDP_SERVICES.dhcpv6_client) / \
- DHCP6_RelayReply(peeraddr=link_local_ip,
- linkaddr=proxy_ip) / \
- DHCP6OptIfaceId(ifaceid=interface_id) / \
- DHCP6OptRelayMsg() / \
- DHCP6_Reply()
-
- sent_packets.append(dhcp_reply_pkt)
- txq.send(dhcp_reply_pkt)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError('DHCPv6 REPLY timeout')
-
- if ether['IPv6'].src != proxy_ip:
- raise RuntimeError("Source IP address error: {} != {}".format(
- ether['IPv6'].src, proxy_ip))
- print "Source IP address: OK."
-
- if not _check_udp_checksum(ether['IPv6']):
- raise RuntimeError("Checksum error!")
- print "Checksum: OK."
-
- msgtype = _get_dhcpv6_msgtype(ether['IPv6']['UDP']
- ['DHCPv6 Reply Message'].msgtype)
- if msgtype != 'REPLY':
- raise RuntimeError("Message type error: {} != REPLY".format(msgtype))
- print "Message type: OK."
-
-
-def main():
- """Send DHCPv6 proxy messages."""
-
- args = TrafficScriptArg(['tx_src_ip', 'tx_dst_ip', 'proxy_ip', 'proxy_mac',
- 'server_ip', 'client_mac', 'server_mac',
- 'proxy_to_server_mac'])
-
- client_if = args.get_arg('tx_if')
- server_if = args.get_arg('rx_if')
- proxy_ip = args.get_arg('proxy_ip')
- proxy_mac = args.get_arg('proxy_mac')
- proxy_to_server_mac = args.get_arg('proxy_to_server_mac')
- server_ip = args.get_arg('server_ip')
- client_mac = args.get_arg('client_mac')
- server_mac = args.get_arg('server_mac')
-
- link_local_ip = "fe80::1"
- dhcp_multicast_ip = "ff02::1:2"
- client_duid = str(random.randint(0, 9999))
-
- # SOLICIT
- interface_id = dhcpv6_solicit(client_if, server_if, dhcp_multicast_ip,
- link_local_ip, proxy_ip, server_ip,
- server_mac, client_duid, client_mac)
-
- # ADVERTISE
- dhcpv6_advertise(client_if, server_if, link_local_ip, proxy_ip,
- server_ip, server_mac, proxy_to_server_mac, interface_id)
-
- # REQUEST
- dhcpv6_request(client_if, server_if, dhcp_multicast_ip, link_local_ip,
- proxy_ip, server_ip, client_duid, client_mac)
-
- # REPLY
- dhcpv6_reply(client_if, server_if, link_local_ip, proxy_ip, server_ip,
- server_mac, interface_id)
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/icmpv6_echo.py b/resources/traffic_scripts/icmpv6_echo.py
deleted file mode 100755
index a18896b07f..0000000000
--- a/resources/traffic_scripts/icmpv6_echo.py
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script for ICMPv6 echo test."""
-
-import sys
-import logging
-
-# pylint: disable=no-name-in-module
-# pylint: disable=import-error
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-
-from scapy.all import Ether
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6NDOptDstLLAddr
-from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.PacketVerifier import checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- echo_id = 0xa
- echo_seq = 0x1
-
- sent_packets = []
-
- # send ICMPv6 neighbor advertisement message
- pkt_send = (Ether(src=src_mac, dst='ff:ff:ff:ff:ff:ff') /
- IPv6(src=src_ip, dst='ff02::1:ff00:2') /
- ICMPv6ND_NA(tgt=src_ip, R=0) /
- ICMPv6NDOptDstLLAddr(lladdr=src_mac))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- # send ICMPv6 echo request
- pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest(id=echo_id, seq=echo_seq))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- # receive ICMPv6 echo reply
- while True:
- ether = rxq.recv(2, sent_packets)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if not ether.haslayer(IPv6):
- raise RuntimeError('Unexpected packet with no IPv6 received {0}'.
- format(ether.__repr__()))
-
- ipv6 = ether[IPv6]
-
- if not ipv6.haslayer(ICMPv6EchoReply):
- raise RuntimeError('Unexpected packet with no ICMPv6 echo reply '
- 'received {0}'.format(ipv6.__repr__()))
-
- icmpv6 = ipv6[ICMPv6EchoReply]
-
- # check identifier and sequence number
- if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
- raise RuntimeError('Invalid ICMPv6 echo reply received ID {0} seq {1} '
- 'should be ID {2} seq {3}'.
- format(icmpv6.id, icmpv6.seq, echo_id, echo_seq))
-
- # verify checksum
- cksum = icmpv6.cksum
- del icmpv6.cksum
- tmp = ICMPv6EchoReply(str(icmpv6))
- if not checksum_equal(tmp.cksum, cksum):
- raise RuntimeError('Invalid checksum {0} should be {1}'.
- format(cksum, tmp.cksum))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/icmpv6_echo_req_resp.py b/resources/traffic_scripts/icmpv6_echo_req_resp.py
deleted file mode 100755
index 195f666b38..0000000000
--- a/resources/traffic_scripts/icmpv6_echo_req_resp.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2018 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Send ICMPv6 echo request from one TG port to DUT port or to another TG port
- through DUT node(s) and send reply back. Also verify hop limit processing."""
-
-import sys
-import logging
-
-# pylint: disable=no-name-in-module
-# pylint: disable=import-error
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6NDOptDstLLAddr
-from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
-from scapy.all import Ether
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.PacketVerifier import checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_nh_mac', 'dst_nh_mac',
- 'src_ip', 'dst_ip', 'h_num'], ['is_dst_tg'])
-
- src_rxq = RxQueue(args.get_arg('tx_if'))
- src_txq = TxQueue(args.get_arg('tx_if'))
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_nh_mac = args.get_arg('src_nh_mac')
- dst_nh_mac = args.get_arg('dst_nh_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- hop_num = int(args.get_arg('h_num'))
-
- is_dst_tg = True if args.get_arg('is_dst_tg') in ['True', ''] else False
- dst_rxq = RxQueue(args.get_arg('rx_if')) if is_dst_tg else None
- dst_txq = TxQueue(args.get_arg('rx_if')) if is_dst_tg else None
-
- hop_limit = 64
- echo_id = 0xa
- echo_seq = 0x1
-
- src_sent_packets = []
- dst_sent_packets = []
-
- # send ICMPv6 neighbor advertisement message
- pkt_send = (Ether(src=src_mac, dst='ff:ff:ff:ff:ff:ff') /
- IPv6(src=src_ip, dst='ff02::1:ff00:2') /
- ICMPv6ND_NA(tgt=src_ip, R=0) /
- ICMPv6NDOptDstLLAddr(lladdr=src_mac))
- src_sent_packets.append(pkt_send)
- src_txq.send(pkt_send)
-
- if is_dst_tg:
- # send ICMPv6 neighbor advertisement message
- pkt_send = (Ether(src=dst_mac, dst='ff:ff:ff:ff:ff:ff') /
- IPv6(src=dst_ip, dst='ff02::1:ff00:2') /
- ICMPv6ND_NA(tgt=dst_ip, R=0) /
- ICMPv6NDOptDstLLAddr(lladdr=dst_mac))
- dst_sent_packets.append(pkt_send)
- dst_txq.send(pkt_send)
-
- # send ICMPv6 echo request from first TG interface
- pkt_send = (Ether(src=src_mac, dst=src_nh_mac) /
- IPv6(src=src_ip, dst=dst_ip, hlim=hop_limit) /
- ICMPv6EchoRequest(id=echo_id, seq=echo_seq))
- src_sent_packets.append(pkt_send)
- src_txq.send(pkt_send)
-
- if is_dst_tg:
- # receive ICMPv6 echo request on second TG interface
- while True:
- ether = dst_rxq.recv(2, dst_sent_packets)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is
- # ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if not ether.haslayer(IPv6):
- raise RuntimeError('Unexpected packet with no IPv6 received: {0}'.
- format(ether.__repr__()))
-
- ipv6 = ether[IPv6]
-
- # verify hop limit processing
- if ipv6.hlim != (hop_limit - hop_num):
- raise RuntimeError('Invalid hop limit {0} should be {1}'.
- format(ipv6.hlim, hop_limit - hop_num))
-
- if not ipv6.haslayer(ICMPv6EchoRequest):
- raise RuntimeError('Unexpected packet with no IPv6 ICMP received '
- '{0}'.format(ipv6.__repr__()))
-
- icmpv6 = ipv6[ICMPv6EchoRequest]
-
- # check identifier and sequence number
- if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
- raise RuntimeError('Invalid ICMPv6 echo reply received ID {0} '
- 'seq {1} should be ID {2} seq {3}'.
- format(icmpv6.id, icmpv6.seq, echo_id, echo_seq))
-
- # verify checksum
- cksum = icmpv6.cksum
- del icmpv6.cksum
- tmp = ICMPv6EchoRequest(str(icmpv6))
- if not checksum_equal(tmp.cksum, cksum):
- raise RuntimeError('Invalid checksum {0} should be {1}'.
- format(cksum, tmp.cksum))
-
- # send ICMPv6 echo reply from second TG interface
- pkt_send = (Ether(src=dst_mac, dst=dst_nh_mac) /
- IPv6(src=dst_ip, dst=src_ip, hlim=(ipv6.hlim - 1)) /
- ICMPv6EchoReply(id=echo_id, seq=echo_seq))
- dst_sent_packets.append(pkt_send)
- dst_txq.send(pkt_send)
-
- # receive ICMPv6 echo reply on first TG interface
- while True:
- ether = src_rxq.recv(2, src_sent_packets)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if not ether.haslayer(IPv6):
- raise RuntimeError('Unexpected packet with no IPv6 layer received {0}'.
- format(ether.__repr__()))
-
- ipv6 = ether[IPv6]
-
- # verify hop limit processing; destination node decrements hlim by one in
- # outgoing ICMPv6 Echo Reply
- directions = 2 if is_dst_tg else 1
- hop_limit_reply = hop_limit - directions * hop_num - 1
- if ipv6.hlim != hop_limit_reply:
- raise RuntimeError('Invalid hop limit {0} should be {1}'.
- format(ipv6.hlim, hop_limit_reply))
-
- if not ipv6.haslayer(ICMPv6EchoReply):
- raise RuntimeError('Unexpected packet with no IPv6 ICMP received {0}'.
- format(ipv6.__repr__()))
-
- icmpv6 = ipv6[ICMPv6EchoReply]
-
- # check identifier and sequence number
- if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
- raise RuntimeError('Invalid ICMPv6 echo reply received ID {0} '
- 'seq {1} should be ID {2} seq {3}'.
- format(icmpv6.id, icmpv6.seq, echo_id, echo_seq))
-
- # verify checksum
- cksum = icmpv6.cksum
- del icmpv6.cksum
- tmp = ICMPv6EchoReply(str(icmpv6))
- if not checksum_equal(tmp.cksum, cksum):
- raise RuntimeError('Invalid checksum {0} should be {1}'.
- format(cksum, tmp.cksum))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/ipsec.py b/resources/traffic_scripts/ipsec.py
index b853b6c09f..320303d1fb 100755
--- a/resources/traffic_scripts/ipsec.py
+++ b/resources/traffic_scripts/ipsec.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,18 +18,18 @@
import sys
import logging
+from ipaddress import ip_address
# pylint: disable=no-name-in-module
# pylint: disable=import-error
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-
-from scapy.all import Ether
+logging.getLogger(u"scapy.runtime").setLevel(logging.ERROR)
from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
from scapy.layers.ipsec import SecurityAssociation, ESP
-from ipaddress import ip_address
+from scapy.layers.l2 import Ether
+from scapy.packet import Raw
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
+from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
def check_ipsec(pkt_recv, ip_layer, dst_tun, src_ip, dst_ip, sa_in):
@@ -50,37 +50,39 @@ def check_ipsec(pkt_recv, ip_layer, dst_tun, src_ip, dst_ip, sa_in):
:raises RuntimeError: If received packet is invalid.
"""
if not pkt_recv.haslayer(ip_layer):
- raise RuntimeError('Not an {ip} packet received: {pkt}'.format(
- ip=ip_layer.name, pkt=pkt_recv.__repr__()))
+ raise RuntimeError(
+ f"Not an {ip_layer.name} packet received: {pkt_recv!r}"
+ )
- if pkt_recv[ip_layer.name].dst != dst_tun:
+ if pkt_recv[ip_layer].dst != dst_tun:
raise RuntimeError(
- 'Received packet has invalid destination address: {rec_ip} '
- 'should be: {exp_ip}'.format(
- rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=dst_tun))
+ f"Received packet has invalid destination address: "
+ f"{pkt_recv[ip_layer].dst} should be: {dst_tun}"
+ )
if not pkt_recv.haslayer(ESP):
- raise RuntimeError(
- 'Not an ESP packet received: {pkt}'.format(pkt=pkt_recv.__repr__()))
+ raise RuntimeError(f"Not an ESP packet received: {pkt_recv!r}")
ip_pkt = pkt_recv[ip_layer]
d_pkt = sa_in.decrypt(ip_pkt)
if d_pkt[ip_layer].dst != dst_ip:
raise RuntimeError(
- 'Decrypted packet has invalid destination address: {rec_ip} '
- 'should be: {exp_ip}'.format(
- rec_ip=d_pkt[ip_layer].dst, exp_ip=dst_ip))
+ f"Decrypted packet has invalid destination address: "
+ f"{d_pkt[ip_layer].dst} should be: {dst_ip}"
+ )
if d_pkt[ip_layer].src != src_ip:
raise RuntimeError(
- 'Decrypted packet has invalid source address: {rec_ip} should be: '
- '{exp_ip}'.format(rec_ip=d_pkt[ip_layer].src, exp_ip=src_ip))
+ f"Decrypted packet has invalid source address: "
+ f"{d_pkt[ip_layer].src} should be: {src_ip}"
+ )
- if ip_layer == IP and d_pkt[ip_layer.name].proto != 61:
+ if ip_layer == IP and d_pkt[ip_layer].proto != 61:
raise RuntimeError(
- 'Decrypted packet has invalid IP protocol: {rec_proto} '
- 'should be: 61'.format(rec_proto=d_pkt[ip_layer.name].proto))
+ f"Decrypted packet has invalid IP protocol: "
+ f"{d_pkt[ip_layer].proto} should be: 61"
+ )
def check_ip(pkt_recv, ip_layer, src_ip, dst_ip):
@@ -97,25 +99,27 @@ def check_ip(pkt_recv, ip_layer, src_ip, dst_ip):
:raises RuntimeError: If received packet is invalid.
"""
if not pkt_recv.haslayer(ip_layer):
- raise RuntimeError('Not an {ip} packet received: {pkt}'.format(
- ip=ip_layer.name, pkt=pkt_recv.__repr__()))
+ raise RuntimeError(
+ f"Not an {ip_layer.name} packet received: {pkt_recv!r}"
+ )
- if pkt_recv[ip_layer.name].dst != dst_ip:
+ if pkt_recv[ip_layer].dst != dst_ip:
raise RuntimeError(
- 'Received packet has invalid destination address: {rec_ip} '
- 'should be: {exp_ip}'.format(
- rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=dst_ip))
+ f"Received packet has invalid destination address: "
+ f"{pkt_recv[ip_layer.name].dst} should be: {dst_ip}"
+ )
- if pkt_recv[ip_layer.name].src != src_ip:
+ if pkt_recv[ip_layer].src != src_ip:
raise RuntimeError(
- 'Received packet has invalid destination address: {rec_ip} '
- 'should be: {exp_ip}'.format(
- rec_ip=pkt_recv[ip_layer.name].dst, exp_ip=src_ip))
+ f"Received packet has invalid destination address: "
+ f"{pkt_recv[ip_layer.name].dst} should be: {src_ip}"
+ )
- if ip_layer == IP and pkt_recv[ip_layer.name].proto != 61:
+ if ip_layer == IP and pkt_recv[ip_layer].proto != 61:
raise RuntimeError(
- 'Received packet has invalid IP protocol: {rec_proto} '
- 'should be: 61'.format(rec_proto=pkt_recv[ip_layer.name].proto))
+ f"Received packet has invalid IP protocol: "
+ f"{pkt_recv[ip_layer].proto} should be: 61"
+ )
# pylint: disable=too-many-locals
@@ -124,36 +128,35 @@ def main():
"""Send and receive IPsec packet."""
args = TrafficScriptArg(
- ['tx_src_mac', 'tx_dst_mac', 'rx_src_mac', 'rx_dst_mac', 'src_ip',
- 'dst_ip','crypto_alg', 'crypto_key', 'integ_alg', 'integ_key',
- 'l_spi', 'r_spi'],
- ['src_tun', 'dst_tun']
+ [
+ u"tx_src_mac", u"tx_dst_mac", u"rx_src_mac", u"rx_dst_mac",
+ u"src_ip", u"dst_ip", u"crypto_alg", u"crypto_key", u"integ_alg",
+ u"integ_key", u"l_spi", u"r_spi"
+ ],
+ [u"src_tun", u"dst_tun"]
)
- tx_txq = TxQueue(args.get_arg('tx_if'))
- tx_rxq = RxQueue(args.get_arg('tx_if'))
- rx_txq = TxQueue(args.get_arg('rx_if'))
- rx_rxq = RxQueue(args.get_arg('rx_if'))
-
- tx_src_mac = args.get_arg('tx_src_mac')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_dst_mac = args.get_arg('rx_dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- crypto_alg = args.get_arg('crypto_alg')
- crypto_key = args.get_arg('crypto_key')
- integ_alg = args.get_arg('integ_alg')
- integ_key = args.get_arg('integ_key')
- l_spi = int(args.get_arg('l_spi'))
- r_spi = int(args.get_arg('r_spi'))
- src_tun = args.get_arg('src_tun')
- dst_tun = args.get_arg('dst_tun')
-
- if ip_address(unicode(src_ip)).version == 6:
- ip_layer = IPv6
- else:
- ip_layer = IP
+ tx_txq = TxQueue(args.get_arg(u"tx_if"))
+ tx_rxq = RxQueue(args.get_arg(u"tx_if"))
+ rx_txq = TxQueue(args.get_arg(u"rx_if"))
+ rx_rxq = RxQueue(args.get_arg(u"rx_if"))
+
+ tx_src_mac = args.get_arg(u"tx_src_mac")
+ tx_dst_mac = args.get_arg(u"tx_dst_mac")
+ rx_src_mac = args.get_arg(u"rx_src_mac")
+ rx_dst_mac = args.get_arg(u"rx_dst_mac")
+ src_ip = args.get_arg(u"src_ip")
+ dst_ip = args.get_arg(u"dst_ip")
+ crypto_alg = args.get_arg(u"crypto_alg")
+ crypto_key = args.get_arg(u"crypto_key")
+ integ_alg = args.get_arg(u"integ_alg")
+ integ_key = args.get_arg(u"integ_key")
+ l_spi = int(args.get_arg(u"l_spi"))
+ r_spi = int(args.get_arg(u"r_spi"))
+ src_tun = args.get_arg(u"src_tun")
+ dst_tun = args.get_arg(u"dst_tun")
+
+ ip_layer = IP if ip_address(src_ip).version == 4 else IPv6
tunnel_out = ip_layer(src=src_tun, dst=dst_tun) if src_tun and dst_tun \
else None
@@ -163,23 +166,28 @@ def main():
if not (src_tun and dst_tun):
src_tun = src_ip
- sa_in = SecurityAssociation(ESP, spi=r_spi, crypt_algo=crypto_alg,
- crypt_key=crypto_key, auth_algo=integ_alg,
- auth_key=integ_key, tunnel_header=tunnel_in)
+ sa_in = SecurityAssociation(
+ ESP, spi=r_spi, crypt_algo=crypto_alg,
+ crypt_key=crypto_key.encode(encoding=u"utf-8"), auth_algo=integ_alg,
+ auth_key=integ_key.encode(encoding=u"utf-8"), tunnel_header=tunnel_in
+ )
- sa_out = SecurityAssociation(ESP, spi=l_spi, crypt_algo=crypto_alg,
- crypt_key=crypto_key, auth_algo=integ_alg,
- auth_key=integ_key, tunnel_header=tunnel_out)
+ sa_out = SecurityAssociation(
+ ESP, spi=l_spi, crypt_algo=crypto_alg,
+ crypt_key=crypto_key.encode(encoding=u"utf-8"), auth_algo=integ_alg,
+ auth_key=integ_key.encode(encoding=u"utf-8"), tunnel_header=tunnel_out
+ )
ip_pkt = ip_layer(src=src_ip, dst=dst_ip, proto=61) if ip_layer == IP \
else ip_layer(src=src_ip, dst=dst_ip)
- ip_pkt = ip_layer(str(ip_pkt))
+ ip_pkt = ip_layer(ip_pkt)
e_pkt = sa_out.encrypt(ip_pkt)
tx_pkt_send = (Ether(src=tx_src_mac, dst=tx_dst_mac) /
e_pkt)
sent_packets = list()
+ tx_pkt_send /= Raw()
sent_packets.append(tx_pkt_send)
tx_txq.send(tx_pkt_send)
@@ -187,8 +195,7 @@ def main():
rx_pkt_recv = rx_rxq.recv(2)
if rx_pkt_recv is None:
- raise RuntimeError(
- '{ip} packet Rx timeout'.format(ip=ip_layer.name))
+ raise RuntimeError(f"{ip_layer.name} packet Rx timeout")
if rx_pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
@@ -204,15 +211,16 @@ def main():
rx_pkt_send = (Ether(src=rx_dst_mac, dst=rx_src_mac) /
rx_ip_pkt)
+ rx_pkt_send /= Raw()
rx_txq.send(rx_pkt_send)
while True:
tx_pkt_recv = tx_rxq.recv(2, sent_packets)
if tx_pkt_recv is None:
- raise RuntimeError('ESP packet Rx timeout')
+ raise RuntimeError(u"ESP packet Rx timeout")
- if rx_pkt_recv.haslayer(ICMPv6ND_NS):
+ if tx_pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
continue
else:
@@ -224,5 +232,5 @@ def main():
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/ipv4_ping_ttl_check.py b/resources/traffic_scripts/ipv4_ping_ttl_check.py
deleted file mode 100755
index 99a7b0a5f0..0000000000
--- a/resources/traffic_scripts/ipv4_ping_ttl_check.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from scapy.all import Ether, IP, ICMP
-from resources.libraries.python.PacketVerifier \
- import Interface, create_gratuitous_arp_request, auto_pad, checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def check_ttl(ttl_begin, ttl_end, ttl_diff):
- if ttl_begin != ttl_end + ttl_diff:
- raise RuntimeError(
- "TTL changed from {} to {} but decrease by {} expected"
- .format(ttl_begin, ttl_end, ttl_diff))
-
-
-def ckeck_packets_equal(pkt_send, pkt_recv):
- pkt_send_raw = auto_pad(pkt_send)
- pkt_recv_raw = auto_pad(pkt_recv)
- if pkt_send_raw != pkt_recv_raw:
- print "Sent: {}".format(pkt_send_raw.encode('hex'))
- print "Received: {}".format(pkt_recv_raw.encode('hex'))
- print "Sent:"
- pkt_send.show2()
- print "Received:"
- pkt_recv.show2()
- raise RuntimeError("Sent packet doesn't match received packet")
-
-
-def main():
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
- 'hops', 'first_hop_mac', 'is_dst_tg'])
-
- src_if_name = args.get_arg('tx_if')
- dst_if_name = args.get_arg('rx_if')
- is_dst_tg = True if args.get_arg('is_dst_tg') == 'True' else False
-
- src_mac = args.get_arg('src_mac')
- first_hop_mac = args.get_arg('first_hop_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- hops = int(args.get_arg('hops'))
-
- if is_dst_tg and (src_if_name == dst_if_name):
- raise RuntimeError(
- "Source interface name equals destination interface name")
-
- src_if = Interface(src_if_name)
- src_if.send_pkt(str(create_gratuitous_arp_request(src_mac, src_ip)))
- if is_dst_tg:
- dst_if = Interface(dst_if_name)
- dst_if.send_pkt(str(create_gratuitous_arp_request(dst_mac, dst_ip)))
-
- pkt_req_send = (Ether(src=src_mac, dst=first_hop_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP())
- src_if.send_pkt(pkt_req_send)
-
- if is_dst_tg:
- pkt_req_recv = dst_if.recv_pkt()
- if pkt_req_recv is None:
- raise RuntimeError('Timeout waiting for packet')
-
- check_ttl(pkt_req_send[IP].ttl, pkt_req_recv[IP].ttl, hops)
- pkt_req_send_mod = pkt_req_send.copy()
- pkt_req_send_mod[IP].ttl = pkt_req_recv[IP].ttl
- del pkt_req_send_mod[IP].chksum # update checksum
- ckeck_packets_equal(pkt_req_send_mod[IP], pkt_req_recv[IP])
-
- pkt_resp_send = (Ether(src=dst_mac, dst=pkt_req_recv.src) /
- IP(src=dst_ip, dst=src_ip) /
- ICMP(type=0)) # echo-reply
- dst_if.send_pkt(pkt_resp_send)
-
- pkt_resp_recv = src_if.recv_pkt()
- if pkt_resp_recv is None:
- raise RuntimeError('Timeout waiting for packet')
-
- if is_dst_tg:
- check_ttl(pkt_resp_send[IP].ttl, pkt_resp_recv[IP].ttl, hops)
- pkt_resp_send_mod = pkt_resp_send.copy()
- pkt_resp_send_mod[IP].ttl = pkt_resp_recv[IP].ttl
- del pkt_resp_send_mod[IP].chksum # update checksum
- ckeck_packets_equal(pkt_resp_send_mod[IP], pkt_resp_recv[IP])
-
- if not pkt_resp_recv.haslayer(IP):
- raise RuntimeError('Received packet does not contain IPv4 header: {}'.
- format(pkt_resp_recv.__repr__()))
-
- if pkt_resp_recv[IP].src != pkt_req_send[IP].dst:
- raise RuntimeError(
- 'Received IPv4 packet contains wrong src IP address, '
- '{} instead of {}'.format(pkt_resp_recv[IP].src,
- pkt_req_send[IP].dst))
-
- if pkt_resp_recv[IP].dst != pkt_req_send[IP].src:
- raise RuntimeError(
- 'Received IPv4 packet contains wrong dst IP address, '
- '{} instead of {}'.format(pkt_resp_recv[IP].dst,
- pkt_req_send[IP].src))
-
- # verify IPv4 checksum
- copy = pkt_resp_recv.copy()
- chksum = copy[IP].chksum
- del copy[IP].chksum
- tmp = IP(str(copy[IP]))
- if not checksum_equal(tmp.chksum, chksum):
- raise RuntimeError('Received IPv4 packet contains invalid checksum, '
- '{} instead of {}'.format(chksum, tmp.chksum))
-
- if not pkt_resp_recv[IP].haslayer(ICMP):
- raise RuntimeError(
- 'Received IPv4 packet does not contain ICMP header: {}'.
- format(pkt_resp_recv[IP].__repr__()))
-
- # verify ICMP checksum
- copy = pkt_resp_recv.copy()
- chksum = copy[IP][ICMP].chksum
- del copy[IP][ICMP].chksum
- tmp = ICMP(str(copy[IP][ICMP]))
- if not checksum_equal(tmp.chksum, chksum):
- raise RuntimeError('Received ICMP packet contains invalid checksum, '
- '{} instead of {}'.format(chksum, tmp.chksum))
-
- pkt_req_send_mod = pkt_req_send.copy()
- pkt_req_send_mod[IP][ICMP].type = pkt_resp_recv[IP][ICMP].type
- del pkt_req_send_mod[IP][ICMP].chksum # update checksum
- ckeck_packets_equal(pkt_req_send_mod[IP][ICMP], pkt_resp_recv[IP][ICMP])
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/ipv4_sweep_ping.py b/resources/traffic_scripts/ipv4_sweep_ping.py
deleted file mode 100755
index e258d45213..0000000000
--- a/resources/traffic_scripts/ipv4_sweep_ping.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script for IPv4 sweep ping."""
-
-import logging
-import os
-import sys
-
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue, \
- create_gratuitous_arp_request, checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-from scapy.layers.inet import IP, ICMP
-from scapy.all import Ether, Raw
-
-
-def main():
- # start_size - start size of the ICMPv4 echo data
- # end_size - end size of the ICMPv4 echo data
- # step - increment step
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
- 'start_size', 'end_size', 'step'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- start_size = int(args.get_arg('start_size'))
- end_size = int(args.get_arg('end_size'))
- step = int(args.get_arg('step'))
- echo_id = 0xa
- # generate some random data buffer
- data = bytearray(os.urandom(end_size))
-
- sent_packets = []
- pkt_send = create_gratuitous_arp_request(src_mac, src_ip)
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- # send ICMP echo request with incremented data length and receive ICMP
- # echo reply
- for echo_seq in range(start_size, end_size + 1, step):
- pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP(id=echo_id, seq=echo_seq) /
- Raw(load=data[0:echo_seq]))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- ether = rxq.recv(ignore=sent_packets)
- if ether is None:
- raise RuntimeError(
- 'ICMP echo reply seq {0} Rx timeout'.format(echo_seq))
-
- if not ether.haslayer(IP):
- raise RuntimeError(
- 'Unexpected packet with no IPv4 received {0}'.format(
- ether.__repr__()))
-
- ipv4 = ether['IP']
-
- if not ipv4.haslayer(ICMP):
- raise RuntimeError(
- 'Unexpected packet with no ICMP received {0}'.format(
- ipv4.__repr__()))
-
- icmpv4 = ipv4['ICMP']
-
- if icmpv4.id != echo_id or icmpv4.seq != echo_seq:
- raise RuntimeError(
- 'Invalid ICMP echo reply received ID {0} seq {1} should be '
- 'ID {2} seq {3}, {0}'.format(icmpv4.id, icmpv4.seq, echo_id,
- echo_seq))
-
- chksum = icmpv4.chksum
- del icmpv4.chksum
- tmp = ICMP(str(icmpv4))
- if not checksum_equal(tmp.chksum, chksum):
- raise RuntimeError(
- 'Invalid checksum {0} should be {1}'.format(chksum, tmp.chksum))
-
- if 'Raw' in icmpv4:
- load = icmpv4['Raw'].load
- else:
- load = ""
- if load != data[0:echo_seq]:
- raise RuntimeError(
- 'Received ICMP payload does not match sent payload')
-
- sent_packets.remove(pkt_send)
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/ipv6_nd_proxy_check.py b/resources/traffic_scripts/ipv6_nd_proxy_check.py
deleted file mode 100755
index 1d96050cf4..0000000000
--- a/resources/traffic_scripts/ipv6_nd_proxy_check.py
+++ /dev/null
@@ -1,207 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends DHCPv6 proxy packets."""
-
-from scapy.layers.inet import Ether
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
-
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def imcpv6nd_solicit(tx_if, src_mac, dst_mac, src_ip, dst_ip):
- """Send ICMPv6 Neighbor Solicitation packet and expect a response
- from the proxy.
-
- :param tx_if: Interface on TG.
- :param src_mac: MAC address of TG interface.
- :param dst_mac: MAC address of proxy interface.
- :param src_ip: IP address of TG interface.
- :param dst_ip: IP address of proxied interface.
- :type tx_if: str
- :type src_mac: str
- :type dst_mac: str
- :type src_ip: str
- :type dst_ip: str
- :raises RuntimeError: If the received packet is not correct.
- """
-
- rxq = RxQueue(tx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- icmpv6nd_solicit_pkt = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip) /
- ICMPv6ND_NS(tgt=dst_ip))
-
- sent_packets.append(icmpv6nd_solicit_pkt)
- txq.send(icmpv6nd_solicit_pkt)
-
- ether = None
- for _ in range(5):
- ether = rxq.recv(3, ignore=sent_packets)
- if not ether:
- continue
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue in case of ICMPv6ND_NS packet
- continue
- else:
- # otherwise process the current packet
- break
-
- if ether is None:
- raise RuntimeError('ICMPv6ND Proxy response timeout.')
-
- if ether.src != dst_mac:
- raise RuntimeError("Source MAC address error: {} != {}".
- format(ether.src, dst_mac))
- print "Source MAC address: OK."
-
- if ether.dst != src_mac:
- raise RuntimeError("Destination MAC address error: {} != {}".
- format(ether.dst, src_mac))
- print "Destination MAC address: OK."
-
- if ether[IPv6].src != dst_ip:
- raise RuntimeError("Source IP address error: {} != {}".
- format(ether[IPv6].src, dst_ip))
- print "Source IP address: OK."
-
- if ether[IPv6].dst != src_ip:
- raise RuntimeError("Destination IP address error: {} != {}".
- format(ether[IPv6].dst, src_ip))
- print "Destination IP address: OK."
-
- try:
- target_addr = ether[IPv6][ICMPv6ND_NA].tgt
- except (KeyError, AttributeError):
- raise RuntimeError("Not an ICMPv6ND Neighbor Advertisement packet.")
-
- if target_addr != dst_ip:
- raise RuntimeError("ICMPv6 field 'Target address' error: {} != {}".
- format(target_addr, dst_ip))
- print "Target address field: OK."
-
-
-def ipv6_ping(src_if, dst_if, src_mac, dst_mac,
- proxy_to_src_mac, proxy_to_dst_mac, src_ip, dst_ip):
- """Sends ICMPv6 Echo Request, receive it and send a reply.
-
- :param src_if: First TG interface on link to DUT.
- :param dst_if: Second TG interface on link to DUT.
- :param src_mac: MAC address of first interface.
- :param dst_mac: MAC address of second interface.
- :param proxy_to_src_mac: MAC address of first proxy interface on DUT.
- :param proxy_to_dst_mac: MAC address of second proxy interface on DUT.
- :param src_ip: IP address of first interface.
- :param dst_ip: IP address of second interface.
- :type src_if: str
- :type dst_if: str
- :type src_mac: str
- :type dst_mac: str
- :type proxy_to_src_mac: str
- :type proxy_to_dst_mac: str
- :type src_ip: str
- :type dst_ip: str
- :raises RuntimeError: If a received packet is not correct.
- """
- rxq = RxQueue(dst_if)
- txq = TxQueue(src_if)
-
- icmpv6_ping_pkt = (Ether(src=src_mac, dst=proxy_to_src_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
-
- txq.send(icmpv6_ping_pkt)
-
- ether = None
- while True:
- ether = rxq.recv(3)
- if not ether:
- continue
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue in case of ICMPv6ND_NS packet
- continue
- else:
- # otherwise process the current packet
- break
-
- if ether is None:
- raise RuntimeError('ICMPv6 Echo Request timeout.')
- try:
- ether[IPv6]["ICMPv6 Echo Request"]
- except KeyError:
- raise RuntimeError("Received packet is not an ICMPv6 Echo Request.")
- print "ICMP Echo: OK."
-
- rxq = RxQueue(src_if)
- txq = TxQueue(dst_if)
-
- icmpv6_ping_pkt = (Ether(src=dst_mac, dst=proxy_to_dst_mac) /
- IPv6(src=dst_ip, dst=src_ip) /
- ICMPv6EchoReply())
-
- txq.send(icmpv6_ping_pkt)
-
- ether = None
- while True:
- ether = rxq.recv(3)
- if not ether:
- continue
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue in case of ICMPv6ND_NS packet
- continue
- else:
- # otherwise process the current packet
- break
-
- if ether is None:
- raise RuntimeError('DHCPv6 SOLICIT timeout')
- try:
- ether[IPv6]["ICMPv6 Echo Reply"]
- except KeyError:
- raise RuntimeError("Received packet is not an ICMPv6 Echo Reply.")
-
- print "ICMP Reply: OK."
-
-
-def main():
- """Send DHCPv6 proxy messages."""
-
- args = TrafficScriptArg(['src_ip', 'dst_ip', 'src_mac', 'dst_mac',
- 'proxy_to_src_mac', 'proxy_to_dst_mac'])
-
- src_if = args.get_arg('tx_if')
- dst_if = args.get_arg('rx_if')
- src_ip = args.get_arg("src_ip")
- dst_ip = args.get_arg("dst_ip")
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- proxy_to_src_mac = args.get_arg('proxy_to_src_mac')
- proxy_to_dst_mac = args.get_arg('proxy_to_dst_mac')
-
- # Neighbor solicitation
- imcpv6nd_solicit(src_if, src_mac, proxy_to_src_mac, src_ip, dst_ip)
-
- # Verify route (ICMP echo/reply)
- ipv6_ping(src_if, dst_if, src_mac, dst_mac, proxy_to_src_mac,
- proxy_to_dst_mac, src_ip, dst_ip)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/ipv6_ns.py b/resources/traffic_scripts/ipv6_ns.py
deleted file mode 100755
index 5852e6317f..0000000000
--- a/resources/traffic_scripts/ipv6_ns.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script for IPv6 Neighbor Solicitation test."""
-
-import sys
-import logging
-
-# pylint: disable=no-name-in-module
-# pylint: disable=import-error
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-
-from scapy.all import Ether
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6NDOptDstLLAddr, ICMPv6NDOptSrcLLAddr
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.PacketVerifier import checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
-
- sent_packets = []
-
- # send ICMPv6 neighbor solicitation message
- pkt_send = (Ether(src=src_mac, dst='ff:ff:ff:ff:ff:ff') /
- IPv6(src=src_ip, dst='ff02::1:ff00:2') /
- ICMPv6ND_NS(tgt=dst_ip) /
- ICMPv6NDOptSrcLLAddr(lladdr=src_mac))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- # receive ICMPv6 neighbor advertisement message
- while True:
- ether = rxq.recv(2, sent_packets)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if not ether.haslayer(IPv6):
- raise RuntimeError('Unexpected packet with no IPv6 received {0}'.
- format(ether.__repr__()))
-
- ipv6 = ether[IPv6]
-
- if not ipv6.haslayer(ICMPv6ND_NA):
- raise RuntimeError('Unexpected packet with no ICMPv6 ND-NA received '
- '{0}'.format(ipv6.__repr__()))
-
- icmpv6_na = ipv6[ICMPv6ND_NA]
-
- # verify target address
- if icmpv6_na.tgt != dst_ip:
- raise RuntimeError('Invalid target address {0} should be {1}'.
- format(icmpv6_na.tgt, dst_ip))
-
- if not icmpv6_na.haslayer(ICMPv6NDOptDstLLAddr):
- raise RuntimeError('Missing Destination Link-Layer Address option in '
- 'ICMPv6 Neighbor Advertisement {0}'.
- format(icmpv6_na.__repr__()))
-
- dst_ll_addr = icmpv6_na[ICMPv6NDOptDstLLAddr]
-
- # verify destination link-layer address field
- if dst_ll_addr.lladdr != dst_mac:
- raise RuntimeError('Invalid lladdr {0} should be {1}'.
- format(dst_ll_addr.lladdr, dst_mac))
-
- # verify checksum
- cksum = icmpv6_na.cksum
- del icmpv6_na.cksum
- tmp = ICMPv6ND_NA(str(icmpv6_na))
- if not checksum_equal(tmp.cksum, cksum):
- raise RuntimeError('Invalid checksum {0} should be {1}'.
- format(cksum, tmp.cksum))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/ipv6_sweep_ping.py b/resources/traffic_scripts/ipv6_sweep_ping.py
deleted file mode 100755
index 28d23a16ef..0000000000
--- a/resources/traffic_scripts/ipv6_sweep_ping.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script for IPv6 sweep ping."""
-
-import logging
-import os
-import sys
-
-# pylint: disable=no-name-in-module
-# pylint: disable=import-error
-logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-
-from scapy.all import Ether
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6ND_NS
-from scapy.layers.inet6 import ICMPv6NDOptDstLLAddr
-from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.PacketVerifier import checksum_equal
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- # start_size - start size of the ICMPv6 echo data
- # end_size - end size of the ICMPv6 echo data
- # step - increment step
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
- 'start_size', 'end_size', 'step'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- start_size = int(args.get_arg('start_size'))
- end_size = int(args.get_arg('end_size'))
- step = int(args.get_arg('step'))
- echo_id = 0xa
- # generate some random data buffer
- data = bytearray(os.urandom(end_size))
-
- # send ICMPv6 neighbor advertisement message
- sent_packets = []
- pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6ND_NA(tgt=src_ip, R=0) /
- ICMPv6NDOptDstLLAddr(lladdr=src_mac))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- # send ICMPv6 echo request with incremented data length and receive ICMPv6
- # echo reply
- for echo_seq in range(start_size, end_size + 1, step):
- pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest(id=echo_id, seq=echo_seq,
- data=data[0:echo_seq]))
- sent_packets.append(pkt_send)
- txq.send(pkt_send)
-
- while True:
- ether = rxq.recv(ignore=sent_packets)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply seq {0} '
- 'Rx timeout'.format(echo_seq))
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue in case of ICMPv6ND_NS packet
- continue
- else:
- # otherwise process the current packet
- break
-
- if not ether.haslayer(IPv6):
- raise RuntimeError('Unexpected packet with no IPv6 layer '
- 'received: {0}'.format(ether.__repr__()))
-
- ipv6 = ether[IPv6]
-
- if not ipv6.haslayer(ICMPv6EchoReply):
- raise RuntimeError('Unexpected packet with no ICMPv6 echo reply '
- 'layer received: {0}'.format(ipv6.__repr__()))
-
- icmpv6 = ipv6[ICMPv6EchoReply]
-
- if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
- raise RuntimeError('ICMPv6 echo reply with invalid data received: '
- 'ID {0} seq {1} should be ID {2} seq {3}, {0}'.
- format(icmpv6.id, icmpv6.seq, echo_id,
- echo_seq))
-
- cksum = icmpv6.cksum
- del icmpv6.cksum
- tmp = ICMPv6EchoReply(str(icmpv6))
- if not checksum_equal(tmp.cksum, cksum):
- raise RuntimeError('Invalid checksum: {0} should be {1}'.
- format(cksum, tmp.cksum))
-
- sent_packets.remove(pkt_send)
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/lisp/lisp_check.py b/resources/traffic_scripts/lisp/lisp_check.py
index 9937de8077..ebd769fa9d 100755
--- a/resources/traffic_scripts/lisp/lisp_check.py
+++ b/resources/traffic_scripts/lisp/lisp_check.py
@@ -1,5 +1,6 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
+#!/usr/bin/env python3
+
+# 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:
@@ -19,12 +20,13 @@ a LISP-encapsulated packet on the other interface and verifies received packet.
import sys
import ipaddress
+from scapy.all import bind_layers, Packet
+from scapy.fields import FlagsField, BitField, IntField
from scapy.layers.inet import ICMP, IP, UDP
from scapy.layers.inet6 import ICMPv6EchoRequest
from scapy.layers.inet6 import IPv6
from scapy.layers.l2 import Ether
-from scapy.all import bind_layers, Packet
-from scapy.fields import FlagsField, BitField, IntField
+from scapy.packet import Raw
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
@@ -32,26 +34,31 @@ from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
class LispHeader(Packet):
"""Scapy header for the LISP Layer."""
- name = "Lisp Header"
+
+ name = u"Lisp Header"
fields_desc = [
- FlagsField("flags", None, 8, ["N", "L", "E", "V", "I", "", "", ""]),
- BitField("nonce/map_version", 0, size=24),
- IntField("instance_id/locator_status_bits", 0)]
+ FlagsField(
+ u"flags", None, 8, [u"N", u"L", u"E", u"V", u"I", u"", u"", u""]
+ ),
+ BitField(u"nonce/map_version", 0, size=24),
+ IntField(u"instance_id/locator_status_bits", 0)]
class LispInnerIP(IP):
"""Scapy inner LISP layer for IPv4-in-IPv4."""
- name = "Lisp Inner Layer - IPv4"
+
+ name = u"Lisp Inner Layer - IPv4"
class LispInnerIPv6(IPv6):
"""Scapy inner LISP layer for IPv6-in-IPv6."""
- name = "Lisp Inner Layer - IPv6"
+
+ name = u"Lisp Inner Layer - IPv6"
def valid_ipv4(ip):
try:
- ipaddress.IPv4Address(unicode(ip))
+ ipaddress.IPv4Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -59,7 +66,7 @@ def valid_ipv4(ip):
def valid_ipv6(ip):
try:
- ipaddress.IPv6Address(unicode(ip))
+ ipaddress.IPv6Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -71,25 +78,28 @@ def main():
:raises RuntimeError: If the received packet is not correct."""
args = TrafficScriptArg(
- ['tg_src_mac', 'tg_dst_mac', 'src_ip', 'dst_ip', 'dut_if1_mac',
- 'dut_if2_mac', 'src_rloc', 'dst_rloc'],
- ['ot_mode'])
-
- tx_src_mac = args.get_arg('tg_src_mac')
- tx_dst_mac = args.get_arg('dut_if1_mac')
- rx_dst_mac = args.get_arg('tg_dst_mac')
- rx_src_mac = args.get_arg('dut_if2_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- src_rloc = args.get_arg("src_rloc")
- dst_rloc = args.get_arg("dst_rloc")
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- ot_mode = args.get_arg('ot_mode')
+ [
+ u"tg_src_mac", u"tg_dst_mac", u"src_ip", u"dst_ip", u"dut_if1_mac",
+ u"dut_if2_mac", u"src_rloc", u"dst_rloc"
+ ],
+ [u"ot_mode"]
+ )
+
+ tx_src_mac = args.get_arg(u"tg_src_mac")
+ tx_dst_mac = args.get_arg(u"dut_if1_mac")
+ rx_dst_mac = args.get_arg(u"tg_dst_mac")
+ rx_src_mac = args.get_arg(u"dut_if2_mac")
+ src_ip = args.get_arg(u"src_ip")
+ dst_ip = args.get_arg(u"dst_ip")
+ src_rloc = args.get_arg(u"src_rloc")
+ dst_rloc = args.get_arg(u"dst_rloc")
+ tx_if = args.get_arg(u"tx_if")
+ rx_if = args.get_arg(u"rx_if")
+ ot_mode = args.get_arg(u"ot_mode")
rxq = RxQueue(rx_if)
txq = TxQueue(tx_if)
- sent_packets = []
+
pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac)
if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
@@ -103,10 +113,13 @@ def main():
ip_format = IPv6
lisp_layer = LispInnerIPv6
else:
- raise ValueError("IP not in correct format")
+ raise ValueError(u"IP not in correct format")
bind_layers(UDP, LispHeader, dport=4341)
bind_layers(LispHeader, lisp_layer)
+
+ pkt_raw /= Raw()
+ sent_packets = list()
sent_packets.append(pkt_raw)
txq.send(pkt_raw)
@@ -116,27 +129,23 @@ def main():
ether = rxq.recv(2)
if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
+ raise RuntimeError(u"ICMP echo Rx timeout")
if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
- print("MAC addresses match.")
+ print(u"MAC addresses match.")
else:
- raise RuntimeError(
- "Matching packet unsuccessful: {0}".format(ether.__repr__()))
+ raise RuntimeError(f"Matching packet unsuccessful: {ether!r}")
ip = ether.payload
- if ot_mode == '6to4':
+ if ot_mode == u"6to4":
if not isinstance(ip, IP):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
- elif ot_mode == '4to6':
- if not isinstance(ip, IP6):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
+ elif ot_mode == u"4to6":
+ if not isinstance(ip, IPv6):
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
elif not isinstance(ip, ip_format):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
lisp = ether.getlayer(lisp_layer)
if not lisp:
@@ -144,31 +153,35 @@ def main():
# Compare data from packets
if src_ip == lisp.src:
- print("Source IP matches source EID.")
+ print(u"Source IP matches source EID.")
else:
- raise RuntimeError("Matching Src IP unsuccessful: {} != {}"
- .format(src_ip, lisp.src))
+ raise RuntimeError(
+ f"Matching Src IP unsuccessful: {src_ip} != {lisp.src}"
+ )
if dst_ip == lisp.dst:
- print("Destination IP matches destination EID.")
+ print(u"Destination IP matches destination EID.")
else:
- raise RuntimeError("Matching Dst IP unsuccessful: {} != {}"
- .format(dst_ip, lisp.dst))
+ raise RuntimeError(
+ f"Matching Dst IP unsuccessful: {dst_ip} != {lisp.dst}"
+ )
if src_rloc == ip.src:
- print("Source RLOC matches configuration.")
+ print(u"Source RLOC matches configuration.")
else:
- raise RuntimeError("Matching Src RLOC unsuccessful: {} != {}"
- .format(src_rloc, ip.src))
+ raise RuntimeError(
+ f"Matching Src RLOC unsuccessful: {src_rloc} != {ip.src}"
+ )
if dst_rloc == ip.dst:
- print("Destination RLOC matches configuration.")
+ print(u"Destination RLOC matches configuration.")
else:
- raise RuntimeError("Matching dst RLOC unsuccessful: {} != {}"
- .format(dst_rloc, ip.dst))
+ raise RuntimeError(
+ f"Matching dst RLOC unsuccessful: {dst_rloc} != {ip.dst}"
+ )
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/lisp/lispgpe_check.py b/resources/traffic_scripts/lisp/lispgpe_check.py
index d4de8635d7..50857c4fe8 100755
--- a/resources/traffic_scripts/lisp/lispgpe_check.py
+++ b/resources/traffic_scripts/lisp/lispgpe_check.py
@@ -1,5 +1,6 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
+#!/usr/bin/env python3
+
+# 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:
@@ -20,12 +21,13 @@ packet.
import sys
import ipaddress
+from scapy.all import bind_layers, Packet
+from scapy.fields import FlagsField, BitField, XBitField, IntField
from scapy.layers.inet import ICMP, IP, UDP
from scapy.layers.inet6 import ICMPv6EchoRequest
from scapy.layers.inet6 import IPv6
from scapy.layers.l2 import Ether
-from scapy.all import bind_layers, Packet
-from scapy.fields import FlagsField, BitField, XBitField, IntField
+from scapy.packet import Raw
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
@@ -33,13 +35,17 @@ from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
class LispGPEHeader(Packet):
"""Scapy header for the Lisp GPE Layer."""
+
name = "Lisp GPE Header"
fields_desc = [
- FlagsField("flags", None, 8, ["N", "L", "E", "V", "I", "P", "R", "O"]),
- BitField("version", 0, size=2),
- BitField("reserved", 0, size=14),
- XBitField("next_protocol", 0, size=8),
- IntField("instance_id/locator_status_bits", 0)]
+ FlagsField(
+ u"flags", None, 8, [u"N", u"L", u"E", u"V", u"I", u"P", u"R", u"O"]
+ ),
+ BitField(u"version", 0, size=2),
+ BitField(u"reserved", 0, size=14),
+ XBitField(u"next_protocol", 0, size=8),
+ IntField(u"instance_id/locator_status_bits", 0)
+ ]
def guess_payload_class(self, payload):
protocol = {
@@ -53,17 +59,20 @@ class LispGPEHeader(Packet):
class LispGPEInnerIP(IP):
"""Scapy inner LISP GPE layer for IPv4-in-IPv4."""
- name = "Lisp GPE Inner Layer - IPv4"
+
+ name = u"Lisp GPE Inner Layer - IPv4"
class LispGPEInnerIPv6(IPv6):
"""Scapy inner LISP GPE layer for IPv6-in-IPv6."""
- name = "Lisp GPE Inner Layer - IPv6"
+
+ name = u"Lisp GPE Inner Layer - IPv6"
class LispGPEInnerEther(Ether):
"""Scapy inner LISP GPE layer for Lisp-L2."""
- name = "Lisp GPE Inner Layer - Ethernet"
+
+ name = u"Lisp GPE Inner Layer - Ethernet"
class LispGPEInnerNSH(Packet):
@@ -75,7 +84,7 @@ class LispGPEInnerNSH(Packet):
def valid_ipv4(ip):
try:
- ipaddress.IPv4Address(unicode(ip))
+ ipaddress.IPv4Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -83,7 +92,7 @@ def valid_ipv4(ip):
def valid_ipv6(ip):
try:
- ipaddress.IPv6Address(unicode(ip))
+ ipaddress.IPv6Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -95,25 +104,28 @@ def main():
:raises RuntimeError: If the received packet is not correct."""
args = TrafficScriptArg(
- ['tg_src_mac', 'tg_dst_mac', 'src_ip', 'dst_ip', 'dut_if1_mac',
- 'dut_if2_mac', 'src_rloc', 'dst_rloc'],
- ['ot_mode'])
-
- tx_src_mac = args.get_arg('tg_src_mac')
- tx_dst_mac = args.get_arg('dut_if1_mac')
- rx_dst_mac = args.get_arg('tg_dst_mac')
- rx_src_mac = args.get_arg('dut_if2_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- src_rloc = args.get_arg("src_rloc")
- dst_rloc = args.get_arg("dst_rloc")
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- ot_mode = args.get_arg('ot_mode')
+ [
+ u"tg_src_mac", u"tg_dst_mac", u"src_ip", u"dst_ip", u"dut_if1_mac",
+ u"dut_if2_mac", u"src_rloc", u"dst_rloc"
+ ],
+ [u"ot_mode"]
+ )
+
+ tx_src_mac = args.get_arg(u"tg_src_mac")
+ tx_dst_mac = args.get_arg(u"dut_if1_mac")
+ rx_dst_mac = args.get_arg(u"tg_dst_mac")
+ rx_src_mac = args.get_arg(u"dut_if2_mac")
+ src_ip = args.get_arg(u"src_ip")
+ dst_ip = args.get_arg(u"dst_ip")
+ src_rloc = args.get_arg(u"src_rloc")
+ dst_rloc = args.get_arg(u"dst_rloc")
+ tx_if = args.get_arg(u"tx_if")
+ rx_if = args.get_arg(u"rx_if")
+ ot_mode = args.get_arg(u"ot_mode")
rxq = RxQueue(rx_if)
txq = TxQueue(tx_if)
- sent_packets = []
+
pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac)
if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
@@ -125,10 +137,12 @@ def main():
pkt_raw /= ICMPv6EchoRequest()
ip_format = IPv6
else:
- raise ValueError("IP not in correct format")
+ raise ValueError(u"IP not in correct format")
bind_layers(UDP, LispGPEHeader, dport=4341)
+ pkt_raw /= Raw()
+ sent_packets = list()
sent_packets.append(pkt_raw)
txq.send(pkt_raw)
@@ -138,59 +152,59 @@ def main():
ether = rxq.recv(2)
if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
+ raise RuntimeError(u"ICMP echo Rx timeout")
if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
- print("MAC addresses match.")
+ print(u"MAC addresses match.")
else:
- raise RuntimeError(
- "Matching packet unsuccessful: {0}".format(ether.__repr__()))
+ raise RuntimeError(f"Matching packet unsuccessful: {ether!r}")
ip = ether.payload
- if ot_mode == '6to4':
+ if ot_mode == u"6to4":
if not isinstance(ip, IP):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
- elif ot_mode == '4to6':
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
+ elif ot_mode == u"4to6":
if not isinstance(ip, IPv6):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
elif not isinstance(ip, ip_format):
- raise RuntimeError(
- "Not an IP packet received {0}".format(ip.__repr__()))
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
lisp = ether.getlayer(LispGPEHeader).underlayer
if not lisp:
- raise RuntimeError("Lisp layer not present or parsing failed.")
+ raise RuntimeError(u"Lisp layer not present or parsing failed.")
# Compare data from packets
if src_ip == lisp.src:
- print("Source IP matches source EID.")
+ print(u"Source IP matches source EID.")
else:
- raise RuntimeError("Matching Src IP unsuccessful: {} != {}"
- .format(src_ip, lisp.src))
+ raise RuntimeError(
+ f"Matching Src IP unsuccessful: {src_ip} != {lisp.src}"
+ )
if dst_ip == lisp.dst:
- print("Destination IP matches destination EID.")
+ print(u"Destination IP matches destination EID.")
else:
- raise RuntimeError("Matching Dst IP unsuccessful: {} != {}"
- .format(dst_ip, lisp.dst))
+ raise RuntimeError(
+ f"Matching Dst IP unsuccessful: {dst_ip} != {lisp.dst}"
+ )
if src_rloc == ip.src:
- print("Source RLOC matches configuration.")
+ print(u"Source RLOC matches configuration.")
else:
- raise RuntimeError("Matching Src RLOC unsuccessful: {} != {}"
- .format(src_rloc, ip.src))
+ raise RuntimeError(
+ f"Matching Src RLOC unsuccessful: {src_rloc} != {ip.src}"
+ )
if dst_rloc == ip.dst:
- print("Destination RLOC matches configuration.")
+ print(u"Destination RLOC matches configuration.")
else:
- raise RuntimeError("Matching dst RLOC unsuccessful: {} != {}"
- .format(dst_rloc, ip.dst))
+ raise RuntimeError(
+ f"Matching dst RLOC unsuccessful: {dst_rloc} != {ip.dst}"
+ )
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/policer.py b/resources/traffic_scripts/policer.py
index 62c397d496..c222c76152 100755
--- a/resources/traffic_scripts/policer.py
+++ b/resources/traffic_scripts/policer.py
@@ -1,6 +1,6 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
-# 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:
@@ -18,14 +18,15 @@
import sys
import logging
+from ipaddress import ip_address
# pylint: disable=no-name-in-module
# pylint: disable=import-error
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-from scapy.all import Ether
+from scapy.layers.l2 import Ether
from scapy.layers.inet import IP, TCP
from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-from ipaddress import ip_address
+from scapy.packet import Raw
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
@@ -41,17 +42,14 @@ def check_ipv4(pkt_recv, dscp):
:raises RuntimeError: If received packet is invalid.
"""
if not pkt_recv.haslayer(IP):
- raise RuntimeError('Not an IPv4 packet received: {0}'.
- format(pkt_recv.__repr__()))
+ raise RuntimeError(f"Not an IPv4 packet received: {pkt_recv!r}")
rx_dscp = pkt_recv[IP].tos >> 2
if rx_dscp != dscp:
- raise RuntimeError('Invalid DSCP {0} should be {1}'.
- format(rx_dscp, dscp))
+ raise RuntimeError(f"Invalid DSCP {rx_dscp} should be {dscp}")
if not pkt_recv.haslayer(TCP):
- raise RuntimeError('Not a TCP packet received: {0}'.
- format(pkt_recv.__repr__()))
+ raise RuntimeError(f"Not a TCP packet received: {pkt_recv!r}")
def check_ipv6(pkt_recv, dscp):
@@ -64,58 +62,48 @@ def check_ipv6(pkt_recv, dscp):
:raises RuntimeError: If received packet is invalid.
"""
if not pkt_recv.haslayer(IPv6):
- raise RuntimeError('Not an IPv6 packet received: {0}'.
- format(pkt_recv.__repr__()))
+ raise RuntimeError(f"Not an IPv6 packet received: {pkt_recv!r}")
rx_dscp = pkt_recv[IPv6].tc >> 2
if rx_dscp != dscp:
- raise RuntimeError('Invalid DSCP {0} should be {1}'.
- format(rx_dscp, dscp))
+ raise RuntimeError(f"Invalid DSCP {rx_dscp} should be {dscp}")
if not pkt_recv.haslayer(TCP):
- raise RuntimeError('Not a TCP packet received: {0}'.
- format(pkt_recv.__repr__()))
+ raise RuntimeError(f"Not a TCP packet received: {pkt_recv!r}")
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
def main():
"""Send and receive TCP packet."""
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip', 'dscp'])
-
- rxq = RxQueue(args.get_arg('rx_if'))
- txq = TxQueue(args.get_arg('tx_if'))
+ args = TrafficScriptArg(
+ [u"src_mac", u"dst_mac", u"src_ip", u"dst_ip", u"dscp"]
+ )
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- dscp = int(args.get_arg('dscp'))
+ rxq = RxQueue(args.get_arg(u"rx_if"))
+ txq = TxQueue(args.get_arg(u"tx_if"))
- if 6 == ip_address(unicode(src_ip)).version:
- is_ipv4 = False
- else:
- is_ipv4 = True
-
- sent_packets = []
+ src_mac = args.get_arg(u"src_mac")
+ dst_mac = args.get_arg(u"dst_mac")
+ src_ip = args.get_arg(u"src_ip")
+ dst_ip = args.get_arg(u"dst_ip")
+ dscp = int(args.get_arg(u"dscp"))
- if is_ipv4:
- ip_pkt = (IP(src=src_ip, dst=dst_ip) /
- TCP())
- else:
- ip_pkt = (IPv6(src=src_ip, dst=dst_ip) /
- TCP())
+ ip_layer = IPv6 if ip_address(src_ip).version == 6 else IP
+ sent_packets = list()
pkt_send = (Ether(src=src_mac, dst=dst_mac) /
- ip_pkt)
+ ip_layer(src=src_ip, dst=dst_ip) /
+ TCP())
+ pkt_send /= Raw()
sent_packets.append(pkt_send)
txq.send(pkt_send)
while True:
pkt_recv = rxq.recv(2, sent_packets)
if pkt_recv is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
+ raise RuntimeError(u"ICMPv6 echo reply Rx timeout")
if pkt_recv.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
@@ -125,9 +113,9 @@ def main():
break
if pkt_recv is None:
- raise RuntimeError('Rx timeout')
+ raise RuntimeError(u"Rx timeout")
- if is_ipv4:
+ if ip_layer == IP:
check_ipv4(pkt_recv, dscp)
else:
check_ipv6(pkt_recv, dscp)
@@ -135,5 +123,5 @@ def main():
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/send_gre_check_gre_headers.py b/resources/traffic_scripts/send_gre_check_gre_headers.py
deleted file mode 100755
index 9e2e2abe06..0000000000
--- a/resources/traffic_scripts/send_gre_check_gre_headers.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends a UDP encapsulated into GRE packet from one
-interface to the other, where GRE encapsulated packet is expected.
-"""
-
-import sys
-
-from robot.api import logger
-from scapy.all import Ether
-from scapy.layers.inet import IP_PROTOS
-from scapy.layers.inet import IP
-from scapy.layers.inet import UDP
-from scapy.layers.l2 import GRE
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(
- ['tx_dst_mac', 'tx_src_mac', 'tx_outer_dst_ip', 'tx_outer_src_ip',
- 'tx_inner_dst_ip', 'tx_inner_src_ip', 'rx_dst_mac', 'rx_src_mac',
- 'rx_outer_dst_ip', 'rx_outer_src_ip'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_mac = args.get_arg('tx_src_mac')
- tx_outer_dst_ip = args.get_arg('tx_outer_dst_ip')
- tx_outer_src_ip = args.get_arg('tx_outer_src_ip')
- tx_inner_dst_ip = args.get_arg('tx_inner_dst_ip')
- tx_inner_src_ip = args.get_arg('tx_inner_src_ip')
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_outer_dst_ip = args.get_arg('rx_outer_dst_ip')
- rx_outer_src_ip = args.get_arg('rx_outer_src_ip')
- udp_src = 1234
- udp_dst = 2345
- udp_payload = 'udp_payload'
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- tx_pkt_raw = Ether(dst=tx_dst_mac, src=tx_src_mac) / \
- IP(src=tx_outer_src_ip, dst=tx_outer_dst_ip) / \
- GRE() / \
- IP(src=tx_inner_src_ip, dst=tx_inner_dst_ip) / \
- UDP(dport=udp_dst, sport=udp_src) / \
- udp_payload
-
- sent_packets.append(tx_pkt_raw)
- txq.send(tx_pkt_raw)
- ether = rxq.recv(2, ignore=sent_packets)
-
- if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
-
- # Check RX headers
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Matching of received destination MAC unsuccessful.")
- logger.debug("Comparison of received destination MAC: OK.")
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Matching of received source MAC unsuccessful.")
- logger.debug("Comparison of received source MAC: OK.")
-
- if ether['IP'].src != rx_outer_src_ip:
- raise RuntimeError("Matching of received outer source IP unsuccessful.")
- logger.debug("Comparison of received outer source IP: OK.")
-
- if ether['IP'].dst != rx_outer_dst_ip:
- raise RuntimeError(
- "Matching of received outer destination IP unsuccessful.")
- logger.debug("Comparison of received outer destination IP: OK.")
-
- if ether['IP'].proto != IP_PROTOS.gre:
- raise RuntimeError("IP protocol is not GRE.")
- logger.debug("Comparison of received GRE protocol: OK.")
-
- if ether['IP']['GRE']['IP'].src != tx_inner_src_ip:
- raise RuntimeError("Matching of received inner source IP unsuccessful.")
- logger.debug("Comparison of received inner source IP: OK.")
-
- if ether['IP']['GRE']['IP'].dst != tx_inner_dst_ip:
- raise RuntimeError(
- "Matching of received inner destination IP unsuccessful.")
- logger.debug("Comparison of received inner destination IP: OK.")
-
- # check udp
- udp = ether['IP']['GRE']['IP']['UDP']
- if udp.dport != udp_dst:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, udp_dst))
- print "UDP dport: OK."
-
- if udp.sport != udp_src:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, udp_src))
- print "UDP sport: OK."
-
- if str(udp.payload) != udp_payload:
- raise RuntimeError("UDP payload check unsuccessful {} != {}.".
- format(udp.payload, udp_payload))
- print "UDP payload: OK."
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_gre_check_icmp_headers.py b/resources/traffic_scripts/send_gre_check_icmp_headers.py
deleted file mode 100755
index 27eac5d786..0000000000
--- a/resources/traffic_scripts/send_gre_check_icmp_headers.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends a GRE encapsulated ICMPv4 packet from one
-interface to the other, where is expected ICMPv4 without GRE header.
-"""
-
-import sys
-
-from robot.api import logger
-from scapy.all import Ether
-from scapy.layers.inet import IP_PROTOS
-from scapy.layers.inet import IP
-from scapy.layers.inet import ICMP
-from scapy.layers.l2 import GRE
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(
- ['tx_dst_mac', 'rx_dst_mac',
- 'inner_src_ip', 'inner_dst_ip',
- 'outer_src_ip', 'outer_dst_ip'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- rx_dst_mac = args.get_arg('rx_dst_mac')
- inner_src_ip = args.get_arg('inner_src_ip')
- inner_dst_ip = args.get_arg('inner_dst_ip')
- outer_src_ip = args.get_arg('outer_src_ip')
- outer_dst_ip = args.get_arg('outer_dst_ip')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- tx_pkt_raw = Ether(dst=tx_dst_mac) / \
- IP(src=outer_src_ip, dst=outer_dst_ip) / \
- GRE() / \
- IP(src=inner_src_ip, dst=inner_dst_ip) / \
- ICMP()
-
- sent_packets.append(tx_pkt_raw)
- txq.send(tx_pkt_raw)
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
-
- # Check RX headers
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Matching of received destination MAC unsuccessful.")
- logger.debug("Comparison of received destination MAC: OK.")
-
- if ether['IP'].src != inner_src_ip:
- raise RuntimeError("Matching of received inner source IP unsuccessful.")
- logger.debug("Comparison of received outer source IP: OK.")
-
- if ether['IP'].dst != inner_dst_ip:
- raise RuntimeError(
- "Matching of received inner destination IP unsuccessful.")
- logger.debug("Comparison of received outer destination IP: OK.")
-
- if ether['IP'].proto != IP_PROTOS.icmp:
- raise RuntimeError("IP protocol is other than ICMP.")
- logger.debug("Comparison of received ICMP protocol: OK.")
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_check_arp.py b/resources/traffic_scripts/send_icmp_check_arp.py
deleted file mode 100755
index 49d4710ba4..0000000000
--- a/resources/traffic_scripts/send_icmp_check_arp.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IP ICMP packet
-from one interface and expects ARP on the other one.
-"""
-
-import sys
-import ipaddress
-
-from scapy.all import Ether
-from scapy.layers.inet import ICMP, IP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- """Check if IP address has the correct IPv4 address format.
-
- :param ip: IP address.
- :type ip: str
- :return: True in case of correct IPv4 address format,
- otherwise return False.
- :rtype: bool
- """
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send IP ICMP packet from one traffic generator interface and expects
- ARP on the other."""
- args = TrafficScriptArg(
- ['tx_dst_mac', 'rx_src_mac', 'tx_src_ip', 'tx_dst_ip', 'rx_arp_src_ip',
- 'rx_arp_dst_ip'])
-
- tx_dst_mac = args.get_arg('tx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- src_ip = args.get_arg('tx_src_ip')
- dst_ip = args.get_arg('tx_dst_ip')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- rx_dst_mac = 'ff:ff:ff:ff:ff:ff'
- rx_arp_src_ip = args.get_arg('rx_arp_src_ip')
- rx_arp_dst_ip = args.get_arg('rx_arp_dst_ip')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- # Create empty IP ICMP packet
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- pkt_raw = Ether(dst=tx_dst_mac) / IP(src=src_ip, dst=dst_ip) / ICMP()
-
- # Send created packet on one interface and receive on the other
- txq.send(pkt_raw)
-
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError("Ethernet frame Rx timeout")
-
- if ether.dst == rx_dst_mac:
- print("Ethernet destination address matched.")
- else:
- raise RuntimeError(
- "Matching ethernet destination address unsuccessful: {0} != {1}".
- format(ether.dst, rx_dst_mac))
-
- if ether.src == rx_src_mac:
- print("Ethernet source address matched.")
- else:
- raise RuntimeError(
- "Matching ethernet source address unsuccessful: {0} != {1}"
- .format(ether.src, rx_src_mac))
-
- # ARP check
- if ether['ARP'] is not None:
- print("ARP packet received.")
- else:
- raise RuntimeError("Not an ARP packet received {0}"
- .format(ether.__repr__()))
-
- # Compare data from packets
- if ether['ARP'].op == 1: # 1 - who-has request
- print("ARP request matched.")
- else:
- raise RuntimeError("Matching ARP request unsuccessful: {0} != {1}"
- .format(ether['ARP'].op, 1))
-
- if ether['ARP'].hwsrc == rx_src_mac:
- print("Source MAC matched.")
- else:
- raise RuntimeError("Matching Source MAC unsuccessful: {0} != {1}"
- .format(ether['ARP'].hwsrc, rx_src_mac))
-
- if ether['ARP'].hwdst == "00:00:00:00:00:00":
- print("Destination MAC matched.")
- else:
- raise RuntimeError("Matching Destination MAC unsuccessful: {0} != {1}"
- .format(ether['ARP'].hwdst, "00:00:00:00:00:00"))
-
- if ether['ARP'].psrc == rx_arp_src_ip:
- print("Source ARP IP address matched.")
- else:
- raise RuntimeError(
- "Matching Source ARP IP address unsuccessful: {0} != {1}"
- .format(ether['ARP'].psrc, rx_arp_src_ip))
-
- if ether['ARP'].pdst == rx_arp_dst_ip:
- print("Destination ARP IP address matched.")
- else:
- raise RuntimeError(
- "Matching Destination ARP IP address unsuccessful: {0} != {1}"
- .format(ether['ARP'].pdst, rx_arp_dst_ip))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_check_gre_headers.py b/resources/traffic_scripts/send_icmp_check_gre_headers.py
deleted file mode 100755
index ccea9f5d9b..0000000000
--- a/resources/traffic_scripts/send_icmp_check_gre_headers.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an ICMPv4 packet from one interface to the other,
-where GRE encapsulated packet is expected.
-"""
-
-import sys
-
-from robot.api import logger
-from scapy.all import Ether
-from scapy.layers.inet import IP_PROTOS
-from scapy.layers.inet import IP
-from scapy.layers.inet import ICMP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def main():
- args = TrafficScriptArg(
- ['tx_dst_mac', 'rx_dst_mac',
- 'inner_src_ip', 'inner_dst_ip',
- 'outer_src_ip', 'outer_dst_ip'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- rx_dst_mac = args.get_arg('rx_dst_mac')
- inner_src_ip = args.get_arg('inner_src_ip')
- inner_dst_ip = args.get_arg('inner_dst_ip')
- outer_src_ip = args.get_arg('outer_src_ip')
- outer_dst_ip = args.get_arg('outer_dst_ip')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- tx_pkt_raw = Ether(dst=tx_dst_mac) / \
- IP(src=inner_src_ip, dst=inner_dst_ip) / \
- ICMP()
-
- sent_packets.append(tx_pkt_raw)
- txq.send(tx_pkt_raw)
- ether = rxq.recv(2)
-
- if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
-
- # Check RX headers
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Matching of received destination MAC unsuccessful.")
- logger.debug("Comparison of received destination MAC: OK.")
-
- if ether['IP'].src != outer_src_ip:
- raise RuntimeError("Matching of received outer source IP unsuccessful.")
- logger.debug("Comparison of received outer source IP: OK.")
-
- if ether['IP'].dst != outer_dst_ip:
- raise RuntimeError(
- "Matching of received outer destination IP unsuccessful.")
- logger.debug("Comparison of received outer destination IP: OK.")
-
- if ether['IP'].proto != IP_PROTOS.gre:
- raise RuntimeError("IP protocol is no GRE.")
- logger.debug("Comparison of received GRE protocol: OK.")
-
- if ether['IP']['GRE']['IP'].src != inner_src_ip:
- raise RuntimeError("Matching of received inner source IP unsuccessful.")
- logger.debug("Comparison of received inner source IP: OK.")
-
- if ether['IP']['GRE']['IP'].dst != inner_dst_ip:
- raise RuntimeError(
- "Matching of received inner destination IP unsuccessful.")
- logger.debug("Comparison of received inner destination IP: OK.")
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_check_headers.py b/resources/traffic_scripts/send_icmp_check_headers.py
deleted file mode 100755
index 2193164b61..0000000000
--- a/resources/traffic_scripts/send_icmp_check_headers.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IP ICMPv4/ICMPv6 packet from one interface
-to the other. Source and destination IP addresses and source and destination
-MAC addresses are checked in received packet.
-"""
-
-import sys
-
-import ipaddress
-from robot.api import logger
-from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
-from scapy.layers.l2 import Ether, Dot1Q
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def valid_ipv6(ip):
- try:
- ipaddress.IPv6Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send IP ICMP packet from one traffic generator interface to the other."""
- args = TrafficScriptArg(
- ['tg_src_mac', 'tg_dst_mac', 'src_ip', 'dst_ip', 'dut_if1_mac',
- 'dut_if2_mac'],
- ['encaps_tx', 'vlan_tx', 'vlan_outer_tx',
- 'encaps_rx', 'vlan_rx', 'vlan_outer_rx'])
-
- tx_src_mac = args.get_arg('tg_src_mac')
- tx_dst_mac = args.get_arg('dut_if1_mac')
- rx_dst_mac = args.get_arg('tg_dst_mac')
- rx_src_mac = args.get_arg('dut_if2_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- encaps_tx = args.get_arg('encaps_tx')
- vlan_tx = args.get_arg('vlan_tx')
- vlan_outer_tx = args.get_arg('vlan_outer_tx')
- encaps_rx = args.get_arg('encaps_rx')
- vlan_rx = args.get_arg('vlan_rx')
- vlan_outer_rx = args.get_arg('vlan_outer_rx')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
- ip_format = ''
- pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac)
- if encaps_tx == 'Dot1q':
- pkt_raw /= Dot1Q(vlan=int(vlan_tx))
- elif encaps_tx == 'Dot1ad':
- pkt_raw.type = 0x88a8
- pkt_raw /= Dot1Q(vlan=vlan_outer_tx)
- pkt_raw /= Dot1Q(vlan=vlan_tx)
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- pkt_raw /= IP(src=src_ip, dst=dst_ip)
- pkt_raw /= ICMP()
- ip_format = IP
- elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- pkt_raw /= IPv6(src=src_ip, dst=dst_ip)
- pkt_raw /= ICMPv6EchoRequest()
- ip_format = IPv6
- else:
- raise ValueError("IP not in correct format")
-
- sent_packets.append(pkt_raw)
- txq.send(pkt_raw)
-
- while True:
- if tx_if == rx_if:
- ether = rxq.recv(2, ignore=sent_packets)
- else:
- ether = rxq.recv(2)
- if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
- logger.trace("MAC matched")
- else:
- raise RuntimeError("Matching packet unsuccessful: {0}".
- format(ether.__repr__()))
-
- if encaps_rx == 'Dot1q':
- if ether[Dot1Q].vlan == int(vlan_rx):
- logger.trace("VLAN matched")
- else:
- raise RuntimeError('Ethernet frame with wrong VLAN tag ({}-'
- 'received, {}-expected):\n{}'.
- format(ether[Dot1Q].vlan, vlan_rx,
- ether.__repr__()))
- ip = ether[Dot1Q].payload
- elif encaps_rx == 'Dot1ad':
- raise NotImplementedError()
- else:
- ip = ether.payload
-
- if not isinstance(ip, ip_format):
- raise RuntimeError("Not an IP packet received {0}".
- format(ip.__repr__()))
-
- # Compare data from packets
- if src_ip == ip.src:
- logger.trace("Src IP matched")
- else:
- raise RuntimeError("Matching Src IP unsuccessful: {} != {}".
- format(src_ip, ip.src))
-
- if dst_ip == ip.dst:
- logger.trace("Dst IP matched")
- else:
- raise RuntimeError("Matching Dst IP unsuccessful: {} != {}".
- format(dst_ip, ip.dst))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_check_multipath.py b/resources/traffic_scripts/send_icmp_check_multipath.py
deleted file mode 100755
index 5da3b7b096..0000000000
--- a/resources/traffic_scripts/send_icmp_check_multipath.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IP ICMPv4/ICMPv6 packets traffic
-and check if it is divided into two paths."""
-
-import sys
-import ipaddress
-
-from scapy.all import Ether
-from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def valid_ipv6(ip):
- try:
- ipaddress.IPv6Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send 100 IP ICMP packets traffic and check if it is divided into
- two paths."""
- args = TrafficScriptArg(
- ['src_ip', 'dst_ip', 'tg_if1_mac', 'dut_if1_mac', 'dut_if2_mac',
- 'path_1_mac', 'path_2_mac'])
-
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- tg_if1_mac = args.get_arg('tg_if1_mac')
- dut_if1_mac = args.get_arg('dut_if1_mac')
- dut_if2_mac = args.get_arg('dut_if2_mac')
- path_1_mac = args.get_arg('path_1_mac')
- path_2_mac = args.get_arg('path_2_mac')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- path_1_counter = 0
- path_2_counter = 0
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
- ip_format = ''
- pkt_raw = ''
- separator = ''
-
- if valid_ipv4(src_ip):
- separator = '.'
- elif valid_ipv6(src_ip):
- separator = ':'
- else:
- raise ValueError("Source address not in correct format")
-
- src_ip_base = (src_ip.rsplit(separator, 1))[0] + separator
-
- for i in range(1, 101):
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- pkt_raw = (Ether(src=tg_if1_mac, dst=dut_if1_mac) /
- IP(src=src_ip_base+str(i), dst=dst_ip) /
- ICMP())
- ip_format = 'IP'
- elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- pkt_raw = (Ether(src=tg_if1_mac, dst=dut_if1_mac) /
- IPv6(src=src_ip_base+str(i), dst=dst_ip) /
- ICMPv6EchoRequest())
- ip_format = 'IPv6'
- else:
- raise ValueError("IP not in correct format")
-
- sent_packets.append(pkt_raw)
- txq.send(pkt_raw)
-
- while True:
- ether = rxq.recv(2)
- if ether is None:
- raise RuntimeError('ICMPv6 echo reply Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue in case of ICMPv6ND_NS packet
- continue
- else:
- # otherwise process the current packet
- break
-
- if ether is None:
- raise RuntimeError("ICMP echo Rx timeout")
- if not ether.haslayer(ip_format):
- raise RuntimeError("Not an IP packet received {0}".
- format(ether.__repr__()))
-
- if ether[Ether].src != dut_if2_mac:
- raise RuntimeError("Source MAC address error")
-
- if ether[Ether].dst == path_1_mac:
- path_1_counter += 1
- elif ether[Ether].dst == path_2_mac:
- path_2_counter += 1
- else:
- raise RuntimeError("Destination MAC address error")
-
- if (path_1_counter + path_2_counter) != 100:
- raise RuntimeError("Packet loss: recevied only {} packets of 100 ".
- format(path_1_counter + path_2_counter))
-
- if path_1_counter == 0:
- raise RuntimeError("Path 1 error!")
-
- if path_2_counter == 0:
- raise RuntimeError("Path 2 error!")
-
- print "Path_1 counter: {}".format(path_1_counter)
- print "Path_2 counter: {}".format(path_2_counter)
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_type_code.py b/resources/traffic_scripts/send_icmp_type_code.py
deleted file mode 100755
index 2997f91264..0000000000
--- a/resources/traffic_scripts/send_icmp_type_code.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IP ICMPv4/ICMPv6 packet from one interface to
-the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
-"""
-
-import sys
-import ipaddress
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- """Check if IP address has the correct IPv4 address format.
-
- :param ip: IP address.
- :type ip: str
- :returns: True in case of correct IPv4 address format,
- otherwise return false.
- :rtype: bool
- """
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def valid_ipv6(ip):
- """Check if IP address has the correct IPv6 address format.
-
- :param ip: IP address.
- :type ip: str
- :returns: True in case of correct IPv6 address format,
- otherwise return false.
- :rtype: bool
- """
- try:
- ipaddress.IPv6Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send IP ICMPv4/ICMPv6 packet from one traffic generator interface to
- the other one."""
-
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
- 'icmp_type', 'icmp_code'])
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- icmp_type = int(args.get_arg('icmp_type'))
- icmp_code = int(args.get_arg('icmp_code'))
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
-
- # Create empty ip ICMP packet and add padding before sending
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP(code=icmp_code, type=icmp_type))
- ip_format = IP
- icmp_format = ICMP
- elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest(code=icmp_code, type=icmp_type))
- ip_format = IPv6
- icmp_format = 'ICMPv6'
- else:
- raise ValueError("IP(s) not in correct format")
-
- # Send created packet on one interface and receive on the other
- sent_packets.append(pkt_raw)
- txq.send(pkt_raw)
-
- while True:
- ether = rxq.recv(2)
- if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- # Check whether received packet contains layers IP and ICMP
- if not ether.haslayer(ip_format):
- raise RuntimeError('Not an IP packet received {0}'.
- format(ether.__repr__()))
-
- # Cannot use haslayer for ICMPv6, every type of ICMPv6 is a separate layer
- # Next header value of 58 means the next header is ICMPv6
- if not ether.haslayer(icmp_format) and ether[ip_format].nh != 58:
- raise RuntimeError('Not an ICMP packet received {0}'.
- format(ether.__repr__()))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_icmp_wait_for_reply.py b/resources/traffic_scripts/send_icmp_wait_for_reply.py
index 7677152801..2c79ae7136 100755
--- a/resources/traffic_scripts/send_icmp_wait_for_reply.py
+++ b/resources/traffic_scripts/send_icmp_wait_for_reply.py
@@ -1,4 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
# Copyright (c) 2016 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.
@@ -17,56 +18,16 @@
import sys
import ipaddress
-from scapy.all import Ether
from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
+from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply,\
+ ICMPv6ND_NS
+from scapy.layers.l2 import Ether
+from scapy.packet import Raw
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-def is_icmp_reply(pkt, ipformat):
- """Return True if pkt is echo reply, else return False. If exception occurs
- return False.
-
- :param pkt: Packet.
- :param ipformat: Dictionary of names to distinguish IPv4 and IPv6.
- :type pkt: dict
- :type ipformat: dict
- :rtype: bool
- """
- # pylint: disable=bare-except
- try:
- if pkt[ipformat['IPType']][ipformat['ICMP_rep']].type == \
- ipformat['Type']:
- return True
- else:
- return False
- except: # pylint: disable=bare-except
- return False
-
-
-def address_check(request, reply, ipformat):
- """Compare request packet source address with reply destination address
- and vice versa. If exception occurs return False.
-
- :param request: Sent packet containing request.
- :param reply: Received packet containing reply.
- :param ipformat: Dictionary of names to distinguish IPv4 and IPv6.
- :type request: dict
- :type reply: dict
- :type ipformat: dict
- :rtype: bool
- """
- # pylint: disable=bare-except
- try:
- r_src = reply[ipformat['IPType']].src == request[ipformat['IPType']].dst
- r_dst = reply[ipformat['IPType']].dst == request[ipformat['IPType']].src
- return r_src and r_dst
- except: # pylint: disable=bare-except
- return False
-
-
def valid_ipv4(ip):
"""Check if IP address has the correct IPv4 address format.
@@ -77,7 +38,7 @@ def valid_ipv4(ip):
:rtype: bool
"""
try:
- ipaddress.IPv4Address(unicode(ip))
+ ipaddress.IPv4Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -93,7 +54,7 @@ def valid_ipv6(ip):
:rtype: bool
"""
try:
- ipaddress.IPv6Address(unicode(ip))
+ ipaddress.IPv6Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -102,16 +63,17 @@ def valid_ipv6(ip):
def main():
"""Send ICMP echo request and wait for ICMP echo reply. It ignores all other
packets."""
- args = TrafficScriptArg(['dst_mac', 'src_mac', 'dst_ip', 'src_ip',
- 'timeout'])
-
- dst_mac = args.get_arg('dst_mac')
- src_mac = args.get_arg('src_mac')
- dst_ip = args.get_arg('dst_ip')
- src_ip = args.get_arg('src_ip')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- timeout = int(args.get_arg('timeout'))
+ args = TrafficScriptArg(
+ [u"dst_mac", u"src_mac", u"dst_ip", u"src_ip", u"timeout"]
+ )
+
+ dst_mac = args.get_arg(u"dst_mac")
+ src_mac = args.get_arg(u"src_mac")
+ dst_ip = args.get_arg(u"dst_ip")
+ src_ip = args.get_arg(u"src_ip")
+ tx_if = args.get_arg(u"tx_if")
+ rx_if = args.get_arg(u"rx_if")
+ timeout = int(args.get_arg(u"timeout"))
wait_step = 1
rxq = RxQueue(rx_if)
@@ -120,21 +82,26 @@ def main():
# Create empty ip ICMP packet
if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- icmp_request = (Ether(src=src_mac, dst=dst_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP())
- ip_format = {'IPType': 'IP', 'ICMP_req': 'ICMP',
- 'ICMP_rep': 'ICMP', 'Type': 0}
+ ip_layer = IP
+ icmp_req = ICMP
+ icmp_resp = ICMP
+ icmp_type = 0 # echo-reply
elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- icmp_request = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
- ip_format = {'IPType': 'IPv6', 'ICMP_req': 'ICMPv6 Echo Request',
- 'ICMP_rep': 'ICMPv6 Echo Reply', 'Type': 129}
+ ip_layer = IP
+ icmp_req = ICMPv6EchoRequest
+ icmp_resp = ICMPv6EchoReply
+ icmp_type = 0 # Echo Reply
else:
- raise ValueError("IP not in correct format")
+ raise ValueError(u"IP not in correct format")
+
+ icmp_request = (
+ Ether(src=src_mac, dst=dst_mac) /
+ ip_layer(src=src_ip, dst=dst_ip) /
+ icmp_req()
+ )
# Send created packet on the interface
+ icmp_request /= Raw()
sent_packets.append(icmp_request)
txq.send(icmp_request)
@@ -144,7 +111,7 @@ def main():
if icmp_reply is None:
timeout -= wait_step
if timeout < 0:
- raise RuntimeError("ICMP echo Rx timeout")
+ raise RuntimeError(u"ICMP echo Rx timeout")
elif icmp_reply.haslayer(ICMPv6ND_NS):
# read another packet in the queue in case of ICMPv6ND_NS packet
@@ -153,16 +120,17 @@ def main():
# otherwise process the current packet
break
- if is_icmp_reply(icmp_reply, ip_format):
- if address_check(icmp_request, icmp_reply, ip_format):
+ if icmp_reply[ip_layer][icmp_resp].type == icmp_type:
+ if icmp_reply[ip_layer].src == dst_ip and \
+ icmp_reply[ip_layer].dst == src_ip:
break
else:
- raise RuntimeError("Max packet count limit reached")
+ raise RuntimeError(u"Max packet count limit reached")
- print "ICMP echo reply received."
+ print(u"ICMP echo reply received.")
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/send_ip_check_headers.py b/resources/traffic_scripts/send_ip_check_headers.py
index 7c4f2bd002..f5a55553cf 100755
--- a/resources/traffic_scripts/send_ip_check_headers.py
+++ b/resources/traffic_scripts/send_ip_check_headers.py
@@ -1,4 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
# 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.
@@ -20,10 +21,12 @@ MAC addresses are checked in received packet.
import sys
import ipaddress
+
from robot.api import logger
from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
from scapy.layers.l2 import Ether, Dot1Q
+from scapy.packet import Raw
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
@@ -31,7 +34,7 @@ from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
def valid_ipv4(ip):
try:
- ipaddress.IPv4Address(unicode(ip))
+ ipaddress.IPv4Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -39,7 +42,7 @@ def valid_ipv4(ip):
def valid_ipv6(ip):
try:
- ipaddress.IPv6Address(unicode(ip))
+ ipaddress.IPv6Address(ip)
return True
except (AttributeError, ipaddress.AddressValueError):
return False
@@ -48,38 +51,45 @@ def valid_ipv6(ip):
def main():
"""Send IP/IPv6 packet from one traffic generator interface to the other."""
args = TrafficScriptArg(
- ['tg_src_mac', 'tg_dst_mac', 'src_ip', 'dst_ip', 'dut_if1_mac',
- 'dut_if2_mac'],
- ['encaps_tx', 'vlan_tx', 'vlan_outer_tx',
- 'encaps_rx', 'vlan_rx', 'vlan_outer_rx'])
-
- tx_src_mac = args.get_arg('tg_src_mac')
- tx_dst_mac = args.get_arg('dut_if1_mac')
- rx_dst_mac = args.get_arg('tg_dst_mac')
- rx_src_mac = args.get_arg('dut_if2_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- encaps_tx = args.get_arg('encaps_tx')
- vlan_tx = args.get_arg('vlan_tx')
- vlan_outer_tx = args.get_arg('vlan_outer_tx')
- encaps_rx = args.get_arg('encaps_rx')
- vlan_rx = args.get_arg('vlan_rx')
- vlan_outer_rx = args.get_arg('vlan_outer_rx')
+ [
+ u"tg_src_mac", u"tg_dst_mac", u"src_ip", u"dst_ip", u"dut_if1_mac",
+ u"dut_if2_mac"
+ ],
+ [
+ u"encaps_tx", u"vlan_tx", u"vlan_outer_tx", u"encaps_rx",
+ u"vlan_rx", u"vlan_outer_rx"
+ ]
+ )
+
+ tx_src_mac = args.get_arg(u"tg_src_mac")
+ tx_dst_mac = args.get_arg(u"dut_if1_mac")
+ rx_dst_mac = args.get_arg(u"tg_dst_mac")
+ rx_src_mac = args.get_arg(u"dut_if2_mac")
+ src_ip = args.get_arg(u"src_ip")
+ dst_ip = args.get_arg(u"dst_ip")
+ tx_if = args.get_arg(u"tx_if")
+ rx_if = args.get_arg(u"rx_if")
+
+ encaps_tx = args.get_arg(u"encaps_tx")
+ vlan_tx = args.get_arg(u"vlan_tx")
+ vlan_outer_tx = args.get_arg(u"vlan_outer_tx")
+ encaps_rx = args.get_arg(u"encaps_rx")
+ vlan_rx = args.get_arg(u"vlan_rx")
+ vlan_outer_rx = args.get_arg(u"vlan_outer_rx")
rxq = RxQueue(rx_if)
txq = TxQueue(tx_if)
- sent_packets = []
- ip_format = ''
+
+ sent_packets =list()
pkt_raw = Ether(src=tx_src_mac, dst=tx_dst_mac)
- if encaps_tx == 'Dot1q':
+
+ if encaps_tx == u"Dot1q":
pkt_raw /= Dot1Q(vlan=int(vlan_tx))
- elif encaps_tx == 'Dot1ad':
+ elif encaps_tx == u"Dot1ad":
pkt_raw.type = 0x88a8
pkt_raw /= Dot1Q(vlan=vlan_outer_tx)
pkt_raw /= Dot1Q(vlan=vlan_tx)
+
if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
pkt_raw /= IP(src=src_ip, dst=dst_ip, proto=61)
ip_format = IP
@@ -87,8 +97,9 @@ def main():
pkt_raw /= IPv6(src=src_ip, dst=dst_ip)
ip_format = IPv6
else:
- raise ValueError("IP not in correct format")
+ raise ValueError(u"IP not in correct format")
+ pkt_raw /= Raw()
sent_packets.append(pkt_raw)
txq.send(pkt_raw)
@@ -99,7 +110,7 @@ def main():
ether = rxq.recv(2)
if ether is None:
- raise RuntimeError('IP packet Rx timeout')
+ raise RuntimeError(u"IP packet Rx timeout")
if ether.haslayer(ICMPv6ND_NS):
# read another packet in the queue if the current one is ICMPv6ND_NS
@@ -109,44 +120,45 @@ def main():
break
if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src:
- logger.trace("MAC matched")
+ logger.trace(u"MAC matched")
else:
- raise RuntimeError("Matching packet unsuccessful: {0}".
- format(ether.__repr__()))
+ raise RuntimeError(f"Matching packet unsuccessful: {ether!r}")
- if encaps_rx == 'Dot1q':
+ if encaps_rx == u"Dot1q":
if ether[Dot1Q].vlan == int(vlan_rx):
- logger.trace("VLAN matched")
+ logger.trace(u"VLAN matched")
else:
- raise RuntimeError('Ethernet frame with wrong VLAN tag ({}-'
- 'received, {}-expected):\n{}'.
- format(ether[Dot1Q].vlan, vlan_rx,
- ether.__repr__()))
+ raise RuntimeError(
+ f"Ethernet frame with wrong VLAN tag "
+ f"({ether[Dot1Q].vlan}-received, "
+ f"{vlan_rx}-expected):\n{ether!r}"
+ )
ip = ether[Dot1Q].payload
- elif encaps_rx == 'Dot1ad':
+ elif encaps_rx == u"Dot1ad":
raise NotImplementedError()
else:
ip = ether.payload
if not isinstance(ip, ip_format):
- raise RuntimeError("Not an IP packet received {0}".
- format(ip.__repr__()))
+ raise RuntimeError(f"Not an IP packet received {ip!r}")
# Compare data from packets
if src_ip == ip.src:
- logger.trace("Src IP matched")
+ logger.trace(u"Src IP matched")
else:
- raise RuntimeError("Matching Src IP unsuccessful: {} != {}".
- format(src_ip, ip.src))
+ raise RuntimeError(
+ f"Matching Src IP unsuccessful: {src_ip} != {ip.src}"
+ )
if dst_ip == ip.dst:
- logger.trace("Dst IP matched")
+ logger.trace(u"Dst IP matched")
else:
- raise RuntimeError("Matching Dst IP unsuccessful: {} != {}".
- format(dst_ip, ip.dst))
+ raise RuntimeError(
+ f"Matching Dst IP unsuccessful: {dst_ip} != {ip.dst}"
+ )
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/send_ip_icmp.py b/resources/traffic_scripts/send_ip_icmp.py
deleted file mode 100755
index 58f2e1e4d8..0000000000
--- a/resources/traffic_scripts/send_ip_icmp.py
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IP ICMPv4/ICMPv6 packet from one interface to
-the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
-"""
-
-import sys
-import ipaddress
-
-from scapy.layers.l2 import Ether, Dot1Q
-from scapy.layers.inet import ICMP, IP
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- """Check if IP address has the correct IPv4 address format.
-
- :param ip: IP address.
- :type ip: str
- :return: True in case of correct IPv4 address format,
- otherwise return false.
- :rtype: bool
- """
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def valid_ipv6(ip):
- """Check if IP address has the correct IPv6 address format.
-
- :param ip: IP address.
- :type ip: str
- :return: True in case of correct IPv6 address format,
- otherwise return false.
- :rtype: bool
- """
- try:
- ipaddress.IPv6Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send IP ICMPv4/ICMPv6 packet from one traffic generator interface to
- the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
- """
- args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip'],
- ['encaps', 'vlan1', 'vlan2', 'encaps_rx',
- 'vlan1_rx', 'vlan2_rx'])
-
- src_mac = args.get_arg('src_mac')
- dst_mac = args.get_arg('dst_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
-
- encaps = args.get_arg('encaps')
- vlan1 = args.get_arg('vlan1')
- vlan2 = args.get_arg('vlan2')
- encaps_rx = args.get_arg('encaps_rx')
- vlan1_rx = args.get_arg('vlan1_rx')
- vlan2_rx = args.get_arg('vlan2_rx')
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- sent_packets = []
- ip_format = ''
- icmp_format = ''
- # Create empty ip ICMP packet and add padding before sending
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- if encaps == 'Dot1q':
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- Dot1Q(vlan=int(vlan1)) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP())
- elif encaps == 'Dot1ad':
- pkt_raw = (Ether(src=src_mac, dst=dst_mac, type=0x88A8) /
- Dot1Q(vlan=int(vlan1), type=0x8100) /
- Dot1Q(vlan=int(vlan2)) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP())
- else:
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- IP(src=src_ip, dst=dst_ip) /
- ICMP())
- ip_format = IP
- icmp_format = ICMP
- elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- if encaps == 'Dot1q':
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- Dot1Q(vlan=int(vlan1)) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
- elif encaps == 'Dot1ad':
- pkt_raw = (Ether(src=src_mac, dst=dst_mac, type=0x88A8) /
- Dot1Q(vlan=int(vlan1), type=0x8100) /
- Dot1Q(vlan=int(vlan2)) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
- else:
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
- ICMPv6EchoRequest())
- ip_format = IPv6
- icmp_format = ICMPv6EchoRequest
- else:
- raise ValueError("IP(s) not in correct format")
-
- # Send created packet on one interface and receive on the other
- sent_packets.append(pkt_raw)
- txq.send(pkt_raw)
-
- # Receive ICMP / ICMPv6 echo reply
- while True:
- ether = rxq.recv(2,)
- if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- # Check whether received packet contains layers IP/IPv6 and
- # ICMP/ICMPv6EchoRequest
- if encaps_rx:
- if encaps_rx == 'Dot1q':
- if not vlan1_rx:
- vlan1_rx = vlan1
- if not ether.haslayer(Dot1Q):
- raise RuntimeError('Not VLAN tagged Eth frame received:\n{0}'.
- format(ether.__repr__()))
- elif ether[Dot1Q].vlan != int(vlan1_rx):
- raise RuntimeError('Ethernet frame with wrong VLAN tag ({}) '
- 'received ({} expected):\n{}'.
- format(ether[Dot1Q].vlan, vlan1_rx,
- ether.__repr__()))
- elif encaps_rx == 'Dot1ad':
- if not vlan1_rx:
- vlan1_rx = vlan1
- if not vlan2_rx:
- vlan2_rx = vlan2
- # TODO
- raise RuntimeError('Encapsulation {0} not implemented yet.'.
- format(encaps_rx))
- else:
- raise RuntimeError('Unsupported encapsulation expected: {0}'.
- format(encaps_rx))
-
- if not ether.haslayer(ip_format):
- raise RuntimeError('Not an IP/IPv6 packet received:\n{0}'.
- format(ether.__repr__()))
-
- if not ether.haslayer(icmp_format):
- raise RuntimeError('Not an ICMP/ICMPv6EchoRequest packet received:\n'
- '{0}'.format(ether.__repr__()))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_ipv4_icmp_check_lw_4o6.py b/resources/traffic_scripts/send_ipv4_icmp_check_lw_4o6.py
deleted file mode 100755
index 9e225428df..0000000000
--- a/resources/traffic_scripts/send_ipv4_icmp_check_lw_4o6.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an IPv4 ICMP packet with ID field and checks if
-IPv4 is correctly encapsulated into IPv6 packet. Doing for ICMP echo request
-and ICMP echo response packet."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import IP, ICMP, icmptypes
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _is_ipv4_in_ipv6(pkt):
- """If IPv6 next header type in the given pkt is IPv4, return True,
- else return False. False is returned also if exception occurs."""
- ipv6_type = int('0x86dd', 16) # IPv6
- try:
- if pkt.type == ipv6_type:
- if pkt.payload.nh == 4:
- return True
- except: # pylint: disable=bare-except
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac', 'tx_src_ipv4', 'tx_dst_ipv4',
- 'tx_icmp_id', 'rx_dst_mac', 'rx_src_mac',
- 'src_ipv6', 'dst_ipv6'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_ipv4 = args.get_arg('tx_src_ipv4')
- tx_dst_ipv4 = args.get_arg('tx_dst_ipv4')
- tx_icmp_id = int(args.get_arg('tx_icmp_id'))
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_src_ipv6 = args.get_arg('src_ipv6')
- rx_dst_ipv6 = args.get_arg('dst_ipv6')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- for icmp_type in ('echo-request', 'echo-reply'):
- print '\nChecking ICMP type: {}'.format(icmp_type)
-
- # Create ICMP request
- tx_pkt = (Ether(dst=tx_dst_mac) /
- IP(src=tx_src_ipv4, dst=tx_dst_ipv4) /
- ICMP(type=icmp_type, id=tx_icmp_id))
-
- txq.send(tx_pkt)
- sent_packets.append(tx_pkt)
-
- for _ in range(5):
- pkt = rxq.recv(2)
- if _is_ipv4_in_ipv6(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("IPv4 in IPv6 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv6 = ether.payload
-
- # check ipv6
- if ipv6.dst != rx_dst_ipv6:
- raise RuntimeError("Destination IP error {} != {}.".
- format(ipv6.dst, rx_dst_ipv6))
- print "Destination IPv6: OK."
-
- if ipv6.src != rx_src_ipv6:
- raise RuntimeError("Source IP error {} != {}.".
- format(ipv6.src, rx_src_ipv6))
- print "Source IPv6: OK."
-
- ipv4 = ipv6.payload
-
- # check ipv4
- if ipv4.dst != tx_dst_ipv4:
- raise RuntimeError("Destination IP error {} != {}.".
- format(ipv4.dst, tx_dst_ipv4))
- print "Destination IPv4: OK."
-
- if ipv4.src != tx_src_ipv4:
- raise RuntimeError("Source IP error {} != {}.".
- format(ipv4.src, tx_src_ipv4))
- print "Source IPv4: OK."
-
- # check icmp echo request
- if ipv4.proto != 1: # ICMP
- raise RuntimeError("IP protocol error {} != ICMP.".
- format(ipv4.proto))
- print "IPv4 protocol: OK."
-
- icmp = ipv4.payload
-
- # check icmp
- if icmptypes[icmp.type] != icmp_type:
- raise RuntimeError("ICMP type error {} != echo request.".
- format(icmp.type))
- print "ICMP type: OK."
-
- if icmp.id != tx_icmp_id:
- raise RuntimeError("ICMP ID error {} != {}.".
- format(icmp.id, tx_icmp_id))
- print "ICMP ID: OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_ipv4_udp_check_lw_4o6.py b/resources/traffic_scripts/send_ipv4_udp_check_lw_4o6.py
deleted file mode 100755
index 116edb206b..0000000000
--- a/resources/traffic_scripts/send_ipv4_udp_check_lw_4o6.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an empty UDP datagram and checks if IPv4 is
-correctly encapsulated into IPv6 packet."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import IP, UDP
-from ipaddress import ip_address
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _is_ipv4_in_ipv6(pkt):
- """If IPv6 next header type in the given pkt is IPv4, return True,
- else return False. False is returned also if exception occurs."""
- ipv6_type = int('0x86dd', 16) # IPv6
- try:
- if pkt.type == ipv6_type:
- if pkt.payload.nh == 4:
- return True
- except: # pylint: disable=bare-except
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac', 'tx_src_ipv4', 'tx_dst_ipv4',
- 'tx_dst_udp_port', 'rx_dst_mac', 'rx_src_mac',
- 'src_ipv6', 'dst_ipv6'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_ipv4 = args.get_arg('tx_src_ipv4')
- tx_dst_ipv4 = args.get_arg('tx_dst_ipv4')
- tx_dst_udp_port = int(args.get_arg('tx_dst_udp_port'))
- tx_src_udp_port = 20000
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_src_ipv6 = args.get_arg('src_ipv6')
- rx_dst_ipv6 = args.get_arg('dst_ipv6')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- # Create empty UDP datagram
- udp = (Ether(dst=tx_dst_mac) /
- IP(src=tx_src_ipv4, dst=tx_dst_ipv4) /
- UDP(sport=tx_src_udp_port, dport=tx_dst_udp_port))
-
- txq.send(udp)
- sent_packets.append(udp)
-
- for _ in range(5):
- pkt = rxq.recv(2)
- if _is_ipv4_in_ipv6(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("IPv4 in IPv6 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv6 = ether.payload
-
- # check ipv6
- if ip_address(unicode(ipv6.dst)) != ip_address(unicode(rx_dst_ipv6)):
- raise RuntimeError("Destination IP error {} != {}.".
- format(ipv6.dst, rx_dst_ipv6))
- print "Destination IPv6: OK."
-
- if ip_address(unicode(ipv6.src)) != ip_address(unicode(rx_src_ipv6)):
- raise RuntimeError("Source IP error {} != {}.".
- format(ipv6.src, rx_src_ipv6))
- print "Source IPv6: OK."
-
- ipv4 = ipv6.payload
-
- # check ipv4
- if ipv4.dst != tx_dst_ipv4:
- raise RuntimeError("Destination IP error {} != {}.".
- format(ipv4.dst, tx_dst_ipv4))
- print "Destination IPv4: OK."
-
- if ipv4.src != tx_src_ipv4:
- raise RuntimeError("Source IP error {} != {}.".
- format(ipv4.src, tx_src_ipv4))
- print "Source IPv4: OK."
-
- if ipv4.proto != 17: # UDP
- raise RuntimeError("IP protocol error {} != UDP.".
- format(ipv4.proto))
- print "IPv4 protocol: OK."
-
- udp = ipv4.payload
-
- # check udp
- if udp.dport != tx_dst_udp_port:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, tx_dst_udp_port))
- print "UDP dport: OK."
-
- if udp.sport != tx_src_udp_port:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, tx_src_udp_port))
- print "UDP sport: OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_ipv4_udp_check_map_t.py b/resources/traffic_scripts/send_ipv4_udp_check_map_t.py
deleted file mode 100755
index 835f667751..0000000000
--- a/resources/traffic_scripts/send_ipv4_udp_check_map_t.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends a UDP datagram and checks if IPv4 addresses
-are correctly translate to IPv6 addresses."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet import IP, UDP
-from ipaddress import ip_address
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _check_udp_checksum(pkt):
- """Check UDP checksum in IP packet. Return True if checksum is correct
- else False."""
- new = pkt.__class__(str(pkt))
- del new['UDP'].chksum
- new = new.__class__(str(new))
- return new['UDP'].chksum == pkt['UDP'].chksum
-
-
-def _is_udp_in_ipv6(pkt):
- """If IPv6 next header type in the given pkt is UDP, return True,
- else return False. False is returned also if exception occurs."""
- ipv6_type = int('0x86dd', 16) # IPv6
- try:
- if pkt.type == ipv6_type:
- if pkt.payload.nh == 17: # UDP
- return True
- except AttributeError:
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac', 'tx_src_ipv4', 'tx_dst_ipv4',
- 'tx_dst_udp_port', 'rx_dst_mac', 'rx_src_mac',
- 'rx_src_ipv6', 'rx_dst_ipv6'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_ipv4 = args.get_arg('tx_src_ipv4')
- tx_dst_ipv4 = args.get_arg('tx_dst_ipv4')
- tx_dst_udp_port = int(args.get_arg('tx_dst_udp_port'))
- tx_src_udp_port = 20000
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_src_ipv6 = args.get_arg('rx_src_ipv6')
- rx_dst_ipv6 = args.get_arg('rx_dst_ipv6')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- # Create empty UDP datagram
- udp = (Ether(dst=tx_dst_mac) /
- IP(src=tx_src_ipv4, dst=tx_dst_ipv4) /
- UDP(sport=tx_src_udp_port, dport=tx_dst_udp_port) /
- 'udp_payload')
-
- txq.send(udp)
- sent_packets.append(udp)
-
- for _ in range(5):
- pkt = rxq.recv(2)
- if _is_udp_in_ipv6(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("UDP in IPv6 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv6 = ether.payload
-
- # check ipv6
- if ip_address(unicode(ipv6.dst)) != ip_address(unicode(rx_dst_ipv6)):
- raise RuntimeError("Destination IP error {} != {}.".
- format(ipv6.dst, rx_dst_ipv6))
- print "Destination IPv6: OK."
-
- if ip_address(unicode(ipv6.src)) != ip_address(unicode(rx_src_ipv6)):
- raise RuntimeError("Source IP error {} != {}.".
- format(ipv6.src, rx_src_ipv6))
- print "Source IPv6: OK."
-
- udp = ipv6.payload
-
- # check udp
- if udp.dport != tx_dst_udp_port:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, tx_dst_udp_port))
- print "UDP dport: OK."
-
- if udp.sport != tx_src_udp_port:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, tx_src_udp_port))
- print "UDP sport: OK."
-
- if not _check_udp_checksum(ipv6):
- raise RuntimeError("UDP checksum error.")
- print "UDP checksum OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_ipv6_udp_check_map_t.py b/resources/traffic_scripts/send_ipv6_udp_check_map_t.py
deleted file mode 100755
index 2d9c291686..0000000000
--- a/resources/traffic_scripts/send_ipv6_udp_check_map_t.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an empty UDP datagram and checks if IPv6 addresses
-are correctly translate to IPv4 addresses."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet6 import IPv6, UDP
-from ipaddress import ip_address
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _check_udp_checksum(pkt):
- """Check UDP checksum in IP packet. Return True if checksum is correct
- else False."""
- new = pkt.__class__(str(pkt))
- del new['UDP'].chksum
- new = new.__class__(str(new))
- return new['UDP'].chksum == pkt['UDP'].chksum
-
-
-def _is_udp_in_ipv4(pkt):
- """If IPv4 protocol type in the given pkt is UDP, return True,
- else return False. False is returned also if exception occurs."""
- ipv4_type = int('0x0800', 16) # IPv4
- try:
- if pkt.type == ipv4_type:
- if pkt.payload.proto == 17: # UDP
- return True
- except AttributeError:
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac', 'tx_src_mac',
- 'tx_src_ipv6', 'tx_dst_ipv6',
- 'tx_src_udp_port', 'rx_dst_mac', 'rx_src_mac',
- 'rx_src_ipv4', 'rx_dst_ipv4'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_mac = args.get_arg('tx_src_mac')
- tx_src_ipv6 = args.get_arg('tx_src_ipv6')
- tx_dst_ipv6 = args.get_arg('tx_dst_ipv6')
- tx_src_udp_port = int(args.get_arg('tx_src_udp_port'))
- tx_dst_udp_port = 20000
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_src_ipv4 = args.get_arg('rx_src_ipv4')
- rx_dst_ipv4 = args.get_arg('rx_dst_ipv4')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- # Create empty UDP datagram in IPv6
-
- udp = (Ether(dst=tx_dst_mac, src=tx_src_mac) /
- IPv6(src=tx_src_ipv6, dst=tx_dst_ipv6) /
- UDP(sport=tx_src_udp_port, dport=tx_dst_udp_port) /
- 'udp_payload')
-
- txq.send(udp)
- sent_packets.append(udp)
-
- for _ in range(5):
- pkt = rxq.recv(2)
- if _is_udp_in_ipv4(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("UDP in IPv4 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv4 = ether.payload
-
- # check ipv4
- if ip_address(unicode(ipv4.dst)) != ip_address(unicode(rx_dst_ipv4)):
- raise RuntimeError("Destination IPv4 error {} != {}.".
- format(ipv4.dst, rx_dst_ipv4))
- print "Destination IPv4: OK."
-
- if ip_address(unicode(ipv4.src)) != ip_address(unicode(rx_src_ipv4)):
- raise RuntimeError("Source IPv4 error {} != {}.".
- format(ipv4.src, rx_src_ipv4))
- print "Source IPv4: OK."
-
- udp = ipv4.payload
-
- # check udp
- if udp.dport != tx_dst_udp_port:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, tx_dst_udp_port))
- print "UDP dport: OK."
-
- if udp.sport != tx_src_udp_port:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, tx_src_udp_port))
- print "UDP sport: OK."
-
- if not _check_udp_checksum(ipv4):
- raise RuntimeError("UDP checksum error.")
- print "UDP checksum OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_lw_4o6_check_hairpinning_udp.py b/resources/traffic_scripts/send_lw_4o6_check_hairpinning_udp.py
deleted file mode 100755
index eb5c26ea61..0000000000
--- a/resources/traffic_scripts/send_lw_4o6_check_hairpinning_udp.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an empty IPv4 UDP datagram encapsulated in IPv6
-and checks if is correctly re-encapsulated."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet6 import IPv6
-from scapy.layers.inet import IP, UDP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _is_ipv4_in_ipv6(pkt):
- """If IPv6 next header type in the given pkt is IPv4, return True,
- else return False. False is returned also if exception occurs."""
- ipv6_type = int('0x86dd', 16) # IPv6
- try:
- if pkt.type == ipv6_type:
- if pkt.payload.nh == 4:
- return True
- except: # pylint: disable=bare-except
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac',
- 'tx_dst_ipv6', 'tx_src_ipv6',
- 'tx_dst_ipv4', 'tx_src_ipv4',
- 'tx_dst_udp_port', 'tx_src_udp_port',
- 'rx_dst_mac', 'rx_src_mac',
- 'rx_dst_ipv6', 'rx_src_ipv6'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_mac = '02:00:00:00:00:01'
-
- tx_dst_ipv6 = args.get_arg('tx_dst_ipv6')
- tx_src_ipv6 = args.get_arg('tx_src_ipv6')
- tx_dst_ipv4 = args.get_arg('tx_dst_ipv4')
- tx_src_ipv4 = args.get_arg('tx_src_ipv4')
- tx_dst_udp_port = int(args.get_arg('tx_dst_udp_port'))
- tx_src_udp_port = int(args.get_arg('tx_src_udp_port'))
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
- rx_dst_ipv6 = args.get_arg('rx_dst_ipv6')
- rx_src_ipv6 = args.get_arg('rx_src_ipv6')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- # Create empty UDP datagram in IPv4 and IPv6
- tx_pkt = Ether(dst=tx_dst_mac, src=tx_src_mac)
- tx_pkt /= IPv6(src=tx_src_ipv6, dst=tx_dst_ipv6)
- tx_pkt /= IP(src=tx_src_ipv4, dst=tx_dst_ipv4)
- tx_pkt /= UDP(sport=tx_src_udp_port, dport=tx_dst_udp_port)
- tx_pkt /= 'udp_payload'
-
- txq.send(tx_pkt)
- sent_packets.append(tx_pkt)
-
- for _ in range(5):
- pkt = rxq.recv(2, ignore=sent_packets)
- if _is_ipv4_in_ipv6(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("IPv4 in IPv6 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv6 = ether.payload
-
- # check ipv6
- if ipv6.dst != rx_dst_ipv6:
- raise RuntimeError("Destination IPv6 error {} != {}.".
- format(ipv6.dst, rx_dst_ipv6))
- print "Destination IPv6: OK."
-
- if ipv6.src != rx_src_ipv6:
- raise RuntimeError("Source IPv6 error {} != {}.".
- format(ipv6.src, rx_src_ipv6))
- print "Source IPv6: OK."
-
- ipv4 = ipv6.payload
-
- # check ipv4
- if ipv4.dst != tx_dst_ipv4:
- raise RuntimeError("Destination IPv4 error {} != {}.".
- format(ipv4.dst, tx_dst_ipv4))
- print "Destination IPv4: OK."
-
- if ipv4.src != tx_src_ipv4:
- raise RuntimeError("Source IPv4 error {} != {}.".
- format(ipv4.src, tx_src_ipv4))
- print "Source IPv4: OK."
-
- if ipv4.proto != 17: # UDP
- raise RuntimeError("IPv4 protocol error {} != UDP.".
- format(ipv4.proto))
- print "IPv4 protocol: OK."
-
- udp = ipv4.payload
-
- # check udp
- if udp.dport != tx_dst_udp_port:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, tx_dst_udp_port))
- print "UDP dport: OK."
-
- if udp.sport != tx_src_udp_port:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, tx_src_udp_port))
- print "UDP sport: OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_lw_4o6_check_ipv4_udp.py b/resources/traffic_scripts/send_lw_4o6_check_ipv4_udp.py
deleted file mode 100755
index fcb745a407..0000000000
--- a/resources/traffic_scripts/send_lw_4o6_check_ipv4_udp.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an empty IPv4 UDP datagram encapsulated in IPv6
-and checks if is correctly decapsulated."""
-
-import sys
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet6 import IPv6
-from scapy.layers.inet import IP, UDP
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def _is_udp_in_ipv4(pkt):
- """If UDP is in IPv4 packet return True,
- else return False. False is returned also if exception occurs."""
- ipv4_type = int('0x0800', 16) # IPv4
- try:
- if pkt.type == ipv4_type:
- if pkt.payload.proto == 17: # UDP
- return True
- except: # pylint: disable=bare-except
- return False
- return False
-
-
-def main(): # pylint: disable=too-many-statements, too-many-locals
- """Main function of the script file."""
- args = TrafficScriptArg(['tx_dst_mac', 'tx_src_mac',
- 'tx_dst_ipv6', 'tx_src_ipv6',
- 'tx_dst_ipv4', 'tx_src_ipv4', 'tx_src_udp_port',
- 'rx_dst_mac', 'rx_src_mac'])
- rx_if = args.get_arg('rx_if')
- tx_if = args.get_arg('tx_if')
- tx_src_mac = args.get_arg('tx_src_mac')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_dst_ipv6 = args.get_arg('tx_dst_ipv6')
- tx_src_ipv6 = args.get_arg('tx_src_ipv6')
- tx_dst_ipv4 = args.get_arg('tx_dst_ipv4')
- tx_src_ipv4 = args.get_arg('tx_src_ipv4')
- tx_src_udp_port = int(args.get_arg('tx_src_udp_port'))
- tx_dst_udp_port = 20000
- rx_dst_mac = args.get_arg('rx_dst_mac')
- rx_src_mac = args.get_arg('rx_src_mac')
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
- sent_packets = []
-
- # Create empty UDP datagram in IPv4 and IPv6
- tx_pkt = (Ether(dst=tx_dst_mac, src=tx_src_mac) /
- IPv6(src=tx_src_ipv6, dst=tx_dst_ipv6) /
- IP(src=tx_src_ipv4, dst=tx_dst_ipv4) /
- UDP(sport=tx_src_udp_port, dport=tx_dst_udp_port))
-
- txq.send(tx_pkt)
- sent_packets.append(tx_pkt)
-
- for _ in range(5):
- pkt = rxq.recv(2)
- if _is_udp_in_ipv4(pkt):
- ether = pkt
- break
- else:
- raise RuntimeError("UDP in IPv4 Rx error.")
-
- # check ethernet
- if ether.dst != rx_dst_mac:
- raise RuntimeError("Destination MAC error {} != {}.".
- format(ether.dst, rx_dst_mac))
- print "Destination MAC: OK."
-
- if ether.src != rx_src_mac:
- raise RuntimeError("Source MAC error {} != {}.".
- format(ether.src, rx_src_mac))
- print "Source MAC: OK."
-
- ipv4 = ether.payload
-
- # check ipv4
- if ipv4.dst != tx_dst_ipv4:
- raise RuntimeError("Destination IPv4 error {} != {}.".
- format(ipv4.dst, tx_dst_ipv4))
- print "Destination IPv4: OK."
-
- if ipv4.src != tx_src_ipv4:
- raise RuntimeError("Source IPv4 error {} != {}.".
- format(ipv4.src, tx_src_ipv4))
- print "Source IPv4: OK."
-
- if ipv4.proto != 17: # UDP
- raise RuntimeError("IPv4 protocol error {} != UDP.".
- format(ipv4.proto))
- print "IPv4 protocol: OK."
-
- udp = ipv4.payload
-
- # check udp
- if udp.dport != tx_dst_udp_port:
- raise RuntimeError("UDP dport error {} != {}.".
- format(udp.dport, tx_dst_udp_port))
- print "UDP dport: OK."
-
- if udp.sport != tx_src_udp_port:
- raise RuntimeError("UDP sport error {} != {}.".
- format(udp.sport, tx_src_udp_port))
- print "UDP sport: OK."
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_rs_check_ra.py b/resources/traffic_scripts/send_rs_check_ra.py
deleted file mode 100755
index c9ff46528a..0000000000
--- a/resources/traffic_scripts/send_rs_check_ra.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Router solicitation check script."""
-
-import sys
-import ipaddress
-
-from scapy.layers.l2 import Ether
-from scapy.layers.inet6 import IPv6, ICMPv6ND_RA, ICMPv6ND_RS, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def mac_to_ipv6_linklocal(mac):
- """Transfer MAC address into specific link-local IPv6 address.
-
- :param mac: MAC address to be transferred.
- :type mac: str
- :return: IPv6 link-local address.
- :rtype: str
- """
- # Remove the most common delimiters: dots, dashes, etc.
- mac_value = int(mac.translate(None, ' .:-'), 16)
-
- # Split out the bytes that slot into the IPv6 address
- # XOR the most significant byte with 0x02, inverting the
- # Universal / Local bit
- high2 = mac_value >> 32 & 0xffff ^ 0x0200
- high1 = mac_value >> 24 & 0xff
- low1 = mac_value >> 16 & 0xff
- low2 = mac_value & 0xffff
-
- return 'fe80::{:04x}:{:02x}ff:fe{:02x}:{:04x}'.format(
- high2, high1, low1, low2)
-
-
-def main():
- """Send Router Solicitation packet, check if the received response\
- is a Router Advertisement packet and verify."""
-
- args = TrafficScriptArg(
- ['src_mac', 'dst_mac', 'src_ip']
- )
-
- router_mac = args.get_arg('dst_mac')
- src_mac = args.get_arg('src_mac')
- src_ip = args.get_arg('src_ip')
- if not src_ip:
- src_ip = mac_to_ipv6_linklocal(src_mac)
- tx_if = args.get_arg('tx_if')
-
- txq = TxQueue(tx_if)
- rxq = RxQueue(tx_if)
-
- pkt_raw = (Ether(src=src_mac, dst='33:33:00:00:00:02') /
- IPv6(src=src_ip, dst='ff02::2') /
- ICMPv6ND_RS())
-
- sent_packets = [pkt_raw]
- txq.send(pkt_raw)
-
- while True:
- ether = rxq.recv(2, sent_packets)
- if ether is None:
- raise RuntimeError('ICMP echo Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- # Check whether received packet contains layer RA and check other values
- if ether.src != router_mac:
- raise RuntimeError('Packet source MAC ({0}) does not match router MAC '
- '({1}).'.format(ether.src, router_mac))
- if ether.dst != src_mac:
- raise RuntimeError('Packet destination MAC ({0}) does not match RS '
- 'source MAC ({1}).'.format(ether.dst, src_mac))
-
- if not ether.haslayer(ICMPv6ND_RA):
- raise RuntimeError('Not an RA packet received {0}'.
- format(ether.__repr__()))
-
- src_address = ipaddress.IPv6Address(unicode(ether['IPv6'].src))
- dst_address = ipaddress.IPv6Address(unicode(ether['IPv6'].dst))
- router_link_local = ipaddress.IPv6Address(unicode(
- mac_to_ipv6_linklocal(router_mac)))
- rs_src_address = ipaddress.IPv6Address(unicode(src_ip))
-
- if src_address != router_link_local:
- raise RuntimeError('Packet source address ({0}) does not match link '
- 'local address({1})'.
- format(src_address, router_link_local))
-
- if dst_address != rs_src_address:
- raise RuntimeError('Packet destination address ({0}) does not match '
- 'RS source address ({1}).'.
- format(dst_address, rs_src_address))
-
- if ether['IPv6'].hlim != 255:
- raise RuntimeError('Hop limit not correct: {0}!=255'.
- format(ether['IPv6'].hlim))
-
- ra_code = ether[ICMPv6ND_RA].code
- if ra_code != 0:
- raise RuntimeError('ICMP code: {0} not correct. '.format(ra_code))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_tcp_udp.py b/resources/traffic_scripts/send_tcp_udp.py
deleted file mode 100755
index 4cba73286a..0000000000
--- a/resources/traffic_scripts/send_tcp_udp.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Traffic script that sends an TCP or UDP packet
-from one interface to the other.
-"""
-
-import sys
-import ipaddress
-
-from scapy.all import Ether
-from scapy.layers.inet import IP, UDP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS
-
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
-from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
-
-
-def valid_ipv4(ip):
- """Check if IP address has the correct IPv4 address format.
-
- :param ip: IP address.
- :type ip: str
- :return: True in case of correct IPv4 address format,
- otherwise return False.
- :rtype: bool
- """
- try:
- ipaddress.IPv4Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def valid_ipv6(ip):
- """Check if IP address has the correct IPv6 address format.
-
- :param ip: IP address.
- :type ip: str
- :return: True in case of correct IPv6 address format,
- otherwise return False.
- :rtype: bool
- """
- try:
- ipaddress.IPv6Address(unicode(ip))
- return True
- except (AttributeError, ipaddress.AddressValueError):
- return False
-
-
-def main():
- """Send TCP or UDP packet from one traffic generator interface to the other.
- """
- args = TrafficScriptArg(['tx_mac', 'rx_mac', 'src_ip', 'dst_ip', 'protocol',
- 'source_port', 'destination_port'])
-
- src_mac = args.get_arg('tx_mac')
- dst_mac = args.get_arg('rx_mac')
- src_ip = args.get_arg('src_ip')
- dst_ip = args.get_arg('dst_ip')
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
-
- protocol = args.get_arg('protocol')
- source_port = args.get_arg('source_port')
- destination_port = args.get_arg('destination_port')
-
- if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
- ip_version = IP
- elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
- ip_version = IPv6
- else:
- ValueError("Invalid IP version!")
-
- if protocol.upper() == 'TCP':
- protocol = TCP
- elif protocol.upper() == 'UDP':
- protocol = UDP
- else:
- raise ValueError("Invalid protocol type!")
-
- rxq = RxQueue(rx_if)
- txq = TxQueue(tx_if)
-
- pkt_raw = (Ether(src=src_mac, dst=dst_mac) /
- ip_version(src=src_ip, dst=dst_ip) /
- protocol(sport=int(source_port), dport=int(destination_port)))
-
- txq.send(pkt_raw)
-
- while True:
- ether = rxq.recv(2)
- if ether is None:
- raise RuntimeError('TCP/UDP Rx timeout')
-
- if ether.haslayer(ICMPv6ND_NS):
- # read another packet in the queue if the current one is ICMPv6ND_NS
- continue
- else:
- # otherwise process the current packet
- break
-
- if TCP in ether:
- print ("TCP packet received.")
-
- elif UDP in ether:
- print ("UDP packet received.")
- else:
- raise RuntimeError("Not an TCP or UDP packet received {0}".
- format(ether.__repr__()))
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/resources/traffic_scripts/send_vxlan_check_vxlan.py b/resources/traffic_scripts/send_vxlan_check_vxlan.py
index 3bf273d17a..162703d60c 100755
--- a/resources/traffic_scripts/send_vxlan_check_vxlan.py
+++ b/resources/traffic_scripts/send_vxlan_check_vxlan.py
@@ -1,5 +1,6 @@
-#!/usr/bin/env python
-# Copyright (c) 2016 Cisco and/or its affiliates.
+#!/usr/bin/env python3
+
+# 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:
@@ -18,42 +19,46 @@ the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
import sys
-import vxlan
-
-from scapy.layers.inet import IP, UDP, Raw
+from scapy.layers.inet import IP, UDP
from scapy.layers.l2 import Ether
+from scapy.packet import Raw
+
from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
+from resources.traffic_scripts import vxlan
def main():
"""Send IP ICMPv4/ICMPv6 packet from one traffic generator interface to
the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
"""
- args = TrafficScriptArg(['tx_src_mac', 'tx_dst_mac', 'tx_src_ip',
- 'tx_dst_ip', 'tx_vni', 'rx_src_ip', 'rx_dst_ip',
- 'rx_vni'])
-
- tx_if = args.get_arg('tx_if')
- rx_if = args.get_arg('rx_if')
- tx_src_mac = args.get_arg('tx_src_mac')
- tx_dst_mac = args.get_arg('tx_dst_mac')
- tx_src_ip = args.get_arg('tx_src_ip')
- tx_dst_ip = args.get_arg('tx_dst_ip')
- tx_vni = args.get_arg('tx_vni')
- rx_src_ip = args.get_arg('rx_src_ip')
- rx_dst_ip = args.get_arg('rx_dst_ip')
- rx_vni = args.get_arg('rx_vni')
+ args = TrafficScriptArg(
+ [
+ u"tx_src_mac", u"tx_dst_mac", u"tx_src_ip", u"tx_dst_ip", u"tx_vni",
+ u"rx_src_ip", u"rx_dst_ip", u"rx_vni"
+ ]
+ )
+
+ tx_if = args.get_arg(u"tx_if")
+ rx_if = args.get_arg(u"rx_if")
+ tx_src_mac = args.get_arg(u"tx_src_mac")
+ tx_dst_mac = args.get_arg(u"tx_dst_mac")
+ tx_src_ip = args.get_arg(u"tx_src_ip")
+ tx_dst_ip = args.get_arg(u"tx_dst_ip")
+ tx_vni = args.get_arg(u"tx_vni")
+ rx_src_ip = args.get_arg(u"rx_src_ip")
+ rx_dst_ip = args.get_arg(u"rx_dst_ip")
+ rx_vni = args.get_arg(u"rx_vni")
rxq = RxQueue(rx_if)
txq = TxQueue(tx_if)
sent_packets = []
- tx_pkt_p = (Ether(src='02:00:00:00:00:01', dst='02:00:00:00:00:02') /
- IP(src='192.168.1.1', dst='192.168.1.2') /
+ tx_pkt_p = (Ether(src=u"02:00:00:00:00:01", dst=u"02:00:00:00:00:02") /
+ IP(src=u"192.168.1.1", dst=u"192.168.1.2") /
UDP(sport=12345, dport=1234) /
- Raw('rew data'))
+ Raw(u"raw data"))
pkt_raw = (Ether(src=tx_src_mac, dst=tx_dst_mac) /
IP(src=tx_src_ip, dst=tx_dst_ip) /
@@ -61,6 +66,7 @@ def main():
vxlan.VXLAN(vni=int(tx_vni)) /
tx_pkt_p)
+ pkt_raw /= Raw()
# Send created packet on one interface and receive on the other
sent_packets.append(pkt_raw)
txq.send(pkt_raw)
@@ -69,38 +75,45 @@ def main():
# Check whether received packet contains layers Ether, IP and VXLAN
if ether is None:
- raise RuntimeError('Packet Rx timeout')
+ raise RuntimeError(u"Packet Rx timeout")
ip = ether.payload
if ip.src != rx_src_ip:
- raise RuntimeError('IP src mismatch {} != {}'.format(ip.src, rx_src_ip))
+ raise RuntimeError(f"IP src mismatch {ip.src} != {rx_src_ip}")
if ip.dst != rx_dst_ip:
- raise RuntimeError('IP dst mismatch {} != {}'.format(ip.dst, rx_dst_ip))
+ raise RuntimeError(f"IP dst mismatch {ip.dst} != {rx_dst_ip}")
if ip.payload.dport != 4789:
- raise RuntimeError('VXLAN UDP port mismatch {} != {}'.
- format(ip.payload.dport, 4789))
+ raise RuntimeError(
+ f"VXLAN UDP port mismatch {ip.payload.dport} != 4789"
+ )
vxlan_pkt = ip.payload.payload
if int(vxlan_pkt.vni) != int(rx_vni):
- raise RuntimeError('vxlan mismatch')
+ raise RuntimeError(u"vxlan mismatch")
rx_pkt_p = vxlan_pkt.payload
if rx_pkt_p.src != tx_pkt_p.src:
- raise RuntimeError('RX encapsulated MAC src mismatch {} != {}'.
- format(rx_pkt_p.src, tx_pkt_p.src))
+ raise RuntimeError(
+ f"RX encapsulated MAC src mismatch {rx_pkt_p.src} != {tx_pkt_p.src}"
+ )
if rx_pkt_p.dst != tx_pkt_p.dst:
- raise RuntimeError('RX encapsulated MAC dst mismatch {} != {}'.
- format(rx_pkt_p.dst, tx_pkt_p.dst))
- if rx_pkt_p['IP'].src != tx_pkt_p['IP'].src:
- raise RuntimeError('RX encapsulated IP src mismatch {} != {}'.
- format(rx_pkt_p['IP'].src, tx_pkt_p['IP'].src))
- if rx_pkt_p['IP'].dst != tx_pkt_p['IP'].dst:
- raise RuntimeError('RX encapsulated IP dst mismatch {} != {}'.
- format(rx_pkt_p['IP'].dst, tx_pkt_p['IP'].dst))
+ raise RuntimeError(
+ f"RX encapsulated MAC dst mismatch {rx_pkt_p.dst} != {tx_pkt_p.dst}"
+ )
+ if rx_pkt_p[IP].src != tx_pkt_p[IP].src:
+ raise RuntimeError(
+ f"RX encapsulated IP src mismatch {rx_pkt_p[IP].src} != "
+ f"{tx_pkt_p[IP].src}"
+ )
+ if rx_pkt_p[IP].dst != tx_pkt_p[IP].dst:
+ raise RuntimeError(
+ f"RX encapsulated IP dst mismatch {rx_pkt_p[IP].dst} != "
+ f"{tx_pkt_p[IP].dst}"
+ )
# TODO: verify inner Ether()
sys.exit(0)
-if __name__ == "__main__":
+if __name__ == u"__main__":
main()
diff --git a/resources/traffic_scripts/vxlan.py b/resources/traffic_scripts/vxlan.py
index bf86f179a8..eebfb9056e 100644
--- a/resources/traffic_scripts/vxlan.py
+++ b/resources/traffic_scripts/vxlan.py
@@ -1,17 +1,19 @@
from scapy.fields import BitField, XByteField, X3BytesField
-from scapy.packet import Packet, bind_layers
-from scapy.layers.l2 import Ether
from scapy.layers.inet import UDP
+from scapy.layers.l2 import Ether
+from scapy.packet import Packet, bind_layers
class VXLAN(Packet):
- name = "VXLAN"
- fields_desc = [BitField("flags", 0x08000000, 32),
- X3BytesField("vni", 0),
- XByteField("reserved", 0x00)]
+ name = u"VXLAN"
+ fields_desc = [
+ BitField(u"flags", 0x08000000, 32),
+ X3BytesField(u"vni", 0),
+ XByteField(u"reserved", 0x00)
+ ]
def mysummary(self):
- return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
+ return self.sprintf(f"VXLAN (vni={VXLAN.vni})")
bind_layers(UDP, VXLAN, dport=4789)
bind_layers(VXLAN, Ether)
diff --git a/tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot b/tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
index 99f83482d6..2682873555 100644
--- a/tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
+++ b/tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
@@ -15,15 +15,15 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/dpdk/default.robot
| Library | resources.libraries.python.DPDK.DPDKTools
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | PERFTEST | NDRPDR | 1NUMA
| ... | NIC_Intel-X710 | DPDK | ETH | L2XCFWD | BASE
-| ...
+|
| Suite Setup | Setup suite single link | performance | dpdk
| Suite Teardown | Tear down suite | performance | dpdk
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Raw results L2 routing test cases*
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
@@ -55,11 +55,11 @@
| | ... | [Cfg] DUT runs L2 frame forwarding config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Set Max Rate And Jumbo
| | Given Start L2FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
| | Then Find NDR and PDR intervals using optimized search
diff --git a/tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot b/tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
index 856db6f559..236f2407e6 100644
--- a/tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
+++ b/tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
@@ -15,15 +15,15 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/dpdk/default.robot
| Library | resources.libraries.python.DPDK.DPDKTools
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | 1NUMA
| ... | NIC_Intel-X710 | DPDK | IP4FWD | BASE | ETH
-| ...
+|
| Suite Setup | Setup suite single link | performance | dpdk
| Suite Teardown | Tear down suite | performance | dpdk
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Raw results IPv4 routing test cases*
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
@@ -55,11 +55,11 @@
| | ... | [Cfg] DUT runs L3 IPv4 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Set Max Rate And Jumbo
| | Given Start L3FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
| | Then Find NDR and PDR intervals using optimized search
diff --git a/tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot b/tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
index f0f537d32f..5e501ffc09 100644
--- a/tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
+++ b/tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
@@ -15,15 +15,15 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/dpdk/default.robot
| Library | resources.libraries.python.DPDK.DPDKTools
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | HW_ENV | PERFTEST | NDRPDR | 1NUMA
| ... | NIC_Intel-X710 | DPDK | ETH | L2XCFWD | BASE
-| ...
+|
| Suite Setup | Setup suite single link | performance | dpdk
| Suite Teardown | Tear down suite | performance | dpdk
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Raw results L2 routing test cases*
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
@@ -55,11 +55,11 @@
| | ... | [Cfg] DUT runs L2 frame forwarding config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Set Max Rate And Jumbo
| | Given Start L2FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
| | Then Find NDR and PDR intervals using optimized search
diff --git a/tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot b/tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
index 5aaf756974..3b1afdd434 100644
--- a/tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
+++ b/tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
@@ -15,15 +15,15 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/dpdk/default.robot
| Library | resources.libraries.python.DPDK.DPDKTools
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | 1NUMA
| ... | NIC_Intel-X710 | DPDK | IP4FWD | BASE | ETH
-| ...
+|
| Suite Setup | Setup suite single link | performance | dpdk
| Suite Teardown | Tear down suite | performance | dpdk
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Raw results IPv4 routing test cases*
| ... | *[Top] Network Topologies:* TG-DUT1-TG 3-node circular topology\
| ... | with single links between nodes.
@@ -55,11 +55,11 @@
| | ... | [Cfg] DUT runs L3 IPv4 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Set Max Rate And Jumbo
| | Given Start L3FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
| | Then Find NDR and PDR intervals using optimized search
diff --git a/tests/dpdk/perf/__init__.robot b/tests/dpdk/perf/__init__.robot
index 8010a74503..10878c2d19 100644
--- a/tests/dpdk/perf/__init__.robot
+++ b/tests/dpdk/perf/__init__.robot
@@ -14,25 +14,29 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/shared/interfaces.robot
+|
| Library | resources.libraries.python.SetupFramework
| Library | resources.libraries.python.SetupFramework.CleanupFramework
| Library | resources.libraries.python.DPDK.DPDKTools
+|
| Suite Setup | Run Keywords | Setup performance global Variables
| ... | AND | Setup Framework | ${nodes}
| ... | AND | Install DPDK test on all DUTs | ${nodes}
| ... | AND | Get CPU Info from All Nodes | ${nodes}
| ... | AND | Update All Numa Nodes
| ... | ${nodes} | skip_tg=${True}
+|
| Suite Teardown | Cleanup Framework | ${nodes}
*** Keywords ***
| Setup performance global Variables
| | [Documentation]
| | ... | Setup suite Variables. Variables are used across performance testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - pkt_trace - Switch to enable packet trace for test
| | ... | - dut_stats - Switch to enable DUT statistics
-| | ...
+| |
| | Set Global Variable | ${pkt_trace} | ${False}
| | Set Global Variable | ${dut_stats} | ${False}
+| | Set Global Variable | ${nodes}
diff --git a/tests/dpdk/perf/regenerate_testcases.py b/tests/dpdk/perf/regenerate_testcases.py
index 9a4429fbd5..5274610ddc 100755
--- a/tests/dpdk/perf/regenerate_testcases.py
+++ b/tests/dpdk/perf/regenerate_testcases.py
@@ -17,4 +17,4 @@ from resources.libraries.python.autogen.Regenerator import Regenerator
# Do not match __init__.robot
# Match -ndrpdr or future types.
-Regenerator().regenerate_glob("*r.robot")
+Regenerator().regenerate_glob(u"*r.robot")
diff --git a/tests/vpp/device/__init__.robot b/tests/vpp/device/__init__.robot
index c5deb752bb..f166c124c4 100644
--- a/tests/vpp/device/__init__.robot
+++ b/tests/vpp/device/__init__.robot
@@ -14,10 +14,11 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/shared/interfaces.robot
+|
| Library | resources.libraries.python.SetupFramework
| Library | resources.libraries.python.SetupFramework.CleanupFramework
| Library | resources.libraries.python.CpuUtils
-| ...
+|
| Suite Setup | Run Keywords | Setup Global Variables
| ... | AND | Setup Framework | ${nodes}
| ... | AND | Setup Corekeeper on All Nodes | ${nodes}
@@ -26,17 +27,18 @@
| ... | AND | Get CPU Info from All Nodes | ${nodes}
| ... | AND | Update All Interface Data on All Nodes | ${nodes}
| ... | skip_tg_udev=${True} | numa_node=${True}
-| ...
+|
| Suite Teardown | Cleanup Framework | ${nodes}
*** Keywords ***
| Setup Global Variables
| | [Documentation]
| | ... | Setup suite Variables. Variables are used across device testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - dut_stats - Switch to enable DUT statistics
| | ... | - packages_dir - Path to directory where VPP packages are stored.
-| | ...
+| |
| | Set Global Variable | ${dut_stats} | ${True}
| | Set Global Variable | ${packages_dir} | /tmp/openvpp-testing/download_dir/
+| | Set Global Variable | ${nodes}
diff --git a/tests/vpp/device/container_memif/eth2p-ethipv4-ip4base-eth-2memif-1dcr-dev.robot b/tests/vpp/device/container_memif/eth2p-ethipv4-ip4base-eth-2memif-1dcr-dev.robot
index 152f3f6735..4bba327768 100644
--- a/tests/vpp/device/container_memif/eth2p-ethipv4-ip4base-eth-2memif-1dcr-dev.robot
+++ b/tests/vpp/device/container_memif/eth2p-ethipv4-ip4base-eth-2memif-1dcr-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | MEMIF | DOCKER | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing test cases with memif interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing on both links.
@@ -54,16 +54,16 @@
| | ... | [Ver] Make TG send IPv4 packet in both directions between two\
| | ... | of its interfaces to be routed by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/container_memif/eth2p-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev.robot b/tests/vpp/device/container_memif/eth2p-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev.robot
index 77e0b44956..6885b0d093 100644
--- a/tests/vpp/device/container_memif/eth2p-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev.robot
+++ b/tests/vpp/device/container_memif/eth2p-ethipv4-l2bdbasemaclrn-eth-2memif-1dcr-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 bridge-domain test cases with memif interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
@@ -54,16 +54,16 @@
| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/container_memif/eth2p-ethipv4-l2xcbase-eth-2memif-1dcr-dev.robot b/tests/vpp/device/container_memif/eth2p-ethipv4-l2xcbase-eth-2memif-1dcr-dev.robot
index de62812de6..429dd37527 100644
--- a/tests/vpp/device/container_memif/eth2p-ethipv4-l2xcbase-eth-2memif-1dcr-dev.robot
+++ b/tests/vpp/device/container_memif/eth2p-ethipv4-l2xcbase-eth-2memif-1dcr-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2XCFWD | BASE | MEMIF | DOCKER | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 cross-connect test cases with memif interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -53,16 +53,16 @@
| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/container_memif/eth2p-ethipv6-ip6base-eth-2memif-1dcr-dev.robot b/tests/vpp/device/container_memif/eth2p-ethipv6-ip6base-eth-2memif-1dcr-dev.robot
index dd74b2166b..02c488ef59 100644
--- a/tests/vpp/device/container_memif/eth2p-ethipv6-ip6base-eth-2memif-1dcr-dev.robot
+++ b/tests/vpp/device/container_memif/eth2p-ethipv6-ip6base-eth-2memif-1dcr-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | BASE | MEMIF | DOCKER | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing test cases with memif interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on \
@@ -55,16 +55,16 @@
| | ... | [Ver] Make TG send IPv6 packets in both directions between two\
| | ... | of its interfaces to be routed by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/crypto/eth2p-ethip4ipsec1tnlsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot b/tests/vpp/device/crypto/eth2p-ethip4ipsec1tnlsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
index f8be1944ee..1a12aa3a11 100644
--- a/tests/vpp/device/crypto/eth2p-ethip4ipsec1tnlsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
+++ b/tests/vpp/device/crypto/eth2p-ethip4ipsec1tnlsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP4FWD | IPSEC | IPSECSW | IPSECTUN | IP4BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode test suite.*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1 2-node topology with one link\
| ... | between nodes.
| ... | *[Cfg] DUT configuration:* On DUT1 create loopback interface, configure\
@@ -58,20 +58,20 @@
| | ... | [Cfg] On DUT1 configure IPsec manual keyed connection with encryption\
| | ... | algorithm AES_128_CBC and integrity algorithm HMAC_SHA_512 in tunnel\
| | ... | mode.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/crypto/eth2p-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot b/tests/vpp/device/crypto/eth2p-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
index 26f19cb5e5..74fd9398a6 100644
--- a/tests/vpp/device/crypto/eth2p-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
+++ b/tests/vpp/device/crypto/eth2p-ethip4ipsec1tptsw-ip4base-policy-aes-128-cbc-sha-512-256-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP4FWD | IPSEC | IPSECSW | IPSECTPT | IP4BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec transport mode test suite.*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1 2-node topology with one link\
| ... | between nodes.
| ... | *[Cfg] DUT configuration:* On DUT1 create loopback interface, configure\
@@ -58,20 +58,20 @@
| | ... | [Cfg] On DUT1 configure IPsec manual keyed connection with encryption\
| | ... | algorithm AES_128_CBC and integrity algorithm HMAC_SHA_512 in\
| | ... | transport mode.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/crypto/eth2p-ethip6ipsec1tnlsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot b/tests/vpp/device/crypto/eth2p-ethip6ipsec1tnlsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
index 6fe272a5f4..a358d6d478 100644
--- a/tests/vpp/device/crypto/eth2p-ethip6ipsec1tnlsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
+++ b/tests/vpp/device/crypto/eth2p-ethip6ipsec1tnlsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP6FWD | IPSEC | IPSECSW | IPSECTUN | IP6BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv6 IPsec tunnel mode test suite.*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1 2-node topology with one link\
| ... | between nodes.
| ... | *[Cfg] DUT configuration:* On DUT1 create loopback interface, configure
@@ -59,20 +59,20 @@
| | ... | [Cfg] On DUT1 configure IPsec manual keyed connection with encryption\
| | ... | algorithm AES_128_CBC and integrity algorithm HMAC_SHA_512 in tunnel\
| | ... | mode.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/crypto/eth2p-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot b/tests/vpp/device/crypto/eth2p-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
index 342ce95005..76b4e6a7f1 100644
--- a/tests/vpp/device/crypto/eth2p-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
+++ b/tests/vpp/device/crypto/eth2p-ethip6ipsec1tptsw-ip6base-policy-aes-128-cbc-sha-512-256-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP6FWD | IPSEC | IPSECSW | IPSECTPT | IP6BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv6 IPsec transport mode test suite.*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1 2-node topology with one link\
| ... | between nodes.
| ... | *[Cfg] DUT configuration:* On DUT1 create loopback interface, configure
@@ -59,20 +59,20 @@
| | ... | [Cfg] On DUT1 configure IPsec manual keyed connection with encryption\
| | ... | algorithm AES_128_CBC and integrity algorithm HMAC_SHA_512 in\
| | ... | transport mode.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot b/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot
index 30af46ed3b..33ac540982 100644
--- a/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot
+++ b/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot
@@ -13,16 +13,16 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | IP4BASE | 1TAP | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test | namespace
| Test Teardown | Tear down test | packet_trace | namespace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Tap Interface Traffic Tests*
| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
| ... | between nodes.
@@ -58,16 +58,16 @@
| | ... | one is TAP interface (dut_to_tg_if and TAP) and one is linux-TAP.
| | ... | [Ver] Packet sent from TG gets to the destination and ICMP-reply is\
| | ... | received on TG.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-namespace-dev.robot b/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-namespace-dev.robot
index 36fb0e92e5..74f8c3767f 100644
--- a/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-namespace-dev.robot
+++ b/tests/vpp/device/interfaces/eth2p-ethicmpv4-ip4base-eth-1tap-namespace-dev.robot
@@ -13,17 +13,17 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | IP4BASE | 1TAP | NAMESPACE
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test | namespace
| Test Teardown | Tear down test | packet_trace | namespace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Tap Interface Traffic Tests*
| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
| ... | between nodes.
@@ -60,16 +60,16 @@
| | ... | namespace.
| | ... | [Ver] Packet sent from TG gets to the destination and ICMP-reply is\
| | ... | received on TG.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/interfaces/eth2p-ethipv4-l2bdbasemaclrn-eth-2tap-dev.robot b/tests/vpp/device/interfaces/eth2p-ethipv4-l2bdbasemaclrn-eth-2tap-dev.robot
index dd6b15b845..c82fed91d9 100644
--- a/tests/vpp/device/interfaces/eth2p-ethipv4-l2bdbasemaclrn-eth-2tap-dev.robot
+++ b/tests/vpp/device/interfaces/eth2p-ethipv4-l2bdbasemaclrn-eth-2tap-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2BD | BASE | 2TAP | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test | namespace
| Test Teardown | Tear down test | packet_trace | namespace | linux_bridge
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Tap Interface Traffic Tests*
-| ...
+|
| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
| ... | between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of
@@ -51,16 +51,16 @@
| | [Documentation]
| | ... | [Ver] Packet sent from TG is passed through all L2BD and received\
| | ... | back on TG. Then src_ip, dst_ip and MAC are checked.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copblklistbase-dev.robot b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copblklistbase-dev.robot
index 463afe8528..ccfa40764c 100644
--- a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copblklistbase-dev.robot
+++ b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copblklistbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | FEATURE | COPBLKLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *COP Security IPv4 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on all links.
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv4 on its interface to DUT1; \
| | ... | verify received IPv4 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copwhtlistbase-dev.robot b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copwhtlistbase-dev.robot
index 7095bdec62..f9d313d6e9 100644
--- a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copwhtlistbase-dev.robot
+++ b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-copwhtlistbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *COP Security IPv4 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on all links.
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv4 on its interface to DUT1; \
| | ... | verify received IPv4 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-iacldstbase-dev.robot b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-iacldstbase-dev.robot
index cad9436277..e8d79e03d9 100644
--- a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-iacldstbase-dev.robot
+++ b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-iacldstbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on all links.
@@ -48,17 +48,17 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv4 on its interface to DUT1; \
| | ... | verify received IPv4 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-ipolicemarkbase-dev.robot b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-ipolicemarkbase-dev.robot
index 04e3321957..dbc7839808 100644
--- a/tests/vpp/device/ip4/eth2p-ethip4-ip4base-ipolicemarkbase-dev.robot
+++ b/tests/vpp/device/ip4/eth2p-ethip4-ip4base-ipolicemarkbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | FEATURE | POLICE_MARK | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 policer test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on all links.
@@ -50,18 +50,18 @@
| | [Documentation]
| | ... | [Ver] Test packet is sent from TG on the first link to DUT1. \
| | ... | Packet is received on TG on the second link from DUT1.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
| | Set Test Variable | \${cb} | ${frame_size}
| | Set Test Variable | \${eb} | ${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4/eth2p-ethipv4-ip4base-dev.robot b/tests/vpp/device/ip4/eth2p-ethipv4-ip4base-dev.robot
index afdd22b247..fc17834735 100644
--- a/tests/vpp/device/ip4/eth2p-ethipv4-ip4base-dev.robot
+++ b/tests/vpp/device/ip4/eth2p-ethipv4-ip4base-dev.robot
@@ -13,16 +13,16 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | IP4BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing test cases*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv4 packet routed over DUT1 interfaces.\
| | ... | Make TG verify IPv4 packet is correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2bdbasemaclrn-dev.robot b/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2bdbasemaclrn-dev.robot
index 5a3b097fb0..8ee604c54b 100644
--- a/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2bdbasemaclrn-dev.robot
+++ b/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2bdbasemaclrn-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2BD with VXLANoIPv4 test cases*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on\
@@ -50,16 +50,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send VXLAN encapsulated Ethernet frame; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2xcbase-dev.robot b/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2xcbase-dev.robot
index e3fb0c9c07..2b38f22c13 100644
--- a/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2xcbase-dev.robot
+++ b/tests/vpp/device/ip4_tunnels/eth2p-ethip4vxlan-l2xcbase-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | L2XCBASE | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2XC with VXLANoIPv4 test cases*
-| ...
+|
| ... | *[Top] Network topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet encapsulations:* Eth-IPv4-VXLAN-Eth-IPv4-ICMPv4 on\
@@ -49,16 +49,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send VXLAN encapsulated Ethernet frame; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-dev.robot b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-dev.robot
index 2c95bfa9cb..f991627675 100644
--- a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-dev.robot
+++ b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lisp-ip4base-dev.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Variables | resources/test_data/lisp/lisp.py
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP4FWD | LISP_IP4o4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *ip4-lisp-ip4 encapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node\
| ... | circular topology with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv4-ICMPv4\
@@ -52,16 +52,16 @@
| Local Template
| | [Documentation]
| | ... | [Cfg] On DUT1 configure LISP.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-dev.robot b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-dev.robot
index 866e31c17c..a6712ea7e5 100644
--- a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-dev.robot
+++ b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip4base-dev.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Variables | resources/test_data/lisp/lisp.py
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP4FWD | LISPGPE_IP4o4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *ip4-lispgpe-ip4 encapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node\
| ... | circular topology with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISPGPE-IPv4-ICMPv4\
@@ -53,16 +53,16 @@
| Local Template
| | [Documentation]
| | ... | [Cfg] On DUT1 configure LISP.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-dev.robot b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-dev.robot
index 8a556b12bd..85761ef8ba 100644
--- a/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-dev.robot
+++ b/tests/vpp/device/ip4_tunnels/lisp/eth2p-ethip4lispgpe-ip6base-dev.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Variables | resources/test_data/lisp/lisp.py
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP4FWD | LISPGPE_IP6o4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *ip4-lispgpe-ip6 encapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG(if1)-DUT1-TG(if2) 2-node\
| ... | circular topology with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISPGPE-IPv6-ICMPv6\
@@ -54,16 +54,16 @@
| Local Template
| | [Documentation]
| | ... | [Cfg] On DUT1 configure LISPGPE\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copblklistbase-dev.robot b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copblklistbase-dev.robot
index ec7a4b3dd7..4ca94ed266 100644
--- a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copblklistbase-dev.robot
+++ b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copblklistbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | FEATURE | COPBLKLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *COP Security IPv6 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 on all links.
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv6 on its interface to DUT1; \
| | ... | verify received IPv6 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copwhtlistbase-dev.robot b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copwhtlistbase-dev.robot
index 991494de69..02005ea819 100644
--- a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copwhtlistbase-dev.robot
+++ b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-copwhtlistbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *COP Security IPv6 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 on all links.
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv6 on its interface to DUT1; \
| | ... | verify received IPv6 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-iacldstbase-dev.robot b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-iacldstbase-dev.robot
index 649731c172..89338c362c 100644
--- a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-iacldstbase-dev.robot
+++ b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-iacldstbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv6 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 on all links.
@@ -48,17 +48,17 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv6 on its interface to DUT1; \
| | ... | verify received IPv6 pkts are correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-ipolicemarkbase-dev.robot b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-ipolicemarkbase-dev.robot
index dc2e7dbfc2..0ab99571f0 100644
--- a/tests/vpp/device/ip6/eth2p-ethip6-ip6base-ipolicemarkbase-dev.robot
+++ b/tests/vpp/device/ip6/eth2p-ethip6-ip6base-ipolicemarkbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | FEATURE | POLICE_MARK | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 policer test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 on all links.
@@ -50,18 +50,18 @@
| | [Documentation]
| | ... | [Ver] Test packet is sent from TG on the first link to DUT1. \
| | ... | Packet is received on TG on the second link from DUT1.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
| | Set Test Variable | \${cb} | ${frame_size}
| | Set Test Variable | \${eb} | ${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6/eth2p-ethipv6-ip6base-dev.robot b/tests/vpp/device/ip6/eth2p-ethipv6-ip6base-dev.robot
index d1d15b0302..55cb34aae7 100644
--- a/tests/vpp/device/ip6/eth2p-ethipv6-ip6base-dev.robot
+++ b/tests/vpp/device/ip6/eth2p-ethipv6-ip6base-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | BASE | IP6BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on \
@@ -48,16 +48,16 @@
| | [Documentation]
| | ... | [Ver] Make TG send IPv6 packet routed over DUT1 interfaces;\
| | ... | Make TG verify IPv6 packet is correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-dev.robot b/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-dev.robot
index f80338e779..847374cd19 100644
--- a/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-dev.robot
+++ b/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip4base-dev.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Variables | resources/test_data/lisp/lisp.py
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP6FWD | LISPGPE_IP4o6 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *ip6-lispgpe-ip4 encapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular\
| ... | topology with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISPGPE-IPv4-ICMPv4\
@@ -53,16 +53,16 @@
| Local Template
| | [Documentation]
| | ... | [Cfg] On DUT1 configure LISP.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-dev.robot b/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-dev.robot
index b1430d9d6a..ff317cf300 100644
--- a/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-dev.robot
+++ b/tests/vpp/device/ip6_tunnels/lisp/eth2p-ethip6lispgpe-ip6base-dev.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Variables | resources/test_data/lisp/lisp.py
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | IP6FWD | LISPGPE_IP6o6 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *ip6-lispgpe-ip6 encapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node\
| ... | circular topology with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISPGPE-IPv6-ICMPv6\
@@ -53,16 +53,16 @@
| Local Template
| | [Documentation]
| | ... | [Cfg] On DUT1 configure LISP.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/l2bd/eth2p-avf-dot1q-l2bdbasemaclrn-gbp-dev.robot b/tests/vpp/device/l2bd/eth2p-avf-dot1q-l2bdbasemaclrn-gbp-dev.robot
index 9f9da32659..01e2cf89ba 100644
--- a/tests/vpp/device/l2bd/eth2p-avf-dot1q-l2bdbasemaclrn-gbp-dev.robot
+++ b/tests/vpp/device/l2bd/eth2p-avf-dot1q-l2bdbasemaclrn-gbp-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | DOT1Q | L2BDMACLRN | BASE | DRV_AVF | GBP
-| ...
+|
| Suite Setup | Setup suite single link | avf | scapy
| Suite Teardown | Tear down suite
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *L2BD with IEEE 802.1Q and GBP test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4 for L2 switching of IPv4. \
@@ -58,17 +58,17 @@
| | ... | [Ver] Make TG send IPv4 packet in one direction between two\
| | ... | of its interfaces to be switched by DUT to and from docker.\
| | ... | Make TG verify IPv4 packet is correct.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/l2bd/eth2p-avf-dot1qip4-l2bdbasemaclrn-dev.robot b/tests/vpp/device/l2bd/eth2p-avf-dot1qip4-l2bdbasemaclrn-dev.robot
index 5497412e39..aecb50d000 100644
--- a/tests/vpp/device/l2bd/eth2p-avf-dot1qip4-l2bdbasemaclrn-dev.robot
+++ b/tests/vpp/device/l2bd/eth2p-avf-dot1qip4-l2bdbasemaclrn-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | DOT1Q | IP4BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | avf | scapy
| Suite Teardown | Tear down suite
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing. IEEE 802.1Q\
@@ -50,16 +50,16 @@
| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/l2bd/eth2p-ethipv4-l2bdbasemaclrn-dev.robot b/tests/vpp/device/l2bd/eth2p-ethipv4-l2bdbasemaclrn-dev.robot
index afb33db29e..ebad64a539 100644
--- a/tests/vpp/device/l2bd/eth2p-ethipv4-l2bdbasemaclrn-dev.robot
+++ b/tests/vpp/device/l2bd/eth2p-ethipv4-l2bdbasemaclrn-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 bridge-domain test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
@@ -50,16 +50,16 @@
| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/l2xc/eth2p-ethipv4-l2xcbase-dev.robot b/tests/vpp/device/l2xc/eth2p-ethipv4-l2xcbase-dev.robot
index bce1c50c1e..af598e2c6c 100644
--- a/tests/vpp/device/l2xc/eth2p-ethipv4-l2xcbase-dev.robot
+++ b/tests/vpp/device/l2xc/eth2p-ethipv4-l2xcbase-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2XCFWD | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 cross-connect test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology \
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.\
@@ -50,16 +50,16 @@
| | ... | [Ver] Make TG send IPv4 packets in both directions between two\
| | ... | of its interfaces to be switched by DUT to and from docker; verify\
| | ... | all packets are received.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/vm_vhost/ip4/eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev.robot b/tests/vpp/device/vm_vhost/ip4/eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev.robot
index 82bcb8d20b..31df2d06c2 100644
--- a/tests/vpp/device/vm_vhost/ip4/eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev.robot
+++ b/tests/vpp/device/vm_vhost/ip4/eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP4FWD | BASE | VHOST | 1VM | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing test cases with vhost user interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing on both links.
@@ -57,16 +57,16 @@
| | ... | nterfaces. Both interfaces are configured with IP addresses from \
| | ... | the same network. The VM is running VPP IPv4 forwarding to pass \
| | ... | packet from one vhost-user interface to the other one.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/vm_vhost/ip6/eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev.robot b/tests/vpp/device/vm_vhost/ip6/eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev.robot
index bb0fb87c46..f1e3f58ee7 100644
--- a/tests/vpp/device/vm_vhost/ip6/eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev.robot
+++ b/tests/vpp/device/vm_vhost/ip6/eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | IP6FWD | BASE | VHOST | 1VM | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 routing test cases with vhost user interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing on both links.
@@ -57,16 +57,16 @@
| | ... | interfaces. Both interfaces are configured with IP addresses from \
| | ... | the same network. The VM is running VPP IPv6 forwarding to pass \
| | ... | packet from one vhost-user interface to the other one.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/vm_vhost/l2bd/eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev.robot b/tests/vpp/device/vm_vhost/l2bd/eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev.robot
index 0dcacc3396..1d62888dad 100644
--- a/tests/vpp/device/vm_vhost/l2bd/eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev.robot
+++ b/tests/vpp/device/vm_vhost/l2bd/eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2BDMACLRN | BASE | VHOST | 1VM
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 bridge-domain test cases with vhost user interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -59,16 +59,16 @@
| | ... | VM and i/f to TG; configure VPP in VM to loop pkts back betwen its \
| | ... | two virtio i/fs. [Ver] Make TG verify IPv4 packets are switched \
| | ... | thru DUT1 and VM in both directions and are correct on receive.
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/device/vm_vhost/l2xc/eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev.robot b/tests/vpp/device/vm_vhost/l2xc/eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev.robot
index c8ea1c5a7d..dc0d58222a 100644
--- a/tests/vpp/device/vm_vhost/l2xc/eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev.robot
+++ b/tests/vpp/device/vm_vhost/l2xc/eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev.robot
@@ -13,18 +13,18 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | DEVICETEST | HW_ENV | DCR_ENV | SCAPY
| ... | NIC_Virtual | ETH | L2XCFWD | BASE | VHOST | 1VM | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | scapy
| Test Setup | Setup test
| Test Teardown | Tear down test | packet_trace | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *L2 cross-connect test cases with vhost user interface*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with \
| ... | VM and single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -58,16 +58,16 @@
| | ... | TG send IPv4 packets in both directions between two of its \
| | ... | i/fs to be switched by DUT to and from VM; verify all packets \
| | ... | are received. [Ref]
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer. Type: integer
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/func/__init__.robot b/tests/vpp/func/__init__.robot
index c0060ab4a2..aaf7ac01ba 100644
--- a/tests/vpp/func/__init__.robot
+++ b/tests/vpp/func/__init__.robot
@@ -14,13 +14,16 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/shared/interfaces.robot
+|
| Library | resources.libraries.python.SetupFramework
| Library | resources.libraries.python.SetupFramework.CleanupFramework
+|
| Suite Setup | Run Keywords | Setup Functional Global Variables
| ... | AND | Setup Framework | ${nodes}
| ... | AND | Install Vpp On All Duts | ${nodes} | ${VPP_PKG_DIR}
| ... | AND | Verify Vpp On All Duts | ${nodes}
| ... | AND | Update All Interface Data On All Nodes | ${nodes}
+|
| Suite Teardown | Cleanup Framework | ${nodes}
*** Keywords ***
@@ -30,5 +33,5 @@
| | ...
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - vpp_pkg_dir - Path to directory where VPP packages are stored.
-| | ...
+| |
| | Set Global Variable | ${VPP_PKG_DIR} | /scratch/vpp/
diff --git a/tests/vpp/func/l2xc/eth2p-dot1ad-l2xcbase-func.robot b/tests/vpp/func/l2xc/eth2p-dot1ad-l2xcbase-func.robot
index e3f0571047..3492d84029 100644
--- a/tests/vpp/func/l2xc/eth2p-dot1ad-l2xcbase-func.robot
+++ b/tests/vpp/func/l2xc/eth2p-dot1ad-l2xcbase-func.robot
@@ -21,7 +21,7 @@
| Test Setup | Set up functional test
| Test Teardown | Tear down functional test
| Documentation | *L2 cross-connect with QinQ test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet encapsulations:* Eth-dot1ad-IPv4-ICMPv4 on DUT1-DUT2,
diff --git a/tests/vpp/perf/__init__.robot b/tests/vpp/perf/__init__.robot
index a54249bf1a..90afe801cd 100644
--- a/tests/vpp/perf/__init__.robot
+++ b/tests/vpp/perf/__init__.robot
@@ -14,10 +14,11 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/shared/interfaces.robot
+|
| Library | resources.libraries.python.SetupFramework
| Library | resources.libraries.python.SetupFramework.CleanupFramework
| Library | resources.libraries.python.CpuUtils
-| ...
+|
| Suite Setup | Run Keywords | Setup Global Variables
| ... | AND | Setup Framework | ${nodes}
| ... | AND | Setup Corekeeper on All Nodes | ${nodes}
@@ -28,17 +29,18 @@
| ... | AND | Get CPU Info from All Nodes | ${nodes}
| ... | AND | Update All Interface Data on All Nodes | ${nodes}
| ... | skip_tg=${True} | numa_node=${True}
-| ...
+|
| Suite Teardown | Cleanup Framework | ${nodes}
*** Keywords ***
| Setup Global Variables
| | [Documentation]
| | ... | Setup suite Variables. Variables are used across performance testing.
-| | ...
+| |
| | ... | _NOTE:_ This KW sets following suite variables:
| | ... | - dut_stats - Switch to enable DUT statistics.
| | ... | - packages_dir - Directory with VPP binary packages.
-| | ...
+| |
| | Set Global Variable | ${dut_stats} | ${True}
| | Set Global Variable | ${packages_dir} | /tmp/openvpp-testing/download_dir/
+| | Set Global Variable | ${nodes}
diff --git a/tests/vpp/perf/container_memif/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
index 3d5688818f..dd0f3756a8 100644
--- a/tests/vpp/perf/container_memif/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with memif and IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain. IEEE\
@@ -74,17 +74,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr.robot b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr.robot
index 37a8d09d22..dc3c36db32 100644
--- a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | LXC
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -66,17 +66,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
index 9df8533ee9..e5e98db4f3 100644
--- a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect.
@@ -66,17 +66,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr.robot b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr.robot
index 91cfaeb2ff..eac83e7d51 100644
--- a/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/10ge2p1x710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | MEMIF | LXC
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect.
@@ -65,17 +65,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
index 0e480ba091..32e8e3f28e 100644
--- a/tests/vpp/perf/container_memif/10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | MEMIF | DOCKER | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -65,17 +65,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
index 9eb3ca9c3a..45374331b3 100644
--- a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with memif and IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain. IEEE\
@@ -74,17 +74,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
index 8e1cf61df0..ea8383afc8 100644
--- a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -66,17 +66,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
index b21005bd2e..f20a51e700 100644
--- a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect.
@@ -66,17 +66,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
index d14b96b65b..739a8c1322 100644
--- a/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
+++ b/tests/vpp/perf/container_memif/2n1l-10ge2p1x710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | MEMIF | DOCKER
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -66,17 +66,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/container_memif/regenerate_testcases.py b/tests/vpp/perf/container_memif/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/container_memif/regenerate_testcases.py
+++ b/tests/vpp/perf/container_memif/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 0b9905ee53..985f688655 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_10000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index db287f994c..c0b8ee4a47 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_10000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 025e4ecd89..beef4139cb 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_10000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index 0fafd5a628..c2459b9ef0 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_10000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 600042e354..30251cc435 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | TNL_1000
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index f65e8d08fc..e18c325312 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | TNL_1000
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
index a459bfb14d..47403f9cbf 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | TNL_1000
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
index 8cc1c31e78..a57ee926d7 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | TNL_1000
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
index 9fd44a21e1..b860b8f606 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | TNL_1000
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -78,21 +78,21 @@
| | ... | in each direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
index 1885ff86fb..234921609c 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | TNL_1000
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -78,21 +78,21 @@
| | ... | in each direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
index 25290a89a9..2cdfea80bf 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | TNL_1000
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUTs run 1000 IPsec tunnels AES_128_GCM in each direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
index 077597cb41..c099728ba5 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | TNL_1000
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUTs run 1000 IPsec tunnels AES_256_GCM in each direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 137d08df7c..1f562620dd 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 590ed6be68..edba65444a 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 1496acb3b5..eba73505bb 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index dca71657d9..42379db22f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
index 965ad220aa..8392a75700 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,7 +77,7 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
@@ -86,15 +86,15 @@
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
| | ... | - min_rate - Min rate for binary search, default value: ${50000}.
| | ... | Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
index 6dc3ee89ba..38d9bb9928 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,7 +77,7 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
@@ -86,15 +86,15 @@
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
| | ... | - min_rate - Min rate for binary search, default value: ${50000}.
| | ... | Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
index 6085062f67..124064e4bc 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,7 +77,7 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
@@ -86,16 +86,16 @@
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
| | ... | - min_rate - Min rate for binary search, default value: ${50000}.
| | ... | Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
index 1bf48469fd..2d1cf8fe4a 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,7 +77,7 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
@@ -86,16 +86,16 @@
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
| | ... | - min_rate - Min rate for binary search, default value: ${50000}.
| | ... | Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 4c3c945cf3..0eea4e5395 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 3e1d3fa21e..dcc8c8776a 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
index 51446ca1da..1b04bae1b4 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
index ab16567408..d015fb13fb 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
index 532d516fbd..338378e30a 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
-| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE |
+| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
index 414dce44b0..d5b5ce6e37 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
-| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE |
+| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
index aac023c408..036ee4b4b2 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUTs run 1 IPsec tunnel AES_128_GCM in each direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
index e697d3187e..dbdabbd67b 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlhw-ip4base-policy-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECHW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance | ipsechw
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUTs run 1 IPsec tunnel AES_256_GCM in each direction.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 3586b7a4c0..a3a9073059 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 6c6c4215d3..97bf87225e 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 018991dfc1..f09a60c27f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg} = | Crypto Alg AES GCM 128
| | ${auth_alg} = | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index b13328add0..150608186c 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | BASE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.\
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg} = | Crypto Alg AES GCM 256
| | ${auth_alg} = | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
index 3a0b964ee5..ac016a5fa8 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
index c431a137ba..283bcced6e 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
index 75650dbd33..2220d99738 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
index 7ce41364c0..b707b8049b 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
| ... | IP4FWD | IPSEC | IPSECSW | IPSECTUN | NIC_Intel-X710 | BASE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec tunnel mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto}= | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 12d1bda7a4..1d2315172e 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_20000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index fd09efdd20..57d967c794 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_20000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 71180cfee0..5fcd0cc5c2 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_20000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index d91ea1983a..5a5a075d97 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_20000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index b8bec7dfea..5843cd4a97 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 06a69f111a..bb1e40f92f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 2b23460c06..cca416cc2f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index 37340785f1..0ee4d50b6f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 15e8a2a926..22be557fd1 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_400
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index a7223eb141..51a38bb393 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_400
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 1e6c442f76..03ccb168eb 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_400
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index 055541ce9a..edc984c432 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_400
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 31be8facdc..6dae7180a2 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 8501b7787a..bed363c917 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 29a4db5b22..5993efa4f0 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index aead875a13..8d603de524 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_40
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index a232781e29..02c1dee247 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 629766182e..ab09045745 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index c3e46c74a7..dffdbc6a8e 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index 4b58e4d06e..e94c5510e0 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index f000e78e3f..474305efbe 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_5000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 3b42be5715..c49ae15536 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_5000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 85f9a667db..2b3bf2982b 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_5000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index b671996041..3cc75b8d18 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec5000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_5000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
index 2106d70520..f9d34ce66f 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_60000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
index 9ae28050fa..8c30b7edac 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_60000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,21 +77,21 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 512 256
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
index 134fd14cb7..256984fb61 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes128gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_60000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_128_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 128
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
index aac71a0066..d8aa37bdc5 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec60000tnlsw-ip4base-int-aes256gcm-ndrpdr.robot
@@ -14,20 +14,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_60000
| ... | IP4FWD | IPSEC | IPSECSW | IPSECINT | NIC_Intel-X710 | SCALE
| ... | AES_256_GCM | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
@@ -77,22 +77,22 @@
| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES GCM 256
| | ${auth_alg}= | Set Variable | ${NONE}
| | ${ipsec_proto} = | IPsec Proto ESP
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr.robot
index 5b2431b28c..412fc65db3 100644
--- a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr.robot
+++ b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr.robot
@@ -15,21 +15,21 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/crypto/ipsec.robot
| Resource | resources/libraries/robot/overlay/lispgpe.robot
-| ...
+|
| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | IP4FWD
| ... | LISPGPE | IPSEC | IPSECHW | IPSECTRAN | ENCAP | IP4UNRLAY | IP4OVRLAY
| ... | NIC_Intel-X710 | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *IPv4 IPsec transport mode performance test suite.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,\
@@ -80,21 +80,21 @@
| | ... | IPsec is in transport mode.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | # These are enums (not strings) so they cannot be in Variables table.
| | ${encr_alg}= | Crypto Alg AES CBC 128
| | ${auth_alg}= | Integ Alg SHA 256 128
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/crypto/regenerate_testcases.py b/tests/vpp/perf/crypto/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/crypto/regenerate_testcases.py
+++ b/tests/vpp/perf/crypto/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
index 458d803f17..c0b556695e 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | DOT1Q | IP4BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing with IEEE 802.1Q test\
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv4 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-avf-eth-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-avf-eth-ip4base-ndrpdr.robot
index 1c674be08c..48f2b8adc6 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-avf-eth-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-avf-eth-ip4base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | IP4BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
index 8e390b1e67..0511ab67a1 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_200K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
index 69c057a857..0101233574 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_20K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
index 0b8e1b3ab1..678e6f5b8a 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_2M | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-dot1q-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-dot1q-ip4base-ndrpdr.robot
index ac57e127e2..2f2dff987a 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-dot1q-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-dot1q-ip4base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | DOT1Q | IP4BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing with IEEE 802.1Q test\
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv4 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
index 23c2c7aa29..80337bc2b7 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config. \
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
index 2bbbf3a8ea..16e3f17ffa 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
index 6f8cd34d10..5a3f25534b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Library | resources.libraries.python.Policer
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP4FWD | FEATURE | POLICE_MARK | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 policer test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -65,19 +65,19 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
| | Set Test Variable | \${cb} | ${frame_size}
| | Set Test Variable | \${eb} | ${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ndrpdr.robot
index d73f1229f0..d2060f8d18 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | IP4BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -56,22 +56,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
index 0ad036d756..2908d7e478 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_200K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
index e44536ea2e..ec897f393b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_20K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
index 1b4f86e821..2c23b601d1 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_2M | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100flows-ndrpdr.robot
index d9ef17a436..17261aa9e4 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100kflows-ndrpdr.robot
index 22f3013603..62b42d3b97 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-10kflows-ndrpdr.robot
index 59958af3fc..1617ba43b1 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100flows-ndrpdr.robot
index 528c3dd496..cb42ec157b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100kflows-ndrpdr.robot
index d1a34589da..72b637bb3b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-10kflows-ndrpdr.robot
index 47364ad625..09681e5bf4 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl10sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100flows-ndrpdr.robot
index 5e9eef1c5e..2561492c23 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100kflows-ndrpdr.robot
index 1a0b3c431b..ec0b050047 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
index b56d5fced3..e5ef16f43c 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -73,22 +73,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100flows-ndrpdr.robot
index 014d631512..ee3f32a2d1 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100kflows-ndrpdr.robot
index 7c7d7cfd79..190e722947 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
index 86bb72223c..3a6c2c518c 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -73,22 +73,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100flows-ndrpdr.robot
index b59a578cad..44d4d8ae0a 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100kflows-ndrpdr.robot
index dc14b9b4f7..44ef22f385 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
index 652689d89c..64a1b84ab8 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -73,22 +73,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100flows-ndrpdr.robot
index 934b6453d3..f186545e2d 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100kflows-ndrpdr.robot
index 913df5142b..cf322c4b5e 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
index f366f7e140..20f6b9b20d 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -73,22 +73,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
index 61a9b2d4e7..a507e072f0 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
@@ -15,19 +15,19 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/ip/nat.robot
| Resource | resources/libraries/robot/shared/traffic.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -58,22 +58,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100flows-ndrpdr.robot
index ecc31963dd..c3fe1a2a8b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100kflows-ndrpdr.robot
index 807358f270..8a55983932 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-10kflows-ndrpdr.robot
index 85d286dd45..0c61d19959 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100flows-ndrpdr.robot
index 06198e943c..3ba40ef45b 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100kflows-ndrpdr.robot
index deeafc9500..8ce8a2fe74 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-10kflows-ndrpdr.robot
index acd7c8778d..938e4fa41f 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl10sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100flows-ndrpdr.robot
index 9e36cc0306..c72dc2377c 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100kflows-ndrpdr.robot
index a36cd5c295..09a5e41bfd 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-10kflows-ndrpdr.robot
index 88b94d219e..8b4a46b24e 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100flows-ndrpdr.robot
index f125e82ced..2767a6bfec 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100kflows-ndrpdr.robot
index 02dffe36bb..6f09e7b984 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-10kflows-ndrpdr.robot
index ea8c079296..14fd887576 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100flows-ndrpdr.robot
index 0484f1cf9d..ea8fd07162 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100kflows-ndrpdr.robot
index c9aba09d8a..cb94e94f54 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
index 43fd243a88..fecb6057ef 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100flows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100flows-ndrpdr.robot
index 1048118144..77f053bfd3 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100kflows-ndrpdr.robot
index 997b680c0e..6247bdbbde 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
index 854dbac89f..35cc7dc9bc 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 10K_FLOWS
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-udpsrcscale15-nat44-ndrpdr.robot
index 6231328d25..45e2ba4eac 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4base-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | BASE | SRC_USER_1
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale10-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale10-udpsrcscale15-nat44-ndrpdr.robot
index c3bcb033e6..a12047c653 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale10-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale10-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | SRC_USER_10
| ... | SCALE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale100-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale100-udpsrcscale15-nat44-ndrpdr.robot
index d0fa9e3a3e..e5c6666a99 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale100-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale100-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | SRC_USER_100
| ... | SCALE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale1000-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale1000-udpsrcscale15-nat44-ndrpdr.robot
index 96a1e78946..42da85c767 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale1000-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale1000-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | SRC_USER_1000
| ... | SCALE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
-| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
+| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale2000-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale2000-udpsrcscale15-nat44-ndrpdr.robot
index e54597ab71..6d9f40b146 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale2000-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale2000-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | SRC_USER_2000
| ... | SCALE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale4000-udpsrcscale15-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale4000-udpsrcscale15-nat44-ndrpdr.robot
index 5f088c9af6..5c6907da4a 100644
--- a/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale4000-udpsrcscale15-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/10ge2p1x710-ethip4udp-ip4scale4000-udpsrcscale15-nat44-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | SRC_USER_4000
| ... | SCALE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | nat
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
index e9bde213c9..e2ad619828 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-dot1q-ip4base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | DOT1Q | IP4BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing with IEEE 802.1Q test\
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv4 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr.robot
index cee94c2ff4..887b97575d 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | IP4BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
index e1f374d6c7..20853f6007 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_200k | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
index 0423a28ee3..a05667d94f 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_20k | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
index 918e1d85a4..3ef32d8943 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_2M | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -57,22 +57,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr.robot
index d4a6342eb5..dac7022470 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | DOT1Q | IP4BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing with IEEE 802.1Q test\
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing. IEEE 802.1Q\
@@ -67,17 +67,17 @@
| | ... | [Cfg] Each DUT runs IPv4 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
index 0b280537dd..dad78b9a69 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-copwhtlistbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config. \
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
index ec6f6d24f6..4cc07810c1 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-iacldstbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
index 9e40dac35d..eb5ee56cc7 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ipolicemarkbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP4FWD | FEATURE | POLICE_MARK | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 policer test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -63,19 +63,19 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
| | Set Test Variable | \${cb} | ${frame_size}
| | Set Test Variable | \${eb} | ${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr.robot
index 6e27f03738..87035c2f8f 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | IP4BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
index eb2303fe22..4cd357e0c3 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_200k | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -56,22 +56,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
index 791c0e0993..64dd312e5c 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_20k | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -56,22 +56,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
index e0ade7e83a..26d897fbe5 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | SCALE | FIB_2M | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -56,22 +56,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
index 379dedc38a..36153888cd 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
index 2044275651..67173d1830 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
index baddcd098c..bcb370b839 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
index 1405611e6e..43552c2012 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
index 9bc1e5444e..9a2a186a55 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-nat44-ndrpdr.robot
@@ -15,19 +15,19 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/ip/nat.robot
| Resource | resources/libraries/robot/shared/traffic.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | NAT44 | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput NAT44 performance test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -58,22 +58,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
index 9f600e3d55..e557ab16d6 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
index 95537602a3..d406ca37e5 100644
--- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput IPv4 test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for IPv4 routing.
@@ -72,22 +72,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4/regenerate_testcases.py b/tests/vpp/perf/ip4/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/ip4/regenerate_testcases.py
+++ b/tests/vpp/perf/ip4/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr.robot
index 65da751111..9cf967861a 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | SCALE | L2BD_100 | DOT1Q | VLAN_100
| ... | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY | VXLAN_100 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q and VXLANoIPv4
| ... | test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-Dot1Q-IPv4 for L2 switching of IPv4\
@@ -61,22 +61,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] Each DUT runs L2BD forwarding config with VLAN and VXLAN and\
| | ... | uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale10l2bd10vlan10vxlan-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale10l2bd10vlan10vxlan-ndrpdr.robot
index 7aa4fffa62..e978c23346 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale10l2bd10vlan10vxlan-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale10l2bd10vlan10vxlan-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | SCALE | L2BD_10 | DOT1Q | VLAN_10
| ... | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY | VXLAN_10 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q and VXLANoIPv4
| ... | test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-Dot1Q-IPv4 for L2 switching of IPv4\
@@ -61,22 +61,22 @@
*** Keywords ***
| Local Template
-| | ...
+| |
| | [Documentation]
| | ... | [Cfg] Each DUT runs L2BD forwarding config with VLAN and VXLAN and\
| | ... | uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1kl2bd1kvlan1kvxlan-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1kl2bd1kvlan1kvxlan-ndrpdr.robot
index 8fcca4adb3..05803d06ca 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1kl2bd1kvlan1kvxlan-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1kl2bd1kvlan1kvxlan-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | SCALE | L2BD_1K | DOT1Q | VLAN_1K
| ... | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY | VXLAN_1K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q and VXLANoIPv4
| ... | test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-Dot1Q-IPv4 for L2 switching of IPv4\
@@ -65,17 +65,17 @@
| | ... | [Cfg] Each DUT runs L2BD forwarding config with VLAN and VXLAN and\
| | ... | uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr.robot
index 5a5d8b8aef..11d6971513 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | SCALE | L2BD_1 | DOT1Q | VLAN_1
| ... | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY | VXLAN_1 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q and VXLANoIPv4
| ... | test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-Dot1Q-IPv4 for L2 switching of IPv4\
@@ -65,17 +65,17 @@
| | ... | [Cfg] Each DUT runs L2BD forwarding config with VLAN and VXLAN and\
| | ... | uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip4-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip4-ip4base-ndrpdr.robot
index 4cc274513c..c0e7fd5305 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip4-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip4-ip4base-ndrpdr.robot
@@ -15,20 +15,20 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP4FWD | ENCAP | LISP | IP4UNRLAY | IP4OVRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput Lisp test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv4 on DUT1-DUT2,\
@@ -65,17 +65,17 @@
| | ... | config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip6-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip6-ip4base-ndrpdr.robot
index b93774ab04..1dd5604552 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip6-ip4base-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4lispip6-ip4base-ndrpdr.robot
@@ -15,20 +15,20 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP4FWD | ENCAP | LISP | IP6UNRLAY | IP4OVRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput Lisp test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-LISP-IPv6 on DUT1-DUT2,\
@@ -65,17 +65,17 @@
| | ... | config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-ndrpdr.robot
index 59956e4893..5e82620324 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with VXLANoIPv4 test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4 on\
@@ -62,17 +62,17 @@
| | ... | [Cfg] Each DUT runs L2BD forwarding config with VXLAN and uses\
| | ... | ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2xcbase-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2xcbase-ndrpdr.robot
index cd9ff7ef51..3327fc1895 100644
--- a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4vxlan-l2xcbase-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2XCFWD | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC with VXLANoIPv4 test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross-connect on TG-DUTn.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs L2XC forwarding config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip4_tunnels/regenerate_testcases.py b/tests/vpp/perf/ip4_tunnels/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/ip4_tunnels/regenerate_testcases.py
+++ b/tests/vpp/perf/ip4_tunnels/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
index be0e3a4db6..d738c756d8 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | DOT1Q | IP6BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing with IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv6 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
index bd64f3066e..1b5a343f36 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | IP6BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
index ad4239144e..5ac49991aa 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_200K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
index d237362ea7..5b5c7a992b 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_20K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
index f815e43558..6a6d552e6e 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_2M | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-dot1q-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-dot1q-ip6base-ndrpdr.robot
index 7e7bd45d22..5537d07f70 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-dot1q-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-dot1q-ip6base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | DOT1Q | IP6BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing with IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv6 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
index 3b18d1b53b..bca3ec8007 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Library | resources.libraries.python.Cop
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -63,17 +63,17 @@
| | ... | [Cfg] DUT runs IPv6 routing and whitelist filters config with
| | ... | ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
index ab0963b34a..892be0f445 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv6 routing and whitelist filters config with
| | ... | ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-ndrpdr.robot
index 5e0a0315b8..873a17e175 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | IP6BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
index f5ee66f7eb..8a87830876 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_200K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
index 1e62c9a169..fd9cb9616a 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_20K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
index d5a1235fa7..fe747dcb41 100644
--- a/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_2M | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
index b2b29b5dcd..28c951edf0 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-dot1q-ip6base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | DOT1Q | IP6BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing with IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing. IEEE 802.1Q\
@@ -68,17 +68,17 @@
| | ... | [Cfg] Each DUT runs IPv6 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
index acaba9913a..8c93ec8c12 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | IP6BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
index 10d5defe7a..232ebb9d2d 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_200K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
index 664b4b1df4..fcb5def20d 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_20K | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
index b67ac97f27..4e25b82467 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-avf-ethip6-ip6scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_2M | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -62,17 +62,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-dot1q-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-dot1q-ip6base-ndrpdr.robot
index 73f046752d..99db53398d 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-dot1q-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-dot1q-ip6base-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | DOT1Q | IP6BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing with IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing. IEEE 802.1Q\
@@ -67,17 +67,17 @@
| | ... | [Cfg] Each DUT runs IPv6 routing with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
index 7cd93149df..f250e80494 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-copwhtlistbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Library | resources.libraries.python.Cop
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | COPWHLIST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -63,17 +63,17 @@
| | ... | [Cfg] DUT runs IPv6 routing and whitelist filters config with
| | ... | ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
index 3bed647eb0..813e65ce71 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-iacldstbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | IACLDST | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | classify
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 iAcl whitelist test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv6 routing and whitelist filters config with
| | ... | ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr.robot
index 7b779e13b6..13294e8bea 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | BASE | IP6BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
index 728b39c8ad..3be5e77185 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale200k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_200K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
index 72aad63da9..772e77cf75 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale20k-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_20K | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
index 11965d990d..5eafd19922 100644
--- a/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
+++ b/tests/vpp/perf/ip6/2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | SCALE | FIB_2M | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv6 routing test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6 for IPv6 routing.
@@ -61,17 +61,17 @@
| | ... | [Cfg] DUT runs IPv6 routing config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6/regenerate_testcases.py b/tests/vpp/perf/ip6/regenerate_testcases.py
index 5e32e97fce..b3048a23fc 100755
--- a/tests/vpp/perf/ip6/regenerate_testcases.py
+++ b/tests/vpp/perf/ip6/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot", protocol="ip6")
+Regenerator().regenerate_glob(u"*.robot", protocol=u"ip6")
diff --git a/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip4-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip4-ip6base-ndrpdr.robot
index 576fa0ee3d..1c16c4a1b2 100644
--- a/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip4-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip4-ip6base-ndrpdr.robot
@@ -15,20 +15,20 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP6FWD | ENCAP | LISP | IP4UNRLAY | IP6OVRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC6830: Pkt throughput Lisp test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.\
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv4 on DUT1-DUT2,\
@@ -60,17 +60,17 @@
| | ... | filters config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.\
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Frame size in Bytes as integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip6-ip6base-ndrpdr.robot b/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip6-ip6base-ndrpdr.robot
index fe409f666f..82e6e0949c 100644
--- a/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip6-ip6base-ndrpdr.robot
+++ b/tests/vpp/perf/ip6_tunnels/10ge2p1x710-ethip6lispip6-ip6base-ndrpdr.robot
@@ -15,20 +15,20 @@
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | IP6FWD | ENCAP | LISP | IP6UNRLAY | IP6OVRLAY
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC6830: Pkt throughput Lisp test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.\
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv6 on DUT1-DUT2,\
@@ -60,17 +60,17 @@
| | ... | filters config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.\
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Frame size in Bytes as integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/ip6_tunnels/regenerate_testcases.py b/tests/vpp/perf/ip6_tunnels/regenerate_testcases.py
index 5e32e97fce..b3048a23fc 100755
--- a/tests/vpp/perf/ip6_tunnels/regenerate_testcases.py
+++ b/tests/vpp/perf/ip6_tunnels/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot", protocol="ip6")
+Regenerator().regenerate_glob(u"*.robot", protocol=u"ip6")
diff --git a/tests/vpp/perf/l2/10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
index 78ec2bf124..ca22b3c772 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | BASE | DOT1Q | L2BDMACLRN | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -67,17 +67,17 @@
| | ... | [Cfg] Each DUT runs L2BD config with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
index f1cf436b8a..ebd237d78a 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge-domain.
@@ -60,17 +60,17 @@
| | [Documentation]
| | ... | [Cfg] DUT runs L2BD config with ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2patch-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
index 30a6b5dfeb..a6823dd447 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2PATCH | BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2patch test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 patch.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs L2 patch config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
index 4302987c8a..110a26fb77 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | L2XCBASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross-connect.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs L2XC config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-dot1ad-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-dot1ad-l2xcbase-ndrpdr.robot
index a004ad4f37..66869e0f5f 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-dot1ad-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-dot1ad-l2xcbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/l2/tagging.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2XCFWD | BASE | DOT1AD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC with 802.1ad test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 xconnect.
@@ -55,8 +55,8 @@
| ${osi_layer}= | L2
| ${overhead}= | ${8}
| ${subid}= | 10
-| ${outer_vlan_id}= | 100
-| ${inner_vlan_id}= | 200
+| ${outer_vlan_id}= |
+| ${inner_vlan_id}= |
| ${type_subif}= | two_tags
| ${tag_rewrite}= | pop-2
# Traffic profile:
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2XC forwarding config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
index 563dd9d29c..d85e715a86 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | BASE | DOT1Q | L2BDMACLRN | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -67,17 +67,17 @@
| | ... | [Cfg] Each DUT runs L2BD config with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
index 3b65ac9388..bc387a3aca 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/l2/tagging.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2XCFWD | BASE | DOT1Q | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. IEEE\
@@ -64,17 +64,17 @@
| | ... | [Cfg] Each DUT runs L2XC config with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100flows-ndrpdr.robot
index 9f855494c2..12aefe5bb8 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100kflows-ndrpdr.robot
index b09765e5d6..9cac5a457c 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-10kflows-ndrpdr.robot
index b92cf9bee3..7ec0b681ff 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100flows-ndrpdr.robot
index 7fcfbf862b..9b328b194b 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100kflows-ndrpdr.robot
index 0b0eaa8189..a8c3e0c8e9 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-10kflows-ndrpdr.robot
index f8f436b4db..5a17ff8a08 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl10sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100flows-ndrpdr.robot
index 13c1ad170b..4f2967e55d 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100kflows-ndrpdr.robot
index 9ddf5bd851..d8a2fe2231 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-10kflows-ndrpdr.robot
index 448bdc4002..cee263a769 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2BD config with ACLs with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100flows-ndrpdr.robot
index 3d373ba03a..c212c5aa45 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100kflows-ndrpdr.robot
index e6d4fe0f64..4eac5cb6ec 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-10kflows-ndrpdr.robot
index b214e56711..9358272861 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2BD config with ACLs with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100flows-ndrpdr.robot
index 52b35ac717..b79ba2691f 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100kflows-ndrpdr.robot
index 8f6bbb6061..e27dec15df 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr.robot
index 5bc8ae7608..95e90b836f 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2BD config with ACLs with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100flows-ndrpdr.robot
index ad7c1f7694..b0cbc68cd1 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100kflows-ndrpdr.robot
index 3c00890a5a..2da9a3ecd2 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr.robot
index 34a6f58ec4..7b7db20982 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2BD config with ACLs with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100flows-ndrpdr.robot
index 19524e982b..32f7f1985f 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -79,17 +79,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100kflows-ndrpdr.robot
index e79f835880..4240438e66 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -79,17 +79,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-10kflows-ndrpdr.robot
index 7e471fa86d..7b1f5a1a48 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl10sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -79,17 +79,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-ndrpdr.robot
index 4e74b54940..aa5e51611b 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100kflows-ndrpdr.robot
index 4e54487061..61accfe000 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-10kflows-ndrpdr.robot
index 3634cb7bf8..1f8e966c92 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100flows-ndrpdr.robot
index a71a465799..f13c30ad0b 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100kflows-ndrpdr.robot
index 6c502d6c05..c5a03ab75d 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr.robot
index dc14784d1a..41c5ffece2 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | MACIP | ACL_STATELESS
| ... | IACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | macipacl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
index 019979416f..5408acb92d 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | L2BDBASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -59,17 +59,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching config and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100flows-ndrpdr.robot
index 93e9f4c8fa..bd4a1c3544 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100kflows-ndrpdr.robot
index f2b73c51c2..f9e67807b6 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-10kflows-ndrpdr.robot
index c2beb2b79b..6658e3d228 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100flows-ndrpdr.robot
index c666a6cfd5..6fd55b2e6e 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100kflows-ndrpdr.robot
index cb638073af..5c2364e220 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-10kflows-ndrpdr.robot
index 26244a440e..05ffb3ac18 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl10sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL10 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100flows-ndrpdr.robot
index 9155f7ea2c..b558bc9148 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100kflows-ndrpdr.robot
index 0a2aba2e6f..fe56aa549d 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-10kflows-ndrpdr.robot
index a800db734e..1ce7a47ab6 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100flows-ndrpdr.robot
index 431a0c5601..3df6b7446e 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100kflows-ndrpdr.robot
index 040611fa9a..989d0a1ce7 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-10kflows-ndrpdr.robot
index fcb240eca5..46cd303c29 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl1sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL1 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100flows-ndrpdr.robot
index 17e08f0604..6aa6e8044d 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100kflows-ndrpdr.robot
index 1040a43177..1c01bb298b 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr.robot
index d4d34b57b0..0395dc7290 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATEFUL
| ... | OACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100flows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100flows-ndrpdr.robot
index 89f62c67cb..9ca8f6362e 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100flows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100flows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 100_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100kflows-ndrpdr.robot
index e7c2633d24..bd9b4acacb 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-100kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 100K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr.robot
index c52054c2ce..6f584e8959 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | FEATURE | ACL | ACL_STATELESS
| ... | OACL | ACL50 | 10K_FLOWS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | acl
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with ACL*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for L2 switching of IPv4.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
index 361cddfbe2..f2fc7c89a6 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_100K
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [CFG] Each DUT runs L2BD switching config and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
index eccbdb45e0..869e164a5e 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_10K
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [CFG] Each DUT runs L2BD switching config and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
index 2ca32e1c36..629abb7bee 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_1M
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching config and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2patch-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2patch-ndrpdr.robot
index 75bc40fa90..a70b8d4ca5 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2patch-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2patch-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2PATCH | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
-| Documentation | *RFC2544: Pkt throughput L2patch test cases*
-| ...
+|
+| Documentation | *RFC2544: Pkt throughput L2patch test cases*
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 patch.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2 patch config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/10ge2p1x710-eth-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/10ge2p1x710-eth-l2xcbase-ndrpdr.robot
index 83b252b2e3..7870268701 100644
--- a/tests/vpp/perf/l2/10ge2p1x710-eth-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/10ge2p1x710-eth-l2xcbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | L2XCBASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2XC config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr.robot
index 3f406fb668..698d0a2284 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | DRV_AVF | GBP
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q and GBP test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4 for L2 switching of IPv4. \
@@ -70,17 +70,17 @@
| | ... | [Cfg] DUT runs L2BD with VLAN and GBP config with ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
index 93f993838c..fd9cef2f39 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4 for L2 switching of IPv4.\
@@ -63,17 +63,17 @@
| | ... | [Cfg] DUT runs L2BD with VLAN with ${phy_cores} physical core(s) for\
| | ... | worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
index 3c591634f6..e2d26b7822 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge-domain.
@@ -60,17 +60,17 @@
| | [Documentation]
| | ... | [Cfg] DUT runs L2BD config with ${phy_cores} phy core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2patch-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
index e48b920277..e1723c55c9 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2patch-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2PATCH | BASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2patch test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 patch.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs L2 patch config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
index 87f80dca50..6296d6d147 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | L2XCBASE | DRV_AVF
-| ...
+|
| Suite Setup | Setup suite single link | performance_avf
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross-connect.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2XC config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
index 14d1aeb5e0..bfbf7834d8 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | BASE | DOT1Q | L2BDMACLRN | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4 for L2 switching of IPv4.\
@@ -63,17 +63,17 @@
| | ... | [Cfg] DUT runs L2BD with VLAN with ${phy_cores} physical core(s) for\
| | ... | worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
index 9cc1f19105..58a362f909 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-dot1q-l2xcbase-ndrpdr.robot
@@ -14,19 +14,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/l2/tagging.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2XCFWD | BASE | DOT1Q | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC with IEEE 802.1Q test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. IEEE\
@@ -64,17 +64,17 @@
| | ... | [Cfg] Each DUT runs L2XC config with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
index 5ec047b8c3..016e17f0e7 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | L2BDBASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2BD switching config and uses ${phy_cores} physical\
| | ... | core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
index 9f0ae4755f..b26c0becab 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale100kmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_100k
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [Cfg] DUT runs L2BD switching config and uses ${phy_cores} physical\
| | ... | core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
index 662594de96..90616e4ba2 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale10kmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_10k
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [Cfg] DUT runs L2BD switching config and uses ${phy_cores} physical\
| | ... | core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
index 5ccb0b0eb1..b28f566ba4 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_1M
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -64,17 +64,17 @@
| | ... | [Cfg] DUT runs L2BD switching config and uses ${phy_cores} physical\
| | ... | core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2patch-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2patch-ndrpdr.robot
index fe83f0ff9b..19663c6dd0 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2patch-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2patch-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2PATCH | BASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2patch test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 patch.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2 patch config with ${phy_cores} phy
| | ... | core(s).
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2xcbase-ndrpdr.robot b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2xcbase-ndrpdr.robot
index 44e0d70bc5..89c6b5276e 100644
--- a/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2xcbase-ndrpdr.robot
+++ b/tests/vpp/perf/l2/2n1l-10ge2p1x710-eth-l2xcbase-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | L2XCBASE | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -59,17 +59,17 @@
| | ... | [Cfg] DUT runs L2XC config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/l2/regenerate_testcases.py b/tests/vpp/perf/l2/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/l2/regenerate_testcases.py
+++ b/tests/vpp/perf/l2/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-l3dsr-ndrpdr.robot b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-l3dsr-ndrpdr.robot
index 16e6e6011c..5839544779 100644
--- a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-l3dsr-ndrpdr.robot
+++ b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-l3dsr-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4 | LOADBALANCER_L3DSR | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput loadbalancer l3dsr test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for LoadBalancer l3dsr.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs LoadBalancer l3dsr config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-maglev-ndrpdr.robot b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-maglev-ndrpdr.robot
index e5d421ff86..ffa61c1c81 100644
--- a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-maglev-ndrpdr.robot
+++ b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-maglev-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4 | LOADBALANCER_MAGLEV | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput loadbalancer maglev test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for LoadBalancer maglev.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs LoadBalancer maglev config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-nat4-ndrpdr.robot b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-nat4-ndrpdr.robot
index 8b7bd42d4a..d67d99fb0f 100644
--- a/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-nat4-ndrpdr.robot
+++ b/tests/vpp/perf/lb/2n1l-10ge2p1x710-ethip4-loadbalancer-nat4-ndrpdr.robot
@@ -13,19 +13,19 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4 | LOADBALANCER_NAT4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput loadbalancer nat4 test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP for LoadBalancer nat4.
@@ -60,17 +60,17 @@
| | ... | [Cfg] DUT runs LoadBalancer nat4 config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/lb/regenerate_testcases.py b/tests/vpp/perf/lb/regenerate_testcases.py
index 645d3ada65..2ea7010c28 100755
--- a/tests/vpp/perf/lb/regenerate_testcases.py
+++ b/tests/vpp/perf/lb/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr.robot
index ef9ee46c64..85805d4cc2 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 10DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 10 chains
| ... | 10 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr2t-vppip4-ndrpdr.robot
index 13428f6a47..53706293ff 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-20mif-10dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 10DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 10 chains
| ... | 10 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr.robot
index 5cdd7f4137..cca7018d09 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 20DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 10 chains
| ... | 20 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr.robot
index b6af87c63d..b6c94946cc 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R6C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 6DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 6 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr2t-vppip4-ndrpdr.robot
index 751f676d1a..50784824d5 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-12mif-6dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R6C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 6DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 6 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr.robot
index b297db11b2..6a1e38ac7b 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R8C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr2t-vppip4-ndrpdr.robot
index 7637d99bc8..0d956b2193 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-16mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R8C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr.robot
index c96104c8b5..51be12ac48 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R10C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 10DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 10 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr2t-vppip4-ndrpdr.robot
index 1a3b35215b..5116d59de5 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-20mif-10dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R10C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 10DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 10 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr.robot
index c8383168cf..392f883b8f 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 1DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 1 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr2t-vppip4-ndrpdr.robot
index fdba4d7515..47006b4a12 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-2mif-1dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 1DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 1 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr.robot
index be4d830c45..0c1891d5cd 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 2DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 2 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr2t-vppip4-ndrpdr.robot
index 0858370b1d..92e8c750f2 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-4mif-2dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 2DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 2 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr.robot
index 647bb1cd56..087df402b6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr2t-vppip4-ndrpdr.robot
index c3d4cc60ce..2ef06c2e3b 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-1ch-8mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 1 chain
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr.robot
index fbc69cc0fc..4dcac0ebaa 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr2t-vppip4-ndrpdr.robot
index 060a4e14e8..b07e1c9865 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-16mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr.robot
index 9676d3a2fc..c6ee7c19cf 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R6C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 12DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 12 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr2t-vppip4-ndrpdr.robot
index ae9b67ad8e..a95e94adf1 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-24mif-12dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R6C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 12DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 12 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr.robot
index fe4ad05f2a..827bd92898 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R8C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr2t-vppip4-ndrpdr.robot
index e10c6be4d7..13de4777da 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-32mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R8C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
-| ...
+|
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr.robot
index d2c72903ce..a4a29003c6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R10C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 20DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 20 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr.robot
index eaa25baa0a..86635b5936 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 2DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 2 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr2t-vppip4-ndrpdr.robot
index 1133e8173c..677c7ae254 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-4mif-2dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 2DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 2 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr.robot
index e29af87a9f..fc3d35985a 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr2t-vppip4-ndrpdr.robot
index ce8df60748..a777f45bc0 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-2ch-8mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 2 chains
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr.robot
index 6fa196e608..cb7ac460ab 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr2t-vppip4-ndrpdr.robot
index 72945a985b..51bcb89a21 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-16mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr.robot
index a22da7f98e..a56a4de3ba 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr2t-vppip4-ndrpdr.robot
index 842e2f9ad3..3dc02d58be 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-32mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr.robot
index 6a946044b3..9a693d4dfc 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R6C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 24DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 24 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr.robot
index 2d2cd843ba..b9c5ed7232 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr2t-vppip4-ndrpdr.robot
index 0c661c04c8..110c10300d 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-4ch-8mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 4 chains
| ... | 4 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr.robot
index f166e62fc0..1403f31382 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 6DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 6 chains
| ... | 6 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr2t-vppip4-ndrpdr.robot
index 5c2111ab65..d2eb6b104d 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-12mif-6dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 6DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 6 chains
| ... | 6 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr.robot
index 4fe3b85869..3513d0b96f 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 12DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 6 chains
| ... | 12 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr2t-vppip4-ndrpdr.robot
index 993a5f23ff..72e20c912d 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-24mif-12dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 12DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 6 chains
| ... | 12 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr.robot
index 5b7fbe1d14..ef54f9baec 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R4C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 24DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 6 chains
| ... | 24 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr.robot
index 61ff3d0bb4..a1832779b6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 8 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr2t-vppip4-ndrpdr.robot
index 7383211148..e7a8b3db44 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-16mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R1C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 8 chains
| ... | 8 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr.robot
index abfad09ba9..e174c5865b 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 8 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr2t-vppip4-ndrpdr.robot
index cfb7d72f32..daef5fa153 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/2n-10ge2p1x710-eth-l2bd-8ch-32mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R2C
| ... | NF_DENSITY | CHAIN | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with memif 8 chains
| ... | 16 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/chain/regenerate_testcases.py b/tests/vpp/perf/nfv_density/dcr_memif/chain/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/nfv_density/dcr_memif/chain/regenerate_testcases.py
+++ b/tests/vpp/perf/nfv_density/dcr_memif/chain/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr.robot
index b4f3aa3097..3c6dd5d9c6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 10DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 20memif 10
| ... | pipelines 1 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr2t-vppip4-ndrpdr.robot
index c7943ee66b..6f22ccc771 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-10dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 10DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 20memif 10
| ... | pipelines 1 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr.robot
index 34bf3fd310..517484c799 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 10R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 20DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 20 memif 10
| ... | pipelines 20 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr.robot
index f1d5ca2a55..343a28371b 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R10C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 10DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 10 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr2t-vppip4-ndrpdr.robot
index 97ed296ba1..798fb22291 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-10dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R10C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 10DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 10 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr.robot
index 54c77572dd..c136382a0c 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 1DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 1 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr2t-vppip4-ndrpdr.robot
index 10a2d17c69..285ea0eed9 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-1dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 1DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 1 docker container*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr.robot
index ad48e39470..e8eef33970 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 2DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 2 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr2t-vppip4-ndrpdr.robot
index cd109e1ad2..d47a9172b6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-2dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 2DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 2 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr.robot
index 6ffdd3b744..87fc582ca3 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr2t-vppip4-ndrpdr.robot
index 70e7d4c906..1c52e7f599 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr.robot
index e87442303a..906e2d32a6 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R6C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 6DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 6 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr2t-vppip4-ndrpdr.robot
index 60ae9f2044..1c612acee0 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-6dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R6C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 6DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 6 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr.robot
index cdb1b3584d..3353f8f2ad 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R8C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr2t-vppip4-ndrpdr.robot
index 13f82c30ca..9dbe63306e 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-1pl-2mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 1R8C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 1
| ... | pipeline 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr.robot
index 815bc24998..efa8f493d4 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R6C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 12DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 12 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr2t-vppip4-ndrpdr.robot
index 610486f13a..8c588f3dab 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-12dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R6C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 12DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 12 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr.robot
index 7faf1d0bd4..1730c6f69e 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R8C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr2t-vppip4-ndrpdr.robot
index 2ed6f39945..6f87edc67f 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R8C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr.robot
index 43e2f245ea..1b9d4add5e 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R10C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 20DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4 memif 2
| ... | pipelines 20 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr.robot
index a0a11af66f..67b0f35a6f 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 2DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 2 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr2t-vppip4-ndrpdr.robot
index edb86eb041..2e842ca319 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-2dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 2DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 2 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr.robot
index fa960d37c5..b2b7dffa77 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 2
| ... | pipelines 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr2t-vppip4-ndrpdr.robot
index 5ecc2f73d5..241efd7fef 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 2memif 2
| ... | pipelines 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr.robot
index 183252add9..fd0c8d5e53 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr2t-vppip4-ndrpdr.robot
index d649efda5c..3fe0b62f1a 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-4mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 2R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 4memif 2
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr.robot
index ee319cf976..beed4307bc 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr2t-vppip4-ndrpdr.robot
index 20d05faa5f..9681ea50c3 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-2pl-8mif-4dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 4DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 4 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr.robot
index e4bf9cf6cc..2dfe652e79 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr2t-vppip4-ndrpdr.robot
index da3f27a58f..fe02886fac 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr.robot
index 4b4c73b69c..1a86f36c47 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R6C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 24DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8 memif 4
| ... | pipelines 24 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr.robot
index 88a0daf405..3ab25ce346 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr2t-vppip4-ndrpdr.robot
index 5f649b3acb..9137c97960 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-4pl-8mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 4R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 8memif 4
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr.robot
index 9a50e96330..a0182dba52 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 12DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 12memif 6
| ... | pipelines 12 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr2t-vppip4-ndrpdr.robot
index 14420fd936..3451a2642d 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-12dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 12DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 12memif 6
| ... | pipelines 12 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr.robot
index 4ae39afabf..f9f81712f2 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R4C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 24DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 12 memif 6
| ... | pipelines 24 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr.robot
index 24683ae189..3efcbeb1cb 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 6DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 12memif 6
| ... | pipelines 1 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr2t-vppip4-ndrpdr.robot
index b3359f078b..2f54b2afde 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-6pl-12mif-6dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 6R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 6DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 12memif 6
| ... | pipelines 1 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr.robot
index ea9e4f96dc..cbe995e35e 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 16memif 8
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr2t-vppip4-ndrpdr.robot
index 74e99d61c6..79612826c5 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-16dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R2C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 16DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 16memif 8
| ... | pipelines 16 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr.robot
index c509ad5638..36e133ba01 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 16memif 8
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr2t-vppip4-ndrpdr.robot
index 5dbbc2ff96..90a3db55b7 100644
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/2n-10ge2p1x710-eth-l2bd-8pl-16mif-8dcr2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | MEMIF | DOCKER | 8R1C
| ... | NF_DENSITY | PIPELINE | NF_VPPIP4 | 8DCR2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | **RFC2544: Pkt throughput L2BD test cases with 16memif 8
| ... | pipelines 8 docker containers*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 bridge domain.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/regenerate_testcases.py b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/nfv_density/dcr_memif/pipeline/regenerate_testcases.py
+++ b/tests/vpp/perf/nfv_density/dcr_memif/pipeline/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr.robot
index 165e80fc6a..668c0d0795 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 10R1C | 10VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 20 vhost 10 chains 10 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm2t-vppip4-ndrpdr.robot
index 9f0398beb0..ce02212b84 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-20vh-10vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 10R1C | 10VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 20 vhost 10 chains 10 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr.robot
index 8cce3d84b8..59a448bbb7 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 10R2C | 20VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 40 vhost 10 chains 20 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr.robot
index a814f7133e..15cedf8a51 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R6C | 6VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 12 vhost 1 chain 6 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm2t-vppip4-ndrpdr.robot
index 4eeaeaddb2..11dd6b5c48 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-12vh-6vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R6C | 6VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 12 vhost 1 chain 6 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr.robot
index 6b55ec5d4d..8dbbf5d4d0 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R8C | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 1 chain 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm2t-vppip4-ndrpdr.robot
index cbc364c853..cd3448f575 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-16vh-8vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R8C | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 1 chain 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr.robot
index 94a02a4df8..a0c95f1c3e 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R10C | 10VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 20 vhost 1 chain 10 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm2t-vppip4-ndrpdr.robot
index 9ad5bb4bf1..102a54e69d 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-20vh-10vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R10C | 10VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 20 vhost 1 chain 10 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr.robot
index 5fa1b41305..5cf8a32e60 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R1C | 1VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 2 vhost 1 chain 1 VM*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm2t-vppip4-ndrpdr.robot
index 8f77c4ea9b..f755e8d750 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-2vh-1vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R1C | 1VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 2 vhost 1 chain 1 VM*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr.robot
index 80d42aaa38..0adc588974 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R2C | 2VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 4 vhost 1 chain 2 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm2t-vppip4-ndrpdr.robot
index 44cb9cc1ad..e66b169e9c 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-4vh-2vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R2C | 2VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 4 vhost 1 chain 2 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr.robot
index 9e62ec9976..1bb0302194 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R4C | 4VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 1 chains 4 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm2t-vppip4-ndrpdr.robot
index 9bf2e39a9f..17770d5a52 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-1ch-8vh-4vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 1R4C | 4VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 1 chains 4 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr.robot
index 9fc462c728..a9efe9d432 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R4C | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 2 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm2t-vppip4-ndrpdr.robot
index 68f6d4af57..c07ee5f7a1 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-16vh-8vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R4C | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 2 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr.robot
index 33929b6d47..f6aa1ff245 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R6C | 12VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 24 vhost 2 chains 12 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm2t-vppip4-ndrpdr.robot
index 073e2e714b..7b5d32eded 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-24vh-12vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R6C | 12VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 24 vhost 2 chains 12 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr.robot
index 953dd68bb7..e2fe5339c4 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R8C | 16VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 2 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm2t-vppip4-ndrpdr.robot
index 648fd0f8e6..a155d5e04c 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-32vh-16vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R8C | 16VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 2 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr.robot
index 6f90d0c6b1..4dd55c9354 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R10C | 20VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 40 vhost 2 chains 20 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr.robot
index 1fc9e37621..0e800c2396 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R1C | 2VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 4 vhost 2 chains 2 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm2t-vppip4-ndrpdr.robot
index ad81387735..f546bc7c9b 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-4vh-2vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R1C | 2VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 4 vhost 2 chains 2 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr.robot
index 7a7ea7327c..c3d03c4f48 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R2C | 4VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 2 chains 4 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm2t-vppip4-ndrpdr.robot
index e0d31feebc..705ec7e844 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-2ch-8vh-4vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 2R2C | 4VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 2 chains 4 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr.robot
index 3a8033d616..0c64929fcb 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R2C | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 4 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm2t-vppip4-ndrpdr.robot
index d7d2510de2..48ef0a55fb 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-16vh-8vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R2C | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 4 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr.robot
index 9df79f75c9..d089eb0334 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R4C | 16VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 4 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm2t-vppip4-ndrpdr.robot
index c60c6b59e2..6cb60b01ad 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-32vh-16vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R4C | 16VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 4 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr.robot
index 700b26ab61..2c659d7293 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R6C | 24VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 48 vhost 4 chains 24 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr.robot
index 078f2761c3..4db98234a6 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R1C | 4VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 4 chains 4 VM*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm2t-vppip4-ndrpdr.robot
index ee698cd8b3..ef5db2af0f 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-4ch-8vh-4vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 4R1C | 4VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 8 vhost 4 chains 4 VM*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr.robot
index 43e2ada6e2..750f3651d1 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 6R1C | 6VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 12 vhost 6 chains 6 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm2t-vppip4-ndrpdr.robot
index 182a706e3b..f99feec81d 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-12vh-6vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 6R1C | 6VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 12 vhost 6 chains 6 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr.robot
index 2a505914db..eebf4a7489 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 6R2C | 12VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 24 vhost 6 chains 12 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm2t-vppip4-ndrpdr.robot
index 7c0680b6b8..e6e36b4ce6 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-24vh-12vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 6R2C | 12VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 24 vhost 6 chains 12 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr.robot
index 5d613cd7e0..6b33c82e6c 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 6R4C | 24VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 48 vhost 6 chains 24 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr.robot
index 07828d6633..ee5434efdd 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 8R1C | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 8 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm2t-vppip4-ndrpdr.robot
index 95c1a789aa..ecd4555962 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-16vh-8vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 8R1C | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 16 vhost 8 chains 8 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr.robot
index ea579fcf1c..285e5efd5f 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 8R2C | 16VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 8 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm2t-vppip4-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm2t-vppip4-ndrpdr.robot
index 00ea7d0709..af9079b707 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm2t-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/2n-10ge2p1x710-eth-l2bd-8ch-32vh-16vm2t-vppip4-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | VM
| ... | VHOST_1024 | NF_DENSITY | NF_VPPIP4 | CHAIN | 8R2C | 16VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation
| ... | *RFC2544: Pkt throughput L2BD test cases with 32 vhost 8 chains 16 VMs*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain/regenerate_testcases.py b/tests/vpp/perf/nfv_density/vm_vhost/chain/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain/regenerate_testcases.py
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf.robot
index e345aa2977..e77ef8f800 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 10R1C | 1_ADDED_CHAIN | 10VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm2t-testpmd-reconf.robot
index d9d333ad10..3a751982ad 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 10R1C | 1_ADDED_CHAIN | 10VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr.robot
index a183aba4fd..18ffb79110 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 10R1C | 10VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm2t-testpmd-ndrpdr.robot
index adb8ddf077..73a4c3e192 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-10ch-20vh-10vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 10R1C | 10VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf.robot
index 0f23a6ad24..032506028f 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 1R1C | 1_ADDED_CHAIN | 1VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm2t-testpmd-reconf.robot
index 4a9006ea1c..ca896914b9 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 1R1C | 1_ADDED_CHAIN | 1VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr.robot
index 392cc0459c..eb025bcd54 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 1R1C | 1VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm2t-testpmd-ndrpdr.robot
index fb89050968..1e9ebbbca3 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-1ch-2vh-1vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 1R1C | 1VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf.robot
index 14ec29bfff..c2bf092266 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 2R1C | 1_ADDED_CHAIN | 2VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm2t-testpmd-reconf.robot
index a89212e659..044880ce59 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 2R1C | 1_ADDED_CHAIN | 2VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr.robot
index 295be2779e..a9e04ed793 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 2R1C | 2VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm2t-testpmd-ndrpdr.robot
index 7061a39b56..08feec26a3 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-2ch-4vh-2vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 2R1C | 2VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf.robot
index 4b60698cb8..1fa8d7fdfb 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 4R1C | 1_ADDED_CHAIN | 4VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm2t-testpmd-reconf.robot
index e6e446b44c..e46eb543fb 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 4R1C | 1_ADDED_CHAIN | 4VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr.robot
index a302ee4bb5..01d9344df6 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 4R1C | 4VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm2t-testpmd-ndrpdr.robot
index 28d7417bff..d4c75b365e 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-4ch-8vh-4vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 4R1C | 4VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr.robot
index 34ec3629a7..104ee0e5da 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 6R1C | 6VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm2t-testpmd-ndrpdr.robot
index 79398f2342..c140b2f666 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-12vh-6vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 6R1C | 6VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf.robot
index 9156afaf8f..5e64c1b776 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 6R1C | 1_ADDED_CHAIN | 6VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm2t-testpmd-reconf.robot
index e4191eccac..a86b8c7785 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 6R1C | 1_ADDED_CHAIN | 6VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr.robot
index 56a700fe2e..f454871f46 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 8R1C | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm2t-testpmd-ndrpdr.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm2t-testpmd-ndrpdr.robot
index 96341c45db..ba35783cdc 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm2t-testpmd-ndrpdr.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-16vh-8vm2t-testpmd-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 8R1C | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -72,17 +72,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf.robot
index 196bf2addf..01148b74cd 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 8R1C | 1_ADDED_CHAIN | 8VM1T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm2t-testpmd-reconf.robot b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm2t-testpmd-reconf.robot
index 88337d2d2d..53d0141ef4 100644
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm2t-testpmd-reconf.robot
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/2n-10ge2p1x710-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm2t-testpmd-reconf.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | RECONF
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VXLAN | DOT1Q | NF_DENSITY | NF_TESTPMD
| ... | CHAIN | 8R1C | 1_ADDED_CHAIN | 8VM2T
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet loss L2BD test cases with Dot1Q and
| ... | VXLANoIPv4 with ${nf_chains} instances, ${nf_nodes} VMs per instance.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Dot1q-IPv4-UDP-VXLAN-Eth-IPv4 for L2\
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs Dot1Q-IP4-Vxlan L2BD switching config.\
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure packet loss during reconfig at NDR load.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | ${nf_total_chains}= | Evaluate | ${nf_chains} + ${nf_added_chains}
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
diff --git a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/regenerate_testcases.py b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/regenerate_testcases.py
index 53c33054ac..26661306b0 100755
--- a/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/regenerate_testcases.py
+++ b/tests/vpp/perf/nfv_density/vm_vhost/chain_dot1qip4vxlan/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot", protocol="dot1qip4vxlan")
+Regenerator().regenerate_glob(u"*.robot", protocol=u"dot1qip4vxlan")
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr.robot
index d91b9819f4..ad9d758f46 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr.robot
@@ -13,20 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
-| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | SRv6 | SRv6_1SID | DRV_VFIO_PCI
-| ...
+| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | SRv6 | SRv6_1SID
+| ... | DRV_VFIO_PCI
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | one SID (SRH not inserted) test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-IPv6 on DUT1-DUT2, Eth-IPv6 on\
@@ -83,17 +84,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr.robot
index ab6be185bf..43a89c87f8 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | SRv6 | SRv6_2SID_DECAP
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | two SIDs (SRH inserted) test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-SRH-IPv6 on DUT1-DUT2, Eth-IPv6\
@@ -87,17 +87,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr.robot
index 655a418caa..b848603ad1 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP6FWD | FEATURE | SRv6 | SRv6_2SID_NODECAP
| ... | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | two SIDs (SRH inserted) without decapsulation test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-SRH-IPv6 on DUT1-DUT2 and\
@@ -87,17 +87,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr.robot
index 43fd06bc2f..cc50583dec 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | SRv6 | IP6FWD | FEATURE | SRv6_PROXY
| ... | SRv6_PROXY_DYN | MEMIF | LXC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6 | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | Dynamic SRv6 proxy test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-SRH-IPv6 on DUT1-DUT2 and\
@@ -99,17 +99,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr.robot
index b0f27432b4..dcf1934f2f 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | SRv6 | IP6FWD | FEATURE | SRv6_PROXY
| ... | SRv6_PROXY_MASQ | MEMIF | LXC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6 | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | Masquerading SRv6 proxy test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-SRH-IPv6 on DUT1-DUT2, DUTn-LXC\
@@ -99,17 +99,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr.robot b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr.robot
index 6216f4ec93..fa615cdaef 100644
--- a/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr.robot
+++ b/tests/vpp/perf/srv6/10ge2p1x710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | SRv6 | IP6FWD | FEATURE | SRv6_PROXY
| ... | SRv6_PROXY_STAT | MEMIF | LXC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | srv6 | container
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *Packet throughput Segment routing over IPv6 dataplane with\
| ... | Static SRv6 proxy test cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-SRH-IPv6 on DUT1-DUT2 and\
@@ -99,17 +99,17 @@
| | ... | direction and one SR behaviour (function) - End - for other direction.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
-| | ... | Type: integer, string
+| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/srv6/regenerate_testcases.py b/tests/vpp/perf/srv6/regenerate_testcases.py
index 5e32e97fce..b3048a23fc 100755
--- a/tests/vpp/perf/srv6/regenerate_testcases.py
+++ b/tests/vpp/perf/srv6/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot", protocol="ip6")
+Regenerator().regenerate_glob(u"*.robot", protocol=u"ip6")
diff --git a/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-cps.robot b/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-cps.robot
index bc626c0f54..1cb5d7e7a3 100644
--- a/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-cps.robot
+++ b/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-cps.robot
@@ -17,19 +17,19 @@
| Resource | resources/libraries/robot/wrk/wrk_utils.robot
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/tcp/tcp_setup.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV
| ... | HTTP | TCP | TCP_CPS | NIC_Intel-X710 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | wrk
| Suite Teardown | Tear down suite
| Test Setup | Setup test
| Test Teardown | Tear down test
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *HTTP connections per seconds.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT-TG 2-node topology
| ... | with single link between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-TCP-HTTP for TCP Host Stack
@@ -49,7 +49,7 @@
*** Keywords ***
| Local template
| | [Arguments] | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-rps.robot b/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-rps.robot
index 1fc7077093..7b128fe995 100644
--- a/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-rps.robot
+++ b/tests/vpp/perf/tcp/2n1l-10ge2p1x710-eth-ip4tcphttp-wrk8u8c50con-rps.robot
@@ -17,19 +17,19 @@
| Resource | resources/libraries/robot/wrk/wrk_utils.robot
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/tcp/tcp_setup.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV
| ... | HTTP | TCP | TCP_RPS | NIC_Intel-X710 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | wrk
| Suite Teardown | Tear down suite
| Test Setup | Setup test
| Test Teardown | Tear down test
-| ...
+|
| Test Template | Local template
-| ...
+|
| Documentation | *HTTP requests per seconds.*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT-TG 2-node topology
| ... | with single link between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-TCP-HTTP for TCP Host Stack
@@ -49,7 +49,7 @@
*** Keywords ***
| Local template
| | [Arguments] | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/tcp/regenerate_testcases.py b/tests/vpp/perf/tcp/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/tcp/regenerate_testcases.py
+++ b/tests/vpp/perf/tcp/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index 98717be886..6b01b6b8c5 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_1L | VM_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. 802.1q
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index aca6ad6d98..d197f5915c 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_1L | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. 802.1q
@@ -78,17 +78,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
index 9ce108415f..4d81100710 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_1L | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. 802.1q
@@ -76,17 +76,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index c57d10c851..0fb5f2041d 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_1L | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. 802.1q
@@ -76,17 +76,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index 561c90d9f6..2963a0e8ee 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_2L | VM_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite double link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1=DUT2-TG 3-node circular topology
| ... | with single links between TG and DUT nodes and double link between DUT
| ... | nodes.
@@ -79,17 +79,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 0da744ef9d..c02ed618ab 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_2L | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite double link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1=DUT2-TG 3-node circular topology
| ... | with single links between TG and DUT nodes and double link between DUT
| ... | nodes.
@@ -79,17 +79,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
index f612ab27f9..4b1fdb4d46 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_2L | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite double link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1=DUT2-TG 3-node circular topology
| ... | with single links between TG and DUT nodes and double link between DUT
| ... | nodes.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 1718fb927e..f94a1bdbcf 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,22 +13,22 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_DOUBLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
-| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM
+| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST |1VM
| ... | VHOST_1024 | LBOND | LBOND_VPP | LBOND_MODE_LACP | LBOND_LB_L34
| ... | LBOND_2L | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite double link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost and vpp
| ... | link bonding*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1=DUT2-TG 3-node circular topology
| ... | with single links between TG and DUT nodes and double link between DUT
| ... | nodes.
@@ -77,17 +77,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index 28c2a06c04..7df094fa76 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with vhost and IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -74,17 +74,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 8dfe92171f..3ea007c967 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with vhost abd IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -74,17 +74,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
index 1f723fe38d..14882f8b9f 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. 802.1q
@@ -70,17 +70,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 7e9af95798..f943bd1783 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 cross connect. 802.1q
@@ -70,17 +70,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index ef19a8253b..7caff9c9ea 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index d6fd922dd3..73c5bd7aee 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
index 226231e6c1..99b5ed3fa4 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 0f93baf698..e50bb684d4 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
index 3ee2b60ffb..3e94113663 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
index 6d2ea070bf..33056f59dc 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPIP4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index 55552ceca2..506451cd10 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | 1VM | VHOST_1024 | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with VXLANoIPv4
| ... | and vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index ab8f42e43e..cfbb777a17 100644
--- a/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | 1VM | VHOST_1024 | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with VXLANoIPv4
| ... | and vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -71,17 +71,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index d44ae9c909..5086397630 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with vhost abd IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -73,17 +73,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 6a8d3466a8..06178d8eba 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | DOT1Q | L2BDMACLRN | BASE | VHOST | 1VM
| ... | VHOST_1024 | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD with vhost and IEEE 802.1Q test
| ... | cases*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology with\
| ... | single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4. IEEE\
@@ -73,17 +73,17 @@
| | ... | [Cfg] Each DUT runs L2BD switching with VLAN and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
index 9bfd07ea33..b5689de36d 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 45fbfe8233..be8621db24 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2BD test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -68,17 +68,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
index 559acc2467..f9998b852b 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
index 4e26a4886b..348b7369c5 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2XCFWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPL2XC | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput L2XC test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs L2XC switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
index ae1b86ec05..fe34feb9e7 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_TESTPMD | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
index 6cb2f016be..1e5c01026d 100644
--- a/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
+++ b/tests/vpp/perf/vm_vhost/2n1l-10ge2p1x710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr.robot
@@ -13,20 +13,20 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | IP4FWD | BASE | VHOST | 1VM | VHOST_1024
| ... | NF_VPPIP4 | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Pkt throughput IPv4 test cases with vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-TG 2-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
@@ -67,17 +67,17 @@
| | ... | [Cfg] DUT runs IPv4 routing config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vm_vhost/regenerate_testcases.py b/tests/vpp/perf/vm_vhost/regenerate_testcases.py
index 2632018a80..dda55e9121 100755
--- a/tests/vpp/perf/vm_vhost/regenerate_testcases.py
+++ b/tests/vpp/perf/vm_vhost/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot")
+Regenerator().regenerate_glob(u"*.robot")
diff --git a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr.robot
index 3b02285b0b..4c9046930e 100644
--- a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VTS | ACL_PERMIT | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with VXLANoIPv4
| ... | and vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -75,17 +75,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - L2 Frame Size [B]. Type: integer
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
| | ... | - acl_type - FIXME.
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr.robot
index 833c3869f5..b3a29c8573 100644
--- a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VTS | ACL_PERMIT_REFLECT | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with VXLANoIPv4
| ... | and vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -75,17 +75,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - L2 Frame Size [B]. Type: integer
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
| | ... | - acl_type - FIXME.
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr.robot b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr.robot
index 1c77f93a4c..2f9fdef212 100644
--- a/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr.robot
+++ b/tests/vpp/perf/vts/10ge2p1x710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr.robot
@@ -13,21 +13,21 @@
*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
-| ...
+|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | L2BDMACLRN | ENCAP | VXLAN | L2OVRLAY | IP4UNRLAY
| ... | VHOST | VM | VHOST_1024 | VTS | DRV_VFIO_PCI
-| ...
+|
| Suite Setup | Setup suite single link | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test
| Test Teardown | Tear down test | performance | vhost
-| ...
+|
| Test Template | Local Template
-| ...
+|
| Documentation | *RFC2544: Packet throughput L2BD test cases with VXLANoIPv4
| ... | and vhost*
-| ...
+|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
@@ -75,17 +75,17 @@
| | ... | [Cfg] DUT runs L2BD switching config.
| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
-| | ...
+| |
| | ... | *Arguments:*
| | ... | - frame_size - L2 Frame Size [B]. Type: integer
| | ... | - phy_cores - Number of worker threads to be used. Type: integer
| | ... | - rxq - Number of Rx queues to be used. Type: integer
| | ... | - acl_type - FIXME.
-| | ...
+| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
-| | ...
+| |
| | Set Test Variable | \${frame_size}
-| | ...
+| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
diff --git a/tests/vpp/perf/vts/regenerate_testcases.py b/tests/vpp/perf/vts/regenerate_testcases.py
index 638693c515..a2408e46e6 100755
--- a/tests/vpp/perf/vts/regenerate_testcases.py
+++ b/tests/vpp/perf/vts/regenerate_testcases.py
@@ -15,4 +15,4 @@
from resources.libraries.python.autogen.Regenerator import Regenerator
-Regenerator().regenerate_glob("*.robot", protocol="ethip4vxlan")
+Regenerator().regenerate_glob(u"*.robot", protocol=u"ethip4vxlan")