您的位置:首页 > 理论基础 > 计算机网络

Linux-2.6.21.1 网络函数调用流程

2016-10-08 09:37 309 查看

Linux-2.6.21.1 网络函数调用流程  

2013-04-20 14:48:27|  分类:

linux-NET |举报
|字号 订阅

 

 
 
 





  下载LOFTER

我的照片书  |

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。

msn: yfydz_no1@hotmail.com

来源:http://yfydz.cublog.cn

接收以太帧:

netif_rx

  -> queue

  -> netif_receive_skb

    -> bond

 -> packet_type_all: deliver_skb

 -> bridge

 -> packet_type(IPV4)->func == ip_rcv
 

接收IPv4包:
ip_rcv

  -> NF_HOOK(PREROUTING)

    ->ip_rcv_finish

      -> ip_route_input

        -> ip_route_input_cached

          -> ip_route_input_slow

            -> ip_mkroute_input

              -> __mkroute_input

                dst->input = ip_forward

                dst->output = ip_output

      -> dst_input

        -> LOCAL_IN: dst->input == ip_local_deliver

          -> NF_HOOK(NF_INPUT)

            -> ip_local_deliver_finish

              -> ipprot->handler(tcp, udp, icmp ...)

        -> FORWARD:  dst->input == ip_forward
  

转发:

  

ip_forward

  -> xfrm4_route_forward (net/xfrm.h, get xfrm_dst)

    -> xfrm_route_forward

      -> __xfrm_route_forward

        -> xfrm_lookup

          -> xfrm_find_bundle

            -> afinfo->find_bundle == __xfrm4_find_bundle

          -> xfrm_bundle_create

            -> afinfo->bundle_create == __xfrm4_bundle_create

              tunnel mode

              -> xfrm_dst_lookup

                -> afinfo->dst_lookup == xfrm4_dst_lookup

                  -> __ip_route_output_key

          -> dst_list: dst->list=policy_bundles, policy->bundles = dst

  -> NF_HOOK(NF_FORWARD)

  -> ip_forward_finish

  -> dst_output
 
输出:
icmp:

icmp_send

  -> ip_route_output_key

    -> ip_route_output_flow

  -> icmp_push_reply

    -> ip_append_data

 -> skb_queue_walk

    -> ip_push_appending_frames

 

tcp:

tcp_connect

  -> ip_route_connect

    -> ip_route_output_flow

tcp_sendmsg

  -> __tcp_push_appending_frames

    -> tcp_write_xmit

   -> tcp_transmit_skb

        -> net_xmit_eval

          -> icsk->icsk_af_ops->queue_xmit == ipv4_specific->queue_xmit == ip_queue_xmit

  -> tcp_push_one

    -> tcp_transmit_skb

      -> net_xmit_eval

        -> icsk->icsk_af_ops->queue_xmit == ipv4_specific->queue_xmit == ip_queue_xmit

 
tcp_protocol->handler == tcp_v4_rcv

  -> __inet_lookup

  -> xfrm_policy_check

  -> tcp_v4_do_rcv

    -> tcp_rcv_state_process

      -> icsk->icsk_af_ops->conn_request == tcp_v4_conn_request

        -> tcp_v4_send_synack

          -> ip_build_and_send_pkt

            -> NF_HOOK( NF_OUTPUT )

              -> dst_output

udp:

udp_sendmsg

  -> ip_route_output_flow

  -> ip_append_data

    -> __skb_queue_tail( sk_write_queue )

  -> udp_push_pending_frames

    -> ip_push_pending_frames
raw:

raw_sendmsg

  -> ip_route_output_flow

  -> ip_append_data

    -> __skb_queue_tail( sk_write_queue )

  -> ip_push_pending_frames

ip_push_pending_frames

  -> __skb_dequeue(sk_write_queue)

    -> NF_HOOK(NF_OUTPUT)

      -> dst_output

ip_queue_xmit

  -> ip_route_output_flow

    -> xfrm_lookup

      -> xfrm_find_bundle

        -> bundle_create

          -> afinfo->bundle_create == __xfrm4_bundle_create

            -> xfrm_dst_lookup

              -> afinfo->dst_lookup == xfrm4_dst_lookup

                -> __ip_route_output_key

        -> dst_list

        -> dst->list=policy_bundles, policy->bundles = dst
  -> NF_HOOK(NF_OUTPUT)

  -> dst_output

    -> dst->output
 
dst_output: dst_list循环

  -> dst->output == xfrm_dst->output == xfrm4_output == xfrm4_state_afinfo->output

    -> NF_HOOK(POSTROUTING)

      -> xfrm4_output_finish

        -> gso ?

        -> xfrm4_output_finish2

          -> xfrm4_output_one

            -> mode->output

            -> type->output

            -> skb->dst=dst_pop(skb->dst)

          -> nf_hook(NF_OUTPUT)

            -> !dst->xfrm

              -> dst_output

          -> nf_hook(POSTROUTING)

  -> dst->output == ip_output

    -> NF_HOOK(POSTROUTING)

      -> ip_finish_output

        -> ip_finish_output2

          -> hh_output == dev_queue_xmit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: