linux TCP/IP协议栈 ---ip_local_deliver()


  1. /*
  2.  *     Deliver IP Packets to the higher protocol layers.
  3.  */
  4. 主要功能:收集IP分片,然后调用ip_local_deliver_finish将一个完整的数据包传送给上层协议。
  5. int ip_local_deliver(struct sk_buff *skb)
  6. {
  7.     /*
  8.      *    Reassemble IP fragments.
  9.      */
  10.     /* 
  11.      * 判断该IP数据包是否是一个分片,如果IP_MF置位,则表示该包是分片之一,其
  12.      * 后还有更多分片,最后一个IP分片未置位IP_MF但是其offset是非0。
  13.      * 如果是一个IP分片,则调用ip_defrag重新组织IP数据包。
  14.      */
  15.     if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
  16.         if (ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER))
  17.             return 0;
  18.     }
  19.     /* 调用ip_local_deliver_finish(skb) */
  20.     return NF_HOOK(PF_INET, NF_IP_LOCAL_IN, skb, skb->dev, NULL,
  21.          ip_local_deliver_finish);
  22. }

没有评论: