0001
0002
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