#ifndef _INET_SCTP_SCTP_STACK_H
#define _INET_SCTP_SCTP_STACK_H
#include <sys/netstack.h>
#include <sys/taskq.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct sctp_kstat_s {
kstat_named_t sctp_add_faddr;
kstat_named_t sctp_add_timer;
kstat_named_t sctp_conn_create;
kstat_named_t sctp_find_next_tq;
kstat_named_t sctp_fr_add_hdr;
kstat_named_t sctp_fr_not_found;
kstat_named_t sctp_output_failed;
kstat_named_t sctp_rexmit_failed;
kstat_named_t sctp_send_init_failed;
kstat_named_t sctp_send_cookie_failed;
kstat_named_t sctp_send_cookie_ack_failed;
kstat_named_t sctp_send_err_failed;
kstat_named_t sctp_send_sack_failed;
kstat_named_t sctp_send_shutdown_failed;
kstat_named_t sctp_send_shutdown_ack_failed;
kstat_named_t sctp_send_shutdown_comp_failed;
kstat_named_t sctp_send_user_abort_failed;
kstat_named_t sctp_send_asconf_failed;
kstat_named_t sctp_send_asconf_ack_failed;
kstat_named_t sctp_send_ftsn_failed;
kstat_named_t sctp_send_hb_failed;
kstat_named_t sctp_return_hb_failed;
kstat_named_t sctp_ss_rexmit_failed;
kstat_named_t sctp_cl_connect;
kstat_named_t sctp_cl_assoc_change;
kstat_named_t sctp_cl_check_addrs;
kstat_named_t sctp_reclaim_cnt;
kstat_named_t sctp_listen_cnt_drop;
} sctp_kstat_t;
typedef struct sctp_kstat_counter_s {
uint64_t sctp_add_faddr;
uint64_t sctp_add_timer;
uint64_t sctp_conn_create;
uint64_t sctp_find_next_tq;
uint64_t sctp_fr_add_hdr;
uint64_t sctp_fr_not_found;
uint64_t sctp_output_failed;
uint64_t sctp_rexmit_failed;
uint64_t sctp_send_init_failed;
uint64_t sctp_send_cookie_failed;
uint64_t sctp_send_cookie_ack_failed;
uint64_t sctp_send_err_failed;
uint64_t sctp_send_sack_failed;
uint64_t sctp_send_shutdown_failed;
uint64_t sctp_send_shutdown_ack_failed;
uint64_t sctp_send_shutdown_comp_failed;
uint64_t sctp_send_user_abort_failed;
uint64_t sctp_send_asconf_failed;
uint64_t sctp_send_asconf_ack_failed;
uint64_t sctp_send_ftsn_failed;
uint64_t sctp_send_hb_failed;
uint64_t sctp_return_hb_failed;
uint64_t sctp_ss_rexmit_failed;
uint64_t sctp_cl_connect;
uint64_t sctp_cl_assoc_change;
uint64_t sctp_cl_check_addrs;
uint64_t sctp_reclaim_cnt;
uint64_t sctp_listen_cnt_drop;
} sctp_kstat_counter_t;
typedef struct {
int64_t sctp_sc_assoc_cnt;
mib2_sctp_t sctp_sc_mib;
sctp_kstat_counter_t sctp_sc_stats;
} sctp_stats_cpu_t;
#define SCTP_KSTAT(sctps, x) \
((sctps)->sctps_sc[CPU->cpu_seqid]->sctp_sc_stats.x++)
#define SCTPS_BUMP_MIB(sctps, x) \
BUMP_MIB(&(sctps)->sctps_sc[CPU->cpu_seqid]->sctp_sc_mib, x)
#define SCTPS_UPDATE_MIB(sctps, x, y) \
UPDATE_MIB(&(sctps)->sctps_sc[CPU->cpu_seqid]->sctp_sc_mib, x, y)
struct sctp_stack {
netstack_t *sctps_netstack;
struct list sctps_g_list;
kmutex_t sctps_g_lock;
#define SCTP_NUM_EPRIV_PORTS 64
int sctps_g_num_epriv_ports;
in_port_t sctps_g_epriv_ports[SCTP_NUM_EPRIV_PORTS];
kmutex_t sctps_epriv_port_lock;
uint_t sctps_next_port_to_try;
struct sctp_tf_s *sctps_bind_fanout;
struct sctp_tf_s *sctps_listen_fanout;
struct sctp_tf_s *sctps_conn_fanout;
uint_t sctps_conn_hash_size;
struct mod_prop_info_s *sctps_propinfo_tbl;
kmutex_t sctps_rq_tq_lock;
int sctps_recvq_tq_list_max_sz;
taskq_t **sctps_recvq_tq_list;
uint32_t sctps_recvq_tq_list_cur_sz;
uint32_t sctps_recvq_tq_list_cur;
struct sctp_ill_hash_s *sctps_g_ills;
uint32_t sctps_ills_count;
krwlock_t sctps_g_ills_lock;
struct sctp_ipif_hash_s *sctps_g_ipifs;
uint32_t sctps_g_ipifs_count;
krwlock_t sctps_g_ipifs_lock;
kstat_t *sctps_mibkp;
kstat_t *sctps_kstat;
kmutex_t sctps_reclaim_lock;
boolean_t sctps_reclaim;
timeout_id_t sctps_reclaim_tid;
uint32_t sctps_reclaim_period;
kmutex_t sctps_listener_conf_lock;
list_t sctps_listener_conf;
sctp_stats_cpu_t **sctps_sc;
int sctps_sc_cnt;
};
typedef struct sctp_stack sctp_stack_t;
#ifdef __cplusplus
}
#endif
#endif