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