xref: /linux/tools/testing/selftests/bpf/prog_tests/test_csum_diff.c (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1*00c1f3dcSPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*00c1f3dcSPuranjay Mohan /* Copyright Amazon.com Inc. or its affiliates */
3*00c1f3dcSPuranjay Mohan #include <test_progs.h>
4*00c1f3dcSPuranjay Mohan #include "csum_diff_test.skel.h"
5*00c1f3dcSPuranjay Mohan 
6*00c1f3dcSPuranjay Mohan #define BUFF_SZ 512
7*00c1f3dcSPuranjay Mohan 
8*00c1f3dcSPuranjay Mohan struct testcase {
9*00c1f3dcSPuranjay Mohan 	unsigned long long to_buff[BUFF_SZ / 8];
10*00c1f3dcSPuranjay Mohan 	unsigned int to_buff_len;
11*00c1f3dcSPuranjay Mohan 	unsigned long long from_buff[BUFF_SZ / 8];
12*00c1f3dcSPuranjay Mohan 	unsigned int from_buff_len;
13*00c1f3dcSPuranjay Mohan 	unsigned short seed;
14*00c1f3dcSPuranjay Mohan 	unsigned short result;
15*00c1f3dcSPuranjay Mohan };
16*00c1f3dcSPuranjay Mohan 
17*00c1f3dcSPuranjay Mohan #define NUM_PUSH_TESTS 4
18*00c1f3dcSPuranjay Mohan 
19*00c1f3dcSPuranjay Mohan struct testcase push_tests[NUM_PUSH_TESTS] = {
20*00c1f3dcSPuranjay Mohan 	{
21*00c1f3dcSPuranjay Mohan 		.to_buff = {
22*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
23*00c1f3dcSPuranjay Mohan 		},
24*00c1f3dcSPuranjay Mohan 		.to_buff_len = 8,
25*00c1f3dcSPuranjay Mohan 		.from_buff = {},
26*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
27*00c1f3dcSPuranjay Mohan 		.seed = 0,
28*00c1f3dcSPuranjay Mohan 		.result = 0x3b3b
29*00c1f3dcSPuranjay Mohan 	},
30*00c1f3dcSPuranjay Mohan 	{
31*00c1f3dcSPuranjay Mohan 		.to_buff = {
32*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
33*00c1f3dcSPuranjay Mohan 			0xbeefdeadbeefdead,
34*00c1f3dcSPuranjay Mohan 		},
35*00c1f3dcSPuranjay Mohan 		.to_buff_len = 16,
36*00c1f3dcSPuranjay Mohan 		.from_buff = {},
37*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
38*00c1f3dcSPuranjay Mohan 		.seed = 0x1234,
39*00c1f3dcSPuranjay Mohan 		.result = 0x88aa
40*00c1f3dcSPuranjay Mohan 	},
41*00c1f3dcSPuranjay Mohan 	{
42*00c1f3dcSPuranjay Mohan 		.to_buff = {
43*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
44*00c1f3dcSPuranjay Mohan 			0xbeefdeadbeefdead,
45*00c1f3dcSPuranjay Mohan 		},
46*00c1f3dcSPuranjay Mohan 		.to_buff_len = 15,
47*00c1f3dcSPuranjay Mohan 		.from_buff = {},
48*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
49*00c1f3dcSPuranjay Mohan 		.seed = 0x1234,
50*00c1f3dcSPuranjay Mohan #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
51*00c1f3dcSPuranjay Mohan 		.result = 0xcaa9
52*00c1f3dcSPuranjay Mohan #else
53*00c1f3dcSPuranjay Mohan 		.result = 0x87fd
54*00c1f3dcSPuranjay Mohan #endif
55*00c1f3dcSPuranjay Mohan 	},
56*00c1f3dcSPuranjay Mohan 	{
57*00c1f3dcSPuranjay Mohan 		.to_buff = {
58*00c1f3dcSPuranjay Mohan 			0x327b23c66b8b4567,
59*00c1f3dcSPuranjay Mohan 			0x66334873643c9869,
60*00c1f3dcSPuranjay Mohan 			0x19495cff74b0dc51,
61*00c1f3dcSPuranjay Mohan 			0x625558ec2ae8944a,
62*00c1f3dcSPuranjay Mohan 			0x46e87ccd238e1f29,
63*00c1f3dcSPuranjay Mohan 			0x507ed7ab3d1b58ba,
64*00c1f3dcSPuranjay Mohan 			0x41b71efb2eb141f2,
65*00c1f3dcSPuranjay Mohan 			0x7545e14679e2a9e3,
66*00c1f3dcSPuranjay Mohan 			0x5bd062c2515f007c,
67*00c1f3dcSPuranjay Mohan 			0x4db127f812200854,
68*00c1f3dcSPuranjay Mohan 			0x1f16e9e80216231b,
69*00c1f3dcSPuranjay Mohan 			0x66ef438d1190cde7,
70*00c1f3dcSPuranjay Mohan 			0x3352255a140e0f76,
71*00c1f3dcSPuranjay Mohan 			0x0ded7263109cf92e,
72*00c1f3dcSPuranjay Mohan 			0x1befd79f7fdcc233,
73*00c1f3dcSPuranjay Mohan 			0x6b68079a41a7c4c9,
74*00c1f3dcSPuranjay Mohan 			0x25e45d324e6afb66,
75*00c1f3dcSPuranjay Mohan 			0x431bd7b7519b500d,
76*00c1f3dcSPuranjay Mohan 			0x7c83e4583f2dba31,
77*00c1f3dcSPuranjay Mohan 			0x62bbd95a257130a3,
78*00c1f3dcSPuranjay Mohan 			0x628c895d436c6125,
79*00c1f3dcSPuranjay Mohan 			0x721da317333ab105,
80*00c1f3dcSPuranjay Mohan 			0x2d1d5ae92443a858,
81*00c1f3dcSPuranjay Mohan 			0x75a2a8d46763845e,
82*00c1f3dcSPuranjay Mohan 			0x79838cb208edbdab,
83*00c1f3dcSPuranjay Mohan 			0x0b03e0c64353d0cd,
84*00c1f3dcSPuranjay Mohan 			0x54e49eb4189a769b,
85*00c1f3dcSPuranjay Mohan 			0x2ca8861171f32454,
86*00c1f3dcSPuranjay Mohan 			0x02901d820836c40e,
87*00c1f3dcSPuranjay Mohan 			0x081386413a95f874,
88*00c1f3dcSPuranjay Mohan 			0x7c3dbd3d1e7ff521,
89*00c1f3dcSPuranjay Mohan 			0x6ceaf087737b8ddc,
90*00c1f3dcSPuranjay Mohan 			0x4516dde922221a70,
91*00c1f3dcSPuranjay Mohan 			0x614fd4a13006c83e,
92*00c1f3dcSPuranjay Mohan 			0x5577f8e1419ac241,
93*00c1f3dcSPuranjay Mohan 			0x05072367440badfc,
94*00c1f3dcSPuranjay Mohan 			0x77465f013804823e,
95*00c1f3dcSPuranjay Mohan 			0x5c482a977724c67e,
96*00c1f3dcSPuranjay Mohan 			0x5e884adc2463b9ea,
97*00c1f3dcSPuranjay Mohan 			0x2d51779651ead36b,
98*00c1f3dcSPuranjay Mohan 			0x153ea438580bd78f,
99*00c1f3dcSPuranjay Mohan 			0x70a64e2a3855585c,
100*00c1f3dcSPuranjay Mohan 			0x2a487cb06a2342ec,
101*00c1f3dcSPuranjay Mohan 			0x725a06fb1d4ed43b,
102*00c1f3dcSPuranjay Mohan 			0x57e4ccaf2cd89a32,
103*00c1f3dcSPuranjay Mohan 			0x4b588f547a6d8d3c,
104*00c1f3dcSPuranjay Mohan 			0x6de91b18542289ec,
105*00c1f3dcSPuranjay Mohan 			0x7644a45c38437fdb,
106*00c1f3dcSPuranjay Mohan 			0x684a481a32fff902,
107*00c1f3dcSPuranjay Mohan 			0x749abb43579478fe,
108*00c1f3dcSPuranjay Mohan 			0x1ba026fa3dc240fb,
109*00c1f3dcSPuranjay Mohan 			0x75c6c33a79a1deaa,
110*00c1f3dcSPuranjay Mohan 			0x70c6a52912e685fb,
111*00c1f3dcSPuranjay Mohan 			0x374a3fe6520eedd1,
112*00c1f3dcSPuranjay Mohan 			0x23f9c13c4f4ef005,
113*00c1f3dcSPuranjay Mohan 			0x275ac794649bb77c,
114*00c1f3dcSPuranjay Mohan 			0x1cf10fd839386575,
115*00c1f3dcSPuranjay Mohan 			0x235ba861180115be,
116*00c1f3dcSPuranjay Mohan 			0x354fe9f947398c89,
117*00c1f3dcSPuranjay Mohan 			0x741226bb15b5af5c,
118*00c1f3dcSPuranjay Mohan 			0x10233c990d34b6a8,
119*00c1f3dcSPuranjay Mohan 			0x615740953f6ab60f,
120*00c1f3dcSPuranjay Mohan 			0x77ae35eb7e0c57b1,
121*00c1f3dcSPuranjay Mohan 			0x310c50b3579be4f1,
122*00c1f3dcSPuranjay Mohan 		},
123*00c1f3dcSPuranjay Mohan 		.to_buff_len = 512,
124*00c1f3dcSPuranjay Mohan 		.from_buff = {},
125*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
126*00c1f3dcSPuranjay Mohan 		.seed = 0xffff,
127*00c1f3dcSPuranjay Mohan 		.result = 0xca45
128*00c1f3dcSPuranjay Mohan 	},
129*00c1f3dcSPuranjay Mohan };
130*00c1f3dcSPuranjay Mohan 
131*00c1f3dcSPuranjay Mohan #define NUM_PULL_TESTS 4
132*00c1f3dcSPuranjay Mohan 
133*00c1f3dcSPuranjay Mohan struct testcase pull_tests[NUM_PULL_TESTS] = {
134*00c1f3dcSPuranjay Mohan 	{
135*00c1f3dcSPuranjay Mohan 		.from_buff = {
136*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
137*00c1f3dcSPuranjay Mohan 		},
138*00c1f3dcSPuranjay Mohan 		.from_buff_len = 8,
139*00c1f3dcSPuranjay Mohan 		.to_buff = {},
140*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
141*00c1f3dcSPuranjay Mohan 		.seed = 0,
142*00c1f3dcSPuranjay Mohan 		.result = 0xc4c4
143*00c1f3dcSPuranjay Mohan 	},
144*00c1f3dcSPuranjay Mohan 	{
145*00c1f3dcSPuranjay Mohan 		.from_buff = {
146*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
147*00c1f3dcSPuranjay Mohan 			0xbeefdeadbeefdead,
148*00c1f3dcSPuranjay Mohan 		},
149*00c1f3dcSPuranjay Mohan 		.from_buff_len = 16,
150*00c1f3dcSPuranjay Mohan 		.to_buff = {},
151*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
152*00c1f3dcSPuranjay Mohan 		.seed = 0x1234,
153*00c1f3dcSPuranjay Mohan 		.result = 0x9bbd
154*00c1f3dcSPuranjay Mohan 	},
155*00c1f3dcSPuranjay Mohan 	{
156*00c1f3dcSPuranjay Mohan 		.from_buff = {
157*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
158*00c1f3dcSPuranjay Mohan 			0xbeefdeadbeefdead,
159*00c1f3dcSPuranjay Mohan 		},
160*00c1f3dcSPuranjay Mohan 		.from_buff_len = 15,
161*00c1f3dcSPuranjay Mohan 		.to_buff = {},
162*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
163*00c1f3dcSPuranjay Mohan 		.seed = 0x1234,
164*00c1f3dcSPuranjay Mohan #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
165*00c1f3dcSPuranjay Mohan 		.result = 0x59be
166*00c1f3dcSPuranjay Mohan #else
167*00c1f3dcSPuranjay Mohan 		.result = 0x9c6a
168*00c1f3dcSPuranjay Mohan #endif
169*00c1f3dcSPuranjay Mohan 	},
170*00c1f3dcSPuranjay Mohan 	{
171*00c1f3dcSPuranjay Mohan 		.from_buff = {
172*00c1f3dcSPuranjay Mohan 			0x327b23c66b8b4567,
173*00c1f3dcSPuranjay Mohan 			0x66334873643c9869,
174*00c1f3dcSPuranjay Mohan 			0x19495cff74b0dc51,
175*00c1f3dcSPuranjay Mohan 			0x625558ec2ae8944a,
176*00c1f3dcSPuranjay Mohan 			0x46e87ccd238e1f29,
177*00c1f3dcSPuranjay Mohan 			0x507ed7ab3d1b58ba,
178*00c1f3dcSPuranjay Mohan 			0x41b71efb2eb141f2,
179*00c1f3dcSPuranjay Mohan 			0x7545e14679e2a9e3,
180*00c1f3dcSPuranjay Mohan 			0x5bd062c2515f007c,
181*00c1f3dcSPuranjay Mohan 			0x4db127f812200854,
182*00c1f3dcSPuranjay Mohan 			0x1f16e9e80216231b,
183*00c1f3dcSPuranjay Mohan 			0x66ef438d1190cde7,
184*00c1f3dcSPuranjay Mohan 			0x3352255a140e0f76,
185*00c1f3dcSPuranjay Mohan 			0x0ded7263109cf92e,
186*00c1f3dcSPuranjay Mohan 			0x1befd79f7fdcc233,
187*00c1f3dcSPuranjay Mohan 			0x6b68079a41a7c4c9,
188*00c1f3dcSPuranjay Mohan 			0x25e45d324e6afb66,
189*00c1f3dcSPuranjay Mohan 			0x431bd7b7519b500d,
190*00c1f3dcSPuranjay Mohan 			0x7c83e4583f2dba31,
191*00c1f3dcSPuranjay Mohan 			0x62bbd95a257130a3,
192*00c1f3dcSPuranjay Mohan 			0x628c895d436c6125,
193*00c1f3dcSPuranjay Mohan 			0x721da317333ab105,
194*00c1f3dcSPuranjay Mohan 			0x2d1d5ae92443a858,
195*00c1f3dcSPuranjay Mohan 			0x75a2a8d46763845e,
196*00c1f3dcSPuranjay Mohan 			0x79838cb208edbdab,
197*00c1f3dcSPuranjay Mohan 			0x0b03e0c64353d0cd,
198*00c1f3dcSPuranjay Mohan 			0x54e49eb4189a769b,
199*00c1f3dcSPuranjay Mohan 			0x2ca8861171f32454,
200*00c1f3dcSPuranjay Mohan 			0x02901d820836c40e,
201*00c1f3dcSPuranjay Mohan 			0x081386413a95f874,
202*00c1f3dcSPuranjay Mohan 			0x7c3dbd3d1e7ff521,
203*00c1f3dcSPuranjay Mohan 			0x6ceaf087737b8ddc,
204*00c1f3dcSPuranjay Mohan 			0x4516dde922221a70,
205*00c1f3dcSPuranjay Mohan 			0x614fd4a13006c83e,
206*00c1f3dcSPuranjay Mohan 			0x5577f8e1419ac241,
207*00c1f3dcSPuranjay Mohan 			0x05072367440badfc,
208*00c1f3dcSPuranjay Mohan 			0x77465f013804823e,
209*00c1f3dcSPuranjay Mohan 			0x5c482a977724c67e,
210*00c1f3dcSPuranjay Mohan 			0x5e884adc2463b9ea,
211*00c1f3dcSPuranjay Mohan 			0x2d51779651ead36b,
212*00c1f3dcSPuranjay Mohan 			0x153ea438580bd78f,
213*00c1f3dcSPuranjay Mohan 			0x70a64e2a3855585c,
214*00c1f3dcSPuranjay Mohan 			0x2a487cb06a2342ec,
215*00c1f3dcSPuranjay Mohan 			0x725a06fb1d4ed43b,
216*00c1f3dcSPuranjay Mohan 			0x57e4ccaf2cd89a32,
217*00c1f3dcSPuranjay Mohan 			0x4b588f547a6d8d3c,
218*00c1f3dcSPuranjay Mohan 			0x6de91b18542289ec,
219*00c1f3dcSPuranjay Mohan 			0x7644a45c38437fdb,
220*00c1f3dcSPuranjay Mohan 			0x684a481a32fff902,
221*00c1f3dcSPuranjay Mohan 			0x749abb43579478fe,
222*00c1f3dcSPuranjay Mohan 			0x1ba026fa3dc240fb,
223*00c1f3dcSPuranjay Mohan 			0x75c6c33a79a1deaa,
224*00c1f3dcSPuranjay Mohan 			0x70c6a52912e685fb,
225*00c1f3dcSPuranjay Mohan 			0x374a3fe6520eedd1,
226*00c1f3dcSPuranjay Mohan 			0x23f9c13c4f4ef005,
227*00c1f3dcSPuranjay Mohan 			0x275ac794649bb77c,
228*00c1f3dcSPuranjay Mohan 			0x1cf10fd839386575,
229*00c1f3dcSPuranjay Mohan 			0x235ba861180115be,
230*00c1f3dcSPuranjay Mohan 			0x354fe9f947398c89,
231*00c1f3dcSPuranjay Mohan 			0x741226bb15b5af5c,
232*00c1f3dcSPuranjay Mohan 			0x10233c990d34b6a8,
233*00c1f3dcSPuranjay Mohan 			0x615740953f6ab60f,
234*00c1f3dcSPuranjay Mohan 			0x77ae35eb7e0c57b1,
235*00c1f3dcSPuranjay Mohan 			0x310c50b3579be4f1,
236*00c1f3dcSPuranjay Mohan 		},
237*00c1f3dcSPuranjay Mohan 		.from_buff_len = 512,
238*00c1f3dcSPuranjay Mohan 		.to_buff = {},
239*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
240*00c1f3dcSPuranjay Mohan 		.seed = 0xffff,
241*00c1f3dcSPuranjay Mohan 		.result = 0x35ba
242*00c1f3dcSPuranjay Mohan 	},
243*00c1f3dcSPuranjay Mohan };
244*00c1f3dcSPuranjay Mohan 
245*00c1f3dcSPuranjay Mohan #define NUM_DIFF_TESTS 4
246*00c1f3dcSPuranjay Mohan 
247*00c1f3dcSPuranjay Mohan struct testcase diff_tests[NUM_DIFF_TESTS] = {
248*00c1f3dcSPuranjay Mohan 	{
249*00c1f3dcSPuranjay Mohan 		.from_buff = {
250*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
251*00c1f3dcSPuranjay Mohan 		},
252*00c1f3dcSPuranjay Mohan 		.from_buff_len = 8,
253*00c1f3dcSPuranjay Mohan 		.to_buff = {
254*00c1f3dcSPuranjay Mohan 			0xabababababababab,
255*00c1f3dcSPuranjay Mohan 		},
256*00c1f3dcSPuranjay Mohan 		.to_buff_len = 8,
257*00c1f3dcSPuranjay Mohan 		.seed = 0,
258*00c1f3dcSPuranjay Mohan 		.result = 0x7373
259*00c1f3dcSPuranjay Mohan 	},
260*00c1f3dcSPuranjay Mohan 	{
261*00c1f3dcSPuranjay Mohan 		.from_buff = {
262*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef,
263*00c1f3dcSPuranjay Mohan 		},
264*00c1f3dcSPuranjay Mohan 		.from_buff_len = 7,
265*00c1f3dcSPuranjay Mohan 		.to_buff = {
266*00c1f3dcSPuranjay Mohan 			0xabababababababab,
267*00c1f3dcSPuranjay Mohan 		},
268*00c1f3dcSPuranjay Mohan 		.to_buff_len = 7,
269*00c1f3dcSPuranjay Mohan 		.seed = 0,
270*00c1f3dcSPuranjay Mohan #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
271*00c1f3dcSPuranjay Mohan 		.result = 0xa673
272*00c1f3dcSPuranjay Mohan #else
273*00c1f3dcSPuranjay Mohan 		.result = 0x73b7
274*00c1f3dcSPuranjay Mohan #endif
275*00c1f3dcSPuranjay Mohan 	},
276*00c1f3dcSPuranjay Mohan 	{
277*00c1f3dcSPuranjay Mohan 		.from_buff = {
278*00c1f3dcSPuranjay Mohan 			0,
279*00c1f3dcSPuranjay Mohan 		},
280*00c1f3dcSPuranjay Mohan 		.from_buff_len = 8,
281*00c1f3dcSPuranjay Mohan 		.to_buff = {
282*00c1f3dcSPuranjay Mohan 			0xabababababababab,
283*00c1f3dcSPuranjay Mohan 		},
284*00c1f3dcSPuranjay Mohan 		.to_buff_len = 8,
285*00c1f3dcSPuranjay Mohan 		.seed = 0,
286*00c1f3dcSPuranjay Mohan 		.result = 0xaeae
287*00c1f3dcSPuranjay Mohan 	},
288*00c1f3dcSPuranjay Mohan 	{
289*00c1f3dcSPuranjay Mohan 		.from_buff = {
290*00c1f3dcSPuranjay Mohan 			0xdeadbeefdeadbeef
291*00c1f3dcSPuranjay Mohan 		},
292*00c1f3dcSPuranjay Mohan 		.from_buff_len = 8,
293*00c1f3dcSPuranjay Mohan 		.to_buff = {
294*00c1f3dcSPuranjay Mohan 			0,
295*00c1f3dcSPuranjay Mohan 		},
296*00c1f3dcSPuranjay Mohan 		.to_buff_len = 8,
297*00c1f3dcSPuranjay Mohan 		.seed = 0xffff,
298*00c1f3dcSPuranjay Mohan 		.result = 0xc4c4
299*00c1f3dcSPuranjay Mohan 	},
300*00c1f3dcSPuranjay Mohan };
301*00c1f3dcSPuranjay Mohan 
302*00c1f3dcSPuranjay Mohan #define NUM_EDGE_TESTS 4
303*00c1f3dcSPuranjay Mohan 
304*00c1f3dcSPuranjay Mohan struct testcase edge_tests[NUM_EDGE_TESTS] = {
305*00c1f3dcSPuranjay Mohan 	{
306*00c1f3dcSPuranjay Mohan 		.from_buff = {},
307*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
308*00c1f3dcSPuranjay Mohan 		.to_buff = {},
309*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
310*00c1f3dcSPuranjay Mohan 		.seed = 0,
311*00c1f3dcSPuranjay Mohan 		.result = 0
312*00c1f3dcSPuranjay Mohan 	},
313*00c1f3dcSPuranjay Mohan 	{
314*00c1f3dcSPuranjay Mohan 		.from_buff = {
315*00c1f3dcSPuranjay Mohan 			0x1234
316*00c1f3dcSPuranjay Mohan 		},
317*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
318*00c1f3dcSPuranjay Mohan 		.to_buff = {
319*00c1f3dcSPuranjay Mohan 			0x1234
320*00c1f3dcSPuranjay Mohan 		},
321*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
322*00c1f3dcSPuranjay Mohan 		.seed = 0,
323*00c1f3dcSPuranjay Mohan 		.result = 0
324*00c1f3dcSPuranjay Mohan 	},
325*00c1f3dcSPuranjay Mohan 	{
326*00c1f3dcSPuranjay Mohan 		.from_buff = {},
327*00c1f3dcSPuranjay Mohan 		.from_buff_len = 0,
328*00c1f3dcSPuranjay Mohan 		.to_buff = {},
329*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
330*00c1f3dcSPuranjay Mohan 		.seed = 0x1234,
331*00c1f3dcSPuranjay Mohan 		.result = 0x1234
332*00c1f3dcSPuranjay Mohan 	},
333*00c1f3dcSPuranjay Mohan 	{
334*00c1f3dcSPuranjay Mohan 		.from_buff = {},
335*00c1f3dcSPuranjay Mohan 		.from_buff_len = 512,
336*00c1f3dcSPuranjay Mohan 		.to_buff = {},
337*00c1f3dcSPuranjay Mohan 		.to_buff_len = 0,
338*00c1f3dcSPuranjay Mohan 		.seed = 0xffff,
339*00c1f3dcSPuranjay Mohan 		.result = 0xffff
340*00c1f3dcSPuranjay Mohan 	},
341*00c1f3dcSPuranjay Mohan };
342*00c1f3dcSPuranjay Mohan 
343*00c1f3dcSPuranjay Mohan static unsigned short trigger_csum_diff(const struct csum_diff_test *skel)
344*00c1f3dcSPuranjay Mohan {
345*00c1f3dcSPuranjay Mohan 	u8 tmp_out[64 << 2] = {};
346*00c1f3dcSPuranjay Mohan 	u8 tmp_in[64] = {};
347*00c1f3dcSPuranjay Mohan 	int err;
348*00c1f3dcSPuranjay Mohan 	int pfd;
349*00c1f3dcSPuranjay Mohan 
350*00c1f3dcSPuranjay Mohan 	LIBBPF_OPTS(bpf_test_run_opts, topts,
351*00c1f3dcSPuranjay Mohan 		.data_in = tmp_in,
352*00c1f3dcSPuranjay Mohan 		.data_size_in = sizeof(tmp_in),
353*00c1f3dcSPuranjay Mohan 		.data_out = tmp_out,
354*00c1f3dcSPuranjay Mohan 		.data_size_out = sizeof(tmp_out),
355*00c1f3dcSPuranjay Mohan 		.repeat = 1,
356*00c1f3dcSPuranjay Mohan 	);
357*00c1f3dcSPuranjay Mohan 	pfd = bpf_program__fd(skel->progs.compute_checksum);
358*00c1f3dcSPuranjay Mohan 	err = bpf_prog_test_run_opts(pfd, &topts);
359*00c1f3dcSPuranjay Mohan 	if (err)
360*00c1f3dcSPuranjay Mohan 		return -1;
361*00c1f3dcSPuranjay Mohan 
362*00c1f3dcSPuranjay Mohan 	return skel->bss->result;
363*00c1f3dcSPuranjay Mohan }
364*00c1f3dcSPuranjay Mohan 
365*00c1f3dcSPuranjay Mohan static void test_csum_diff(struct testcase *tests, int num_tests)
366*00c1f3dcSPuranjay Mohan {
367*00c1f3dcSPuranjay Mohan 	struct csum_diff_test *skel;
368*00c1f3dcSPuranjay Mohan 	unsigned short got;
369*00c1f3dcSPuranjay Mohan 	int err;
370*00c1f3dcSPuranjay Mohan 
371*00c1f3dcSPuranjay Mohan 	for (int i = 0; i < num_tests; i++) {
372*00c1f3dcSPuranjay Mohan 		skel = csum_diff_test__open();
373*00c1f3dcSPuranjay Mohan 		if (!ASSERT_OK_PTR(skel, "csum_diff_test open"))
374*00c1f3dcSPuranjay Mohan 			return;
375*00c1f3dcSPuranjay Mohan 
376*00c1f3dcSPuranjay Mohan 		skel->rodata->to_buff_len = tests[i].to_buff_len;
377*00c1f3dcSPuranjay Mohan 		skel->rodata->from_buff_len = tests[i].from_buff_len;
378*00c1f3dcSPuranjay Mohan 
379*00c1f3dcSPuranjay Mohan 		err = csum_diff_test__load(skel);
380*00c1f3dcSPuranjay Mohan 		if (!ASSERT_EQ(err, 0, "csum_diff_test load"))
381*00c1f3dcSPuranjay Mohan 			goto out;
382*00c1f3dcSPuranjay Mohan 
383*00c1f3dcSPuranjay Mohan 		memcpy(skel->bss->to_buff, tests[i].to_buff, tests[i].to_buff_len);
384*00c1f3dcSPuranjay Mohan 		memcpy(skel->bss->from_buff, tests[i].from_buff, tests[i].from_buff_len);
385*00c1f3dcSPuranjay Mohan 		skel->bss->seed = tests[i].seed;
386*00c1f3dcSPuranjay Mohan 
387*00c1f3dcSPuranjay Mohan 		got = trigger_csum_diff(skel);
388*00c1f3dcSPuranjay Mohan 		ASSERT_EQ(got, tests[i].result, "csum_diff result");
389*00c1f3dcSPuranjay Mohan 
390*00c1f3dcSPuranjay Mohan 		csum_diff_test__destroy(skel);
391*00c1f3dcSPuranjay Mohan 	}
392*00c1f3dcSPuranjay Mohan 
393*00c1f3dcSPuranjay Mohan 	return;
394*00c1f3dcSPuranjay Mohan out:
395*00c1f3dcSPuranjay Mohan 	csum_diff_test__destroy(skel);
396*00c1f3dcSPuranjay Mohan }
397*00c1f3dcSPuranjay Mohan 
398*00c1f3dcSPuranjay Mohan void test_test_csum_diff(void)
399*00c1f3dcSPuranjay Mohan {
400*00c1f3dcSPuranjay Mohan 	if (test__start_subtest("csum_diff_push"))
401*00c1f3dcSPuranjay Mohan 		test_csum_diff(push_tests, NUM_PUSH_TESTS);
402*00c1f3dcSPuranjay Mohan 	if (test__start_subtest("csum_diff_pull"))
403*00c1f3dcSPuranjay Mohan 		test_csum_diff(pull_tests, NUM_PULL_TESTS);
404*00c1f3dcSPuranjay Mohan 	if (test__start_subtest("csum_diff_diff"))
405*00c1f3dcSPuranjay Mohan 		test_csum_diff(diff_tests, NUM_DIFF_TESTS);
406*00c1f3dcSPuranjay Mohan 	if (test__start_subtest("csum_diff_edge"))
407*00c1f3dcSPuranjay Mohan 		test_csum_diff(edge_tests, NUM_EDGE_TESTS);
408*00c1f3dcSPuranjay Mohan }
409