0001
0002 #include <linux/bpf.h>
0003 #include <bpf/bpf_helpers.h>
0004
0005 SEC("xdp")
0006 int _xdp_adjust_tail_grow(struct xdp_md *xdp)
0007 {
0008 void *data_end = (void *)(long)xdp->data_end;
0009 void *data = (void *)(long)xdp->data;
0010 int data_len = bpf_xdp_get_buff_len(xdp);
0011 int offset = 0;
0012
0013
0014
0015 if (data_len == 54) {
0016 offset = 4096;
0017 } else if (data_len == 74) {
0018 offset = 40;
0019 } else if (data_len == 64) {
0020 offset = 128;
0021 } else if (data_len == 128) {
0022
0023 offset = 4096 - 256 - 320 - data_len;
0024 } else if (data_len == 9000) {
0025 offset = 10;
0026 } else if (data_len == 9001) {
0027 offset = 4096;
0028 } else {
0029 return XDP_ABORTED;
0030 }
0031
0032 if (bpf_xdp_adjust_tail(xdp, offset))
0033 return XDP_DROP;
0034 return XDP_TX;
0035 }
0036
0037 char _license[] SEC("license") = "GPL";