openswan pluto代码分析--(1)pluto简介

2023-11-19

                                                                                             pluto简介

pluto是一个openswan中的守护进程,提供IKEv1服务

Pluto通信消息:网卡数据报文消息;whack命令的消息;内核通信消息

接下来分别介绍上面三种通信消息

1. 网卡数据报文消息

打开UDP5004500端口监听网卡数据----什么时机可以创建这个socket还没看出来

call_server中遍历所有网卡检查是否可读

 

代码:

call_server()中遍历所有网卡检查是否可读

   -> comm_handle (const structiface_port *ifp)

      -> read_packet(structmsg_digest *md) 读取socket的报文数据

      -> process_packet (struct msg_digest **mdp)处理报文


2.whack命令的消息

pluto的主函数中创建UNIX域套接口ctl_fd,接下来在call_server函数监听ctl_fd读取

whack的输入;whack是控制程序,通过UNIX域套接口和pluto通信

 

代码:

call_server()检查ctl_fd是否可读

  ->whack_handle(int whackctlfd)处理whack命令入口

     ->whack_process(int whackfd, structwhack_message msg)处理whack消息


3. 内核通信消息

和内核进行PFKEY/netlink通信

call_server监听PFKEY对应的socket


call_server()监听和内核通信socket pfkeyfd

    ->pfkey_dequeue()

    ->pfkey_async()进行异步消息处理,遍历pfkey_iq_head链表中消息进行处理

         ->pfkey_msg_parse()消息解析,如果解析失败不进行后续处理

         ->消息类型检查buf->msg.sadb_msg_type

             K_SADB_REGISTER调用klips_pfkey_register向内核注册协议

             K_SADB_ACQUIRE调用process_pfkey_acquire

             K_SADB_X_NAT_T_NEW_MAPPING调用process_pfkey_nat_t_new_mapping将映射信息存入plutostatetable

   ->select()检查是否消息,如果返回值为-1, 则循环检查,否则跳出循环进行后续消息处理

   ->pfkey_event() 处理select获取pfkeyfd的可读消息,

       ->read()读取消息

       ->pfkey_async()处理来自内核的异步消息


未完待续...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openswan pluto代码分析--(1)pluto简介 的相关文章

