Chinaunix
标题:
ip_frag_reasm分片重组的问题
[打印本页]
作者:
remaper
时间:
2013-06-20 18:15
标题:
ip_frag_reasm分片重组的问题
内核版本:2.6.32.34
在ip_frag_reasm函数里,如下:
/* Make the one we just received the head. */
if (prev) {
head = prev->next;
fp = skb_clone(head, GFP_ATOMIC);
if (!fp)
goto out_nomem;
fp->next = head->next;
prev->next = fp;
skb_morph(head, qp->q.fragments);
head->next = qp->q.fragments->next;
kfree_skb(qp->q.fragments);
qp->q.fragments = head;
}
复制代码
请问这里为什么要克隆刚才刚收到的skb?看这里的的代码,克隆后,还要将这个skb放到q.fragments,why? why? why?
作者:
卖萌犯法
时间:
2013-06-21 09:27
首先,LZ需要明白,ip_frag_reasm这个函数不会把重组完成后的报文链返回,而是强制使当前收到的skb成为First分片。First分片即分片队列链表首,First分片在所有分片重组完成后,将携带整个分片队列。
这样做的好处是,上层不需要知道分片队列的存在,分片队列重组后,已经隐藏在当前接收的skb内部,以便于后续处理的连贯性。
分析代码可知,只有在当前接收的skb不是First分片的时候,才会这样做(对于First分片,参数prev指针为空)。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2