一、Linux网络设备驱动整体架构
网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包,以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。
Linux系统对网络设备驱动定义了4个层次,如下图:
1. 网络协议接口层
网络协议接口层最主要的功能是给上层协议提供透明的数据包发送和接收接口,使得上层协议独立于具体的设备。
无论是ARP协议还是IP协议,都通过统一的dev_queue_xmit()
函数发送数据,通过统一的netif_rx()
函数接收数据。
2. 网络设备接口层
网络设备接口层的主要功能是为千变万化的网络设备定义统一、抽象的数据结构net_device
结构体,以不变以万变,实现多种硬件在软件层次上的统一。
3. 设备驱动功能层
设备驱动功能层的各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()
函数启动发送操作,并通过网络设备上的中断触发接收操作。