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

selftests: forwarding: Test action VLAN modify

Construct a basic topology consisting of two hosts connected using a
VLAN-aware bridge. Put each port in a different VLAN and test that ping
fails.

Add ingress and egress filters with a VLAN modify action and test that
ping passes.

Signed-off-by: Danielle Ratson <danieller@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Danielle Ratson and committed by
David S. Miller
2fcbc0b1 0637e1f8

+164
+164
tools/testing/selftests/net/forwarding/tc_vlan_modify.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + ALL_TESTS=" 5 + vlan_modify_ingress 6 + vlan_modify_egress 7 + " 8 + 9 + NUM_NETIFS=4 10 + CHECK_TC="yes" 11 + source lib.sh 12 + 13 + h1_create() 14 + { 15 + simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64 16 + vlan_create $h1 85 v$h1 192.0.2.17/28 2001:db8:2::1/64 17 + } 18 + 19 + h1_destroy() 20 + { 21 + vlan_destroy $h1 85 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.2/28 2001:db8:1::2/64 28 + vlan_create $h2 65 v$h2 192.0.2.18/28 2001:db8:2::2/64 29 + } 30 + 31 + h2_destroy() 32 + { 33 + vlan_destroy $h2 65 34 + simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64 35 + } 36 + 37 + switch_create() 38 + { 39 + ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0 40 + 41 + ip link set dev $swp1 master br0 42 + ip link set dev $swp2 master br0 43 + 44 + ip link set dev br0 up 45 + ip link set dev $swp1 up 46 + ip link set dev $swp2 up 47 + 48 + bridge vlan add dev $swp1 vid 85 49 + bridge vlan add dev $swp2 vid 65 50 + 51 + bridge vlan add dev $swp2 vid 85 52 + bridge vlan add dev $swp1 vid 65 53 + 54 + tc qdisc add dev $swp1 clsact 55 + tc qdisc add dev $swp2 clsact 56 + } 57 + 58 + switch_destroy() 59 + { 60 + tc qdisc del dev $swp2 clsact 61 + tc qdisc del dev $swp1 clsact 62 + 63 + bridge vlan del vid 65 dev $swp1 64 + bridge vlan del vid 85 dev $swp2 65 + 66 + bridge vlan del vid 65 dev $swp2 67 + bridge vlan del vid 85 dev $swp1 68 + 69 + ip link set dev $swp2 down 70 + ip link set dev $swp1 down 71 + 72 + ip link del dev br0 73 + } 74 + 75 + setup_prepare() 76 + { 77 + h1=${NETIFS[p1]} 78 + swp1=${NETIFS[p2]} 79 + 80 + swp2=${NETIFS[p3]} 81 + h2=${NETIFS[p4]} 82 + 83 + vrf_prepare 84 + 85 + h1_create 86 + h2_create 87 + 88 + switch_create 89 + } 90 + 91 + cleanup() 92 + { 93 + pre_cleanup 94 + 95 + switch_destroy 96 + 97 + h2_destroy 98 + h1_destroy 99 + 100 + vrf_cleanup 101 + } 102 + 103 + vlan_modify_ingress() 104 + { 105 + RET=0 106 + 107 + ping_do $h1.85 192.0.2.18 108 + check_fail $? "ping between two different vlans passed when should not" 109 + 110 + ping6_do $h1.85 2001:db8:2::2 111 + check_fail $? "ping6 between two different vlans passed when should not" 112 + 113 + tc filter add dev $swp1 ingress protocol all pref 1 handle 1 \ 114 + flower action vlan modify id 65 115 + tc filter add dev $swp2 ingress protocol all pref 1 handle 1 \ 116 + flower action vlan modify id 85 117 + 118 + ping_do $h1.85 192.0.2.18 119 + check_err $? "ping between two different vlans failed when should not" 120 + 121 + ping6_do $h1.85 2001:db8:2::2 122 + check_err $? "ping6 between two different vlans failed when should not" 123 + 124 + log_test "VLAN modify at ingress" 125 + 126 + tc filter del dev $swp2 ingress protocol all pref 1 handle 1 flower 127 + tc filter del dev $swp1 ingress protocol all pref 1 handle 1 flower 128 + } 129 + 130 + vlan_modify_egress() 131 + { 132 + RET=0 133 + 134 + ping_do $h1.85 192.0.2.18 135 + check_fail $? "ping between two different vlans passed when should not" 136 + 137 + ping6_do $h1.85 2001:db8:2::2 138 + check_fail $? "ping6 between two different vlans passed when should not" 139 + 140 + tc filter add dev $swp1 egress protocol all pref 1 handle 1 \ 141 + flower action vlan modify id 85 142 + tc filter add dev $swp2 egress protocol all pref 1 handle 1 \ 143 + flower action vlan modify id 65 144 + 145 + ping_do $h1.85 192.0.2.18 146 + check_err $? "ping between two different vlans failed when should not" 147 + 148 + ping6_do $h1.85 2001:db8:2::2 149 + check_err $? "ping6 between two different vlans failed when should not" 150 + 151 + log_test "VLAN modify at egress" 152 + 153 + tc filter del dev $swp2 egress protocol all pref 1 handle 1 flower 154 + tc filter del dev $swp1 egress protocol all pref 1 handle 1 flower 155 + } 156 + 157 + trap cleanup EXIT 158 + 159 + setup_prepare 160 + setup_wait 161 + 162 + tests_run 163 + 164 + exit $EXIT_STATUS