#ifndef _INET_IPSECESP_H
#define _INET_IPSECESP_H
#include <inet/ip.h>
#include <inet/ipdrop.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
typedef struct ipsecespparam_s {
uint_t ipsecesp_param_min;
uint_t ipsecesp_param_max;
uint_t ipsecesp_param_value;
char *ipsecesp_param_name;
} ipsecespparam_t;
typedef struct esp_kstats_s {
kstat_named_t esp_stat_num_aalgs;
kstat_named_t esp_stat_good_auth;
kstat_named_t esp_stat_bad_auth;
kstat_named_t esp_stat_bad_padding;
kstat_named_t esp_stat_replay_failures;
kstat_named_t esp_stat_replay_early_failures;
kstat_named_t esp_stat_keysock_in;
kstat_named_t esp_stat_out_requests;
kstat_named_t esp_stat_acquire_requests;
kstat_named_t esp_stat_bytes_expired;
kstat_named_t esp_stat_out_discards;
kstat_named_t esp_stat_crypto_sync;
kstat_named_t esp_stat_crypto_async;
kstat_named_t esp_stat_crypto_failures;
kstat_named_t esp_stat_num_ealgs;
kstat_named_t esp_stat_bad_decrypt;
kstat_named_t esp_stat_sa_port_renumbers;
} esp_kstats_t;
#define ESP_BUMP_STAT(espstack, x) \
do { \
if (espstack->esp_kstats != NULL) \
(espstack->esp_kstats->esp_stat_ ## x).value.ui64++; \
_NOTE(CONSTCOND) \
} while (0)
#define ESP_DEBUMP_STAT(espstack, x) \
do { \
if (espstack->esp_kstats != NULL) \
(espstack->esp_kstats->esp_stat_ ## x).value.ui64--; \
_NOTE(CONSTCOND) \
} while (0)
struct ipsecesp_stack {
netstack_t *ipsecesp_netstack;
caddr_t ipsecesp_g_nd;
struct ipsecespparam_s *ipsecesp_params;
kmutex_t ipsecesp_param_lock;
ipdropper_t esp_dropper;
kstat_t *esp_ksp;
struct esp_kstats_s *esp_kstats;
queue_t *esp_pfkey_q;
timeout_id_t esp_event;
sadbp_t esp_sadb;
};
typedef struct ipsecesp_stack ipsecesp_stack_t;
#define ipsecesp_debug ipsecesp_params[0].ipsecesp_param_value
#define ipsecesp_age_interval ipsecesp_params[1].ipsecesp_param_value
#define ipsecesp_age_int_max ipsecesp_params[1].ipsecesp_param_max
#define ipsecesp_reap_delay ipsecesp_params[2].ipsecesp_param_value
#define ipsecesp_replay_size ipsecesp_params[3].ipsecesp_param_value
#define ipsecesp_acquire_timeout \
ipsecesp_params[4].ipsecesp_param_value
#define ipsecesp_larval_timeout \
ipsecesp_params[5].ipsecesp_param_value
#define ipsecesp_default_soft_bytes \
ipsecesp_params[6].ipsecesp_param_value
#define ipsecesp_default_hard_bytes \
ipsecesp_params[7].ipsecesp_param_value
#define ipsecesp_default_soft_addtime \
ipsecesp_params[8].ipsecesp_param_value
#define ipsecesp_default_hard_addtime \
ipsecesp_params[9].ipsecesp_param_value
#define ipsecesp_default_soft_usetime \
ipsecesp_params[10].ipsecesp_param_value
#define ipsecesp_default_hard_usetime \
ipsecesp_params[11].ipsecesp_param_value
#define ipsecesp_log_unknown_spi \
ipsecesp_params[12].ipsecesp_param_value
#define ipsecesp_padding_check \
ipsecesp_params[13].ipsecesp_param_value
#define ipsecesp_nat_keepalive_interval \
ipsecesp_params[14].ipsecesp_param_value
#endif
typedef struct esph {
uint32_t esph_spi;
uint32_t esph_replay;
} esph_t;
#ifdef __cplusplus
}
#endif
#endif