#ifndef _IPSEC_API_H #define _IPSEC_API_H #include "common_types.h" #define MAX_TUN_NAME_LEN 31 #define MAX_IP_STR_LEN 63 #define MAX_SUBNET_STR_LEN 67 #define MAX_AUTH_ID_LEN 63 #define MAX_PSK_LEN 31 #define MAX_IKE_PROP_LEN 127 #define MAX_IPSEC_PROP_LEN 127 typedef struct _ikev1_config_ph1 { char ph1_name[MAX_TUN_NAME_LEN+1]; /* key值,要求不能重复 */ /* 隧道源地址与目的地址 */ char local_ip_str[MAX_IP_STR_LEN+1]; char remote_ip_str[MAX_IP_STR_LEN+1]; /* 要求不能重复 */ /* 认证方式 */ u32 auth_method; /* PSK */ char psk[MAX_PSK_LEN+1]; /* 一阶段加密算法、认证算法、DH组 */ char ike_proposal_str[MAX_IKE_PROP_LEN+1]; /* 一阶段模式: 隧道模式、传输模式 */ u32 mode; u32 sa_ike_life_seconds; int dpd_delay; int dpd_timeout; bool nat_keepalive; } ikev1_config_ph1_t; typedef struct _ikev1_config_ph2 { char ph2_name[MAX_TUN_NAME_LEN+1]; /* key值,要求不能重复 */ char refph1_name[MAX_TUN_NAME_LEN+1]; /* 引用的第一阶段隧道名 */ /* 流量选择符信息: 源保护子网、目的保护子网、上层保护协议、源端口与目的端口(上层保护协议为UDP或TCP时有效) */ char local_net_str[MAX_SUBNET_STR_LEN+1]; char remote_net_str[MAX_SUBNET_STR_LEN+1]; u16 ul_protocol; u8 ul_port_ln; u8 ul_port_rn; /* 二阶段加密算法、认证算法、PFS */ char ipsec_proposal_str[MAX_IPSEC_PROP_LEN+1]; u32 sa_ipsec_life_seconds; u32 sa_ipsec_life_kilobytes; int encapsulation; } ikev1_config_ph2_t; typedef struct _ikev2_config { /* 待填充 */ ; } ikev2_config_t; typedef union _ike_config { struct { ikev1_config_ph1_t ph1; ikev1_config_ph2_t ph2; }v1; ikev2_config_t v2; }ike_config_t; #endif