免费注册 查看新帖 |

Chinaunix

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

[网络子系统] ip_frag_reasm分片重组的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-20 18:15 |只看该作者 |倒序浏览
内核版本:2.6.32.34

在ip_frag_reasm函数里,如下:

  1.         /* Make the one we just received the head. */
  2.         if (prev) {
  3.                 head = prev->next;
  4.                 fp = skb_clone(head, GFP_ATOMIC);
  5.                 if (!fp)
  6.                         goto out_nomem;

  7.                 fp->next = head->next;
  8.                 prev->next = fp;

  9.                 skb_morph(head, qp->q.fragments);
  10.                 head->next = qp->q.fragments->next;

  11.                 kfree_skb(qp->q.fragments);
  12.                 qp->q.fragments = head;
  13.         }
复制代码
请问这里为什么要克隆刚才刚收到的skb?看这里的的代码,克隆后,还要将这个skb放到q.fragments,why? why? why?

论坛徽章:
0
2 [报告]
发表于 2013-06-21 09:27 |只看该作者
首先,LZ需要明白,ip_frag_reasm这个函数不会把重组完成后的报文链返回,而是强制使当前收到的skb成为First分片。First分片即分片队列链表首,First分片在所有分片重组完成后,将携带整个分片队列。

这样做的好处是,上层不需要知道分片队列的存在,分片队列重组后,已经隐藏在当前接收的skb内部,以便于后续处理的连贯性。

分析代码可知,只有在当前接收的skb不是First分片的时候,才会这样做(对于First分片,参数prev指针为空)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP