免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2881 | 回复: 1
打印 上一主题 下一主题

[内核模块] skb_trim()问题讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-09 16:35 |显示全部楼层 |倒序浏览
请问, skb_trim(skb,newlen)之后,数据发送到web服务器正常,接受数据也正常,但是,另外一个事情是,在此步骤之后,tcp会做一个重传,将trim掉的那些数据单独做一个数据包再发给web服务器,同时web服务器就报非法访问错误,请问是何故。

论坛徽章:
0
2 [报告]
发表于 2012-11-09 22:54 |显示全部楼层
谢谢版主,是的,是我自己调用的,我将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);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP