【问题标题】:Under what circumstances does bpf_get_socket_cookie() return 0什么情况下bpf_get_socket_cookie()返回0
【发布时间】:2021-08-14 08:34:07
【问题描述】:

bpf-helpers(7) 声明如果skb 中缺少套接字字段,bpf_get_socket_cookie() 将返回 0。

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

【问题讨论】:

    标签: sockets linux-kernel bpf trafficshaping


    【解决方案1】:

    如果数据包尚未解复用到套接字,则套接字字段为 NULL。对于 TCP,这发生在 tcp_v4_early_demux()

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

    【讨论】:

    • 非常感谢。您是否还知道tc filter add dev ... ingress ... bpf ... 的连接点是否是数据包尚未解复用到套接字的连接点(在 TCP 的情况下)? (我猜是这样,因为流量低于 L4。)
    • 或者可能取决于:TCP 流开始时为 NULL,后续包为非 NULL。将尝试通过实验解除/确认。
    • 仅供参考,这些实验表明bpf_get_socket_cookie() 对于这种附件总是返回 0,如果需要访问此类 cookie,则必须将 BPF 程序附加到数据路径中的其他位置。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多