When I send a UDP datagrams with checksum error to target, I found that: Under IPv6, counter udpInErrors increased, but under IPv4 counter udpInDatagrams increased. I lookup into the source code, and found that, under IPv4 UDP datagrams with checksum error will be delivered to UDP receive queue, but IPv6 does not. IPv4 delivered into UDP receive queue, increased udpInDatagrams, then discard it before delivered to UDP user. RFC said udpInDatagrams is the total number of UDP datagrams delivered to UDP users, so udpInDatagrams should not be increased while UDP datagrams with checksum error received.
Refer to RFC2013: udpInDatagrams OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of UDP datagrams delivered to UDP users." ::= { udp 1 } Following is my patch: --- a/net/ipv4/udp.c 2006-07-31 09:33:45.392479344 -0400 +++ b/net/ipv4/udp.c 2006-07-31 09:34:26.430240656 -0400 @@ -1018,7 +1018,7 @@ static int udp_queue_rcv_skb(struct sock /* FALLTHROUGH -- it's a UDP Packet */ } - if (sk->sk_filter && skb->ip_summed != CHECKSUM_UNNECESSARY) { + if (skb->ip_summed != CHECKSUM_UNNECESSARY) { if (__udp_checksum_complete(skb)) { UDP_INC_STATS_BH(UDP_MIB_INERRORS); kfree_skb(skb); Signed-off-by: Wei Yongjun <[EMAIL PROTECTED]> - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html