#ifndef _RDS_KSTAT_H
#define _RDS_KSTAT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <sys/kstat.h>
struct rds_kstat_s {
kstat_named_t rds_nports;
kstat_named_t rds_nsessions;
kstat_named_t rds_tx_bytes;
kstat_named_t rds_tx_pkts;
kstat_named_t rds_tx_errors;
kstat_named_t rds_rx_bytes;
kstat_named_t rds_rx_pkts;
kstat_named_t rds_rx_pkts_pending;
kstat_named_t rds_rx_errors;
kstat_named_t rds_tx_acks;
kstat_named_t rds_post_recv_buf_called;
kstat_named_t rds_stalls_triggered;
kstat_named_t rds_stalls_sent;
kstat_named_t rds_unstalls_triggered;
kstat_named_t rds_unstalls_sent;
kstat_named_t rds_stalls_recvd;
kstat_named_t rds_unstalls_recvd;
kstat_named_t rds_stalls_ignored;
kstat_named_t rds_enobufs;
kstat_named_t rds_ewouldblocks;
kstat_named_t rds_failovers;
kstat_named_t rds_port_quota;
kstat_named_t rds_port_quota_adjusted;
};
extern void rds_increment_kstat(kstat_named_t *, boolean_t, uint_t);
extern void rds_decrement_kstat(kstat_named_t *, boolean_t, uint_t);
extern void rds_set_kstat(kstat_named_t *, boolean_t, ulong_t);
extern ulong_t rds_get_kstat(kstat_named_t *, boolean_t);
extern struct rds_kstat_s rds_kstat;
#define RDS_SET_NPORT(num) \
rds_set_kstat(&rds_kstat.rds_nports, B_TRUE, num)
#define RDS_INCR_NPORT() \
rds_increment_kstat(&rds_kstat.rds_nports, B_TRUE, 1)
#define RDS_DECR_NPORT() \
rds_decrement_kstat(&rds_kstat.rds_nports, B_TRUE, 1)
#define RDS_GET_NPORT() \
rds_get_kstat(&rds_kstat.rds_nports, B_TRUE)
#define RDS_INCR_SESS() \
rds_increment_kstat(&rds_kstat.rds_nsessions, B_FALSE, 1)
#define RDS_DECR_SESS() \
rds_decrement_kstat(&rds_kstat.rds_nsessions, B_FALSE, 1)
#define RDS_INCR_TXBYTES(num) \
rds_increment_kstat(&rds_kstat.rds_tx_bytes, B_FALSE, num)
#define RDS_INCR_TXPKTS(num) \
rds_increment_kstat(&rds_kstat.rds_tx_pkts, B_FALSE, num)
#define RDS_INCR_TXERRS() \
rds_increment_kstat(&rds_kstat.rds_tx_errors, B_FALSE, 1)
#define RDS_INCR_RXBYTES(num) \
rds_increment_kstat(&rds_kstat.rds_rx_bytes, B_FALSE, num)
#define RDS_INCR_RXPKTS(num) \
rds_increment_kstat(&rds_kstat.rds_rx_pkts, B_FALSE, num)
#define RDS_INCR_RXPKTS_PEND(num) \
rds_increment_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE, num)
#define RDS_DECR_RXPKTS_PEND(num) \
rds_decrement_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE, num)
#define RDS_GET_RXPKTS_PEND() \
rds_get_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE)
#define RDS_INCR_RXERRS() \
rds_increment_kstat(&rds_kstat.rds_rx_errors, B_FALSE, 1)
#define RDS_INCR_TXACKS() \
rds_increment_kstat(&rds_kstat.rds_tx_acks, B_FALSE, 1)
#define RDS_INCR_POST_RCV_BUF_CALLS() \
rds_increment_kstat(&rds_kstat.rds_post_recv_buf_called, B_FALSE, 1)
#define RDS_INCR_STALLS_TRIGGERED() \
rds_increment_kstat(&rds_kstat.rds_stalls_triggered, B_FALSE, 1)
#define RDS_INCR_STALLS_SENT() \
rds_increment_kstat(&rds_kstat.rds_stalls_sent, B_FALSE, 1)
#define RDS_INCR_UNSTALLS_TRIGGERED() \
rds_increment_kstat(&rds_kstat.rds_unstalls_triggered, B_FALSE, 1)
#define RDS_INCR_UNSTALLS_SENT() \
rds_increment_kstat(&rds_kstat.rds_unstalls_sent, B_FALSE, 1)
#define RDS_INCR_STALLS_RCVD() \
rds_increment_kstat(&rds_kstat.rds_stalls_recvd, B_FALSE, 1)
#define RDS_INCR_UNSTALLS_RCVD() \
rds_increment_kstat(&rds_kstat.rds_unstalls_recvd, B_FALSE, 1)
#define RDS_INCR_STALLS_IGNORED() \
rds_increment_kstat(&rds_kstat.rds_stalls_ignored, B_FALSE, 1)
#define RDS_INCR_ENOBUFS() \
rds_increment_kstat(&rds_kstat.rds_enobufs, B_FALSE, 1)
#define RDS_INCR_EWOULDBLOCK() \
rds_increment_kstat(&rds_kstat.rds_ewouldblocks, B_FALSE, 1)
#define RDS_INCR_FAILOVERS() \
rds_increment_kstat(&rds_kstat.rds_failovers, B_FALSE, 1)
#define RDS_SET_PORT_QUOTA(num) \
rds_set_kstat(&rds_kstat.rds_port_quota, B_TRUE, num)
#define RDS_GET_PORT_QUOTA() \
rds_get_kstat(&rds_kstat.rds_port_quota, B_TRUE)
#define RDS_INCR_PORT_QUOTA_ADJUSTED() \
rds_increment_kstat(&rds_kstat.rds_port_quota_adjusted, B_FALSE, 1)
#ifdef __cplusplus
}
#endif
#endif