linux-imx/tools/testing/selftests/net/forwarding
Hangbin Liu ea63ac1429 selftests/net: use tc rule to filter the na packet
Test arp_ndisc_untracked_subnets use tcpdump to filter the unsolicited
and untracked na messages. It set -e before calling tcpdump. But if
tcpdump filters 0 packet, it will return none zero, and cause the script
to exit.

Instead of using slow tcpdump to capture packets, let's using tc rule
to filter out the na message.

At the same time, fix function setup_v6 which only needs one parameter.
Move all the related helpers from forwarding lib.sh to net lib.sh.

Fixes: 0ea7b0a454 ("selftests: net: arp_ndisc_untracked_subnets: test for arp_accept and accept_untracked_na")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20240517010327.2631319-1-liuhangbin@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-05-21 13:25:11 +02:00
..
.gitignore
bridge_fdb_learning_limit.sh selftests: forwarding: bridge_fdb_learning_limit: Add a new selftest 2023-10-17 17:39:02 -07:00
bridge_igmp.sh selftests: net: bridge: increase IGMP/MLD exclude timeout membership interval 2024-05-15 11:42:17 +01:00
bridge_locked_port.sh selftests: forwarding: Fix bridge locked port test flakiness 2024-02-09 11:32:14 -08:00
bridge_mdb_host.sh selftests: forwarding: Rename bridge_mdb test 2022-12-12 15:33:37 -08:00
bridge_mdb_max.sh selftests: forwarding: bridge_mdb_max: Fix failing test with old libnet 2023-08-09 14:53:36 -07:00
bridge_mdb_port_down.sh selftest: net: bridge mdb add/del entry to port that is down 2022-07-04 10:30:06 +01:00
bridge_mdb.sh selftests: forwarding: Suppress grep warnings 2024-02-09 11:32:14 -08:00
bridge_mld.sh selftests: net: bridge: increase IGMP/MLD exclude timeout membership interval 2024-05-15 11:42:17 +01:00
bridge_port_isolation.sh
bridge_sticky_fdb.sh
bridge_vlan_aware.sh selftests: net: bridge: Parameterize ageing timeout 2022-02-03 14:05:56 +00:00
bridge_vlan_mcast.sh selftests: bridge_vlan_mcast: Delete qdiscs during cleanup 2022-10-19 14:01:08 +01:00
bridge_vlan_unaware.sh selftests: net: bridge: Parameterize ageing timeout 2022-02-03 14:05:56 +00:00
config selftests: forwarding: Add missing multicast routing config entries 2024-02-09 11:26:09 -08:00
custom_multipath_hash.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
devlink_lib.sh selftests: devlink_lib: Split out helper 2022-11-09 19:06:15 -08:00
dual_vxlan_bridge.sh selftests: forwarding: dual_vxlan_bridge: Disable IPv6 autogen on bridges 2023-06-21 14:02:52 -07:00
fib_offload_lib.sh selftests: fib offload: use sensible tos values 2022-02-03 19:11:21 -08:00
forwarding.config.sample selftests: forwarding.config.sample: Move overrides to lib.sh 2024-03-28 18:03:41 -07:00
gre_custom_multipath_hash.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
gre_inner_v4_multipath.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
gre_inner_v6_multipath.sh selftests: forwarding: Make {, ip6}gre-inner-v6-multipath tests more robust 2024-03-05 09:18:17 -08:00
gre_multipath_nh_res.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
gre_multipath_nh.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
gre_multipath.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
ip6_forward_instats_vrf.sh selftests: forwarding: Set default IPv6 traceroute utility 2023-08-09 14:53:35 -07:00
ip6gre_custom_multipath_hash.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
ip6gre_flat_key.sh
ip6gre_flat_keys.sh
ip6gre_flat.sh
ip6gre_hier_key.sh
ip6gre_hier_keys.sh
ip6gre_hier.sh
ip6gre_inner_v4_multipath.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
ip6gre_inner_v6_multipath.sh selftests: forwarding: Make {, ip6}gre-inner-v6-multipath tests more robust 2024-03-05 09:18:17 -08:00
ip6gre_lib.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
ipip_flat_gre_key.sh
ipip_flat_gre_keys.sh
ipip_flat_gre.sh
ipip_hier_gre_key.sh
ipip_hier_gre_keys.sh
ipip_hier_gre.sh
ipip_lib.sh selftests: forwarding: ipip_lib: Do not import lib.sh 2024-03-28 18:03:42 -07:00
lib_sh_test.sh selftests: forwarding: Add a test for testing lib.sh functionality 2024-03-28 18:03:43 -07:00
lib.sh selftests/net: use tc rule to filter the na packet 2024-05-21 13:25:11 +02:00
local_termination.sh selftests: net: local_termination: annotate the expected failures 2024-05-17 12:26:35 -07:00
Makefile selftests: forwarding: Add a test for testing lib.sh functionality 2024-03-28 18:03:43 -07:00
mirror_gre_bound.sh selftests: forwarding: mirror_gre_*: Disable IPv6 autogen on bridges 2023-06-21 14:02:52 -07:00
mirror_gre_bridge_1d_vlan.sh selftests: forwarding: mirror_gre_*: Use port MAC for bridge address 2023-06-21 14:02:52 -07:00
mirror_gre_bridge_1d.sh Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2023-06-22 18:40:38 -07:00
mirror_gre_bridge_1q_lag.sh selftests: forwarding: mirror_gre_*: Use port MAC for bridge address 2023-06-21 14:02:52 -07:00
mirror_gre_bridge_1q.sh selftests: forwarding: Fix race condition in mirror installation 2023-06-22 10:03:07 +02:00
mirror_gre_changes.sh selftests: mirror_gre_changes: Tighten up the TTL test match 2023-08-14 11:14:24 +01:00
mirror_gre_flower.sh
mirror_gre_lag_lacp.sh
mirror_gre_lib.sh selftests: forwarding: Redefine relative_path variable 2024-01-31 10:55:11 +00:00
mirror_gre_neigh.sh
mirror_gre_nh.sh
mirror_gre_topo_lib.sh selftests: forwarding: Redefine relative_path variable 2024-01-31 10:55:11 +00:00
mirror_gre_vlan_bridge_1q.sh
mirror_gre_vlan.sh
mirror_gre.sh
mirror_lib.sh
mirror_topo_lib.sh selftests: forwarding: mirror_gre_*: Disable IPv6 autogen on bridges 2023-06-21 14:02:52 -07:00
mirror_vlan.sh
no_forwarding.sh selftests: forwarding: add a no_forwarding.sh test 2022-04-23 12:18:16 +01:00
pedit_dsfield.sh selftests: forwarding: skbedit_priority: Disable IPv6 autogen on a bridge 2023-06-21 14:02:52 -07:00
pedit_ip.sh selftests: forwarding: Add a test for pedit munge SIP and DIP 2022-02-07 11:59:57 +00:00
pedit_l4port.sh
q_in_vni_ipv6.sh selftests: forwarding: Add Q-in-VNI test for IPv6 2021-12-22 17:14:34 -08:00
q_in_vni.sh selftests: forwarding: q_in_vni: Disable IPv6 autogen on bridges 2023-06-21 14:02:51 -07:00
README selftests: forwarding: README: Document customization 2024-03-28 18:03:42 -07:00
router_bridge_1d_lag.sh selftests: router_bridge_1d_lag: Add a new selftest 2023-08-02 09:18:18 +01:00
router_bridge_1d.sh selftests: router_bridge_1d: Add a new selftest 2023-08-02 09:18:18 +01:00
router_bridge_lag.sh selftests: router_bridge_lag: Add a new selftest 2023-08-02 09:18:18 +01:00
router_bridge_pvid_vlan_upper.sh selftests: router_bridge_pvid_vlan_upper: Add a new selftest 2023-07-14 10:20:15 +01:00
router_bridge_vlan_upper_pvid.sh selftests: router_bridge_vlan_upper_pvid: Add a new selftest 2023-07-14 10:20:15 +01:00
router_bridge_vlan_upper.sh selftests: router_bridge_vlan_upper: Add a new selftest 2023-08-02 09:18:18 +01:00
router_bridge_vlan.sh selftests: router_bridge_vlan: Add PVID change test 2023-07-14 10:20:15 +01:00
router_bridge.sh selftests: router_bridge: Add remastering tests 2023-08-02 09:18:18 +01:00
router_broadcast.sh
router_mpath_nh_lib.sh selftests: forwarding: router_mpath_nh_lib: Don't skip, xfail on veth 2024-03-28 18:03:43 -07:00
router_mpath_nh_res.sh selftests: forwarding: router_mpath_nh_res: Add a diagram 2024-04-16 12:14:41 +02:00
router_mpath_nh.sh selftests: forwarding: router_mpath_nh: Add a diagram 2024-04-16 12:14:41 +02:00
router_multicast.sh selftests: forwarding: Add test cases for unresolved multicast routes 2022-09-20 08:22:15 -07:00
router_multipath.sh selftests: forwarding: Parametrize mausezahn delay 2024-03-05 09:18:04 -08:00
router_nh.sh selftests: forwarding: router_nh: Add a diagram 2024-04-16 12:14:41 +02:00
router_vid_1.sh selftests: router_vid_1: Add a diagram, fix coding style 2022-05-04 11:21:32 +01:00
router.sh selftests: router.sh: Add a diagram 2022-05-04 11:21:32 +01:00
sch_ets_core.sh
sch_ets_tests.sh selftests: forwarding: Mark performance-sensitive tests 2024-03-28 18:03:43 -07:00
sch_ets.sh
sch_red.sh selftests: forwarding: Mark performance-sensitive tests 2024-03-28 18:03:43 -07:00
sch_tbf_core.sh selftests: forwarding: Mark performance-sensitive tests 2024-03-28 18:03:43 -07:00
sch_tbf_ets.sh
sch_tbf_etsprio.sh selftests: forwarding: sch_tbf_*: Add a pre-run hook 2023-04-20 20:03:21 -07:00
sch_tbf_prio.sh
sch_tbf_root.sh selftests: forwarding: sch_tbf_*: Add a pre-run hook 2023-04-20 20:03:21 -07:00
settings selftests: forwarding: Switch off timeout 2023-08-09 14:53:34 -07:00
skbedit_priority.sh selftests: forwarding: pedit_dsfield: Disable IPv6 autogen on a bridge 2023-06-21 14:02:52 -07:00
tc_actions.sh net/sched: act_mirred: use the backlog for mirred ingress 2024-02-16 10:13:31 +00:00
tc_chains.sh
tc_common.sh selftests: net: libs: Change variable fallback syntax 2024-03-28 18:03:41 -07:00
tc_flower_cfm.sh selftests: net: add tc flower cfm test 2023-06-12 17:01:45 -07:00
tc_flower_l2_miss.sh selftests: forwarding: Fix layer 2 miss test flakiness 2024-02-09 11:32:14 -08:00
tc_flower_port_range.sh selftests: forwarding: Add test cases for flower port range matching 2023-07-12 16:57:18 -07:00
tc_flower_router.sh
tc_flower.sh selftests: forwarding: tc_flower: Relax success criterion 2023-08-09 14:53:35 -07:00
tc_mpls_l2vpn.sh
tc_police.sh selftests: forwarding: Make tc-police pass on debug kernels 2024-03-05 09:18:07 -08:00
tc_shblocks.sh
tc_tunnel_key.sh selftests: lib: Define more kselftest exit codes 2024-03-28 18:03:42 -07:00
tc_vlan_modify.sh
tsn_lib.sh selftests: net: tsn_lib: run phc2sys in automatic mode 2022-09-26 13:22:01 -07:00
vxlan_asymmetric_ipv6.sh selftests: forwarding: Add a test for VxLAN asymmetric routing with IPv6 2021-12-22 17:14:34 -08:00
vxlan_asymmetric.sh selftests: net: Fix typo 'the the' in comment 2022-07-26 20:26:58 -07:00
vxlan_bridge_1d_ipv6.sh selftests: forwarding: Fix ping failure due to short timeout 2024-03-21 12:33:04 +01:00
vxlan_bridge_1d_port_8472_ipv6.sh selftests: forwarding: Add VxLAN tests with a VLAN-unaware bridge for IPv6 2021-12-22 17:14:32 -08:00
vxlan_bridge_1d_port_8472.sh
vxlan_bridge_1d.sh selftests: forwarding: Make VXLAN ECN encap tests more robust 2024-03-05 09:18:13 -08:00
vxlan_bridge_1q_ipv6.sh selftests: forwarding: Fix ping failure due to short timeout 2024-03-21 12:33:04 +01:00
vxlan_bridge_1q_port_8472_ipv6.sh selftests: forwarding: Add VxLAN tests with a VLAN-aware bridge for IPv6 2021-12-22 17:14:33 -08:00
vxlan_bridge_1q_port_8472.sh
vxlan_bridge_1q.sh selftests: forwarding: Make vxlan-bridge-1q pass on debug kernels 2024-03-05 09:18:10 -08:00
vxlan_symmetric_ipv6.sh selftests: forwarding: Add a test for VxLAN symmetric routing with IPv6 2021-12-22 17:14:34 -08:00
vxlan_symmetric.sh

