Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
[sfrench/cifs-2.6.git] / samples / bpf / xdp2_kern.c
index d8a64ab077b0045d515dfa9e547479944ba1b76b..3332ba6bb95fb14d04507bde56cf0a514bd2ac92 100644 (file)
@@ -55,11 +55,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;
@@ -67,6 +69,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;