IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> strongswan libcharon -> 正文阅读

[游戏开发]strongswan libcharon

目录

libcharon目录源文件

libcharon内模块相互关系

libcharon目录结构与描述


libcharon目录源文件

strongswan/src/libcharon

# ls
Android.mk  bus     control   daemon.h  encoding  Makefile.am  plugins     sa
attributes  config  daemon.c  debug     kernel    network      processing  tests

libcharon里主要实现了IKE的过程,为了确保每一个端的IKE_SA能够生成,每端需要相互认证。

在 strongswan/src/libcharon/sa目录下提供几种认证方式有:

ikev1?ikev2?eap?xauth

libcharon内模块相互关系

strongswan/src/libcharon/daemon.h的注释里以ikev2为例画出了数据流


      +---------------------------------+       +----------------------------+
      |           controller            |       |          config            |
      +---------------------------------+       +----------------------------+
               |      |      |                           ^     ^    ^
               V      V      V                           |     |    |

       +----------+  +-----------+   +------+            +----------+    +----+
       | receiver |  |           |   |      |  +------+  | CHILD_SA |    | K  |
       +---+------+  | Scheduler |   | IKE- |  | IKE- |--+----------+    | e  |
           |         |           |   | SA   |--| SA   |  | CHILD_SA |    | r  |
    +------+---+     +-----------+   |      |  +------+  +----------+    | n  |
 <->|  socket  |           |         | Man- |                            | e  |
    +------+---+     +-----------+   | ager |  +------+  +----------+    | l  |
           |         |           |   |      |  | IKE- |--| CHILD_SA |    | -  |
       +---+------+  | Processor |---|      |--| SA   |  +----------+    | I  |
       |  sender  |  |           |   |      |  +------+                  | f  |
       +----------+  +-----------+   +------+                            +----+

               |      |      |                        |      |      |
               V      V      V                        V      V      V
      +---------------------------------+       +----------------------------+
      |               Bus               |       |         credentials        |
      +---------------------------------+       +----------------------------+

?SA的状态机

 * State of an IKE_SA.
 *
 * An IKE_SA passes various states in its lifetime. A newly created
 * SA is in the state CREATED.

                 +----------------+
                 |   SA_CREATED   |
                 +----------------+
                         |
    on initiate()--->    |   <----- on IKE_SA_INIT received
                         V
                 +----------------+
                 | SA_CONNECTING  |
                 +----------------+
                         |
                         |   <----- on IKE_AUTH successfully completed
                         V
                 +----------------+
                 | SA_ESTABLISHED |-------------------------+ <-- on rekeying
                 +----------------+                         |
                         |                                  V
    on delete()--->      |   <----- on IKE_SA        +-------------+
                         |          delete request   | SA_REKEYING |
                         |          received         +-------------+
                         V                                  |
                 +----------------+                         |
                 |  SA_DELETING   |<------------------------+ <-- after rekeying
                 +----------------+
                         |
                         |   <----- after delete() acknowledged
                         |
                        \V/
                         X
                        / \

The scheduler is responsible to execute timed events. Jobs may be queued to the scheduler to get executed at a defined time (e.g. rekeying). The scheduler does not execute the jobs itself, it queues them to the processor.

The IKE_SA manager managers all IKE_SA. It further handles the synchronization:
Each IKE_SA must be checked out strictly and checked in again after use. The manager guarantees that only one thread may check out a single IKE_SA. This allows us to write the (complex) IKE_SAs routines non-threadsafe.
The IKE_SA contain the state and the logic of each IKE_SA and handle the?messages.

The CHILD_SA contains state about a IPsec security association and manages them. An IKE_SA may have multiple CHILD_SAs. Communication to the kernel takes place here through the kernel interface.

The kernel interface installs IPsec security associations, policies, routes and virtual addresses. It further provides methods to enumerate interfaces and may notify the daemon about state changes at lower layers.


The bus receives signals from the different threads and relays them to interested listeners. Debugging signals, but also important state changes or error messages are sent over the bus.
Its listeners are not only for logging, but also to track the state of an?IKE_SA.

