c - sk_buff 函数 skb_network_header() 和 skb_mac_header() 有什么作用?

标签 c linux networking kernel

他们分别返回IP头和mac头吗?我有点困惑,因为只看实现,他们返回的指针是 skb->head + skb->network_header 等。为什么不通过执行 skb->network_header 来获取网络 header ?

谢谢!

最佳答案

skb_network_header()有两个版本

#ifdef NET_SKBUFF_DATA_USES_OFFSET

static inline unsigned char *skb_network_header(const struct sk_buff )
{
        return skb->head + skb->network_header;
}
#else
static inline unsigned char *skb_network_header(const struct sk_buff *skb)
{
     return skb->network_header;
}

基本上,如果 NET_SKBUFF_DATA_USES_OFFSET 有效(例如,对于 64 位架构),.network_header 是从开始的偏移量。

关于c - sk_buff 函数 skb_network_header() 和 skb_mac_header() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023226/

相关文章:

c - scanf 的不同行为

c - 递归函数求和两个其他之间的数字

python - 从 python 脚本设置 bash 变量

c - Linux在运行时写入进程自己的可执行文件

c - c代码中的段错误

C 函数在几次迭代后停止

linux - 用于分析函数缓存行为的 SystemTap 脚本

php - 如何修改此代码以将 ip 地址记录到另一个文件

azure - Kubernetes - 服务集群IP地址与Pod IP地址

networking - 二十一小时内的 DNS