samples/bpf: fixup some tools to be able to support xdp multibuffer
[sfrench/cifs-2.6.git] / samples / bpf / xdp1_kern.c
index f0c5d95084dec92ea84ac9cef71b57a61f1b3483..0a5c704badd00c6078169ecee5f43f029fb412fa 100644 (file)
@@ -39,11 +39,13 @@ static int parse_ipv6(void *data, u64 nh_off, void *data_end)
        return ip6h->nexthdr;
 }
 
-SEC("xdp1")
+#define XDPBUFSIZE     64
+SEC("xdp.frags")
 int xdp_prog1(struct xdp_md *ctx)
 {
-       void *data_end = (void *)(long)ctx->data_end;
-       void *data = (void *)(long)ctx->data;
+       __u8 pkt[XDPBUFSIZE] = {};
+       void *data_end = &pkt[XDPBUFSIZE-1];
+       void *data = pkt;
        struct ethhdr *eth = data;
        int rc = XDP_DROP;
        long *value;
@@ -51,6 +53,9 @@ int xdp_prog1(struct xdp_md *ctx)
        u64 nh_off;
        u32 ipproto;
 
+       if (bpf_xdp_load_bytes(ctx, 0, pkt, sizeof(pkt)))
+               return rc;
+
        nh_off = sizeof(*eth);
        if (data + nh_off > data_end)
                return rc;