165 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4ALL_TESTS="5 vlan_modify_ingress6 vlan_modify_egress7"8 9NUM_NETIFS=410CHECK_TC="yes"11source lib.sh12 13h1_create()14{15 simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/6416 vlan_create $h1 85 v$h1 192.0.2.17/28 2001:db8:2::1/6417}18 19h1_destroy()20{21 vlan_destroy $h1 8522 simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/6423}24 25h2_create()26{27 simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/6428 vlan_create $h2 65 v$h2 192.0.2.18/28 2001:db8:2::2/6429}30 31h2_destroy()32{33 vlan_destroy $h2 6534 simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/6435}36 37switch_create()38{39 ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 040 41 ip link set dev $swp1 master br042 ip link set dev $swp2 master br043 44 ip link set dev br0 up45 ip link set dev $swp1 up46 ip link set dev $swp2 up47 48 bridge vlan add dev $swp1 vid 8549 bridge vlan add dev $swp2 vid 6550 51 bridge vlan add dev $swp2 vid 8552 bridge vlan add dev $swp1 vid 6553 54 tc qdisc add dev $swp1 clsact55 tc qdisc add dev $swp2 clsact56}57 58switch_destroy()59{60 tc qdisc del dev $swp2 clsact61 tc qdisc del dev $swp1 clsact62 63 bridge vlan del vid 65 dev $swp164 bridge vlan del vid 85 dev $swp265 66 bridge vlan del vid 65 dev $swp267 bridge vlan del vid 85 dev $swp168 69 ip link set dev $swp2 down70 ip link set dev $swp1 down71 72 ip link del dev br073}74 75setup_prepare()76{77 h1=${NETIFS[p1]}78 swp1=${NETIFS[p2]}79 80 swp2=${NETIFS[p3]}81 h2=${NETIFS[p4]}82 83 vrf_prepare84 85 h1_create86 h2_create87 88 switch_create89}90 91cleanup()92{93 pre_cleanup94 95 switch_destroy96 97 h2_destroy98 h1_destroy99 100 vrf_cleanup101}102 103vlan_modify_ingress()104{105 RET=0106 107 ping_do $h1.85 192.0.2.18108 check_fail $? "ping between two different vlans passed when should not"109 110 ping6_do $h1.85 2001:db8:2::2111 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 65115 tc filter add dev $swp2 ingress protocol all pref 1 handle 1 \116 flower action vlan modify id 85117 118 ping_do $h1.85 192.0.2.18119 check_err $? "ping between two different vlans failed when should not"120 121 ping6_do $h1.85 2001:db8:2::2122 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 flower127 tc filter del dev $swp1 ingress protocol all pref 1 handle 1 flower128}129 130vlan_modify_egress()131{132 RET=0133 134 ping_do $h1.85 192.0.2.18135 check_fail $? "ping between two different vlans passed when should not"136 137 ping6_do $h1.85 2001:db8:2::2138 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 85142 tc filter add dev $swp2 egress protocol all pref 1 handle 1 \143 flower action vlan modify id 65144 145 ping_do $h1.85 192.0.2.18146 check_err $? "ping between two different vlans failed when should not"147 148 ping6_do $h1.85 2001:db8:2::2149 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 flower154 tc filter del dev $swp1 egress protocol all pref 1 handle 1 flower155}156 157trap cleanup EXIT158 159setup_prepare160setup_wait161 162tests_run163 164exit $EXIT_STATUS165