linux TCP/IP协议栈 ---ip_local_deliver()
- /*
- * Deliver IP Packets to the higher protocol layers.
- */
- 主要功能:收集IP分片,然后调用ip_local_deliver_finish将一个完整的数据包传送给上层协议。
- int ip_local_deliver(struct sk_buff *skb)
- {
- /*
- * Reassemble IP fragments.
- */
- /*
- * 判断该IP数据包是否是一个分片,如果IP_MF置位,则表示该包是分片之一,其
- * 后还有更多分片,最后一个IP分片未置位IP_MF但是其offset是非0。
- * 如果是一个IP分片,则调用ip_defrag重新组织IP数据包。
- */
- if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
- if (ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER))
- return 0;
- }
- /* 调用ip_local_deliver_finish(skb) */
- return NF_HOOK(PF_INET, NF_IP_LOCAL_IN, skb, skb->dev, NULL,
- ip_local_deliver_finish);
- }
没有评论:
发表评论