内核协议栈数据包转发 目录 1 NAPI 流程与非NAPI 1
1 NAPI 驱动流程 1
2 非NAPI 流程 1
3 NAPI 和非NAPI 的区别 2 内核接受数据 2
1 数据接收过程 2
2 采取DMA 技术实现 3 e100 采用NAPI 接收数据过程 3
1 e100_open 启动e100 网卡 3
2 e100_rx_alloc_list 建立环形缓冲区 3
3 e100_rx_alloc_skb 分配skb 缓存 3
4 e100_poll 轮询函数 3
5 e100_rx_clean 数据包的接收和传输 3
6 e100_rx_indicate 4 队列层 4
1、软中断与下半部 4
2、队列层 5 采用非NAPI 接收数据过程 5
1netif_rx 5
2 轮询与中断调用netif_rx_schedule 不同点 5
3 netif_rx_schedule 5
4 net_rx_action 5
5 process_backlog 6 数据包进入网络层 6
1 netif_receive_skb(): 6
2 ip_rcv(): 6
3 ip_rcv_finish(): 6
4 dst_input(): 6
5 本地流程ip_local_deliver: 6
6 转发流程ip_forward(): 1 NAPI 流程与非NAPI 1
1NAPI 驱动流程: 中断发生 -->确定中断原因是数据接收完毕(中断原因也可能是发送完毕,DMA 完毕,甚至是中断通道上的其他设备中断) -->通过netif_rx_schedule将驱动自己的napi结构加入softnet_data的poll_list链表,禁用网卡中断,并发出软中断 NET_RX_SOFTIRQ -->中断返回时触发软中断调用相应的函数net_rx_action,从 softnet_data 的