分类: LINUX
2014-02-20 15:42:38
=============================================================
TCP收包流程
=============================================================
网卡收包中断
网卡驱动处理中断netif_rx(非NAPI)-- 使用softnet_data->input_pkt_queue公共队列,用backlog_dev替换dev
NAPI使用设备内存,驱动程序使用自定义的poll方法从设备(ring buffer)中直接取帧。不调用neif_rx方法直接走下面的流程
netif_rx_schedule
触发软中断
软中断处理-->net_rx_action
dev->poll
process_backlog(非NAPI),从softnet_data->input_pkt_queue公共队列中取数据处理
驱动自定义的poll函数,从设备(ring buffer)中直接取帧
netif_receive_skb
ip_rcv
ip_rcv_finish
dst_input
skb->dst->input(skb)=ip_local_deliver或ip_forward
ip_local_deliver
ip_local_deliver_finish
ipprot->handler(skb)=tcp_v4_rcv
tcp_v4_rcv
tcp_v4_do_rcv
tcp_rcv_established
ip_forward