strongwan sa分析(三)

xfrm与strongswan内核接口分析

1. strongswan的实现

如下图,业务场景可以分为两类:

  1. 下发类的交互主要由包触发或用户配置动作触发。
  2. 消息类的交互主要由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()

最新文章

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

热门文章

  1. matlab学习笔记11_1低维数组操作
  2. knuth洗牌算法
  3. 手工下载php的composer软件包,如何让项目自动加载包里的类
  4. dbcp与c3p0的区别
  5. tween算法
  6. KMP算法JS实现
  7. Linux系统权限设置 - 运用指南
  8. java内置的四大函数式接口
  9. web自动化测试笔记(一)
  10. Miller_Rabin算法_单个素数检测_启发式算法