网络驱动架构
Linux 内核网络设备驱动框架分为四个模块:网络协议接口模块、网络设备接口模块、设备驱动模块和网络设备与媒介模块。
网络协议常用数据结构
- 套接字缓冲区
sk_buff
结构体类型,具体核心成员如下:
- 存储 IP 数据
skb_shared_info
结构体类型(保存 IP 分片数据),具体成员如下:
网络设备接口模块常用的数据结构
- 存储网络设备全部信息,包括物理设备和虚拟设备,对应结构体类型为
net_device
,具体成员如下:
- name:网络设备名称;
- name_node:网络设备名称节点;
- mem_end:共享内存其实地址;
- mem_start:共享内存的结束地址;
- base_addr:IO 基地址,
- irq:终断号。
网络设备驱动程序只要设备 net_device
并注册,即可实现网络通讯功能。
- NAPI 结构体类型,具体成员如下:
NAPI 数据包信息的循环流程如下:
数据接受中断发生–>减半接受中断–>以轮询方式接收所有数据包或轮询权重耗尽–>开启接收中断–>数据接受中断发生–>。
Linux 内核将中断分为两个部分:中断上半部分和中断下半部分。
网络协议接口模块
主要功能是给上层协议提供透明的数据包和接收接口,dev_queue_xmit() 用于发送数据包,netif_rx()/netif_receive_skb() 用于接收数据包。不管你发送还是接收数据包都会用到 sk_buff 结构体类型(套接字缓冲区),主要用在网络子系统中各层之间的传输数据。
评论