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, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1991, 1999 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 #ident "%Z%%M% %I% %E% SMI" /* SunOS */
28
29 #include <sys/types.h>
30 #include <sys/errno.h>
31 #include <setjmp.h>
32 #include <sys/tiuser.h>
33
34 #include <rpc/types.h>
35 #include <rpc/xdr.h>
36 #include <rpc/auth.h>
37 #include <rpc/clnt.h>
38 #include <rpc/rpc_msg.h>
39 #include "snoop.h"
40
41 extern char *dlc_header;
42 extern jmp_buf xdr_err;
43
44 void detail_stats(); /* Version 1 */
45 void detail_statsswtch(); /* Version 2 */
46 void detail_statstime(); /* Version 3 */
47 void detail_statsvar(); /* Version 4 */
48
49 static char *procnames_short[] = {
50 "Null", /* 0 */
51 "Get Statistics", /* 1 */
52 "Have Disk", /* 2 */
53 };
54
55 static char *procnames_long[] = {
56 "Null procedure", /* 0 */
57 "Get Statistics", /* 1 */
58 "Have Disk", /* 2 */
59 };
60
61 #define MAXPROC 2
62
63 void
interpret_rstat(flags,type,xid,vers,proc,data,len)64 interpret_rstat(flags, type, xid, vers, proc, data, len)
65 int flags, type, xid, vers, proc;
66 char *data;
67 int len;
68 {
69 char *line;
70
71 if (proc < 0 || proc > MAXPROC)
72 return;
73
74 if (flags & F_SUM) {
75 if (setjmp(xdr_err)) {
76 return;
77 }
78
79 line = get_sum_line();
80
81 if (type == CALL) {
82 (void) sprintf(line,
83 "RSTAT C %s",
84 procnames_short[proc]);
85
86 check_retransmit(line, xid);
87 } else {
88 (void) sprintf(line, "RSTAT R %s ",
89 procnames_short[proc]);
90 }
91 }
92
93 if (flags & F_DTAIL) {
94 show_header("RSTAT: ", "RSTAT Get Statistics", len);
95 show_space();
96 if (setjmp(xdr_err)) {
97 return;
98 }
99 (void) sprintf(get_line(0, 0),
100 "Proc = %d (%s)",
101 proc, procnames_long[proc]);
102
103 if (type == REPLY) {
104 switch (proc) {
105 case 1:
106 switch (vers) {
107 case 1:
108 detail_stats();
109 break;
110 case 2:
111 detail_statsswtch();
112 break;
113 case 3:
114 detail_statstime();
115 break;
116 case 4:
117 detail_statsvar();
118 break;
119 }
120 break;
121 case 2:
122 (void) showxdr_u_long(
123 "Result = %lu");
124 break;
125 }
126 }
127 show_trailer();
128 }
129 }
130
131 void
detail_stats()132 detail_stats()
133 {
134 show_space();
135 (void) sprintf(get_line(0, 0), "CPU Times:");
136 (void) showxdr_long(" Time (1) = %d");
137 (void) showxdr_long(" Time (2) = %d");
138 (void) showxdr_long(" Time (3) = %d");
139 (void) showxdr_long(" Time (4) = %d");
140 show_space();
141 (void) sprintf(get_line(0, 0), "Disk Transfers:");
142 (void) showxdr_long(" Transfers(1) = %d");
143 (void) showxdr_long(" Transfers(2) = %d");
144 (void) showxdr_long(" Transfers(3) = %d");
145 (void) showxdr_long(" Transfers(4) = %d");
146 show_space();
147 (void) showxdr_u_long("Pages in = %lu");
148 (void) showxdr_u_long("Pages out = %lu");
149 (void) showxdr_u_long("Swaps in = %lu");
150 (void) showxdr_u_long("Swaps out = %lu");
151 (void) showxdr_u_long("Interrupts = %lu");
152 show_space();
153 (void) showxdr_long("Receive packets = %d");
154 (void) showxdr_long("Receive errors = %d");
155 (void) showxdr_long("Transmit packets = %d");
156 (void) showxdr_long("Transmit errors = %d");
157 (void) showxdr_long("Collisions = %d");
158 }
159
160 void
detail_statsswtch()161 detail_statsswtch()
162 {
163 show_space();
164 (void) sprintf(get_line(0, 0), "CPU Times:");
165 (void) showxdr_long(" Time (1) = %d");
166 (void) showxdr_long(" Time (2) = %d");
167 (void) showxdr_long(" Time (3) = %d");
168 (void) showxdr_long(" Time (4) = %d");
169 show_space();
170 (void) sprintf(get_line(0, 0), "Disk Transfers:");
171 (void) showxdr_long(" Transfers(1) = %d");
172 (void) showxdr_long(" Transfers(2) = %d");
173 (void) showxdr_long(" Transfers(3) = %d");
174 (void) showxdr_long(" Transfers(4) = %d");
175 show_space();
176 (void) showxdr_u_long("Pages in = %lu");
177 (void) showxdr_u_long("Pages out = %lu");
178 (void) showxdr_u_long("Swaps in = %lu");
179 (void) showxdr_u_long("Swaps out = %lu");
180 (void) showxdr_u_long("Interrupts = %lu");
181 show_space();
182 (void) showxdr_long("Receive packets = %d");
183 (void) showxdr_long("Receive errors = %d");
184 (void) showxdr_long("Transmit packets = %d");
185 (void) showxdr_long("Transmit errors = %d");
186 (void) showxdr_long("Collisions = %d");
187 show_space();
188 (void) showxdr_u_long("V switch = %lu");
189 (void) showxdr_long("Average run 0 = %d");
190 (void) showxdr_long("Average run 1 = %d");
191 (void) showxdr_long("Average run 2 = %d");
192 show_space();
193 (void) showxdr_date("Boot time: = %s");
194 }
195
196 void
detail_statstime()197 detail_statstime()
198 {
199 show_space();
200 (void) sprintf(get_line(0, 0), "CPU Times:");
201 (void) showxdr_long(" Time (1) = %d");
202 (void) showxdr_long(" Time (2) = %d");
203 (void) showxdr_long(" Time (3) = %d");
204 (void) showxdr_long(" Time (4) = %d");
205 show_space();
206 (void) sprintf(get_line(0, 0), "Disk Transfers:");
207 (void) showxdr_long(" Transfers(1) = %d");
208 (void) showxdr_long(" Transfers(2) = %d");
209 (void) showxdr_long(" Transfers(3) = %d");
210 (void) showxdr_long(" Transfers(4) = %d");
211 show_space();
212 (void) showxdr_u_long("Pages in = %lu");
213 (void) showxdr_u_long("Pages out = %lu");
214 (void) showxdr_u_long("Swaps in = %lu");
215 (void) showxdr_u_long("Swaps out = %lu");
216 (void) showxdr_u_long("Interrupts = %lu");
217 show_space();
218 (void) showxdr_long("Receive packets = %d");
219 (void) showxdr_long("Receive errors = %d");
220 (void) showxdr_long("Transmit packets = %d");
221 (void) showxdr_long("Transmit errors = %d");
222 (void) showxdr_long("Collisions = %d");
223 show_space();
224 (void) showxdr_u_long("V switch = %lu");
225 (void) showxdr_long("Average run 0 = %d");
226 (void) showxdr_long("Average run 1 = %d");
227 (void) showxdr_long("Average run 2 = %d");
228 show_space();
229 (void) showxdr_date("Boot time: = %s");
230 (void) showxdr_date("Current time = %s");
231 }
232
233 void
detail_statsvar()234 detail_statsvar()
235 {
236 int i, n;
237
238 show_space();
239 (void) sprintf(get_line(0, 0), "CPU Times:");
240 n = getxdr_u_long();
241 for (i = 1; i <= n; i++) {
242 (void) sprintf(get_line(0, 0),
243 " Time (%2d) = %d", i, getxdr_long());
244 }
245 show_space();
246 (void) sprintf(get_line(0, 0), "Disk Transfers:");
247 n = getxdr_u_long();
248 for (i = 1; i <= n; i++) {
249 (void) sprintf(get_line(0, 0),
250 " Transfers (%2d) = %d", i, getxdr_long());
251 }
252 show_space();
253 (void) showxdr_u_long("Pages in = %lu");
254 (void) showxdr_u_long("Pages out = %lu");
255 (void) showxdr_u_long("Swaps in = %lu");
256 (void) showxdr_u_long("Swaps out = %lu");
257 (void) showxdr_u_long("Interrupts = %lu");
258 show_space();
259 (void) showxdr_long("Receive packets = %d");
260 (void) showxdr_long("Receive errors = %d");
261 (void) showxdr_long("Transmit packets = %d");
262 (void) showxdr_long("Transmit errors = %d");
263 (void) showxdr_long("Collisions = %d");
264 show_space();
265 (void) showxdr_u_long("V switch = %lu");
266 (void) showxdr_long("Average run 0 = %d");
267 (void) showxdr_long("Average run 1 = %d");
268 (void) showxdr_long("Average run 2 = %d");
269 show_space();
270 (void) showxdr_date("Boot time: = %s");
271 (void) showxdr_date("Current time = %s");
272 }
273