假设我有 XDP 内核和用户程序。内核代码检查入口数据包并将它们“转发”到 XDP 用户空间程序。XDP 用户空间程序然后进行一些处理并将数据包发送出去(可能是同一个 NIC 或其他)。出于控制原因,我们要检查XDP 用户空间代码发送的传出数据包。我们的第一个想法是使用 tc 并将 BPF 代码插入到 egress 部分,显然没有用。
任何想法?
EDIT1:出口程序:
SEC("tx")
int track_tx(struct __sk_buff *skb)
{
__u64 t2 = bpf_ktime_get_ns();
void *data_end = (void *)(long)skb->data_end;
void *data = (void *)(long)skb->data;
bpf_custom_printk("\n__________send length %d\n", data_end-data);
return TC_ACT_OK;
}
跑:
sudo tc filter add dev ens13 egress bpf da obj layercoop.o sec tx
EDIT2:代码
用户:https
://github.com/torvalds/linux/blob/master/samples/bpf/xdpsock_user.c
内核(不感兴趣):https ://github.com/torvalds/linux/blob/master/ samples/bpf/xdpsock_kern.c
我想转发传入的数据包,所以运行它make -j 4; sudo ./xdpsock -i ens13 -l