驱动框架
Linux 内核网络设备驱动框架分别为四个模块,分别为网络协议借口模块、网络设备接口模块、设备驱动功能模块和网络设备与媒介模块。具体视图如下:
网络协议接口模块:主要功能
- 网络接口卡接收和发送数据在 Linux 内核当中处理流程如下:
Linux内核直接把中断分成两个部分:中断上半部和中断下班部
- 网络协议接口模块:主要功能是给上层协议提供透明的数据包发送和接收接口,
dev_queue_xmit()
用于发送数据包,netif_rx()/netif_recvive_skb()
用于接收数据包。不管发送还是接收数据包都会用到sk_buff
结构体类型(套接字缓冲区),主要用在网络子系统中的各层之间传输数据。
常用数据结构
网络协议接口模块
- 套接字缓冲区
sk_buff
结构体类型:
- 存储
IP
数据skb_shared_info
结构体类型(保存 IP 分片数据):
网络设备接口模块
- 存储网络设备全部所有信息,包括物理设备和虚拟设备,对应结构体类型为
net_device
:
- 网络设备驱动程序只要 net_device 注册,即可实现网络通讯功能。
- NAPI 结构体类型
NAPI 数据包信息循环流程如下:
数据接收中断发生->减半接收中断->轮询接收所有数据包或轮询权重耗尽->开启接收中断->数据接收中断发生