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