+ -
当前位置:首页 → 问答吧 → 内核中sk_buff结构的字段疑问?

内核中sk_buff结构的字段疑问?

时间:2010-10-19

来源:互联网

我用的是2.6.34这套内核代码
其中在看sk_buff这个结构体的时候,
struct sk_buff{
......
kmemcheck_bitfield_begin(flags1);
        __u8                        local_df:1,
                                cloned:1,
                                ip_summed:2,
                                nohdr:1,
                                nfctinfo:3;
        __u8                        pkt_type:3,/*这个字段会根据帧的L2目的地址进行类型划分*/
                                fclone:2,
                                ipvs_property:1,
                                peeked:1,
                                nf_trace:1;
        kmemcheck_bitfield_end(flags1);

.....
}
这里有一些疑问:
1.kmemcheck_bitfield_begin(flags1);和kmemcheck_bitfield_end(flags1);是什么意思呢?
查看它的定义有两个解释:
1)#define kmemcheck_bitfield_begin(name)        \
        int name##_begin[0];
2)#define kmemcheck_bitfield_begin(name)
这个把人都看晕了 请高手来指点一下小弟啊!!
2.__u8                        pkt_type:3 这个字段定义不太明白
pkt_type后面的冒号和3是怎么理解的??

PS:这个和我们通常使用的C的标准貌似不太一样啊  请大家指点下小弟哈!!谢谢了

作者: lantian0811   发布时间: 2010-10-19



QUOTE:
查看它的定义有两个解释:
1)#define kmemcheck_bitfield_begin(name)        \
        int name##_begin[0];
2)#define kmemcheck_bitfield_begin(name)
这个把人都看晕了 请高手来指点一下小弟啊!



如果有多处定义的话,那么这几处定义肯定是有条件的,看一下你当前的系统满足那个条件

作者: Godbach   发布时间: 2010-10-19



QUOTE:
2.__u8                        pkt_type:3 这个字段定义不太明白
pkt_type后面的冒号和3是怎么理解的??

PS:这个和我们通常使用的C的标准貌似不太一样啊  请大家指点下小弟哈!!谢谢了


这个用法在 C 中叫做 bit field,中文常译作位域,google 一下吧。

作者: Godbach   发布时间: 2010-10-19