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

来源:互联网 发布:linux查看进程id 编辑:程序博客网 时间:2024/04/30 22:52
                                                                                             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()监听和内核通信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将映射信息存入plutostatetable

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

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

       ->read()读取消息

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


未完待续...

0 0
原创粉丝点击