zoukankan      html  css  js  c++  java
  • [ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析

    strongwan sa分析(三)

    xfrm与strongswan内核接口分析

    1. strongswan的实现

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

    1. 下发类的交互主要由包触发或用户配置动作触发。
    2. 消息类的交互主要由watcher监听socket,然后触发。

    netlink_plugin.png

    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()
    
  • 相关阅读:
    002.NFS相关配置项
    001.NFS简介
    002.DNS-BIND简介
    001.DNS原理及配置格式
    002.DHCP配置
    001.DHCP简介
    001.Chrony时间服务器
    博客开篇记载!
    【python-opencv】图像梯度
    【python-opencv】形态转换
  • 原文地址:https://www.cnblogs.com/hugetong/p/11143374.html
Copyright © 2011-2022 走看看