linux kernel ipv6
Code flow chart sendto recvfrom
+———————————————————————-+ | | | +——–+ +————-+ | | | sendto | Application | recvfrom | | | +—-+—+ +——+——+ | | | | | +————+————————————+——————–+ | | ————-+————————————+———————- | | +————v————————————v——————–+ | Socket Interface | +—–+—+————————————————————+ | +————————————+ ^ ^ | +—————–+————–+ | +—–+———————-+——-+ +——-+—————–+———+ | | | | | | | | | | UDP +——-+—–+ | | | TCP +—–+——-+ | | | | udp_recvmsg | | | | | tcp_recvmsg | | | +-v———–+ +————-+ | |+——v——+ +————-+ | | | udp_sendmsg | +————-+ | || tcp_sendmsg | +————-+ | | +——+——+ | udp_rcv | | |+——+——| | tcp_v4_rcv | | | | +————-+ | | | +————-+ | | | ^ | | | ^ | +———-+——————–+—-+ +——-+—————–+———+ +———-+——————–+————–+—————–+———+ | v | v | | | +————————+ | +—————+ | | | | ip_push_pending_frames | | | ip_queue_xmit | | | | +—-+——————-+ | +—–+———+ | | | | +———————-+————–+ | | | | | +—————-+ +———————–+ | | | v v v | | | | | +———–+ +—–+————-+ +——-+——–+——–+| | | ip_output | | ip_forward_finish | | ip_local_deliver_finish || | +—+——-+ +——————-+ +————————-+| | v ^ ^ | |+——————-+ +—–+——+ +——-+———-+ | || ip_finish_output2 | | ip_forward | | ip_local_deliver | | |+—–+————-+ +————+ +——————+ | | | ^ ^ | | v +——————-+ | | | +———————+ +–+—-+——-+ | | | Neighbor sub system | | ip_rcv_finish | | | +————–+——+ +—————+ | | | ^ | | | +—-+—-+ | | IP | | ip_rcv | | | | +———+ | | | ^ | +—————-+—————————————+—————–+ | | +—————-v—————————————+—————–+ | +—————-+ +—-+—–+ | | | dev_queue_xmit | Driver Interface | netif_rx | | | +——-+——–+ +———-+ | | | ^ | +—————-+—————————————+—————–+ | | +—————-v—————————————+—————–+ | +—————— +—+—-+ | | | net_send_packet | Driver | net_rx | | | +—————–+ +——–+ | +————————————————————————–+