Ido Schimmel 43d31fd9a8 selftests: forwarding: gre_multipath: Fix flower filters 6 лет назад
..
.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_vlan_aware.sh 7f5491b987 selftests: forwarding: Add a test case for externally learned FDB entries 6 лет назад
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 43d31fd9a8 selftests: forwarding: gre_multipath: Fix flower filters 6 лет назад
lib.sh cf60869814 selftests: forwarding: Move DSCP capture to lib.sh 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/