diff options
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index fc6d530e20db..a8c750373ad5 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -235,6 +235,8 @@ enum sec_def_flags {  	SEC_SLEEPABLE = 8,  	/* allow non-strict prefix matching */  	SEC_SLOPPY_PFX = 16, +	/* BPF program support non-linear XDP buffer */ +	SEC_XDP_FRAGS = 32,  };  struct bpf_sec_def { @@ -6570,6 +6572,9 @@ static int libbpf_preload_prog(struct bpf_program *prog,  	if (def & SEC_SLEEPABLE)  		opts->prog_flags |= BPF_F_SLEEPABLE; +	if (prog->type == BPF_PROG_TYPE_XDP && (def & SEC_XDP_FRAGS)) +		opts->prog_flags |= BPF_F_XDP_HAS_FRAGS; +  	if ((prog->type == BPF_PROG_TYPE_TRACING ||  	     prog->type == BPF_PROG_TYPE_LSM ||  	     prog->type == BPF_PROG_TYPE_EXT) && !prog->attach_btf_id) { @@ -8608,8 +8613,11 @@ static const struct bpf_sec_def section_defs[] = {  	SEC_DEF("lsm.s/",		LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, attach_lsm),  	SEC_DEF("iter/",		TRACING, BPF_TRACE_ITER, SEC_ATTACH_BTF, attach_iter),  	SEC_DEF("syscall",		SYSCALL, 0, SEC_SLEEPABLE), +	SEC_DEF("xdp.frags/devmap",	XDP, BPF_XDP_DEVMAP, SEC_XDP_FRAGS),  	SEC_DEF("xdp_devmap/",		XDP, BPF_XDP_DEVMAP, SEC_ATTACHABLE), +	SEC_DEF("xdp.frags/cpumap",	XDP, BPF_XDP_CPUMAP, SEC_XDP_FRAGS),  	SEC_DEF("xdp_cpumap/",		XDP, BPF_XDP_CPUMAP, SEC_ATTACHABLE), +	SEC_DEF("xdp.frags",		XDP, BPF_XDP, SEC_XDP_FRAGS),  	SEC_DEF("xdp",			XDP, BPF_XDP, SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX),  	SEC_DEF("perf_event",		PERF_EVENT, 0, SEC_NONE | SEC_SLOPPY_PFX),  	SEC_DEF("lwt_in",		LWT_IN, 0, SEC_NONE | SEC_SLOPPY_PFX),  |