Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.15 43 lines 1.0 kB view raw
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 */ 23 } else if (data_len == 74) { /* sizeof(pkt_v6) */ 24 offset = 40; 25 } else if (data_len == 64) { 26 offset = 128; 27 } else if (data_len == 128) { 28 /* Max tail grow 3520 */ 29 offset = 4096 - 256 - tailroom - data_len; 30 } else if (data_len == 9000) { 31 offset = 10; 32 } else if (data_len == 9001) { 33 offset = 4096; 34 } else { 35 return XDP_ABORTED; /* No matching test */ 36 } 37 38 if (bpf_xdp_adjust_tail(xdp, offset)) 39 return XDP_DROP; 40 return XDP_TX; 41} 42 43char _license[] SEC("license") = "GPL";