xref: /aosp_15_r20/external/iproute2/testsuite/tests/tc/pedit.t (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker#!/bin/sh
2*de1e4e89SAndroid Build Coastguard Worker
3*de1e4e89SAndroid Build Coastguard Worker. lib/generic.sh
4*de1e4e89SAndroid Build Coastguard Worker
5*de1e4e89SAndroid Build Coastguard WorkerDEV="$(rand_dev)"
6*de1e4e89SAndroid Build Coastguard Workerts_ip "$0" "Add $DEV dummy interface" link add dev $DEV type dummy
7*de1e4e89SAndroid Build Coastguard Workerts_ip "$0" "Enable $DEV" link set $DEV up
8*de1e4e89SAndroid Build Coastguard Workerts_tc "pedit" "Add ingress qdisc" qdisc add dev $DEV ingress
9*de1e4e89SAndroid Build Coastguard Worker
10*de1e4e89SAndroid Build Coastguard Worker
11*de1e4e89SAndroid Build Coastguard Workerdo_pedit() {
12*de1e4e89SAndroid Build Coastguard Worker	ts_tc "pedit" "Drop ingress qdisc" \
13*de1e4e89SAndroid Build Coastguard Worker		qdisc del dev $DEV ingress
14*de1e4e89SAndroid Build Coastguard Worker	ts_tc "pedit" "Add ingress qdisc" \
15*de1e4e89SAndroid Build Coastguard Worker		qdisc add dev $DEV ingress
16*de1e4e89SAndroid Build Coastguard Worker	ts_tc "pedit" "Add pedit action $*" \
17*de1e4e89SAndroid Build Coastguard Worker		filter add dev $DEV parent ffff: \
18*de1e4e89SAndroid Build Coastguard Worker		u32 match u32 0 0 \
19*de1e4e89SAndroid Build Coastguard Worker		action pedit munge $@
20*de1e4e89SAndroid Build Coastguard Worker	ts_tc "pedit" "Show ingress filters" \
21*de1e4e89SAndroid Build Coastguard Worker		filter show dev $DEV parent ffff:
22*de1e4e89SAndroid Build Coastguard Worker}
23*de1e4e89SAndroid Build Coastguard Worker
24*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u32 set 0x12345678
25*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 12345678 mask 00000000"
26*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u16 set 0x1234
27*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 12340000 mask 0000ffff"
28*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 14 u16 set 0x1234
29*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00001234 mask ffff0000"
30*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u8 set 0x23
31*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 23000000 mask 00ffffff"
32*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 set 0x23
33*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00230000 mask ff00ffff"
34*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 14 u8 set 0x23
35*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00002300 mask ffff00ff"
36*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 15 u8 set 0x23
37*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00000023 mask ffffff00"
38*de1e4e89SAndroid Build Coastguard Worker
39*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 invert
40*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00ff0000 mask ffffffff"
41*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 clear
42*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00000000 mask ff00ffff"
43*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 preserve
44*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00000000 mask ffffffff"
45*de1e4e89SAndroid Build Coastguard Worker
46*de1e4e89SAndroid Build Coastguard Worker# the following set of tests has been auto-generated by running this little
47*de1e4e89SAndroid Build Coastguard Worker# shell script:
48*de1e4e89SAndroid Build Coastguard Worker#
49*de1e4e89SAndroid Build Coastguard Worker# do_it() {
50*de1e4e89SAndroid Build Coastguard Worker#	echo "do_pedit $@"
51*de1e4e89SAndroid Build Coastguard Worker#	tc qd del dev veth0 ingress >/dev/null 2>&1
52*de1e4e89SAndroid Build Coastguard Worker#	tc qd add dev veth0 ingress >/dev/null 2>&1
53*de1e4e89SAndroid Build Coastguard Worker#	tc filter add dev veth0 parent ffff: u32 \
54*de1e4e89SAndroid Build Coastguard Worker#		match u32 0 0 \
55*de1e4e89SAndroid Build Coastguard Worker#		action pedit munge $@ >/dev/null 2>&1
56*de1e4e89SAndroid Build Coastguard Worker#	tc filter show dev veth0 parent ffff: | \
57*de1e4e89SAndroid Build Coastguard Worker#		sed -n 's/^[\t ]*\(key #0.*\)/test_on "\1"/p'
58*de1e4e89SAndroid Build Coastguard Worker# }
59*de1e4e89SAndroid Build Coastguard Worker#
60*de1e4e89SAndroid Build Coastguard Worker# do_it_all() { # (field, val1 [, val2, ...])
61*de1e4e89SAndroid Build Coastguard Worker#	local field=$1
62*de1e4e89SAndroid Build Coastguard Worker#	shift
63*de1e4e89SAndroid Build Coastguard Worker#	for val in $@; do
64*de1e4e89SAndroid Build Coastguard Worker#		do_it ip $field set $val
65*de1e4e89SAndroid Build Coastguard Worker#	done
66*de1e4e89SAndroid Build Coastguard Worker#	for i in preserve invert clear; do
67*de1e4e89SAndroid Build Coastguard Worker#		do_it ip $field $i
68*de1e4e89SAndroid Build Coastguard Worker#	done
69*de1e4e89SAndroid Build Coastguard Worker# }
70*de1e4e89SAndroid Build Coastguard Worker#
71*de1e4e89SAndroid Build Coastguard Worker# do_it_all ihl 0x04 0x40
72*de1e4e89SAndroid Build Coastguard Worker# do_it_all src 1.2.3.4
73*de1e4e89SAndroid Build Coastguard Worker# do_it_all dst 1.2.3.4
74*de1e4e89SAndroid Build Coastguard Worker# do_it_all tos 0x1 0x10
75*de1e4e89SAndroid Build Coastguard Worker# do_it_all protocol 0x23
76*de1e4e89SAndroid Build Coastguard Worker# do_it_all nofrag 0x23 0xf4
77*de1e4e89SAndroid Build Coastguard Worker# do_it_all firstfrag 0x03 0xfa
78*de1e4e89SAndroid Build Coastguard Worker# do_it_all ce 0x23 0x04 0xf3
79*de1e4e89SAndroid Build Coastguard Worker# do_it_all df 0x23 0x04 0xf3
80*de1e4e89SAndroid Build Coastguard Worker# do_it_all mf 0x23 0x04 0xf3
81*de1e4e89SAndroid Build Coastguard Worker# do_it_all dport 0x1234
82*de1e4e89SAndroid Build Coastguard Worker# do_it_all sport 0x1234
83*de1e4e89SAndroid Build Coastguard Worker# do_it_all icmp_type 0x23
84*de1e4e89SAndroid Build Coastguard Worker# do_it_all icmp_code 0x23
85*de1e4e89SAndroid Build Coastguard Worker
86*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl set 0x04
87*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 04000000 mask f0ffffff"
88*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl set 0x40
89*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00000000 mask f0ffffff"
90*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl preserve
91*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00000000 mask ffffffff"
92*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl invert
93*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 0f000000 mask ffffffff"
94*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl clear
95*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00000000 mask f0ffffff"
96*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src set 1.2.3.4
97*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 01020304 mask 00000000"
98*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src preserve
99*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00000000 mask ffffffff"
100*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src invert
101*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val ffffffff mask ffffffff"
102*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src clear
103*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 12: val 00000000 mask 00000000"
104*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst set 1.2.3.4
105*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 16: val 01020304 mask 00000000"
106*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst preserve
107*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 16: val 00000000 mask ffffffff"
108*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst invert
109*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 16: val ffffffff mask ffffffff"
110*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst clear
111*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 16: val 00000000 mask 00000000"
112*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos set 0x1
113*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00010000 mask ff00ffff"
114*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos set 0x10
115*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00100000 mask ff00ffff"
116*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos preserve
117*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00000000 mask ffffffff"
118*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos invert
119*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00ff0000 mask ffffffff"
120*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos clear
121*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 0: val 00000000 mask ff00ffff"
122*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol set 0x23
123*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 8: val 00230000 mask ff00ffff"
124*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol preserve
125*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 8: val 00000000 mask ffffffff"
126*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol invert
127*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 8: val 00ff0000 mask ffffffff"
128*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol clear
129*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 8: val 00000000 mask ff00ffff"
130*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag set 0x23
131*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00002300 mask ffffc0ff"
132*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag set 0xf4
133*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00003400 mask ffffc0ff"
134*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag preserve
135*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffffff"
136*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag invert
137*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00003f00 mask ffffffff"
138*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag clear
139*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffc0ff"
140*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag set 0x03
141*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000300 mask ffffe0ff"
142*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag set 0xfa
143*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00001a00 mask ffffe0ff"
144*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag preserve
145*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffffff"
146*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag invert
147*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00001f00 mask ffffffff"
148*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag clear
149*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffe0ff"
150*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0x23
151*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffff7fff"
152*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0x04
153*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffff7fff"
154*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0xf3
155*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00008000 mask ffff7fff"
156*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce preserve
157*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffffff"
158*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce invert
159*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00008000 mask ffffffff"
160*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce clear
161*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffff7fff"
162*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0x23
163*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffbfff"
164*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0x04
165*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffbfff"
166*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0xf3
167*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00004000 mask ffffbfff"
168*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df preserve
169*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffffff"
170*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df invert
171*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00004000 mask ffffffff"
172*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df clear
173*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffbfff"
174*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0x23
175*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00002000 mask ffffdfff"
176*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0x04
177*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffdfff"
178*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0xf3
179*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00002000 mask ffffdfff"
180*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf preserve
181*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffffff"
182*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf invert
183*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00002000 mask ffffffff"
184*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf clear
185*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 4: val 00000000 mask ffffdfff"
186*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport set 0x1234
187*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00001234 mask ffff0000"
188*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport preserve
189*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask ffffffff"
190*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport invert
191*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 0000ffff mask ffffffff"
192*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport clear
193*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask ffff0000"
194*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport set 0x1234
195*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 12340000 mask 0000ffff"
196*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport preserve
197*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask ffffffff"
198*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport invert
199*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val ffff0000 mask ffffffff"
200*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport clear
201*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask 0000ffff"
202*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type set 0x23
203*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 23000000 mask 00ffffff"
204*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type preserve
205*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask ffffffff"
206*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type invert
207*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val ff000000 mask ffffffff"
208*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type clear
209*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask 00ffffff"
210*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code set 0x23
211*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 23000000 mask 00ffffff"
212*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code preserve
213*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask ffffffff"
214*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code invert
215*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val ff000000 mask ffffffff"
216*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code clear
217*de1e4e89SAndroid Build Coastguard Workertest_on "key #0  at 20: val 00000000 mask 00ffffff"
218