[ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析
strongwan sa分析(三)
xfrm与strongswan内核接口分析
1. strongswan的实现
如下图,业务场景可以分为两类:
- 下发类的交互主要由包触发或用户配置动作触发。
- 消息类的交互主要由watcher监听socket,然后触发。

2. 交互机制
2.1 下发消息
| 消息名 | 功能定义 |
|---|---|
| XFRM_MSG_ALLOCSPI | 获取SPI |
| XFRM_MSG_NEWSA | 新建SA |
| XFRM_MSG_UPDSA | 更新SA |
| XFRM_MSG_GETSA | 获取SA |
| XFRM_MSG_DELSA | 删除SA |
| XFRM_MSG_FLUSHSA | 清空SA |
| XFRM_MSG_GETSPDINFO | 获取SPD信息 |
| XFRM_MSG_NEWPOLICY | 新建安全策略 |
| XFRM_MSG_UPDPOLICY | 更新安全策略 |
| XFRM_MSG_GETPOLICY | 获取安全策略 |
| XFRM_MSG_DELPOLICY | 删除安全策略 |
| XFRM_MSG_FLUSHPOLICY | 清空安全策略 |
2.2 接收消息
| 消息名 | 功能定义 |
|---|---|
| XFRM_MSG_ACQUIRE | ??? |
| XFRM_MSG_EXPIRE | CHILD_SA超时 |
| XFRM_MSG_MIGRATE | CHILD_SA热迁移 |
| XFRM_MSG_MAPPING | NAT端口关系改变 |
POLICY也有与CHILD_SA同样的超时机制,strongswa那种没有处理这个消息。
消息类型为:XFRM_MSG_POLEXPIRE。同样分HARD和SOFT。
4. xfrm的消息通信的实现
着重分析两个消息过程:EXPIRE,ACQUIRE。
4.1 EXPIRE
源码文件:
linux.git/net/xfrm/xfrm_user.c
消息处理的关键函数
static struct xfrm_mgr netlink_mgr = {
.id = "netlink",
.notify = xfrm_send_state_notify,
.acquire = xfrm_send_acquire,
.compile_policy = xfrm_compile_policy,
.notify_policy = xfrm_send_policy_notify,
.report = xfrm_send_report,
.migrate = xfrm_send_migrate,
.new_mapping = xfrm_send_mapping,
};
policy的超时由timer触发:
xfrm_policy.c::xfrm_policy_timer()
SA的超时
1. timer触发
分为hard和soft两个触发逻辑
xfrm_state.c::xfrm_timer_handler()
2. 包与字节数触发
同样分为hard和soft两个触发逻辑。
实现逻辑的代码:
xfrm_state.c::xfrm_state_check_expire()
在数据包的input和output两个地方进行检查:
xfrm_input.c::xfrm_input()
xfrm_output.c::xfrm_output_one()
4.2 ACQUIRE
目前还没搞懂,到底是干嘛的。
xfrm_state.c::xfrm_state_find()
xfrm_state.c::km_query()
[ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析的更多相关文章
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- 鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元 | 百篇博客分析OpenHarmony源码 | v4.05
百篇博客系列篇.本篇为: v04.xx 鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...
- ABP源码分析三十三:ABP.Web
ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
随机推荐
- UE4的内存模型
转自:https://blog.csdn.net/noahzuo/article/details/73565259 UObject和FUObjectItem UE4运行的基本单位是UObjet,然而U ...
- web自动化测试笔记(一)
web自动化测试环境配置(JDK) 使用selenium工具做自动化测试之前,首先要做的准备工作是配置一下web自动化测试的环境. 1.下载jdk http://www.oracle.com/tech ...
- Springboot采用hibernate-validate验证请求参数
在springboot项目使用hibernate-validate对请求参数添加注解进行校验 常用注解 @Null,标注的属性值必须为空 @NotNull,标注的属性值不能为空 @AssertTrue ...
- AOP+Redis锁防止表单重复提交
确保分布式锁同时满足以下四个条件 1.互斥性.在任意时刻,只有一个客户端能持有锁 2.不会发生死锁.即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁 3.具有容错性.只要 ...
- Linux下的JMeter部署及使用
之前都是在windows环境使用JMeter,是有操作界面的.但是最近需要在Linux环境下使用,现将操作步骤记录下来 在安装JMeter之前,需要在Linux下安装JDK并配置环境变量,这里跳过 1 ...
- JVM之java并发 ——线程安全与锁优化
概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实 ...
- Java开发笔记(一百零七)URL地址的组成格式
URL的全称是Uniform Resource Locator,意思是统一资源定位符,俗称网络地址或网址.网络上的每个文件及接口,都有对应的URL网址,它规定了其他设备如何通过一系列的路径找到自己,犹 ...
- python3.7 pip升级或安装,拒绝访问 解决方案
- SQL——IN操作符
一.IN操作符基本用法 IN操作符用于在WHERE字句中规定多个值. 语法格式如下: SELECT 列名1,列名2... FROM 表名 WHERE 列名 IN(值1,值2...); 示例studen ...
- Go 参数传递
Go参数传递 在面试中,经常会被问起,这门语言的参数传递是值传递还是引用传递,当然,大部分情况下我们都会提前准备,有恃无恐,但还是希望能够精益求精嘛,所以针对Go语言来分析,Go传参是值传递还是引用传 ...