#define KBUILD_MODNAME "filter"
#include<linux/bpf.h>#include<linux/if_ether.h>#include<linux/ip.h>#include<linux/in.h>#include<linux/udp.h>intudpfilter(structxdp_md*ctx){bpf_trace_printk("got a packet\n");void*data=(void*)(long)ctx->data;void*data_end=(void*)(long)ctx->data_end;structethhdr*eth=data;if((void*)eth+sizeof(*eth)<=data_end){structiphdr*ip=data+sizeof(*eth);if((void*)ip+sizeof(*ip)<=data_end){if(ip->protocol==IPPROTO_UDP){structudphdr*udp=(void*)ip+sizeof(*ip);if((void*)udp+sizeof(*udp)<=data_end){if(udp->dest==ntohs(7999)){bpf_trace_printk("udp port 7999\n");udp->dest=ntohs(7998);}}}}}returnXDP_PASS;}