- 論壇徽章:
- 0
|
其中涉及到兩個(gè)函數(shù)
skb_checksum(const struct sk_buff *skb, int offset,
int len, __wsum csum)
四個(gè)參數(shù)解釋:
skb:不用說了
offset:IP Header長度
len:IP payload長度
csum:0,計(jì)算校驗(yàn)和時(shí)為0
csum_tcpudp_magic(__be32 saddr, __be32 daddr,
unsigned short len,
unsigned short proto,
__wsum sum)
saddr:源IP
daddr:目的IP
proto:傳輸協(xié)議
sum:IP payload校驗(yàn)和
兩個(gè)函數(shù)配合使用,前者是計(jì)算UDP payload校驗(yàn)和,后者是計(jì)算整個(gè)IP payload校驗(yàn)和。
兩個(gè)注意的問題:
因?yàn)樾r?yàn)和不涉及鏈路層,如果skb是直接從網(wǎng)卡驅(qū)動取出來的話,就需要把skb->data設(shè)置為iph
在調(diào)用skb_checksum以前必須設(shè)置udph->check為0。這是協(xié)議規(guī)定的
我就是因?yàn)橄旅嫣岬降膬蓚(gè)問題,花了很久才弄明白。
網(wǎng)上也能搜到一些相關(guān)的內(nèi)容,可惜說的不是很明白,詳細(xì)參考了《TCP/IP詳解第一卷》才弄明白
[ 本帖最后由 印隨 于 2009-11-5 14:38 編輯 ] |
|