openswan pluto代码分析--(1)pluto简介
来源:互联网 发布:linux查看进程id 编辑:程序博客网 时间:2024/04/30 22:52
pluto是一个openswan中的守护进程,提供IKEv1服务
Pluto通信消息:网卡数据报文消息;whack命令的消息;内核通信消息
接下来分别介绍上面三种通信消息
1. 网卡数据报文消息
打开UDP500和4500端口监听网卡数据----什么时机可以创建这个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()监听和内核通信socketpfkeyfd
->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将映射信息存入pluto的statetable中
->select()检查是否消息,如果返回值为-1,则循环检查,否则跳出循环进行后续消息处理
->pfkey_event() 处理select获取pfkeyfd的可读消息,
->read()读取消息
->pfkey_async()处理来自内核的异步消息
未完待续...
- openswan pluto代码分析--(1)pluto简介
- pluto分析
- Pluto
- openswan的pluto协商不成功的原因
- pluto启动分析
- pluto PortletServlet类分析
- pluto实现分析(2)——代码函数调用关系
- Pluto手记
- Pluto体系结构
- pluto-drvier
- 关于Pluto
- pluto list
- pluto实现分析(1)——前言、IKEv1概述、源文件概述
- Pluto项目介绍(2)-Pluto体系结构
- [pluto]hello world of pluto portlet
- pluto实现分析(3) ——主要数据结构
- Pluto中文文本分析能力的数据挖掘平台
- 初探pluto的部署
- 批量插入数据重复插入
- LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)
- 学习java的第四天
- Python作业——day01_流程图
- RGBA转换成RGB
- openswan pluto代码分析--(1)pluto简介
- modbus通讯协议及其原理
- Activity和Service的交互(学习笔记)
- markdown语法(看这张图就够了)
- MATLAB的小技巧
- [2016.01.20]CTEX_DAY1
- 传值与传引用
- 27 电话号码排序
- Android中给LineayLayout加边框