1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright Amazon.com Inc. or its affiliates */
3 #include <test_progs.h>
4 #include "csum_diff_test.skel.h"
9 unsigned long long to_buff[BUFF_SZ / 8];
10 unsigned int to_buff_len;
11 unsigned long long from_buff[BUFF_SZ / 8];
12 unsigned int from_buff_len;
14 unsigned short result;
17 #define NUM_PUSH_TESTS 4
19 struct testcase push_tests[NUM_PUSH_TESTS] = {
50 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
131 #define NUM_PULL_TESTS 4
133 struct testcase pull_tests[NUM_PULL_TESTS] = {
164 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
237 .from_buff_len = 512,
245 #define NUM_DIFF_TESTS 4
247 struct testcase diff_tests[NUM_DIFF_TESTS] = {
270 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
302 #define NUM_EDGE_TESTS 4
304 struct testcase edge_tests[NUM_EDGE_TESTS] = {
335 .from_buff_len = 512,
343 static unsigned short trigger_csum_diff(const struct csum_diff_test *skel)
345 u8 tmp_out[64 << 2] = {};
350 LIBBPF_OPTS(bpf_test_run_opts, topts,
352 .data_size_in = sizeof(tmp_in),
354 .data_size_out = sizeof(tmp_out),
357 pfd = bpf_program__fd(skel->progs.compute_checksum);
358 err = bpf_prog_test_run_opts(pfd, &topts);
362 return skel->bss->result;
365 static void test_csum_diff(struct testcase *tests, int num_tests)
367 struct csum_diff_test *skel;
371 for (int i = 0; i < num_tests; i++) {
372 skel = csum_diff_test__open();
373 if (!ASSERT_OK_PTR(skel, "csum_diff_test open"))
376 skel->rodata->to_buff_len = tests[i].to_buff_len;
377 skel->rodata->from_buff_len = tests[i].from_buff_len;
379 err = csum_diff_test__load(skel);
380 if (!ASSERT_EQ(err, 0, "csum_diff_test load"))
383 memcpy(skel->bss->to_buff, tests[i].to_buff, tests[i].to_buff_len);
384 memcpy(skel->bss->from_buff, tests[i].from_buff, tests[i].from_buff_len);
385 skel->bss->seed = tests[i].seed;
387 got = trigger_csum_diff(skel);
388 ASSERT_EQ(got, tests[i].result, "csum_diff result");
390 csum_diff_test__destroy(skel);
395 csum_diff_test__destroy(skel);
398 void test_test_csum_diff(void)
400 if (test__start_subtest("csum_diff_push"))
401 test_csum_diff(push_tests, NUM_PUSH_TESTS);
402 if (test__start_subtest("csum_diff_pull"))
403 test_csum_diff(pull_tests, NUM_PULL_TESTS);
404 if (test__start_subtest("csum_diff_diff"))
405 test_csum_diff(diff_tests, NUM_DIFF_TESTS);
406 if (test__start_subtest("csum_diff_edge"))
407 test_csum_diff(edge_tests, NUM_EDGE_TESTS);