summaryrefslogtreecommitdiff
path: root/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c')
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c272
1 files changed, 272 insertions, 0 deletions
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c b/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c
new file mode 100644
index 0000000..e45205a
--- /dev/null
+++ b/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c
@@ -0,0 +1,272 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (c) 1991, 1999 by Sun Microsystems, Inc.
+ * All rights reserved.
+ */
+
+#ident "%Z%%M% %I% %E% SMI" /* SunOS */
+
+#include <sys/types.h>
+#include <sys/errno.h>
+#include <setjmp.h>
+#include <sys/tiuser.h>
+
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+#include <rpc/auth.h>
+#include <rpc/clnt.h>
+#include <rpc/rpc_msg.h>
+#include "snoop.h"
+
+extern char *dlc_header;
+extern jmp_buf xdr_err;
+
+void detail_stats(); /* Version 1 */
+void detail_statsswtch(); /* Version 2 */
+void detail_statstime(); /* Version 3 */
+void detail_statsvar(); /* Version 4 */
+
+static char *procnames_short[] = {
+ "Null", /* 0 */
+ "Get Statistics", /* 1 */
+ "Have Disk", /* 2 */
+};
+
+static char *procnames_long[] = {
+ "Null procedure", /* 0 */
+ "Get Statistics", /* 1 */
+ "Have Disk", /* 2 */
+};
+
+#define MAXPROC 2
+
+void
+interpret_rstat(flags, type, xid, vers, proc, data, len)
+ int flags, type, xid, vers, proc;
+ char *data;
+ int len;
+{
+ char *line;
+
+ if (proc < 0 || proc > MAXPROC)
+ return;
+
+ if (flags & F_SUM) {
+ if (setjmp(xdr_err)) {
+ return;
+ }
+
+ line = get_sum_line();
+
+ if (type == CALL) {
+ (void) sprintf(line,
+ "RSTAT C %s",
+ procnames_short[proc]);
+
+ check_retransmit(line, xid);
+ } else {
+ (void) sprintf(line, "RSTAT R %s ",
+ procnames_short[proc]);
+ }
+ }
+
+ if (flags & F_DTAIL) {
+ show_header("RSTAT: ", "RSTAT Get Statistics", len);
+ show_space();
+ if (setjmp(xdr_err)) {
+ return;
+ }
+ (void) sprintf(get_line(0, 0),
+ "Proc = %d (%s)",
+ proc, procnames_long[proc]);
+
+ if (type == REPLY) {
+ switch (proc) {
+ case 1:
+ switch (vers) {
+ case 1:
+ detail_stats();
+ break;
+ case 2:
+ detail_statsswtch();
+ break;
+ case 3:
+ detail_statstime();
+ break;
+ case 4:
+ detail_statsvar();
+ break;
+ }
+ break;
+ case 2:
+ (void) showxdr_u_long(
+ "Result = %lu");
+ break;
+ }
+ }
+ show_trailer();
+ }
+}
+
+void
+detail_stats()
+{
+ show_space();
+ (void) sprintf(get_line(0, 0), "CPU Times:");
+ (void) showxdr_long(" Time (1) = %d");
+ (void) showxdr_long(" Time (2) = %d");
+ (void) showxdr_long(" Time (3) = %d");
+ (void) showxdr_long(" Time (4) = %d");
+ show_space();
+ (void) sprintf(get_line(0, 0), "Disk Transfers:");
+ (void) showxdr_long(" Transfers(1) = %d");
+ (void) showxdr_long(" Transfers(2) = %d");
+ (void) showxdr_long(" Transfers(3) = %d");
+ (void) showxdr_long(" Transfers(4) = %d");
+ show_space();
+ (void) showxdr_u_long("Pages in = %lu");
+ (void) showxdr_u_long("Pages out = %lu");
+ (void) showxdr_u_long("Swaps in = %lu");
+ (void) showxdr_u_long("Swaps out = %lu");
+ (void) showxdr_u_long("Interrupts = %lu");
+ show_space();
+ (void) showxdr_long("Receive packets = %d");
+ (void) showxdr_long("Receive errors = %d");
+ (void) showxdr_long("Transmit packets = %d");
+ (void) showxdr_long("Transmit errors = %d");
+ (void) showxdr_long("Collisions = %d");
+}
+
+void
+detail_statsswtch()
+{
+ show_space();
+ (void) sprintf(get_line(0, 0), "CPU Times:");
+ (void) showxdr_long(" Time (1) = %d");
+ (void) showxdr_long(" Time (2) = %d");
+ (void) showxdr_long(" Time (3) = %d");
+ (void) showxdr_long(" Time (4) = %d");
+ show_space();
+ (void) sprintf(get_line(0, 0), "Disk Transfers:");
+ (void) showxdr_long(" Transfers(1) = %d");
+ (void) showxdr_long(" Transfers(2) = %d");
+ (void) showxdr_long(" Transfers(3) = %d");
+ (void) showxdr_long(" Transfers(4) = %d");
+ show_space();
+ (void) showxdr_u_long("Pages in = %lu");
+ (void) showxdr_u_long("Pages out = %lu");
+ (void) showxdr_u_long("Swaps in = %lu");
+ (void) showxdr_u_long("Swaps out = %lu");
+ (void) showxdr_u_long("Interrupts = %lu");
+ show_space();
+ (void) showxdr_long("Receive packets = %d");
+ (void) showxdr_long("Receive errors = %d");
+ (void) showxdr_long("Transmit packets = %d");
+ (void) showxdr_long("Transmit errors = %d");
+ (void) showxdr_long("Collisions = %d");
+ show_space();
+ (void) showxdr_u_long("V switch = %lu");
+ (void) showxdr_long("Average run 0 = %d");
+ (void) showxdr_long("Average run 1 = %d");
+ (void) showxdr_long("Average run 2 = %d");
+ show_space();
+ (void) showxdr_date("Boot time: = %s");
+}
+
+void
+detail_statstime()
+{
+ show_space();
+ (void) sprintf(get_line(0, 0), "CPU Times:");
+ (void) showxdr_long(" Time (1) = %d");
+ (void) showxdr_long(" Time (2) = %d");
+ (void) showxdr_long(" Time (3) = %d");
+ (void) showxdr_long(" Time (4) = %d");
+ show_space();
+ (void) sprintf(get_line(0, 0), "Disk Transfers:");
+ (void) showxdr_long(" Transfers(1) = %d");
+ (void) showxdr_long(" Transfers(2) = %d");
+ (void) showxdr_long(" Transfers(3) = %d");
+ (void) showxdr_long(" Transfers(4) = %d");
+ show_space();
+ (void) showxdr_u_long("Pages in = %lu");
+ (void) showxdr_u_long("Pages out = %lu");
+ (void) showxdr_u_long("Swaps in = %lu");
+ (void) showxdr_u_long("Swaps out = %lu");
+ (void) showxdr_u_long("Interrupts = %lu");
+ show_space();
+ (void) showxdr_long("Receive packets = %d");
+ (void) showxdr_long("Receive errors = %d");
+ (void) showxdr_long("Transmit packets = %d");
+ (void) showxdr_long("Transmit errors = %d");
+ (void) showxdr_long("Collisions = %d");
+ show_space();
+ (void) showxdr_u_long("V switch = %lu");
+ (void) showxdr_long("Average run 0 = %d");
+ (void) showxdr_long("Average run 1 = %d");
+ (void) showxdr_long("Average run 2 = %d");
+ show_space();
+ (void) showxdr_date("Boot time: = %s");
+ (void) showxdr_date("Current time = %s");
+}
+
+void
+detail_statsvar()
+{
+ int i, n;
+
+ show_space();
+ (void) sprintf(get_line(0, 0), "CPU Times:");
+ n = getxdr_u_long();
+ for (i = 1; i <= n; i++) {
+ (void) sprintf(get_line(0, 0),
+ " Time (%2d) = %d", i, getxdr_long());
+ }
+ show_space();
+ (void) sprintf(get_line(0, 0), "Disk Transfers:");
+ n = getxdr_u_long();
+ for (i = 1; i <= n; i++) {
+ (void) sprintf(get_line(0, 0),
+ " Transfers (%2d) = %d", i, getxdr_long());
+ }
+ show_space();
+ (void) showxdr_u_long("Pages in = %lu");
+ (void) showxdr_u_long("Pages out = %lu");
+ (void) showxdr_u_long("Swaps in = %lu");
+ (void) showxdr_u_long("Swaps out = %lu");
+ (void) showxdr_u_long("Interrupts = %lu");
+ show_space();
+ (void) showxdr_long("Receive packets = %d");
+ (void) showxdr_long("Receive errors = %d");
+ (void) showxdr_long("Transmit packets = %d");
+ (void) showxdr_long("Transmit errors = %d");
+ (void) showxdr_long("Collisions = %d");
+ show_space();
+ (void) showxdr_u_long("V switch = %lu");
+ (void) showxdr_long("Average run 0 = %d");
+ (void) showxdr_long("Average run 1 = %d");
+ (void) showxdr_long("Average run 2 = %d");
+ show_space();
+ (void) showxdr_date("Boot time: = %s");
+ (void) showxdr_date("Current time = %s");
+}