c - 将附加信息附加到 Linux 内核中的 SKB 缓冲区

标签 c linux memory-management linux-kernel

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

注意:我使用的是 Linux 内核 4.4.83

最佳答案

字段如何skb_mstamp ?我发现它适用于 4.4.83 内核,似乎微秒分辨率可用。

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

/*
 * 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”用法。 我希望您会看到司机如何使用该字段存储他们需要的任何信息,这对您会派上用场。

关于c - 将附加信息附加到 Linux 内核中的 SKB 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005275/

相关文章:

linux - 从 Linux Bash Shell 配置 NIC

c# - Linux 上的 MonoDevelop 失败 "Unknown MSBuild Failure"

linux - 在 Linux 中检测 IP 地址的更改

c++ - 从 char* 初始化 std::string 而不复制

c - 在 C 中解析 HTML 文件 - libxml2 的替代方案

c - 我已经在centos上安装了kernel-devel,还是找不到内核头文件

c++ - 复制安全信息

c - 尽管包含头文件,但仍隐式声明函数

objective-c - 在 Objective-C 中包装 C API

ios - NS自动释放池。什么时候适合创建一个新的自动释放池?