Motivation

One of the nice things about network namespaces is that they allow one to easily create and test complex environments.

Unfortunately, these namespaces can not be used with actual switching ASICs, as their ports can not be migrated to other network namespaces (NETIF_F_NETNS_LOCAL) and most of them probably do not support the L1-separation provided by namespaces.

However, a similar kind of flexibility can be achieved by using VRFs and by looping the switch ports together. For example:

                         br0
                          +
           vrf-h1         |           vrf-h2
             +        +---+----+        +
             |        |        |        |
192.0.2.1/24 +        +        +        + 192.0.2.2/24
           swp1     swp2     swp3     swp4
             +        +        +        +
             |        |        |        |
             +--------+        +--------+

The VRFs act as lightweight namespaces representing hosts connected to the switch.

This approach for testing switch ASICs has several advantages over the traditional method that requires multiple physical machines, to name a few:

  1. Only the device under test (DUT) is being tested without noise from other system.

  2. Ability to easily provision complex topologies. Testing bridging between 4-ports LAGs or 8-way ECMP requires many physical links that are not always available. With the VRF-based approach one merely needs to loopback more ports.

These tests are written with switch ASICs in mind, but they can be run on any Linux box using veth pairs to emulate physical loopbacks.

Guidelines for Writing Tests

o Where possible, reuse an existing topology for different tests instead of recreating the same topology. o Tests that use anything but the most trivial topologies should include an ASCII art showing the topology. o Where possible, IPv6 and IPv4 addresses shall conform to RFC 3849 and RFC 5737, respectively. o Where possible, tests shall be written so that they can be reused by multiple topologies and added to lib.sh. o Checks shall be added to lib.sh for any external dependencies. o Code shall be checked using ShellCheck [1] prior to submission.

  1. https://www.shellcheck.net/

Customization

The forwarding selftests framework uses a number of variables that influence its behavior and tools it invokes, and how it invokes them, in various ways. A number of these variables can be overridden. The way these overridable variables are specified is typically one of the following two syntaxes:

: "${VARIABLE:=default_value}"
VARIABLE=${VARIABLE:=default_value}

Any of these variables can be overridden. Notably net/forwarding/lib.sh and net/lib.sh contain a number of overridable variables.

One way of overriding these variables is through the environment:

PAUSE_ON_FAIL=yes ./some_test.sh

The variable NETIFS is special. Since it is an array variable, there is no way to pass it through the environment. Its value can instead be given as consecutive arguments to the selftest:

./some_test.sh swp{1..8}

A way to customize variables in a persistent fashion is to create a file named forwarding.config in this directory. lib.sh sources the file if present, so it can contain any shell code. Typically it will contain assignments of variables whose value should be overridden.

forwarding.config.sample is available in the directory as an example of how forwarding.config might look.