Petr Machata 372809055f selftests: forwarding: Have lldpad_app_wait_set() wait for unknown, too 6 anni fa
..
.gitignore 73bae6736b selftests: forwarding: Add initial testing framework 7 anni fa
README 18ec44f6ef selftests: forwarding: README: Require diagrams 7 anni fa
bridge_port_isolation.sh a14e9fafaa selftests: forwarding: test for bridge port isolation 7 anni fa
bridge_sticky_fdb.sh a804e5e218 selftests: forwarding: test for bridge sticky flag 6 anni fa
bridge_vlan_aware.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
bridge_vlan_unaware.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
config 73bae6736b selftests: forwarding: Add initial testing framework 7 anni fa
devlink_lib.sh bc7cbb1e9f selftests: forwarding: Add devlink_lib.sh 7 anni fa
forwarding.config.sample 59be45c375 selftests: forwarding: Allow creation of interfaces without a config file 7 anni fa
gre_multipath.sh 541ad323db selftests: forwarding: gre_multipath: Update next-hop statistics match criteria 7 anni fa
lib.sh 372809055f selftests: forwarding: Have lldpad_app_wait_set() wait for unknown, too 6 anni fa
mirror_gre.sh 91bac7f997 selftests: forwarding: Add $h3's clsact to mirror_topo_lib.sh 7 anni fa
mirror_gre_bound.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
mirror_gre_bridge_1d.sh 35c31d5c32 selftests: forwarding: Test mirror-to-gretap w/ UL 802.1d 7 anni fa
mirror_gre_bridge_1d_vlan.sh ec9fdc99f5 selftests: forwarding: Tweak tc filters for mirror-to-gretap tests 7 anni fa
mirror_gre_bridge_1q.sh 239e754af8 selftests: forwarding: Test mirror-to-gretap w/ UL 802.1q 7 anni fa
mirror_gre_bridge_1q_lag.sh a9b33b2001 selftests: forwarding: Test mirror-to-gretap w/ UL team 7 anni fa
mirror_gre_changes.sh 4e74cc7c5d selftests: forwarding: mirror_gre_changes: Fix waiting for neighbor 7 anni fa
mirror_gre_flower.sh a96d81a20b selftests: forwarding: Test removal of mirroring 7 anni fa
mirror_gre_lag_lacp.sh 541c6ce30f selftests: forwarding: Test mirror-to-gretap w/ UL team LACP 7 anni fa
mirror_gre_lib.sh e88bc0f25b selftests: forwarding: Allow importing dependent libraries 7 anni fa
mirror_gre_neigh.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
mirror_gre_nh.sh 4280129838 selftests: forwarding: mirror_gre_nh: Unset rp_filter on host VRF 7 anni fa
mirror_gre_topo_lib.sh e88bc0f25b selftests: forwarding: Allow importing dependent libraries 7 anni fa
mirror_gre_vlan.sh a08fb9f1ad selftests: forwarding: Test mirror-to-gre w/ UL VLAN 7 anni fa
mirror_gre_vlan_bridge_1q.sh ca70a56238 selftests: forwarding: Introduce $ARPING 7 anni fa
mirror_lib.sh db560d1612 selftests: forwarding: mirror_lib: Tighten up VLAN capture 7 anni fa
mirror_topo_lib.sh 91bac7f997 selftests: forwarding: Add $h3's clsact to mirror_topo_lib.sh 7 anni fa
mirror_vlan.sh 6ebe5a7a66 selftests: forwarding: mirror_vlan: Change test description 7 anni fa
router.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
router_bridge.sh 5b1e7f9ebd selftests: forwarding: Test routed bridge interface 7 anni fa
router_bridge_vlan.sh 5b1e7f9ebd selftests: forwarding: Test routed bridge interface 7 anni fa
router_broadcast.sh 40f98b9af9 selftests: add a selftest for directed broadcast forwarding 7 anni fa
router_multipath.sh b2c478723c selftests: forwarding: Move multipath_eval() to lib.sh 7 anni fa
tc_actions.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
tc_chains.sh 5a967512bb selftests: forwarding: add tests for TC chain get and dump operations 7 anni fa
tc_common.sh 198979be6c selftests: forwarding: Only check tc version for tc tests 7 anni fa
tc_flower.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 anni fa
tc_shblocks.sh 7f333cbf2b selftests: forwarding: move shblock tc support check to a separate helper 7 anni fa

README

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/