在什么情况下 bpf_get_socket_cookie() return 0

Under what circumstances does bpf_get_socket_cookie() return 0

bpf-helpers(7) 声明 bpf_get_socket_cookie() returns 0 如果套接字字段在 skb.

中丢失

在什么情况下此上下文中缺少套接字字段?它是否取决于 BPF 程序附加到数据路径中的哪个位置?例如,在附加了 tc filter add dev ... ingress ... bpf ... 的过滤器的情况下,bpf_get_socket_cookie() 总是 return 0(例如,在 Linux 内核 4.19 上)?

如果数据包还没有被多路分解到套接字,则套接字字段为空。对于 TCP,这发生在 tcp_v4_early_demux().

是的,这取决于您将 BPF 程序附加到何处。您需要在将数据包多路分解到套接字之前附加它。