Linux网络子系统安全性模块详细分析之文件xfrm_state.c函数介绍

2.4.4.4 外部函数

1. tasklet_hrtimer_start ( )

函数原型:

static inline int tasklet_hrtimer_start(struct tasklet_hrtimer *ttimer, ktime_t time, const enum hrtimer_mode mode)

函数参数:ttimer为含有定时器的小任务,time表示时间结构,mode表示时间的模式是相对时间还是绝对时间。

函数功能:设置带有定时器的小任务。

返回值:定时器如果在队列中则返回1,否则返回0。

2.4.4.5 内部函数

1. xfrm_state_init ( )

函数原型:

int __net_init xfrm_state_init(struct net *net)

函数参数:net表示网络命名空间,里面包含了部分网络设备的信息,以及协议信息等。

函数功能:用于安全关联SA的初始化,主要创建了全局的SA链表,以及建立了目的地址、源地址和SPI三组Hash表,每组Hash表包含8个链表,函数还初始化了垃圾回收链表和等待队列。

返回值:成功返回0,失败返回无内存错误。

2. xfrm_state_alloc( )

函数原型:

struct xfrm_state *xfrm_state_alloc(struct net *net)

函数参数:net表示网络命名空间,里面包含了部分网络设备的信息,以及协议信息等。

函数功能:分配SA结构,并初始化其中的链表,以及生存期成员。

返回值:返回SA结构。

3. xfrm_state_insert ( )

函数原型:

void xfrm_state_insert(struct xfrm_state *x)

函数参数:参数x为SA结构,表示要插入到系统链表中的SA。

函数功能:将当前的SA插入到系统的链表,以及目的地址、源地址、SPI的Hash表中,并进行定时器相关设置。

返回值:无。

4. xfrm_state_find ( )

函数原型:

struct xfrm_state *

xfrm_state_find(const xfrm_address_t *daddr, const xfrm_address_t *saddr,

const struct flowi *fl, struct xfrm_tmpl *tmpl,

struct xfrm_policy *pol, int *err,

unsigned short family)

函数参数:daddr为要查找的目的地址,http://www.51969.com/saddr为要查找的源地址,fl表示当前的数据流,tmpl为SA模块,与SA进行匹配,pol为当前的策略,err为被调用函数返回错误码,family表示协议簇。

函数功能:查找SA,当内核发现一个包符合安全策略时会查找是否有相应的SA, 如果有则返回,否则会通知用户空间的IKE工具进行协商, 生成新的SA。

返回值:返回SA。

5. xfrm_find_acq ( )

函数原型:

struct xfrm_state *

xfrm_find_acq(struct net *net, struct xfrm_mark *mark, u8 mode, u32 reqid, u8 proto,

const xfrm_address_t *daddr, const xfrm_address_t *saddr,

int create, unsigned short family)

函数参数:net为网络命名空间,mark为SA的标记,mode为工作模式,reqid为序列号,proto为协议,daddr和saddr分别为目的和源地址,create为创建判断变量,family为协议簇。

函数功能:查找ACQUIRE类型的SA,此种类型的SA并非真正意义上的SA,当内核发现数据需要进行Ipsec处理时会查找是否有相应的SA,如果没有就向用户空间的IKE发送ACQUIRE请求, 并生成一个ACQUIRE类型的SA,待用户空间协商成功会生成合适的SA传内核, 内核就会替换此ACQUIRE的SA。

返回值:查找到的SA。

6. xfrm_state_update ( )

函数原型:

int xfrm_state_update(struct xfrm_state *x)

函数参数:安全关联SA

函数功能:使用SA更新系统的SAD,如果该SA的类型为ACQ则将其插入到SAD中。

返回值:成功返回0,否则返回错误码。

7. xfrm_state_gc_task ( )

函数原型:

static void xfrm_state_gc_task(struct work_struct *work)

函数参数:work为工作队列。

函数功能:释放垃圾链表中的SA,并唤醒等待队列。

返回值:无。

