xref: /linux-tools/ebpf/kernel-samples-bpf/tc_filter_kern.c (revision de922be4e919572d28577568db563e691d5e7702)
1 #include <uapi/linux/bpf.h>
2 #include <uapi/linux/if_ether.h>
3 #include <uapi/linux/if_packet.h>
4 #include <uapi/linux/ip.h>
5 #include <uapi/linux/in.h>
6 #include <uapi/linux/tcp.h>
7 #include <uapi/linux/filter.h>
8 #include <uapi/linux/pkt_cls.h>
9 #include <bpf/bpf_helpers.h>
10 #include "bpf_legacy.h"
11 
12 
13 #define IP_CSUM_OFF (ETH_HLEN + offsetof(struct iphdr, check))
14 #define TCP_CSUM_OFF (ETH_HLEN + sizeof(struct iphdr) + offsetof(struct tcphdr, check))
15 #define IP_DST_OFF (ETH_HLEN + offsetof(struct iphdr, daddr))
16 #define IP_SRC_OFF (ETH_HLEN + offsetof(struct iphdr, saddr))
17 
18 
19 SEC("tc_silly_filter")
20 int bpf_prog(struct __sk_buff *skb)
21 {
22     __u32 sip = load_word(skb, IP_SRC_OFF);
23     __u32 dip = load_word(skb, IP_DST_OFF);
24     if (sip == (__u32)0xac120103 || dip == (__u32)0xac120103) {
25         return (1<<16)|1; //1:1
26     }
27 	return -1; // default
28 }
29 
30 char _license[] SEC("license") = "GPL";
31