- 论坛徽章:
- 0
|
其中涉及到两个函数
skb_checksum(const struct sk_buff *skb, int offset,
int len, __wsum csum)
四个参数解释:
skb:不用说了
offset:IP Header长度
len:IP payload长度
csum:0,计算校验和时为0
csum_tcpudp_magic(__be32 saddr, __be32 daddr,
unsigned short len,
unsigned short proto,
__wsum sum)
saddr:源IP
daddr:目的IP
proto:传输协议
sum:IP payload校验和
两个函数配合使用,前者是计算UDP payload校验和,后者是计算整个IP payload校验和。
两个注意的问题:
因为校验和不涉及链路层,如果skb是直接从网卡驱动取出来的话,就需要把skb->data设置为iph
在调用skb_checksum以前必须设置udph->check为0。这是协议规定的
我就是因为下面提到的两个问题,花了很久才弄明白。
网上也能搜到一些相关的内容,可惜说的不是很明白,详细参考了《TCP/IP详解第一卷》才弄明白
[ 本帖最后由 印随 于 2009-11-5 14:38 编辑 ] |
|