The controller, credential_manager, bus and backend_manager (config) are places where a plugin ca register itself to provide information or observe and control the daemon.

libcharon目录结构与描述

接下来描述strongswan/src/libcharon/目录下各文件夹的功能和相互关系

目录文件描述
attributesattribute_handler.h attribute_manager.h attributes.c? mem_pool.c attribute_manager.c? attribute_provider.h? attributes.h mem_pool.h
busbus.c? bus.h? listeners
configbackend.h? backend_manager.c? backend_manager.h? child_cfg.c? child_cfg.h? ike_cfg.c? ike_cfg.h? peer_cfg.c? peer_cfg.h
controlcontroller.c? controller.h
encodinggenerator.c? generator.h? message.c? message.h? parser.c? parser.h? payloads
kernel

kernel_handler.c?kernel_handler.h

kernel_listener.h

侦听并处理内核事件,主要实现了kernel listener的接口。

主要事件有:策略匹配,SA过期,策略迁移,网络接口状态改变或者路由改变,隧道建立事件等。

kernel_interface.c?kernel_interface.h

kernel interface主要是和内核通信,用来处理SA和策略的管理,网络接口和IP地址的管理。是kernel_handler,kernel_ipsec,kernel_net的集合。

比如:从SAD里添加,删除,更新,查询SA等;从SPD里添加,删除,更新,查询Policy等;从内核接口查询路由,获取本地接口状态,IP地址等;添加虚拟地址,删除虚拟地址等。

kernel_ipsec.c?kernel_ipsec.h?

通过内核接口管理SA和策略。

比如:从SAD里添加,删除,更新,查询SA等;从SPD里天剑,删除,更新,查询Policy等。

kernel_net.c?kernel_net.h

通过内核接口设置网络参数。

比如根据目的地址获取源地址,路由查询,获取本地IP地址对应的接口名称,为接口添加虚拟地址,添加路由等。

network

receiver.c?? receiver.h

sender.c? sender.h

socket.c? socket.h
socket_manager.c socket_manager.h
plugins
processingjobs
sachild_sa.c?child_sa.h一个child_sa包含两个SAs,即host间两个方向的SAs,这个两个SAs和Policy都有相同的reqid。
child_sa_manager.c?child_sa_manager.h

处理CHILD_SA和IKE_SA之间的关联;

注册,删除并查找CHILD_SA和IKE_SA之间的关联。

ike_sa.c?ike_sa.h一个IKE_SA包含了一条连接的算法信息;一个IKE_SA包含它负责的CHID_SAs。所有的传输都是由IKE_SA通过任务管理处理。
ike_sa_id.c?ike_sa_id.h

ike_sa_id是用来标识一个IKE_SA的。

IKE_SA实际由发起方和响应方的SPI标识;另外,它包含了IKE主要版本号,如IKEv2,和daemon的角色,如发起方还是响应方。

ike_sa_manager.c?ike_sa_manager.h
task.c?task.h

任务类型在enum task_type_t中有枚举。

比如建立未认证的IKE_SA,认证建立的IKE_SA,认证前的证书处理,认证后的证书处理,用IKE_SA生成CHILD_SA,删除CHILD_SA等。

task_manager.c?task_manager.h

IKEv1或IKEv2的管理器创建;

任务管理器使用任务队列来管理任务。

任务队列有三种:由己方初始化激活的任务队列;由对方初始化的被动任务队列;已经初始化但还未激活的任务队列。

ikev1
ikev2
eap
xauth

authenticator.c?authenticator.h

keymat.c keymat.h

shunt_manager.c?shunt_manager.h
redirect_manager.c??redirect_manager.h?? trap_manager.c? trap_manager.h
redirect_provider.h

testsexchange_tests.c? exchange_tests.h? libcharon_tests.c? libcharon_tests.h? Makefile.am? suites? utils
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:31:30  更:2022-03-17 22:35:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 19:07:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码