Petr Machata 6ebe5a7a66 selftests: forwarding: mirror_vlan: Change test description 7 years ago
..
.gitignore 73bae6736b selftests: forwarding: Add initial testing framework 7 years ago
README 73bae6736b selftests: forwarding: Add initial testing framework 7 years ago
bridge_vlan_aware.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
bridge_vlan_unaware.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
config 73bae6736b selftests: forwarding: Add initial testing framework 7 years ago
forwarding.config.sample 59be45c375 selftests: forwarding: Allow creation of interfaces without a config file 7 years ago
lib.sh 2004a9bcb8 selftests: forwarding: lib: Move here vlan_capture_{, un}install() 7 years ago
mirror_gre.sh 91bac7f997 selftests: forwarding: Add $h3's clsact to mirror_topo_lib.sh 7 years ago
mirror_gre_bound.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
mirror_gre_bridge_1d_vlan.sh b5b029399f selftests: forwarding: mirror_gre_bridge_1d_vlan: Add STP test 7 years ago
mirror_gre_changes.sh 91bac7f997 selftests: forwarding: Add $h3's clsact to mirror_topo_lib.sh 7 years ago
mirror_gre_flower.sh a96d81a20b selftests: forwarding: Test removal of mirroring 7 years ago
mirror_gre_lib.sh f52f460ca9 selftests: forwarding: mirror_gre_lib: Add STP test 7 years ago
mirror_gre_neigh.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
mirror_gre_nh.sh 7eaaf0bc52 selftests: forwarding: mirror_gre_nh: Unset RP filter 7 years ago
mirror_gre_topo_lib.sh 74ed089d48 selftests: forwarding: Split mirror_gre_topo_lib.sh 7 years ago
mirror_gre_vlan.sh a08fb9f1ad selftests: forwarding: Test mirror-to-gre w/ UL VLAN 7 years ago
mirror_gre_vlan_bridge_1q.sh 9c7c8a8244 selftests: forwarding: mirror_gre_vlan_bridge_1q: Add more tests 7 years ago
mirror_lib.sh 275225fb4e selftests: forwarding: mirror_lib: skip_hw the VLAN capture 7 years ago
mirror_topo_lib.sh 91bac7f997 selftests: forwarding: Add $h3's clsact to mirror_topo_lib.sh 7 years ago
mirror_vlan.sh 6ebe5a7a66 selftests: forwarding: mirror_vlan: Change test description 7 years ago
router.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
router_multipath.sh d51d10aa1d selftests: forwarding: Use sysctl_set(), sysctl_restore() 7 years ago
tc_actions.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
tc_chains.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
tc_common.sh 198979be6c selftests: forwarding: Only check tc version for tc tests 7 years ago
tc_flower.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago
tc_shblocks.sh 0eb8053c14 selftests: forwarding: Allow running specific tests 7 years ago

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 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/