File Index
Files and directories
Sign in
FILE

test_xdp_adjust_tail_grow.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/progs/test_xdp_adjust_tail_grow.c C
 1// SPDX-License-Identifier: GPL-2.0
 2#include <linux/bpf.h>
 3#include <bpf/bpf_helpers.h>
 4
 5SEC("xdp")
 6int _xdp_adjust_tail_grow(struct xdp_md *xdp)
 7{
 8	int data_len = bpf_xdp_get_buff_len(xdp);
 9	int offset = 0;
10	/* SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) */
11#if defined(__TARGET_ARCH_s390)
12	int tailroom = 512;
13#elif defined(__TARGET_ARCH_powerpc)
14	int tailroom = 384;
15#else
16	int tailroom = 320;
17#endif
18
19	/* Data length determine test case */
20
21	if (data_len == 54) { /* sizeof(pkt_v4) */
22		offset = 4096; /* test too large offset, 4k page size */
23	} else if (data_len == 53) { /* sizeof(pkt_v4) - 1 */
24		offset = 65536; /* test too large offset, 64k page size */
25	} else if (data_len == 74) { /* sizeof(pkt_v6) */
26		offset = 40;
27	} else if (data_len == 64) {
28		offset = 128;
29	} else if (data_len == 128) {
30		/* Max tail grow 3520 */
31		offset = 4096 - 256 - tailroom - data_len;
32	} else if (data_len == 9000) {
33		offset = 10;
34	} else if (data_len == 9001) {
35		offset = 4096;
36	} else if (data_len == 90000) {
37		offset = 10; /* test a small offset, 64k page size */
38	} else if (data_len == 90001) {
39		offset = 65536; /* test too large offset, 64k page size */
40	} else {
41		return XDP_ABORTED; /* No matching test */
42	}
43
44	if (bpf_xdp_adjust_tail(xdp, offset))
45		return XDP_DROP;
46	return XDP_TX;
47}
48
49char _license[] SEC("license") = "GPL";
~/ Read-only file preview.