linux/tools/testing/selftests/net/forwarding
Petr Machata fd36fd26ae selftests: forwarding.config.sample: Move overrides to lib.sh
forwarding.config.sample, net/lib.sh and net/forwarding/lib.sh contain
definitions and redefinitions of some of the same variables. The overlap
between net/forwarding/lib.sh and forwarding.config.sample is especially
large. This duplication is a potential source of confusion and problems.

It would be overall less error prone if each variable were defined in one
place only. In this patch set, that place is the library itself. Therefore
move all comments from forwarding.config.sample to net/forwarding/lib.sh.

Move over also a definition of TC_FLAG, which was missing from lib.sh
entirely.

Additionally, add to lib.sh a default definition of the topology variables.
The logic behind this is that forgetting to specify forwarding.config was a
frequent source of frustration for the selftest users. But really, most of
the time the default veth based topology is just fine. We considered just
sourcing forwarding.config.sample instead if forwarding.config is not
available, but this is a cleaner solution.

That means the syntax of the forwarding.config.sample override has to
change to an array assignment, so that the whole variable is overwritten,
not just individual keys, which could leave the value of some keys
unchanged. Do the same in lib.sh for any cut'n'pasters out there.

The config file is then given a sort of carte blanche to redefine whatever
variables it sees fit from the libraries. This is described in a comment in
the file. Only a handful of variables are left behind, to illustrate the
customization.

The fact that the variables are now missing from forwarding.config.sample,
and therefore would miss from forwarding.config derived from that file as
well, should not change anything. This is just the sample file. Users that
keep their own forwarding.config would retain it as before.

