tcpdump -i $link src 192.168.1.14 and port 4000 and greater 100 -v -nn
当rx-checksumming打开的时候,skb->csum里面是硬件计算的tcp checksum,但是不包括伪头。
dev_gro_receive()
{
...
/* Setup for GRO checksum validation */
switch (skb->ip_summed) {
case CHECKSUM_COMPLETE:
NAPI_GRO_CB(skb)->csum = skb->csum;
NAPI_GRO_CB(skb)->csum_valid = 1;
NAPI_GRO_CB(skb)->csum_cnt = 0;
break;
...
}
tcp4_gro_receive()被调到的时候skb_gro_checksum_validate会根据NAPI_GRO_CB(skb)->csum和伪头
(inet_gro_compute_pseudo是用来计算伪头的)算出tcp checksum。如果是0xffff,就是正确的。这时line 2733会返回0