Say what you do and do what you say

0%

udplite checksum problem

问题

在linux 3.10.0上面,遇到一个udplite校验失败问题。

分析

udp报文格式:

1
MAC|IP|UDP|Payload

而如下的udplite报文被drop了。

1
2
3
4
5
6
7
8
9
MAC|IP|UDP|Payload
14 20 8 61

udplite_rcv
->__udp4_lib_rcv
->udp4_csum_init
->udplite_checksum_init
->skb_checksum_init_zero_check
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 报bad checksum

在udplite_checksum_init的开始处:

1
2
skb->len = 61 + 8 =69
udphdr->len = 64

UDPLITE协议中,udphdr中len表示对报文多少进行了校验。
即UDP_SKB_CB(skb)->partial_cov=1