|
发表于 2004-4-19 13:59:25
|
显示全部楼层
第一个问题:
thead = (struct tcphdr *)(skb->data +(skb->nh.iph->ihl * 4));
这一句是使tcp头指针thead指向由skb->data所指数据区, 偏移量为(skb->nh.iph->ihl * 4) 乘以skb->data的类型大小(比如long是4,char 是1)的位置,该位置是tcp头.
注意指针偏移单位是以基指针(这里是skb->data)的类型大小为最小单位偏移的. 如long *p, 则p+1偏移了4字节,而char *q,则q+1偏移了1字节.
第二个问题:
__u8 ihl:4,
version:4;
写到一行: __u8 ihl:4, version:4;
它定义了两个结构成员, ihl和version, 但它们存储在一个__u8存储单元中,各占4比特. |
|