The only observable change is introduction of TC_FLAG to lib.sh, because
now the filters would not be attempted to install to HW datapath. For veth
pairs this does not change anything. For HW deployments, users presumably
have forwarding.config with this value overridden.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Benjamin Poirier <bpoirier@nvidia.com>
Link: https://lore.kernel.org/r/b9b8a11a22821a7aa532211ff461a34f596e26bf.1711464583.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-03-28 18:03:41 -07:00
..
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
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: bridge_igmp: Remove unnecessary address deletion 2022-10-19 14:01:08 +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: update IGMP/MLD membership interval value 2021-10-29 13:58:21 +01:00
bridge_port_isolation.sh selftests: forwarding: test for bridge port isolation 2018-07-04 21:40:02 +09:00
bridge_sticky_fdb.sh selftests: forwarding: test for bridge sticky flag 2018-09-28 10:45:04 -07:00
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
ethtool_extended_state.sh selftests: forwarding: ethtool_extended_state: Skip when using veth pairs 2023-08-09 14:53:35 -07:00
ethtool_lib.sh net: selftests: Add lanes setting test 2021-02-03 18:37:29 -08:00
ethtool_mm.sh selftests: forwarding: ethtool_mm: fall back to aggregate if device does not report pMAC stats 2023-12-23 01:01:19 +00:00
ethtool_rmon.sh selftests: forwarding: ethtool_rmon: Add histogram counter test 2023-12-15 11:05:03 +00:00
ethtool.sh selftests: forwarding: ethtool: Skip when using veth pairs 2023-08-09 14:53:35 -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
hw_stats_l3_gre.sh selftests: forwarding: hw_stats_l3_gre: Skip when using veth pairs 2023-08-09 14:53:35 -07:00
hw_stats_l3.sh selftests: forwarding: hw_stats_l3: Set addrgenmode in a separate step 2023-06-14 12:40:02 +02: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 selftests: forwarding: Add IPv6 GRE flat tests 2021-10-08 16:40:58 +01:00
ip6gre_flat_keys.sh selftests: forwarding: Add IPv6 GRE flat tests 2021-10-08 16:40:58 +01:00
ip6gre_flat.sh selftests: forwarding: Add IPv6 GRE flat tests 2021-10-08 16:40:58 +01:00
ip6gre_hier_key.sh selftests: forwarding: Add IPv6 GRE hierarchical tests 2021-10-08 16:40:58 +01:00
ip6gre_hier_keys.sh selftests: forwarding: Add IPv6 GRE hierarchical tests 2021-10-08 16:40:58 +01:00
ip6gre_hier.sh selftests: forwarding: Add IPv6 GRE hierarchical tests 2021-10-08 16:40:58 +01:00
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 selftests: forwarding: Add IP-in-IP GRE flat topology with key test 2019-01-20 11:12:58 -08:00
ipip_flat_gre_keys.sh selftests: forwarding: Add IP-in-IP GRE flat topology with keys test 2019-01-20 11:12:58 -08:00
ipip_flat_gre.sh selftests: forwarding: Add IP-in-IP GRE flat topology test 2019-01-20 11:12:58 -08:00
ipip_hier_gre_key.sh selftests: forwarding: Add IP-in-IP GRE hierarchical topology with key test 2019-01-20 11:12:58 -08:00
ipip_hier_gre_keys.sh selftests: forwarding: Add IP-in-IP GRE hierarchical topology with keys test 2019-01-20 11:12:58 -08:00
ipip_hier_gre.sh selftests: forwarding: Add IP-in-IP GRE hierarchical topology test 2019-01-20 11:12:58 -08:00
ipip_lib.sh selftests: forwarding: Add IP tunneling lib 2019-01-20 11:12:58 -08:00
lib.sh selftests: forwarding.config.sample: Move overrides to lib.sh 2024-03-28 18:03:41 -07:00
local_termination.sh selftests: forwarding: add a test for local_termination.sh 2022-04-23 12:18:16 +01:00
loopback.sh selftests: loopback.sh: skip this test if the driver does not support 2020-01-03 12:23:34 -08:00
Makefile selftests: forwarding: Add a test for NH group stats 2024-03-11 14:14:10 -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 selftests: forwarding: mirror_gre_flower: Fix test result handling 2019-02-01 15:26:37 -08:00
mirror_gre_lag_lacp.sh selftests: forwarding: Test mirror-to-gretap w/ UL team LACP 2018-07-30 09:47:21 -07:00
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 selftests: forwarding: mirror_gre_nh: Unset rp_filter on host VRF 2018-07-11 23:59:27 -07:00
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 selftests: forwarding: Fix packet matching in mirroring selftests 2021-11-10 14:38:44 +00:00
mirror_gre_vlan.sh
mirror_gre.sh selftests: forwarding: use proto icmp for {gretap, ip6gretap}_mac testing 2020-02-16 18:31:48 -08:00
mirror_lib.sh selftests: forwarding: Fix packet matching in mirroring selftests 2021-11-10 14:38:44 +00:00
mirror_topo_lib.sh selftests: forwarding: mirror_gre_*: Disable IPv6 autogen on bridges 2023-06-21 14:02:52 -07:00
mirror_vlan.sh selftests: forwarding: Fix packet matching in mirroring selftests 2021-11-10 14:38:44 +00:00
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 selftests: Clean forgotten resources as part of cleanup() 2021-06-08 14:39:07 -07:00
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: Require diagrams 2018-06-27 10:42:13 +09: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 selftests: set sysctl bc_forwarding properly in router_broadcast.sh 2019-06-03 15:15:01 -07:00
router_mpath_nh_lib.sh selftests: forwarding: Add a test for NH group stats 2024-03-11 14:14:10 -07:00
router_mpath_nh_res.sh selftests: forwarding: Add a test for NH group stats 2024-03-11 14:14:10 -07:00
router_mpath_nh.sh selftests: forwarding: Add a test for NH group stats 2024-03-11 14:14:10 -07: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: Add device-only nexthop test 2020-11-20 15:20:20 -08: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 selftests: forwarding: sch_ets: Add test coverage for ETS Qdisc 2019-12-18 13:32:30 -08:00
sch_ets_tests.sh selftests: forwarding: ETS: Use Qdisc counters 2020-03-05 14:03:32 -08:00
sch_ets.sh selftests: forwarding: ETS: Use Qdisc counters 2020-03-05 14:03:32 -08:00
sch_red.sh selftests: forwarding: add shebang for sch_red.sh 2022-09-22 07:33:56 -07:00
sch_tbf_core.sh selftests: mlxsw: Add a TBF selftest 2020-01-25 10:56:31 +01:00
sch_tbf_ets.sh selftests: mlxsw: Add a TBF selftest 2020-01-25 10:56:31 +01:00
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 selftests: mlxsw: Add a TBF selftest 2020-01-25 10:56:31 +01:00
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 selftests: forwarding: Fix spelling mistake "succeded" -> "succeeded" 2021-01-19 17:44:09 -08:00
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 selftests: tc: add ingress device matching support 2019-06-19 10:09:22 -04:00
tc_flower.sh selftests: forwarding: tc_flower: Relax success criterion 2023-08-09 14:53:35 -07:00
tc_mpls_l2vpn.sh selftests: forwarding: Add MPLS L2VPN test 2020-12-04 17:44:06 -08:00
tc_police.sh selftests: forwarding: Make tc-police pass on debug kernels 2024-03-05 09:18:07 -08:00
tc_shblocks.sh selftests: tc: add ingress device matching support 2019-06-19 10:09:22 -04:00
tc_tunnel_key.sh selftests: forwarding: tc_tunnel_key: Make filters more specific 2023-08-09 14:53:35 -07:00
tc_vlan_modify.sh selftests: forwarding: Test action VLAN modify 2019-03-28 17:20:52 -07:00
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 selftests: forwarding: vxlan_bridge_1d_port_8472: New test 2018-11-19 17:59:44 -08:00
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 selftests: forwarding: Add VxLAN test with a VLAN-aware bridge 2018-11-30 17:06:29 -08:00
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 selftests: forwarding: Add missing 'rp_filter' configuration 2020-10-18 12:47:32 -07:00

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/