1*b86efd96Sagiri /*
2*b86efd96Sagiri  * CDDL HEADER START
3*b86efd96Sagiri  *
4*b86efd96Sagiri  * The contents of this file are subject to the terms of the
5*b86efd96Sagiri  * Common Development and Distribution License (the "License").
6*b86efd96Sagiri  * You may not use this file except in compliance with the License.
7*b86efd96Sagiri  *
8*b86efd96Sagiri  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*b86efd96Sagiri  * or http://www.opensolaris.org/os/licensing.
10*b86efd96Sagiri  * See the License for the specific language governing permissions
11*b86efd96Sagiri  * and limitations under the License.
12*b86efd96Sagiri  *
13*b86efd96Sagiri  * When distributing Covered Code, include this CDDL HEADER in each
14*b86efd96Sagiri  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*b86efd96Sagiri  * If applicable, add the following below this CDDL HEADER, with the
16*b86efd96Sagiri  * fields enclosed by brackets "[]" replaced with your own identifying
17*b86efd96Sagiri  * information: Portions Copyright [yyyy] [name of copyright owner]
18*b86efd96Sagiri  *
19*b86efd96Sagiri  * CDDL HEADER END
20*b86efd96Sagiri  */
21*b86efd96Sagiri /*
22*b86efd96Sagiri  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23*b86efd96Sagiri  * Use is subject to license terms.
24*b86efd96Sagiri  */
25*b86efd96Sagiri 
26*b86efd96Sagiri #ifndef	_RDS_KSTAT_H
27*b86efd96Sagiri #define	_RDS_KSTAT_H
28*b86efd96Sagiri 
29*b86efd96Sagiri #ifdef	__cplusplus
30*b86efd96Sagiri extern "C" {
31*b86efd96Sagiri #endif
32*b86efd96Sagiri 
33*b86efd96Sagiri #include <sys/types.h>
34*b86efd96Sagiri #include <sys/kstat.h>
35*b86efd96Sagiri 
36*b86efd96Sagiri struct rds_kstat_s {
37*b86efd96Sagiri 	kstat_named_t   rds_nports;
38*b86efd96Sagiri 	kstat_named_t   rds_nsessions;
39*b86efd96Sagiri 	kstat_named_t   rds_tx_bytes;
40*b86efd96Sagiri 	kstat_named_t   rds_tx_pkts;
41*b86efd96Sagiri 	kstat_named_t   rds_tx_errors;
42*b86efd96Sagiri 	kstat_named_t   rds_rx_bytes;
43*b86efd96Sagiri 	kstat_named_t   rds_rx_pkts;
44*b86efd96Sagiri 	kstat_named_t   rds_rx_pkts_pending;
45*b86efd96Sagiri 	kstat_named_t   rds_rx_errors;
46*b86efd96Sagiri 	kstat_named_t   rds_tx_acks;
47*b86efd96Sagiri 	kstat_named_t   rds_post_recv_buf_called;
48*b86efd96Sagiri 	kstat_named_t   rds_stalls_triggered;
49*b86efd96Sagiri 	kstat_named_t   rds_stalls_sent;
50*b86efd96Sagiri 	kstat_named_t   rds_unstalls_triggered;
51*b86efd96Sagiri 	kstat_named_t   rds_unstalls_sent;
52*b86efd96Sagiri 	kstat_named_t   rds_stalls_recvd;
53*b86efd96Sagiri 	kstat_named_t   rds_unstalls_recvd;
54*b86efd96Sagiri 	kstat_named_t   rds_stalls_ignored;
55*b86efd96Sagiri 	kstat_named_t   rds_enobufs;
56*b86efd96Sagiri 	kstat_named_t   rds_ewouldblocks;
57*b86efd96Sagiri 	kstat_named_t   rds_failovers;
58*b86efd96Sagiri 	kstat_named_t	rds_port_quota;
59*b86efd96Sagiri 	kstat_named_t   rds_port_quota_adjusted;
60*b86efd96Sagiri };
61*b86efd96Sagiri 
62*b86efd96Sagiri extern void rds_increment_kstat(kstat_named_t *, boolean_t, uint_t);
63*b86efd96Sagiri extern void rds_decrement_kstat(kstat_named_t *, boolean_t, uint_t);
64*b86efd96Sagiri extern void rds_set_kstat(kstat_named_t *, boolean_t, ulong_t);
65*b86efd96Sagiri extern ulong_t rds_get_kstat(kstat_named_t *, boolean_t);
66*b86efd96Sagiri 
67*b86efd96Sagiri extern struct rds_kstat_s  rds_kstat;
68*b86efd96Sagiri 
69*b86efd96Sagiri #define	RDS_SET_NPORT(num) \
70*b86efd96Sagiri     rds_set_kstat(&rds_kstat.rds_nports, B_TRUE, num)
71*b86efd96Sagiri #define	RDS_INCR_NPORT() \
72*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_nports, B_TRUE, 1)
73*b86efd96Sagiri #define	RDS_DECR_NPORT() \
74*b86efd96Sagiri     rds_decrement_kstat(&rds_kstat.rds_nports, B_TRUE, 1)
75*b86efd96Sagiri #define	RDS_GET_NPORT() \
76*b86efd96Sagiri     rds_get_kstat(&rds_kstat.rds_nports, B_TRUE)
77*b86efd96Sagiri 
78*b86efd96Sagiri #define	RDS_INCR_SESS() \
79*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_nsessions, B_FALSE, 1)
80*b86efd96Sagiri #define	RDS_DECR_SESS()  \
81*b86efd96Sagiri     rds_decrement_kstat(&rds_kstat.rds_nsessions, B_FALSE, 1)
82*b86efd96Sagiri 
83*b86efd96Sagiri #define	RDS_INCR_TXBYTES(num) \
84*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_tx_bytes, B_FALSE, num)
85*b86efd96Sagiri 
86*b86efd96Sagiri #define	RDS_INCR_TXPKTS(num) \
87*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_tx_pkts, B_FALSE, num)
88*b86efd96Sagiri 
89*b86efd96Sagiri #define	RDS_INCR_TXERRS() \
90*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_tx_errors, B_FALSE, 1)
91*b86efd96Sagiri 
92*b86efd96Sagiri #define	RDS_INCR_RXBYTES(num) \
93*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_rx_bytes, B_FALSE, num)
94*b86efd96Sagiri 
95*b86efd96Sagiri #define	RDS_INCR_RXPKTS(num) \
96*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_rx_pkts, B_FALSE, num)
97*b86efd96Sagiri 
98*b86efd96Sagiri #define	RDS_INCR_RXPKTS_PEND(num) \
99*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE, num)
100*b86efd96Sagiri #define	RDS_DECR_RXPKTS_PEND(num) \
101*b86efd96Sagiri     rds_decrement_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE, num)
102*b86efd96Sagiri #define	RDS_GET_RXPKTS_PEND() \
103*b86efd96Sagiri     rds_get_kstat(&rds_kstat.rds_rx_pkts_pending, B_TRUE)
104*b86efd96Sagiri 
105*b86efd96Sagiri #define	RDS_INCR_RXERRS() \
106*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_rx_errors, B_FALSE, 1)
107*b86efd96Sagiri 
108*b86efd96Sagiri #define	RDS_INCR_TXACKS() \
109*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_tx_acks, B_FALSE, 1)
110*b86efd96Sagiri 
111*b86efd96Sagiri #define	RDS_INCR_POST_RCV_BUF_CALLS() \
112*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_post_recv_buf_called, B_FALSE, 1)
113*b86efd96Sagiri 
114*b86efd96Sagiri #define	RDS_INCR_STALLS_TRIGGERED() \
115*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_stalls_triggered, B_FALSE, 1)
116*b86efd96Sagiri 
117*b86efd96Sagiri #define	RDS_INCR_STALLS_SENT() \
118*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_stalls_sent, B_FALSE, 1)
119*b86efd96Sagiri 
120*b86efd96Sagiri #define	RDS_INCR_UNSTALLS_TRIGGERED() \
121*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_unstalls_triggered, B_FALSE, 1)
122*b86efd96Sagiri 
123*b86efd96Sagiri #define	RDS_INCR_UNSTALLS_SENT() \
124*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_unstalls_sent, B_FALSE, 1)
125*b86efd96Sagiri 
126*b86efd96Sagiri #define	RDS_INCR_STALLS_RCVD() \
127*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_stalls_recvd, B_FALSE, 1)
128*b86efd96Sagiri 
129*b86efd96Sagiri #define	RDS_INCR_UNSTALLS_RCVD() \
130*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_unstalls_recvd, B_FALSE, 1)
131*b86efd96Sagiri 
132*b86efd96Sagiri #define	RDS_INCR_STALLS_IGNORED() \
133*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_stalls_ignored, B_FALSE, 1)
134*b86efd96Sagiri 
135*b86efd96Sagiri #define	RDS_INCR_ENOBUFS() \
136*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_enobufs, B_FALSE, 1)
137*b86efd96Sagiri 
138*b86efd96Sagiri #define	RDS_INCR_EWOULDBLOCK() \
139*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_ewouldblocks, B_FALSE, 1)
140*b86efd96Sagiri 
141*b86efd96Sagiri #define	RDS_INCR_FAILOVERS() \
142*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_failovers, B_FALSE, 1)
143*b86efd96Sagiri 
144*b86efd96Sagiri #define	RDS_SET_PORT_QUOTA(num) \
145*b86efd96Sagiri     rds_set_kstat(&rds_kstat.rds_port_quota, B_TRUE, num)
146*b86efd96Sagiri #define	RDS_GET_PORT_QUOTA() \
147*b86efd96Sagiri     rds_get_kstat(&rds_kstat.rds_port_quota, B_TRUE)
148*b86efd96Sagiri 
149*b86efd96Sagiri #define	RDS_INCR_PORT_QUOTA_ADJUSTED() \
150*b86efd96Sagiri     rds_increment_kstat(&rds_kstat.rds_port_quota_adjusted, B_FALSE, 1)
151*b86efd96Sagiri 
152*b86efd96Sagiri 
153*b86efd96Sagiri #ifdef	__cplusplus
154*b86efd96Sagiri }
155*b86efd96Sagiri #endif
156*b86efd96Sagiri 
157*b86efd96Sagiri #endif	/* _RDS_KSTAT_H */
158