@@ -235,6 +235,8 @@ enum sec_def_flags {
235
235
SEC_SLEEPABLE = 8 ,
236
236
/* allow non-strict prefix matching */
237
237
SEC_SLOPPY_PFX = 16 ,
238
+ /* BPF program support non-linear XDP buffer */
239
+ SEC_XDP_FRAGS = 32 ,
238
240
};
239
241
240
242
struct bpf_sec_def {
@@ -6570,6 +6572,9 @@ static int libbpf_preload_prog(struct bpf_program *prog,
6570
6572
if (def & SEC_SLEEPABLE )
6571
6573
opts -> prog_flags |= BPF_F_SLEEPABLE ;
6572
6574
6575
+ if (prog -> type == BPF_PROG_TYPE_XDP && (def & SEC_XDP_FRAGS ))
6576
+ opts -> prog_flags |= BPF_F_XDP_HAS_FRAGS ;
6577
+
6573
6578
if ((prog -> type == BPF_PROG_TYPE_TRACING ||
6574
6579
prog -> type == BPF_PROG_TYPE_LSM ||
6575
6580
prog -> type == BPF_PROG_TYPE_EXT ) && !prog -> attach_btf_id ) {
@@ -8608,8 +8613,11 @@ static const struct bpf_sec_def section_defs[] = {
8608
8613
SEC_DEF ("lsm.s/" , LSM , BPF_LSM_MAC , SEC_ATTACH_BTF | SEC_SLEEPABLE , attach_lsm ),
8609
8614
SEC_DEF ("iter/" , TRACING , BPF_TRACE_ITER , SEC_ATTACH_BTF , attach_iter ),
8610
8615
SEC_DEF ("syscall" , SYSCALL , 0 , SEC_SLEEPABLE ),
8616
+ SEC_DEF ("xdp.frags/devmap" , XDP , BPF_XDP_DEVMAP , SEC_XDP_FRAGS ),
8611
8617
SEC_DEF ("xdp_devmap/" , XDP , BPF_XDP_DEVMAP , SEC_ATTACHABLE ),
8618
+ SEC_DEF ("xdp.frags/cpumap" , XDP , BPF_XDP_CPUMAP , SEC_XDP_FRAGS ),
8612
8619
SEC_DEF ("xdp_cpumap/" , XDP , BPF_XDP_CPUMAP , SEC_ATTACHABLE ),
8620
+ SEC_DEF ("xdp.frags" , XDP , BPF_XDP , SEC_XDP_FRAGS ),
8613
8621
SEC_DEF ("xdp" , XDP , BPF_XDP , SEC_ATTACHABLE_OPT | SEC_SLOPPY_PFX ),
8614
8622
SEC_DEF ("perf_event" , PERF_EVENT , 0 , SEC_NONE | SEC_SLOPPY_PFX ),
8615
8623
SEC_DEF ("lwt_in" , LWT_IN , 0 , SEC_NONE | SEC_SLOPPY_PFX ),
0 commit comments