Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ALL_TESTS="
0005         vlan_modify_ingress
0006         vlan_modify_egress
0007 "
0008 
0009 NUM_NETIFS=4
0010 CHECK_TC="yes"
0011 source lib.sh
0012 
0013 h1_create()
0014 {
0015         simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
0016         vlan_create $h1 85 v$h1 192.0.2.17/28 2001:db8:2::1/64
0017 }
0018 
0019 h1_destroy()
0020 {
0021         vlan_destroy $h1 85
0022         simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
0023 }
0024 
0025 h2_create()
0026 {
0027         simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/64
0028         vlan_create $h2 65 v$h2 192.0.2.18/28 2001:db8:2::2/64
0029 }
0030 
0031 h2_destroy()
0032 {
0033         vlan_destroy $h2 65
0034         simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64
0035 }
0036 
0037 switch_create()
0038 {
0039         ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0
0040 
0041         ip link set dev $swp1 master br0
0042         ip link set dev $swp2 master br0
0043 
0044         ip link set dev br0 up
0045         ip link set dev $swp1 up
0046         ip link set dev $swp2 up
0047 
0048         bridge vlan add dev $swp1 vid 85
0049         bridge vlan add dev $swp2 vid 65
0050 
0051         bridge vlan add dev $swp2 vid 85
0052         bridge vlan add dev $swp1 vid 65
0053 
0054         tc qdisc add dev $swp1 clsact
0055         tc qdisc add dev $swp2 clsact
0056 }
0057 
0058 switch_destroy()
0059 {
0060         tc qdisc del dev $swp2 clsact
0061         tc qdisc del dev $swp1 clsact
0062 
0063         bridge vlan del vid 65 dev $swp1
0064         bridge vlan del vid 85 dev $swp2
0065 
0066         bridge vlan del vid 65 dev $swp2
0067         bridge vlan del vid 85 dev $swp1
0068 
0069         ip link set dev $swp2 down
0070         ip link set dev $swp1 down
0071 
0072         ip link del dev br0
0073 }
0074 
0075 setup_prepare()
0076 {
0077         h1=${NETIFS[p1]}
0078         swp1=${NETIFS[p2]}
0079 
0080         swp2=${NETIFS[p3]}
0081         h2=${NETIFS[p4]}
0082 
0083         vrf_prepare
0084 
0085         h1_create
0086         h2_create
0087 
0088         switch_create
0089 }
0090 
0091 cleanup()
0092 {
0093         pre_cleanup
0094 
0095         switch_destroy
0096 
0097         h2_destroy
0098         h1_destroy
0099 
0100         vrf_cleanup
0101 }
0102 
0103 vlan_modify_ingress()
0104 {
0105         RET=0
0106 
0107         ping_do $h1.85 192.0.2.18
0108         check_fail $? "ping between two different vlans passed when should not"
0109 
0110         ping6_do $h1.85 2001:db8:2::2
0111         check_fail $? "ping6 between two different vlans passed when should not"
0112 
0113         tc filter add dev $swp1 ingress protocol all pref 1 handle 1 \
0114                 flower action vlan modify id 65
0115         tc filter add dev $swp2 ingress protocol all pref 1 handle 1 \
0116                 flower action vlan modify id 85
0117 
0118         ping_do $h1.85 192.0.2.18
0119         check_err $? "ping between two different vlans failed when should not"
0120 
0121         ping6_do $h1.85 2001:db8:2::2
0122         check_err $? "ping6 between two different vlans failed when should not"
0123 
0124         log_test "VLAN modify at ingress"
0125 
0126         tc filter del dev $swp2 ingress protocol all pref 1 handle 1 flower
0127         tc filter del dev $swp1 ingress protocol all pref 1 handle 1 flower
0128 }
0129 
0130 vlan_modify_egress()
0131 {
0132         RET=0
0133 
0134         ping_do $h1.85 192.0.2.18
0135         check_fail $? "ping between two different vlans passed when should not"
0136 
0137         ping6_do $h1.85 2001:db8:2::2
0138         check_fail $? "ping6 between two different vlans passed when should not"
0139 
0140         tc filter add dev $swp1 egress protocol all pref 1 handle 1 \
0141                 flower action vlan modify id 85
0142         tc filter add dev $swp2 egress protocol all pref 1 handle 1 \
0143                 flower action vlan modify id 65
0144 
0145         ping_do $h1.85 192.0.2.18
0146         check_err $? "ping between two different vlans failed when should not"
0147 
0148         ping6_do $h1.85 2001:db8:2::2
0149         check_err $? "ping6 between two different vlans failed when should not"
0150 
0151         log_test "VLAN modify at egress"
0152 
0153         tc filter del dev $swp2 egress protocol all pref 1 handle 1 flower
0154         tc filter del dev $swp1 egress protocol all pref 1 handle 1 flower
0155 }
0156 
0157 trap cleanup EXIT
0158 
0159 setup_prepare
0160 setup_wait
0161 
0162 tests_run
0163 
0164 exit $EXIT_STATUS