// SPDX-License-Identifier: GPL-2.0 #include "vmlinux.h" #include int xdpf_sz; int sinfo_sz; int data_len; int pull_len; #define XDP_PACKET_HEADROOM 256 SEC("xdp.frags") int xdp_find_sizes(struct xdp_md *ctx) { xdpf_sz = sizeof(struct xdp_frame); sinfo_sz = __PAGE_SIZE - XDP_PACKET_HEADROOM - (ctx->data_end - ctx->data); return XDP_PASS; } SEC("xdp.frags") int xdp_pull_data_prog(struct xdp_md *ctx) { __u8 *data_end = (void *)(long)ctx->data_end; __u8 *data = (void *)(long)ctx->data; __u8 *val_p; int err; if (data_len != data_end - data) return XDP_DROP; err = bpf_xdp_pull_data(ctx, pull_len); if (err) return XDP_DROP; val_p = (void *)(long)ctx->data + 1024; if (val_p + 1 > (void *)(long)ctx->data_end) return XDP_DROP; if (*val_p != 0xbb) return XDP_DROP; return XDP_PASS; } char _license[] SEC("license") = "GPL";