forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests: router_bridge_pvid_vlan_upper: Add a new selftest
This tests whether addition and deletion of a VLAN upper that coincides with the current PVID setting throws off forwarding. This selftests is specifically geared towards offloading drivers. In particular, mlxsw used to fail this selftest, and an earlier patch in this patchset fixes the issue. However, there's nothing HW-specific in the test itself (it absolutely is supposed to pass on SW datapath), and therefore it is put into the generic forwarding directory. Signed-off-by: Petr Machata <[email protected]> Reviewed-by: Danielle Ratson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
2 changed files
with
156 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
155 changes: 155 additions & 0 deletions
155
tools/testing/selftests/net/forwarding/router_bridge_pvid_vlan_upper.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
|
||
# +----------------------------+ | ||
# | H1 (vrf) | | ||
# | + $h1.10 | +----------------------+ | ||
# | | 192.0.2.1/28 | | H2 (vrf) | | ||
# | | 2001:db8:1::1/64 | | + $h2 | | ||
# | | | | | 192.0.2.130/28 | | ||
# | + $h1 | | | 2001:db8:2::2/64 | | ||
# +---|------------------------+ +--|-------------------+ | ||
# | | | ||
# +---|--------------------------------------------------|-------------------+ | ||
# | | router (main VRF) | | | ||
# | +-|----------------------------------+ + $swp2 | | ||
# | | + $swp1 BR1 (802.1q, pvid=10) | 192.0.2.129/28 | | ||
# | | 192.0.2.2/28 | 2001:db8:2::1/64 | | ||
# | | 2001:db8:1::2/64 | | | ||
# | +------------------------------------+ | | ||
# +--------------------------------------------------------------------------+ | ||
|
||
ALL_TESTS=" | ||
ping_ipv4 | ||
ping_ipv6 | ||
shuffle_pvid | ||
ping_ipv4 | ||
ping_ipv6 | ||
" | ||
NUM_NETIFS=4 | ||
source lib.sh | ||
|
||
h1_create() | ||
{ | ||
simple_if_init $h1 | ||
vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64 | ||
ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 | ||
ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 | ||
} | ||
|
||
h1_destroy() | ||
{ | ||
ip -6 route del 2001:db8:2::/64 vrf v$h1 | ||
ip -4 route del 192.0.2.128/28 vrf v$h1 | ||
vlan_destroy $h1 10 | ||
simple_if_fini $h1 | ||
} | ||
|
||
h2_create() | ||
{ | ||
simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 | ||
ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 | ||
ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 | ||
} | ||
|
||
h2_destroy() | ||
{ | ||
ip -6 route del 2001:db8:1::/64 vrf v$h2 | ||
ip -4 route del 192.0.2.0/28 vrf v$h2 | ||
simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64 | ||
} | ||
|
||
router_create() | ||
{ | ||
ip link add name br1 address $(mac_get $swp1) \ | ||
type bridge vlan_filtering 1 vlan_default_pvid 0 | ||
ip link set dev br1 up | ||
__addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 | ||
|
||
ip link set dev $swp1 master br1 | ||
ip link set dev $swp1 up | ||
|
||
ip link set dev $swp2 up | ||
__addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 | ||
|
||
bridge vlan add dev br1 vid 10 pvid untagged self | ||
bridge vlan add dev $swp1 vid 10 | ||
} | ||
|
||
router_destroy() | ||
{ | ||
bridge vlan del dev $swp1 vid 10 | ||
bridge vlan del dev br1 vid 10 self | ||
|
||
__addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 | ||
ip link set dev $swp2 down | ||
|
||
ip link set dev $swp1 down | ||
ip link set dev $swp1 nomaster | ||
|
||
__addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 | ||
ip link del dev br1 | ||
} | ||
|
||
setup_prepare() | ||
{ | ||
h1=${NETIFS[p1]} | ||
swp1=${NETIFS[p2]} | ||
|
||
swp2=${NETIFS[p3]} | ||
h2=${NETIFS[p4]} | ||
|
||
vrf_prepare | ||
|
||
h1_create | ||
h2_create | ||
|
||
router_create | ||
|
||
forwarding_enable | ||
} | ||
|
||
shuffle_pvid() | ||
{ | ||
log_info "Add and remove VLAN upper for PVID VLAN" | ||
|
||
# Adding and removing a VLAN upper for the PVID VLAN shouldn't change | ||
# anything. The address is arbitrary, just to make sure it will be an L3 | ||
# netdevice. | ||
vlan_create br1 10 "" 192.0.2.33/28 | ||
sleep 1 | ||
vlan_destroy br1 10 | ||
} | ||
|
||
cleanup() | ||
{ | ||
pre_cleanup | ||
|
||
forwarding_restore | ||
|
||
router_destroy | ||
|
||
h2_destroy | ||
h1_destroy | ||
|
||
vrf_cleanup | ||
} | ||
|
||
ping_ipv4() | ||
{ | ||
ping_test $h1 192.0.2.130 | ||
} | ||
|
||
ping_ipv6() | ||
{ | ||
ping6_test $h1 2001:db8:2::2 | ||
} | ||
|
||
trap cleanup EXIT | ||
|
||
setup_prepare | ||
setup_wait | ||
|
||
tests_run | ||
|
||
exit $EXIT_STATUS |