Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4ALL_TESTS="shared_block_test match_indev_test"
5NUM_NETIFS=4
6source tc_common.sh
7source lib.sh
8
9tcflags="skip_hw"
10
11h1_create()
12{
13 simple_if_init $h1 192.0.2.1/24
14}
15
16h1_destroy()
17{
18 simple_if_fini $h1 192.0.2.1/24
19}
20
21h2_create()
22{
23 simple_if_init $h2 192.0.2.1/24
24}
25
26h2_destroy()
27{
28 simple_if_fini $h2 192.0.2.1/24
29}
30
31switch_create()
32{
33 simple_if_init $swp1 192.0.2.2/24
34 tc qdisc add dev $swp1 ingress_block 22 egress_block 23 clsact
35
36 simple_if_init $swp2 192.0.2.2/24
37 tc qdisc add dev $swp2 ingress_block 22 egress_block 23 clsact
38}
39
40switch_destroy()
41{
42 tc qdisc del dev $swp2 clsact
43 simple_if_fini $swp2 192.0.2.2/24
44
45 tc qdisc del dev $swp1 clsact
46 simple_if_fini $swp1 192.0.2.2/24
47}
48
49shared_block_test()
50{
51 RET=0
52
53 tc filter add block 22 protocol ip pref 1 handle 101 flower \
54 $tcflags dst_ip 192.0.2.2 action drop
55
56 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \
57 -t ip -q
58
59 tc_check_packets "block 22" 101 1
60 check_err $? "Did not match first incoming packet on a block"
61
62 $MZ $h2 -c 1 -p 64 -a $h2mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \
63 -t ip -q
64
65 tc_check_packets "block 22" 101 2
66 check_err $? "Did not match second incoming packet on a block"
67
68 tc filter del block 22 protocol ip pref 1 handle 101 flower
69
70 log_test "shared block ($tcflags)"
71}
72
73match_indev_test()
74{
75 RET=0
76
77 tc filter add block 22 protocol ip pref 1 handle 101 flower \
78 $tcflags indev $swp1 dst_mac $swmac action drop
79 tc filter add block 22 protocol ip pref 2 handle 102 flower \
80 $tcflags indev $swp2 dst_mac $swmac action drop
81
82 $MZ $h1 -c 1 -p 64 -a $h1mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \
83 -t ip -q
84
85 tc_check_packets "block 22" 101 1
86 check_err $? "Did not match first incoming packet on a block"
87
88 $MZ $h2 -c 1 -p 64 -a $h2mac -b $swmac -A 192.0.2.1 -B 192.0.2.2 \
89 -t ip -q
90
91 tc_check_packets "block 22" 102 1
92 check_err $? "Did not match second incoming packet on a block"
93
94 tc filter del block 22 protocol ip pref 1 handle 101 flower
95 tc filter del block 22 protocol ip pref 2 handle 102 flower
96
97 log_test "indev match ($tcflags)"
98}
99
100setup_prepare()
101{
102 h1=${NETIFS[p1]}
103 swp1=${NETIFS[p2]}
104
105 swp2=${NETIFS[p3]}
106 h2=${NETIFS[p4]}
107
108 h1mac=$(mac_get $h1)
109 h2mac=$(mac_get $h2)
110
111 swmac=$(mac_get $swp1)
112 swp2origmac=$(mac_get $swp2)
113 ip link set $swp2 address $swmac
114
115 vrf_prepare
116
117 h1_create
118 h2_create
119 switch_create
120}
121
122cleanup()
123{
124 pre_cleanup
125
126 switch_destroy
127 h2_destroy
128 h1_destroy
129
130 vrf_cleanup
131
132 ip link set $swp2 address $swp2origmac
133}
134
135check_tc_shblock_support
136
137trap cleanup EXIT
138
139setup_prepare
140setup_wait
141
142tests_run
143
144tc_offload_check
145if [[ $? -ne 0 ]]; then
146 log_info "Could not test offloaded functionality"
147else
148 tcflags="skip_sw"
149 tests_run
150fi
151
152exit $EXIT_STATUS