| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| ALL_TESTS=" | |
| vlan_modify_ingress | |
| vlan_modify_egress | |
| " | |
| NUM_NETIFS=4 | |
| CHECK_TC="yes" | |
| source lib.sh | |
| h1_create() | |
| { | |
| simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64 | |
| vlan_create $h1 85 v$h1 192.0.2.17/28 2001:db8:2::1/64 | |
| } | |
| h1_destroy() | |
| { | |
| vlan_destroy $h1 85 | |
| simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64 | |
| } | |
| h2_create() | |
| { | |
| simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/64 | |
| vlan_create $h2 65 v$h2 192.0.2.18/28 2001:db8:2::2/64 | |
| } | |
| h2_destroy() | |
| { | |
| vlan_destroy $h2 65 | |
| simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64 | |
| } | |
| switch_create() | |
| { | |
| ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0 | |
| ip link set dev $swp1 master br0 | |
| ip link set dev $swp2 master br0 | |
| ip link set dev br0 up | |
| ip link set dev $swp1 up | |
| ip link set dev $swp2 up | |
| bridge vlan add dev $swp1 vid 85 | |
| bridge vlan add dev $swp2 vid 65 | |
| bridge vlan add dev $swp2 vid 85 | |
| bridge vlan add dev $swp1 vid 65 | |
| tc qdisc add dev $swp1 clsact | |
| tc qdisc add dev $swp2 clsact | |
| } | |
| switch_destroy() | |
| { | |
| tc qdisc del dev $swp2 clsact | |
| tc qdisc del dev $swp1 clsact | |
| bridge vlan del vid 65 dev $swp1 | |
| bridge vlan del vid 85 dev $swp2 | |
| bridge vlan del vid 65 dev $swp2 | |
| bridge vlan del vid 85 dev $swp1 | |
| ip link set dev $swp2 down | |
| ip link set dev $swp1 down | |
| ip link del dev br0 | |
| } | |
| setup_prepare() | |
| { | |
| h1=${NETIFS[p1]} | |
| swp1=${NETIFS[p2]} | |
| swp2=${NETIFS[p3]} | |
| h2=${NETIFS[p4]} | |
| vrf_prepare | |
| h1_create | |
| h2_create | |
| switch_create | |
| } | |
| cleanup() | |
| { | |
| pre_cleanup | |
| switch_destroy | |
| h2_destroy | |
| h1_destroy | |
| vrf_cleanup | |
| } | |
| vlan_modify_ingress() | |
| { | |
| RET=0 | |
| ping_do $h1.85 192.0.2.18 | |
| check_fail $? "ping between two different vlans passed when should not" | |
| ping6_do $h1.85 2001:db8:2::2 | |
| check_fail $? "ping6 between two different vlans passed when should not" | |
| tc filter add dev $swp1 ingress protocol all pref 1 handle 1 \ | |
| flower action vlan modify id 65 | |
| tc filter add dev $swp2 ingress protocol all pref 1 handle 1 \ | |
| flower action vlan modify id 85 | |
| ping_do $h1.85 192.0.2.18 | |
| check_err $? "ping between two different vlans failed when should not" | |
| ping6_do $h1.85 2001:db8:2::2 | |
| check_err $? "ping6 between two different vlans failed when should not" | |
| log_test "VLAN modify at ingress" | |
| tc filter del dev $swp2 ingress protocol all pref 1 handle 1 flower | |
| tc filter del dev $swp1 ingress protocol all pref 1 handle 1 flower | |
| } | |
| vlan_modify_egress() | |
| { | |
| RET=0 | |
| ping_do $h1.85 192.0.2.18 | |
| check_fail $? "ping between two different vlans passed when should not" | |
| ping6_do $h1.85 2001:db8:2::2 | |
| check_fail $? "ping6 between two different vlans passed when should not" | |
| tc filter add dev $swp1 egress protocol all pref 1 handle 1 \ | |
| flower action vlan modify id 85 | |
| tc filter add dev $swp2 egress protocol all pref 1 handle 1 \ | |
| flower action vlan modify id 65 | |
| ping_do $h1.85 192.0.2.18 | |
| check_err $? "ping between two different vlans failed when should not" | |
| ping6_do $h1.85 2001:db8:2::2 | |
| check_err $? "ping6 between two different vlans failed when should not" | |
| log_test "VLAN modify at egress" | |
| tc filter del dev $swp2 egress protocol all pref 1 handle 1 flower | |
| tc filter del dev $swp1 egress protocol all pref 1 handle 1 flower | |
| } | |
| trap cleanup EXIT | |
| setup_prepare | |
| setup_wait | |
| tests_run | |
| exit $EXIT_STATUS |