[ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析
2024-09-29 11:51:41
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()
最新文章
- 关于node的http模块
- 关于arcengine中geoprocessor使用的困惑
- javascript无缝滚动示例
- EWM一个仓库号对应ERP多个PLANT的配置
- tableviewCell的xib中collectionView签协议
- (18)odoo规范
- class、interface、struct的区别
- C#中List的Find方法的使用
- java_eclipse_设置全局编码_utf-8_编译class指定_运行jar乱码解决_不依赖环境
- shrio初体验(1)
- java HotSpot 内存管理白皮书
- Zookeeper~Linux环境下的部署
- Linux whereis命令详解
- Matlab function lorenzgui
- [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]
- (8)What makes a good life? Lessons from the longest study on happiness
- 【转】windows下mongodb安装与使用整理
- linux下使用ack进行代码搜索
- python输出测试报告测试成功
- Apache和iis的冲突处理