他们分别返回IP头和mac头吗?我有点困惑,因为只看实现,他们返回的指针是skb-> head + skb-> network_header等。为什么不通过skb-> network_header?
获取网络标头谢谢!
答案 0 :(得分:1)
#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
是从开始的偏移量。
答案 1 :(得分:0)
我假设您正在查看内核源代码somewhere like this
如果我们删除了一些代码,我认为它会变成这样:
#ifdef NET_SKBUFF_DATA_USES_OFFSET static inline unsigned char *skb_network_header(const struct sk_buff *skb) { return skb->head + skb->network_header; } static inline unsigned char *skb_mac_header(const struct sk_buff *skb) { return skb->head + skb->mac_header; } #else /* NET_SKBUFF_DATA_USES_OFFSET */ static inline unsigned char *skb_network_header(const struct sk_buff *skb) { return skb->network_header; } static inline unsigned char *skb_mac_header(const struct sk_buff *skb) { return skb->mac_header; } #endif /* NET_SKBUFF_DATA_USES_OFFSET */