8. km_state_expired ( )

函数原型:

void km_state_expired(struct xfrm_state *x, int hard, u32 pid)

函数参数:参数x为SA结构,hard为强行通知变量,pid为进程的PID。

函数功能:调用xfrm_mgr中的notity函数进行SA到期的回调通知,并唤醒等待队列。

返回值:无。

时间: 2025-01-11 11:07:00

Linux网络子系统安全性模块详细分析之文件xfrm_state.c函数介绍的相关文章

Linux内核OOM机制的详细分析(转)

Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被 OOM killer杀掉了(多次遇到这样的假死状况).重启机器后查看系统日志/var/log/messages会发现 Out of Memory: Kill process 1865(sshd)

浅析Linux网络子系统(三)

继续分享陈铁飞老师在华为北研所讲座时的讲稿.这次内容有Qos子系统.默认排队规则.网络设备驱动程序和驱动实例.最后陈老师为大家推荐了基本参考书籍以供参考. Linux网络子系统系列课程连接: 本文最后会提供完整的下载版. Qos子系统的简要介绍 默认排队规则 设备无关层的输入流程图 网络设备驱动程序的介绍 一个具体的设备驱动实例 一个具体的设备驱动示例 AF_PACKET协议族的简要介绍 数据包的截获流程图 网络子系统更多内容提要,推荐参考书籍 一些网络编程问题诊断实例 陈老师从宏观的角度分析了

Linux MTD子系统 _从模型分析到Flash驱动模板

MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化硬件驱动框架.本文基于3.14内核,讨论MTD驱动框架. MTD子系统框架 设备节点层:MTD框架可以在/dev下创建字符设备节点(主设备号90)以及块设备节点(主设备号31), 用户通过访问此设备节点即可访问MTD字符设备或块设备. MTD设备层: 基于MTD原始设备, Linux在这一层次定义出

Linux 内核 TCP MSS 机制详细分析

作者:[email protected]知道创宇 404 实验室时间:2019 年 6 月 26 日英文版本:https://paper.seebug.org/967/ 前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了.[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前

Linux内核TCP MSS机制详细分析

前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了.[2][3] 而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析.所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析. 测试环境 1. 存在漏洞的靶机 操作系统版本:Ubuntu

Linux网络子系统之---- PHY 配置

MII即媒体独立接口,也叫介质无关接口. 它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1). 数据接口包括分别用于发送器和接收器的两条独立信道.每条信道都有自己的数据.时钟和控制信号.MII数据接口总共需16个信号. 管理接口是个双信号接口:一个是时钟信号,另一个是数据信号.通过管理接口,上层能监视和控制PHY. RMII口是用两根线来传输数据的, MII口是用4根线来传输数据的, GMII是用8根线来传输数据的. GMII (Gigabit MII) GMII是8bit并行同步

Linux内核OOM机制的详细分析

http://blog.chinaunix.net/uid-29242873-id-3942763.html Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉.典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被OOM killer杀掉了(多次遇到这样的假死状况).重启机器后查看系统日志/var/lo

Linux网络相关、firewalld和netfilter、netfilter5表5链介绍和ipta

ifconfig查看网卡-a 当网卡当机时或,无ip时不显示ifup ens33 /ifdown ens33 启动关闭网卡(ifup/ifdown后跟的是网卡名字,具体网卡名字需要用ifconfig查看)注:远程连接时,不要关闭你所连接的网卡,要重启你所连接的网卡可执行ifdown ens33 && ifup ens33设定虚拟网卡:1.进入网卡配置文件所在目录cd /etc/sysconfig/network-scripts/2.拷贝网卡配置文件cp ifcfg-ens33 ifcfg-

【Linux网络基础】TCP/IP 协议簇(各个常见协议介绍)

一.应用层协议 1. FTP 协议所在层次:应用层协议 名称:FTP协议 协议端口:20,21 协议说明: FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一. FTP协议包括两个组成部分: FTP服务端 FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源 在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上 FTP客户端 备注: 由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用