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
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.