~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/net/forwarding/pedit_dsfield.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0
  3 
  4 # This test sends traffic from H1 to H2. Either on ingress of $swp1, or on
  5 # egress of $swp2, the traffic is acted upon by a pedit action. An ingress
  6 # filter installed on $h2 verifies that the packet looks like expected.
  7 #
  8 # +----------------------+                             +----------------------+
  9 # | H1                   |                             |                   H2 |
 10 # |    + $h1             |                             |            $h2 +     |
 11 # |    | 192.0.2.1/28    |                             |   192.0.2.2/28 |     |
 12 # +----|-----------------+                             +----------------|-----+
 13 #      |                                                                |
 14 # +----|----------------------------------------------------------------|-----+
 15 # | SW |                                                                |     |
 16 # |  +-|----------------------------------------------------------------|-+   |
 17 # |  | + $swp1                       BR                           $swp2 + |   |
 18 # |  +--------------------------------------------------------------------+   |
 19 # +---------------------------------------------------------------------------+
 20 
 21 ALL_TESTS="
 22         ping_ipv4
 23         ping_ipv6
 24         test_ip_dsfield
 25         test_ip_dscp
 26         test_ip_ecn
 27         test_ip_dscp_ecn
 28         test_ip6_dsfield
 29         test_ip6_dscp
 30         test_ip6_ecn
 31 "
 32 
 33 NUM_NETIFS=4
 34 source lib.sh
 35 source tc_common.sh
 36 
 37 : ${HIT_TIMEOUT:=2000} # ms
 38 
 39 h1_create()
 40 {
 41         simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
 42 }
 43 
 44 h1_destroy()
 45 {
 46         simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
 47 }
 48 
 49 h2_create()
 50 {
 51         simple_if_init $h2 192.0.2.2/28 2001:db8:1::2/64
 52         tc qdisc add dev $h2 clsact
 53 }
 54 
 55 h2_destroy()
 56 {
 57         tc qdisc del dev $h2 clsact
 58         simple_if_fini $h2 192.0.2.2/28 2001:db8:1::2/64
 59 }
 60 
 61 switch_create()
 62 {
 63         ip link add name br1 type bridge vlan_filtering 1
 64         ip link set dev br1 addrgenmode none
 65         ip link set dev br1 up
 66         ip link set dev $swp1 master br1
 67         ip link set dev $swp1 up
 68         ip link set dev $swp2 master br1
 69         ip link set dev $swp2 up
 70 
 71         tc qdisc add dev $swp1 clsact
 72         tc qdisc add dev $swp2 clsact
 73 }
 74 
 75 switch_destroy()
 76 {
 77         tc qdisc del dev $swp2 clsact
 78         tc qdisc del dev $swp1 clsact
 79 
 80         ip link set dev $swp2 down
 81         ip link set dev $swp2 nomaster
 82         ip link set dev $swp1 down
 83         ip link set dev $swp1 nomaster
 84         ip link del dev br1
 85 }
 86 
 87 setup_prepare()
 88 {
 89         h1=${NETIFS[p1]}
 90         swp1=${NETIFS[p2]}
 91 
 92         swp2=${NETIFS[p3]}
 93         h2=${NETIFS[p4]}
 94 
 95         h2mac=$(mac_get $h2)
 96 
 97         vrf_prepare
 98         h1_create
 99         h2_create
100         switch_create
101 }
102 
103 cleanup()
104 {
105         pre_cleanup
106 
107         switch_destroy
108         h2_destroy
109         h1_destroy
110         vrf_cleanup
111 }
112 
113 ping_ipv4()
114 {
115         ping_test $h1 192.0.2.2
116 }
117 
118 ping_ipv6()
119 {
120         ping6_test $h1 2001:db8:1::2
121 }
122 
123 do_test_pedit_dsfield_common()
124 {
125         local pedit_locus=$1; shift
126         local pedit_action=$1; shift
127         local mz_flags=$1; shift
128 
129         RET=0
130 
131         # TOS 125: DSCP 31, ECN 1. Used for testing that the relevant part is
132         # overwritten when zero is selected.
133         $MZ $mz_flags $h1 -c 10 -d 20msec -p 100 \
134             -a own -b $h2mac -q -t tcp tos=0x7d,sp=54321,dp=12345
135 
136         local pkts
137         pkts=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= 10" \
138                         tc_rule_handle_stats_get "dev $h2 ingress" 101)
139         check_err $? "Expected to get 10 packets on test probe, but got $pkts."
140 
141         pkts=$(tc_rule_handle_stats_get "$pedit_locus" 101)
142         ((pkts >= 10))
143         check_err $? "Expected to get 10 packets on pedit rule, but got $pkts."
144 
145         log_test "$pedit_locus pedit $pedit_action"
146 }
147 
148 do_test_pedit_dsfield()
149 {
150         local pedit_locus=$1; shift
151         local pedit_action=$1; shift
152         local match_prot=$1; shift
153         local match_flower=$1; shift
154         local mz_flags=$1; shift
155         local saddr=$1; shift
156         local daddr=$1; shift
157 
158         tc filter add $pedit_locus handle 101 pref 1 \
159            flower action pedit ex munge $pedit_action
160         tc filter add dev $h2 ingress handle 101 pref 1 prot $match_prot \
161            flower skip_hw $match_flower action pass
162 
163         do_test_pedit_dsfield_common "$pedit_locus" "$pedit_action" "$mz_flags"
164 
165         tc filter del dev $h2 ingress pref 1
166         tc filter del $pedit_locus pref 1
167 }
168 
169 do_test_ip_dsfield()
170 {
171         local locus=$1; shift
172         local dsfield
173 
174         for dsfield in 0 1 2 3 128 252 253 254 255; do
175                 do_test_pedit_dsfield "$locus"                          \
176                                       "ip dsfield set $dsfield"         \
177                                       ip "ip_tos $dsfield"              \
178                                       "-A 192.0.2.1 -B 192.0.2.2"
179         done
180 }
181 
182 test_ip_dsfield()
183 {
184         do_test_ip_dsfield "dev $swp1 ingress"
185         do_test_ip_dsfield "dev $swp2 egress"
186 }
187 
188 do_test_ip_dscp()
189 {
190         local locus=$1; shift
191         local dscp
192 
193         for dscp in 0 1 2 3 32 61 62 63; do
194                 do_test_pedit_dsfield "$locus"                                 \
195                                   "ip dsfield set $((dscp << 2)) retain 0xfc"  \
196                                   ip "ip_tos $(((dscp << 2) | 1))"             \
197                                   "-A 192.0.2.1 -B 192.0.2.2"
198         done
199 }
200 
201 test_ip_dscp()
202 {
203         do_test_ip_dscp "dev $swp1 ingress"
204         do_test_ip_dscp "dev $swp2 egress"
205 }
206 
207 do_test_ip_ecn()
208 {
209         local locus=$1; shift
210         local ecn
211 
212         for ecn in 0 1 2 3; do
213                 do_test_pedit_dsfield "$locus"                          \
214                                       "ip dsfield set $ecn retain 0x03" \
215                                       ip "ip_tos $((124 | $ecn))"       \
216                                       "-A 192.0.2.1 -B 192.0.2.2"
217         done
218 }
219 
220 test_ip_ecn()
221 {
222         do_test_ip_ecn "dev $swp1 ingress"
223         do_test_ip_ecn "dev $swp2 egress"
224 }
225 
226 do_test_ip_dscp_ecn()
227 {
228         local locus=$1; shift
229 
230         tc filter add $locus handle 101 pref 1                          \
231            flower action pedit ex munge ip dsfield set 124 retain 0xfc  \
232                   action pedit ex munge ip dsfield set 1 retain 0x03
233         tc filter add dev $h2 ingress handle 101 pref 1 prot ip         \
234            flower skip_hw ip_tos 125 action pass
235 
236         do_test_pedit_dsfield_common "$locus" "set DSCP + set ECN"      \
237                                       "-A 192.0.2.1 -B 192.0.2.2"
238 
239         tc filter del dev $h2 ingress pref 1
240         tc filter del $locus pref 1
241 }
242 
243 test_ip_dscp_ecn()
244 {
245         do_test_ip_dscp_ecn "dev $swp1 ingress"
246         do_test_ip_dscp_ecn "dev $swp2 egress"
247 }
248 
249 do_test_ip6_dsfield()
250 {
251         local locus=$1; shift
252         local dsfield
253 
254         for dsfield in 0 1 2 3 128 252 253 254 255; do
255                 do_test_pedit_dsfield "$locus"                          \
256                                   "ip6 traffic_class set $dsfield"      \
257                                   ipv6 "ip_tos $dsfield"                \
258                                   "-6 -A 2001:db8:1::1 -B 2001:db8:1::2"
259         done
260 }
261 
262 test_ip6_dsfield()
263 {
264         do_test_ip6_dsfield "dev $swp1 ingress"
265         do_test_ip6_dsfield "dev $swp2 egress"
266 }
267 
268 do_test_ip6_dscp()
269 {
270         local locus=$1; shift
271         local dscp
272 
273         for dscp in 0 1 2 3 32 61 62 63; do
274                 do_test_pedit_dsfield "$locus"                                 \
275                             "ip6 traffic_class set $((dscp << 2)) retain 0xfc" \
276                             ipv6 "ip_tos $(((dscp << 2) | 1))"                 \
277                             "-6 -A 2001:db8:1::1 -B 2001:db8:1::2"
278         done
279 }
280 
281 test_ip6_dscp()
282 {
283         do_test_ip6_dscp "dev $swp1 ingress"
284         do_test_ip6_dscp "dev $swp2 egress"
285 }
286 
287 do_test_ip6_ecn()
288 {
289         local locus=$1; shift
290         local ecn
291 
292         for ecn in 0 1 2 3; do
293                 do_test_pedit_dsfield "$locus"                          \
294                                 "ip6 traffic_class set $ecn retain 0x3" \
295                                 ipv6 "ip_tos $((124 | $ecn))"           \
296                                 "-6 -A 2001:db8:1::1 -B 2001:db8:1::2"
297         done
298 }
299 
300 test_ip6_ecn()
301 {
302         do_test_ip6_ecn "dev $swp1 ingress"
303         do_test_ip6_ecn "dev $swp2 egress"
304 }
305 
306 trap cleanup EXIT
307 
308 setup_prepare
309 setup_wait
310 
311 tests_run
312 
313 exit $EXIT_STATUS

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php