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") bpf_prog(struct __sk_buff * skb)20int 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