【问题标题】:Attach additional information to SKB buffer in Linux Kernel将附加信息附加到 Linux 内核中的 SKB 缓冲区
【发布时间】:2018-02-10 19:35:10
【问题描述】:

在 Linux 内核的 skb 结构中是否有任何额外或可用的字段,我可以在处理数据包期间存储我的私人信息?如果有这样一个字段,我该如何分配内存来存储我的数据?基本上我想以微秒分辨率存储当前时间戳。

注意:我使用的是 Linux Kernel 4.4.83

【问题讨论】:

    标签: c linux memory-management linux-kernel


    【解决方案1】:

    skb_mstamp 字段呢?我在 4.4.83 内核中找到了这个,似乎微秒级分辨率可用。

    另外,您可以考虑cb 字段。中字段上方的注释 结构定义说:

    /*
     * This is the control buffer. It is free to use for every
     * layer. Please put your private variables there. If you
     * want to keep them across layers you have to do a skb_clone()
     * first. This is owned by whoever has the skb queued ATM.
     */
    char            cb[48] __aligned(8);
    

    所以,这是一个 48 字节的存储空间(无需分配内存),理论上您可以尝试使用它来存储时间戳。我建议在内核源代码的 drivers/net/ethernet 子树中搜索“skb->cb”用法。 我希望您会看到驱动程序如何使用该字段来存储他们需要的任何信息,这对您很方便。

    【讨论】:

    • 我想我不能使用,因为它是 tcp 堆栈正在使用的联合的一部分
    • 好的,我明白了。请在更新后的答案中找到更多选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多