- 论坛徽章:
- 0
|
谢谢版主,是的,是我自己调用的,我将skb的data区数据的中间删除了一部分,data区的数据就相应的网上挪,故data区至tail就会空出一片区域,我就用skb_trim()把这片空地给trim了,我抓包看了,数据发送接收都正常,但是tcp会出现重传,把我trim掉的那几个字符单独一个包发给web服务器, 当然web就响应我http 400,导致web服务器先回复我正常接着就回复我无效的请求。
下面就是我的删除的这点代码,麻烦你看看是不是有啥问题,还是需要设置其他的地方呢。
httplen = httplen + offset - Jlen;
skb_trim(skb,httplen);
printk("httplen:%d skb->len:%d iph->tot_len:%d\n",httplen,skb->len,iph->tot_len);
iph->tot_len = htons(skb->len);
printk("iph->tot_len:%d truesize:%d\n",iph->tot_len,skb->truesize);
}
//}
//recompute checknum
tcph->check = 0;
(skb)->csum = skb_checksum(skb,iph->ihl<<2,(skb)->len - (iph->ihl<<2),0);
tcph->check = csum_tcpudp_magic(saddr,daddr,(skb)->len - (iph->ihl<<2),IPPROTO_TCP,(skb)->csum);
//(skb)->ip_summed = CHECKSUM_UNNECESSARY;
ip_send_check(iph);
|
|