问题描述
bpf-helpers(7)
指出,如果 bpf_get_socket_cookie()
中缺少套接字字段,skb
将返回 0。
在什么情况下套接字字段在此上下文中丢失?它是否取决于 BPF 程序附加到数据路径中的哪个位置?例如,在使用 bpf_get_socket_cookie()
附加过滤器的情况下,tc filter add dev ... ingress ... bpf ...
是否总是返回 0(例如,在 Linux 内核 4.19 上)?
解决方法
如果数据包尚未解复用到套接字,则套接字字段为 NULL。对于 TCP,这发生在 tcp_v4_early_demux()
中。
所以是的,这取决于你附加 BPF 程序的位置。您需要在将数据包解复用到套接字之前附加它。