diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-06-14 18:52:21 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-06-14 18:53:23 +0400 |
commit | 88101adac56be10a45a8bb6e30ea372a7ab82a44 (patch) | |
tree | aee2fd534a7188062e56d0335d3932ce031ea050 /usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_rstat.c | |
download | snoop-illumos.tar.gz |
Initial illumos copyillumos/2014-02-13illumos
commit 484ad3ba6a529a2471a98577d59d8ed49c7dd2c7
Author: David Höppner <0xffea@gmail.com>
Date: Thu Feb 13 09:42:44 2014 +0000
4587 snoop misdecodes DHCPv6 DHCPV6_DUID_LL identifiers
Reviewed by: Sebastien Roy <sebastien.roy@delphix.com>
Reviewed by: Marcel Telka <marcel@telka.sk>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Robert Mustacchi <rm@joyent.com>
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.c | 272 |
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"); +} |