随机推荐

  • SQL Server 2012的安装与环境配置以及在Java中连接数据库

    自学Java也已快有一个月了 虽然本人从事的是FPGA开发的工作 但是对于软件开发兴趣盎然 没办法只能工作之余自己慢慢自学了 这应该是我的第一篇Java学习文章 希望以后自己能够坚持 记录一些学习过程 做一些有意思的事 慢慢实现自己的目标吧
  • echarts雷达图自定义射线颜色、边框效果和背景样式

    目录 1 在官网找样例 2 初步改造示例 有个雏形 3 细节改造和优化 4 全部代码 5 原始效果和完成效果对比 1 在官网找样例 样例地址 Examples Apache ECharts 2 初步改造示例 有个雏形 对应的代码 为了说明问
  • 1.7 编程基础之字符串 15 整理药名 python

    http noi openjudge cn ch0107 15 1 7 编程基础之字符串 15 整理药名 http noi openjudge cn ch0107 15 Python字母大小写的转换 两种方法 https blog csdn
  • Java实体类转Map、Map转实体类

    1 创建entity User java package com jeff entity public class User private String userName private String password private I
  • Python错误处理的艺术:使用retrying库实现高效重试机制

    简介 学习如何使用 Python 的 retrying 库来处理在程序运行过程中可能出现的各种异常和错误 retrying 是一种简单 易于使用的重试机制 帮助我们处理由网络问题或其他暂时性错误引起的失败 在很多情况下 简单的重试可能就是解
  • SSM框架运行原理

    ssm框架 包括 springMVC spring mybatis springMVC 是基于MVC的框架 属于MVC框架的还有 Struts1 Struts2 SpringMVC 获取值得方式 Struts1 actionForm jav
  • SylixOS学习三—— SylixOS的引导与安装1

    自学SylixOS启程之旅笔记 一 SylixOS 引导过程分析 1 SylixOS 常用引导程序 2 SylixOS 支持ARM设备的几种引导方式 3 SylixOS引导过程分析 总流程分析 3 1 一个设备从上电到启动完成的整个流程 3
  • 使用两个队列实现一个栈,使用两个栈实现一个队列

    一 栈与队列的特点 一 栈 栈 一种特殊的线性表 其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶 另一端称为栈底 不含任何元素的栈称为空 栈 栈又称为后进先出的线性表 栈的特点 后进先出 LIFO 二 队列
  • Java ZipOutputStream 的使用,实现压缩文件

    Java 压缩文件主要通过 ZipOutputStream 实现 ZipOutputStream 有 5 个关键的方法 putNextEntry 向压缩包中添加子文件 并设置文件路径和名称 压缩包解压后得到的文件叫子文件 该方法接受一个 Z
  • Flask框架十:Flask终章与补充(首)

    1 WTForms的表单验证 form表单验证的类型有多种 邮箱 年龄 是否为空等多种验证 以及验证码等验证 WTForms都提供了相关的验证模块 创建一个froms模块 将想要验证的视图模块中的内容写在类里面 from wtforms i
  • 如果我想用vue来对导入的word文件进行解析呢

    如果你想使用 Vue 来解析 Word 文件 你可以考虑使用第三方库来帮助你完成这个任务 你可以使用 js word library 来解析 Word 文件 它是一个 JavaScript 库 可以解析 Word 文件中的文本 图像 表格等
  • GIF演示排序算法

    最近在准备笔试 面试 看了不少关于排序算法的知识 总感觉代码有余 直观不足 所以想利用直观的GIF动图来演示各种排序算法 1 插入排序 Insertion Sort 1 1算法简介 插入排序 Insertion Sort 的算法描述是一种简
  • CentOS7的firewall和安装iptables

    前言 CentOS7 的防火墙默认使用是firewall 而我们通常使用iptables 本文记录了firewall基础的命令和iptables的安装和使用 firewall部分 part1 服务命令 systemctl start fir
  • 简析多级指针解引用

    转自 简析多级指针解引用 指针是C语言中公认的最为强大的语法要素 但同时也是最难理解的语法要素 它曾给程序员带来了无数麻烦和痛苦 以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了 下面是一个最简单的C语言指针的例子 int
  • hadoop使用(五)

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔 247 文章 122 评论 571 hadoop使用 五 第1章 引言 1 1 编写目的 对关于hadoop的文档及资料进行进一步的整理 1 2 相关网站 毋庸置疑 http hadoop
  • 查看3306端口被谁占用

    今天安装mysql一直有问题 怀疑3306被谁占用了 排查开始 一 使用命令符netstat命令查看 netstat a n 显示各个端口占用 netstat ano 显示各个端口占用和进程PID 二 使用netstat aon finds
  • 虚拟机无敌大坑,安装不了cuda和cudnn

    大家好 想用虚拟机装cuda和cudnn这两个环境 如果需要的话不要在虚拟机中装 根本装不好 踩了两天的坑 才知道在虚拟机环境下是无法安装cuda和cudnn得 因为虚拟机环境下根本无法识别到你的显卡版本 只有一个虚拟机得环境 所以如果想安
  • 在eclipse的Server里找不到Apache tomcat的解决方案

    我们在创建Dynamic Web Project时在新界面一栏中 Target runtime一栏是空 没有可选择的tomcat 点击右侧的New Runtime后看到如图没有对应的Apache 同样我们在上面的windows gt pre
  • RK3588 添加ROOT权限

    一 ROOT简介 ROOT权限是Linux和Unix系统中的超级管理员用户帐户 该帐户拥有整个系统的最高权利 可以执行几乎所有操作 ROOT就是获取安卓系统中的 最高用户权限 以便执行一些需要高权限才能执行的操作 包括卸载系统自带程序 刷机
  • openswan pluto代码分析--(1)pluto简介

    pluto简介 pluto是一个openswan中的守护进程 提供IKEv1服务 Pluto通信消息 网卡数据报文消息 whack命令的消息 内核通信消息 接下来分别介绍上面三种通信消息 1 网卡数据报文消息 打开UDP500和4500端口