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