Ipv6 初始化和处理流程分析一
Ipv6 的初始化1
网络子系统概述Linux 内核中,与网络相关的代码是一个相对独立的子系统,称为网络子系统
网络子系统是一个层次化的结构,可分为以下几个层次:1)Socket 层Linux 在进展过程中,采纳 BSD socket APIs 作为自己的网络相关的 API 接口
同时,Linux 的目标又要能支持各种不同的协议族,而且这些协议族都可以使用 BSD socket APIs 作为应用层的编程接口
因此,在 socket APIs 与协议族层之间抽象出一个 socket 层,用于将 user space 的 socket API 调用,转给具体的协议族做处理
2)协议族层(INET 协议族、INET6 协议族等)Linux 网络子系统功能上相当完备,它不仅支持 INET 协议族(也就是通常所说的 TCP/IP stack),而且还支持其它很多种协议族,如 DECnet, ROSE, NETBEUI 等
INET6 就是一种新增加的协议族
对于 INET、INET6 协议族来说,又进一步划分为传输层和网络层
3)设备驱动层设备驱动层则主要将协议族层与物理的网络设备隔离开
它不在本文的讨论范围之内
下图是 Linux 网络系统层次结构图
网络子系统的初始化1)Socket 层的初始化:Init()->do_basic_setup()—〉sock_init()Sock_init():对 sock 和 skbuff 结构进行 SLAB 内存的初始化工作2)各种网络协议族的初始化:Do_initcalls():对于编译到内核中的功能模块(而不是以模块的形式动态加载),它的初始化函数会在这个地方被调用到
内核映象中专门有一个初始化段,所有编译到内核中的功能模块的初始化函数都会加入到这个段中;而 do_initcalls() 就是依次