0001 #include <linux/bpf.h>
0002 #include <bpf/bpf_helpers.h>
0003 #include <bpf/bpf_endian.h>
0004
0005 SEC("sk_skb1")
0006 int bpf_prog1(struct __sk_buff *skb)
0007 {
0008 void *data_end = (void *)(long) skb->data_end;
0009 void *data = (void *)(long) skb->data;
0010 __u8 *d = data;
0011 int err;
0012
0013 if (data + 10 > data_end) {
0014 err = bpf_skb_pull_data(skb, 10);
0015 if (err)
0016 return SK_DROP;
0017
0018 data_end = (void *)(long)skb->data_end;
0019 data = (void *)(long)skb->data;
0020 if (data + 10 > data_end)
0021 return SK_DROP;
0022 }
0023
0024
0025
0026
0027
0028 d = data;
0029 d[7] = 1;
0030 return skb->len;
0031 }
0032
0033 char _license[] SEC("license") = "GPL";