【发布时间】:2014-04-02 05:21:29
【问题描述】:
我阅读了源代码,但它确实让我感到困惑。例如函数 sib_mac_header 函数,它是下面代码中的第三个函数,sib -> head 是指向已分配缓冲区头部的指针,而 sib -> mac_header 是指向该缓冲区中 mac_header 地址的指针。为什么两个地址相加的结果是指向MAC ether结构的指针??
skbuff.h中的源代码如下:
1609 static inline void skb_reset_network_header(struct sk_buff *skb)
1610 {
1611 skb->network_header = skb->data - skb->head;
1612 }
1613
1614 static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
1615 {
1616 skb_reset_network_header(skb);
1617 skb->network_header += offset;
1618 }
1619
1620 static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
1621 {
1622 return skb->head + skb->mac_header;
1623 }
【问题讨论】:
标签: c linux-kernel network-protocols