skbuff.h文件中NET_SKBUFF_DATA_USES_OFFSET宏的含义

http://blog.csdn.net/macrossdzh/article/details/5359419


找到NET_SKBUFF_DATA_USES_OFFSET定义的地方,文件include/linux/skbuff.h
#if BITS_PER_LONG > 32
#define NET_SKBUFF_DATA_USES_OFFSET 1
#endif

出现使用NET_SKBUFF_DATA_USES_OFFSET 的地方,如:
#ifdef NET_SKBUFF_DATA_USES_OFFSET
//如果使用了offset来表示偏移的话,就是说是一个相对偏移的情况:
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
    return skb->head + skb->transport_header;
}
......
#else /* NET_SKBUFF_DATA_USES_OFFSET */
//不使用相对偏移的情况
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
    return skb->transport_header;
}
......
#endif /* NET_SKBUFF_DATA_USES_OFFSET */

以上是*skb_network_header函数的实现,可以看到,返回网络层协议头的实现对于32位系统和64位系统,

skb_network_header函数有不同的实现,所以在编程中,直接调用*skb_network_header函数是好的。

可以说,这些函数,为我们编写内核程序提供了极大的便捷,而不用再花更多的精力去考虑计算各层的指针偏移,

可以把更多的精力用来考虑策略性的设计。


posted @ 2013-01-11 11:05  mull  阅读(411)  评论(0编辑  收藏  举报