Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[firefly-linux-kernel-4.4.55.git] / samples / bpf / sockex1_kern.c
index 0668926629154836b09dc81b9e4cf78cfb4eb343..ed18e9a4909c77899d6561680261e97a3dbea235 100644 (file)
@@ -1,5 +1,6 @@
 #include <uapi/linux/bpf.h>
 #include <uapi/linux/if_ether.h>
+#include <uapi/linux/if_packet.h>
 #include <uapi/linux/ip.h>
 #include "bpf_helpers.h"
 
@@ -11,14 +12,17 @@ struct bpf_map_def SEC("maps") my_map = {
 };
 
 SEC("socket1")
-int bpf_prog1(struct sk_buff *skb)
+int bpf_prog1(struct __sk_buff *skb)
 {
        int index = load_byte(skb, ETH_HLEN + offsetof(struct iphdr, protocol));
        long *value;
 
+       if (skb->pkt_type != PACKET_OUTGOING)
+               return 0;
+
        value = bpf_map_lookup_elem(&my_map, &index);
        if (value)
-               __sync_fetch_and_add(value, 1);
+               __sync_fetch_and_add(value, skb->len);
 
        return 0;
 }