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

selftests: forwarding: Test routed bridge interface

Add test for cases where bridge itself acts as a router interface, with
front panel port attached to the bridge in question.

In the first test (router_bridge.sh), VLAN memberships are not
configured in any way, and everything uses default PVID of 1. Thus
traffic in $h1 and $h2 is untagged. This test ensures that the previous
patches didn't break a currently working scenario.

In the second test (router_bridge_vlan.sh), a VLAN 555 pvid untagged is
added to the bridge CPU port, with that VLAN leaving the bridge tagged
through its sole member port. The traffic is therefore expected to come
out tagged at $h1. This tests the fix introduced in the previous
patches.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Petr Machata and committed by
David S. Miller
5b1e7f9e 567ad1a2

+245
+113
tools/testing/selftests/net/forwarding/router_bridge.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + ALL_TESTS=" 5 + ping_ipv4 6 + ping_ipv6 7 + " 8 + NUM_NETIFS=4 9 + source lib.sh 10 + 11 + h1_create() 12 + { 13 + simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64 14 + ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 15 + ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 16 + } 17 + 18 + h1_destroy() 19 + { 20 + ip -6 route del 2001:db8:2::/64 vrf v$h1 21 + ip -4 route del 192.0.2.128/28 vrf v$h1 22 + simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64 23 + } 24 + 25 + h2_create() 26 + { 27 + simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 28 + ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 29 + ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 30 + } 31 + 32 + h2_destroy() 33 + { 34 + ip -6 route del 2001:db8:1::/64 vrf v$h2 35 + ip -4 route del 192.0.2.0/28 vrf v$h2 36 + simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64 37 + } 38 + 39 + router_create() 40 + { 41 + ip link add name br1 type bridge vlan_filtering 1 42 + ip link set dev br1 up 43 + 44 + ip link set dev $swp1 master br1 45 + ip link set dev $swp1 up 46 + __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 47 + 48 + ip link set dev $swp2 up 49 + __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 50 + } 51 + 52 + router_destroy() 53 + { 54 + __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 55 + ip link set dev $swp2 down 56 + 57 + __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 58 + ip link set dev $swp1 down 59 + ip link set dev $swp1 nomaster 60 + 61 + ip link del dev br1 62 + } 63 + 64 + setup_prepare() 65 + { 66 + h1=${NETIFS[p1]} 67 + swp1=${NETIFS[p2]} 68 + 69 + swp2=${NETIFS[p3]} 70 + h2=${NETIFS[p4]} 71 + 72 + vrf_prepare 73 + 74 + h1_create 75 + h2_create 76 + 77 + router_create 78 + 79 + forwarding_enable 80 + } 81 + 82 + cleanup() 83 + { 84 + pre_cleanup 85 + 86 + forwarding_restore 87 + 88 + router_destroy 89 + 90 + h2_destroy 91 + h1_destroy 92 + 93 + vrf_cleanup 94 + } 95 + 96 + ping_ipv4() 97 + { 98 + ping_test $h1 192.0.2.130 99 + } 100 + 101 + ping_ipv6() 102 + { 103 + ping6_test $h1 2001:db8:2::2 104 + } 105 + 106 + trap cleanup EXIT 107 + 108 + setup_prepare 109 + setup_wait 110 + 111 + tests_run 112 + 113 + exit $EXIT_STATUS
+132
tools/testing/selftests/net/forwarding/router_bridge_vlan.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + ALL_TESTS=" 5 + ping_ipv4 6 + ping_ipv6 7 + vlan 8 + " 9 + NUM_NETIFS=4 10 + source lib.sh 11 + 12 + h1_create() 13 + { 14 + simple_if_init $h1 15 + vlan_create $h1 555 v$h1 192.0.2.1/28 2001:db8:1::1/64 16 + ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2 17 + ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2 18 + } 19 + 20 + h1_destroy() 21 + { 22 + ip -6 route del 2001:db8:2::/64 vrf v$h1 23 + ip -4 route del 192.0.2.128/28 vrf v$h1 24 + vlan_destroy $h1 555 25 + simple_if_fini $h1 26 + } 27 + 28 + h2_create() 29 + { 30 + simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64 31 + ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129 32 + ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1 33 + } 34 + 35 + h2_destroy() 36 + { 37 + ip -6 route del 2001:db8:1::/64 vrf v$h2 38 + ip -4 route del 192.0.2.0/28 vrf v$h2 39 + simple_if_fini $h2 192.0.2.130/28 40 + } 41 + 42 + router_create() 43 + { 44 + ip link add name br1 type bridge vlan_filtering 1 45 + ip link set dev br1 up 46 + 47 + ip link set dev $swp1 master br1 48 + ip link set dev $swp1 up 49 + 50 + bridge vlan add dev br1 vid 555 self pvid untagged 51 + bridge vlan add dev $swp1 vid 555 52 + 53 + __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64 54 + 55 + ip link set dev $swp2 up 56 + __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64 57 + } 58 + 59 + router_destroy() 60 + { 61 + __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64 62 + ip link set dev $swp2 down 63 + 64 + __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64 65 + ip link set dev $swp1 down 66 + ip link set dev $swp1 nomaster 67 + 68 + ip link del dev br1 69 + } 70 + 71 + setup_prepare() 72 + { 73 + h1=${NETIFS[p1]} 74 + swp1=${NETIFS[p2]} 75 + 76 + swp2=${NETIFS[p3]} 77 + h2=${NETIFS[p4]} 78 + 79 + vrf_prepare 80 + 81 + h1_create 82 + h2_create 83 + 84 + router_create 85 + 86 + forwarding_enable 87 + } 88 + 89 + cleanup() 90 + { 91 + pre_cleanup 92 + 93 + forwarding_restore 94 + 95 + router_destroy 96 + 97 + h2_destroy 98 + h1_destroy 99 + 100 + vrf_cleanup 101 + } 102 + 103 + vlan() 104 + { 105 + RET=0 106 + 107 + bridge vlan add dev br1 vid 333 self 108 + check_err $? "Can't add a non-PVID VLAN" 109 + bridge vlan del dev br1 vid 333 self 110 + check_err $? "Can't remove a non-PVID VLAN" 111 + 112 + log_test "vlan" 113 + } 114 + 115 + ping_ipv4() 116 + { 117 + ping_test $h1 192.0.2.130 118 + } 119 + 120 + ping_ipv6() 121 + { 122 + ping6_test $h1 2001:db8:2::2 123 + } 124 + 125 + trap cleanup EXIT 126 + 127 + setup_prepare 128 + setup_wait 129 + 130 + tests_run 131 + 132 + exit $EXIT_STATUS