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 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 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 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 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 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