Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: router_bridge_vlan_upper_pvid: Add a new selftest

This tests whether changes to PVID that coincide with an existing VLAN
upper throw off forwarding. This selftests is specifically geared towards
offloading drivers, but since there's nothing HW-specific in the test
itself (it absolutely is supposed to pass on SW datapath), it is put into
the generic forwarding directory.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Danielle Ratson <danieller@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Petr Machata and committed by
David S. Miller
b0307b77 d4172a93

+172
+1
tools/testing/selftests/net/forwarding/Makefile
··· 65 65 q_in_vni.sh \ 66 66 router_bridge.sh \ 67 67 router_bridge_vlan.sh \ 68 + router_bridge_vlan_upper_pvid.sh \ 68 69 router_broadcast.sh \ 69 70 router_mpath_nh_res.sh \ 70 71 router_mpath_nh.sh \
+171
tools/testing/selftests/net/forwarding/router_bridge_vlan_upper_pvid.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + # +----------------------------+ 5 + # | H1 (vrf) | 6 + # | + $h1.10 | +----------------------+ 7 + # | | 192.0.2.1/28 | | H2 (vrf) | 8 + # | | 2001:db8:1::1/64 | | + $h2 | 9 + # | | | | | 192.0.2.130/28 | 10 + # | + $h1 | | | 2001:db8:2::2/64 | 11 + # +---|------------------------+ +--|-------------------+ 12 + # | | 13 + # +---|--------------------------------------------------|-------------------+ 14 + # | | router (main VRF) | | 15 + # | +-|--------------------------+ + $swp2 | 16 + # | | + $swp1 BR1 (802.1q) | 192.0.2.129/28 | 17 + # | +-----+----------------------+ 2001:db8:2::1/64 | 18 + # | | | 19 + # | + br1.10 | 20 + # | 192.0.2.2/28 | 21 + # | 2001:db8:1::2/64 | 22 + # +--------------------------------------------------------------------------+ 23 + 24 + ALL_TESTS=" 25 + ping_ipv4 26 + ping_ipv6 27 + pvid_set_unset 28 + ping_ipv4 29 + ping_ipv6 30 + pvid_set_move 31 + ping_ipv4 32 + ping_ipv6 33 + " 34 + NUM_NETIFS=4 35 + source lib.sh 36 + 37 + h1_create() 38 + { 39 + simple_if_init $h1 40 + vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64 41 + ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 42 + ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 43 + } 44 + 45 + h1_destroy() 46 + { 47 + ip -6 route del 2001:db8:2::/64 vrf v$h1 48 + ip -4 route del 192.0.2.128/28 vrf v$h1 49 + vlan_destroy $h1 10 50 + simple_if_fini $h1 51 + } 52 + 53 + h2_create() 54 + { 55 + simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 56 + ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 57 + ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 58 + } 59 + 60 + h2_destroy() 61 + { 62 + ip -6 route del 2001:db8:1::/64 vrf v$h2 63 + ip -4 route del 192.0.2.0/28 vrf v$h2 64 + simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64 65 + } 66 + 67 + router_create() 68 + { 69 + ip link add name br1 address $(mac_get $swp1) \ 70 + type bridge vlan_filtering 1 vlan_default_pvid 0 71 + ip link set dev br1 up 72 + 73 + ip link set dev $swp1 master br1 74 + ip link set dev $swp1 up 75 + 76 + ip link set dev $swp2 up 77 + __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 78 + 79 + bridge vlan add dev br1 vid 10 self 80 + bridge vlan add dev $swp1 vid 10 81 + vlan_create br1 10 "" 192.0.2.2/28 2001:db8:1::2/64 82 + } 83 + 84 + router_destroy() 85 + { 86 + vlan_destroy br1 10 87 + bridge vlan del dev $swp1 vid 10 88 + bridge vlan del dev br1 vid 10 self 89 + 90 + __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 91 + ip link set dev $swp2 down 92 + 93 + ip link set dev $swp1 down 94 + ip link set dev $swp1 nomaster 95 + 96 + ip link del dev br1 97 + } 98 + 99 + setup_prepare() 100 + { 101 + h1=${NETIFS[p1]} 102 + swp1=${NETIFS[p2]} 103 + 104 + swp2=${NETIFS[p3]} 105 + h2=${NETIFS[p4]} 106 + 107 + vrf_prepare 108 + 109 + h1_create 110 + h2_create 111 + 112 + router_create 113 + 114 + forwarding_enable 115 + } 116 + 117 + pvid_set_unset() 118 + { 119 + log_info "Set and unset PVID on VLAN 10" 120 + 121 + bridge vlan add dev br1 vid 10 pvid self 122 + sleep 1 123 + bridge vlan add dev br1 vid 10 self 124 + } 125 + 126 + pvid_set_move() 127 + { 128 + log_info "Set PVID on VLAN 10, then move it to VLAN 20" 129 + 130 + bridge vlan add dev br1 vid 10 pvid self 131 + sleep 1 132 + bridge vlan add dev br1 vid 20 pvid self 133 + } 134 + 135 + shuffle_vlan() 136 + { 137 + log_info "" 138 + } 139 + 140 + cleanup() 141 + { 142 + pre_cleanup 143 + 144 + forwarding_restore 145 + 146 + router_destroy 147 + 148 + h2_destroy 149 + h1_destroy 150 + 151 + vrf_cleanup 152 + } 153 + 154 + ping_ipv4() 155 + { 156 + ping_test $h1 192.0.2.130 157 + } 158 + 159 + ping_ipv6() 160 + { 161 + ping6_test $h1 2001:db8:2::2 162 + } 163 + 164 + trap cleanup EXIT 165 + 166 + setup_prepare 167 + setup_wait 168 + 169 + tests_run 170 + 171 + exit $EXIT_STATUS