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

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/