Linux 内核 IPv4 协议栈中的协议注册机制解析
1. 引言
在 Linux 内核的 IPv4 协议栈中,inetsw
是一个核心数据结构,负责管理不同套接字类型(如 SOCK_STREAM
、SOCK_DGRAM
)的协议实现。本文结合代码分析,深入探讨其设计原理、动态协议注册机制及并发安全实现。
2. inetsw
的结构与作用
2.1 定义与初始化
static struct list_head inetsw[SOCK_MAX];
-
类型:静态全局链表数组,作用域限定在
net/ipv4/af_inet.c
文件内。 -
大小:
SOCK_MAX
,表示内核支持的最大套接字类型数(如SOCK_STREAM
、SOCK_DGRAM
、SOCK_RAW
等)。 -
初始化:内核启动时,通过循环初始化每个链表头:
for (r = &inetsw[0]; r < &in