root/usr.bin/systat/cmdtab.c
/*      $NetBSD: cmdtab.c,v 1.26 2018/12/26 01:47:37 sevan Exp $        */

/*-
 * Copyright (c) 1980, 1992, 1993
 *      The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)cmdtab.c    8.1 (Berkeley) 6/6/93";
#endif
__RCSID("$NetBSD: cmdtab.c,v 1.26 2018/12/26 01:47:37 sevan Exp $");
#endif /* not lint */

#include "systat.h"
#include "extern.h"

/*
 * NOTE: if one command is a substring of another, the shorter string
 * MUST come first, or it will be shadowed by the longer
 */

struct  command global_commands[] = {
        { "help",       global_help,            "show help"},
        { "interval",   global_interval,        "set update interval"},
        { "load",       global_load,            "show system load averages"},
        { "quit",       global_quit,            "exit systat"},
        { "start",      global_interval,        "restart updating display"},
        { "stop",       global_stop,            "stop updating display"},
        { "?",          global_help,            "show help"},
        { .c_name = NULL }
};

struct command  df_commands[] = {
        { "all",        df_all,         "show all filesystems"},
        { "some",       df_some,        "show only some filesystems"},
        { .c_name = NULL }
};
        
struct command  icmp_commands[] = {
        { "boot",       icmp_boot,      "show total stats since boot"},
        { "run",        icmp_run,       "show running total stats"},
        { "time",       icmp_time,      "show stats for each sample time"},
        { "zero",       icmp_zero,      "re-zero running totals"},
        { .c_name = NULL }
};

struct command ifstat_commands[] = {
        { "scale",      ifstat_scale,   "modify scale of display"},
        { "pps",        ifstat_pps,     "toggle packets per second display"},
        { "match",      ifstat_match,   "display matching interfaces"},
        { .c_name = NULL }
};

struct command  iostat_commands[] = {
        { "bars",       iostat_bars,    "show io stats as a bar graph"},
        { "numbers",    iostat_numbers, "show io stats numerically"},
        { "secs",       iostat_secs,    "include time statistics"},
        { "rw",         iostat_rw,      "show read/write disk stats"},
        { "all",        iostat_all,     "show combined disk stats"},
        /* from disks.c */
        { "display",    disks_add,      "add a disk to displayed disks"},
        { "ignore",     disks_remove,   "remove a disk from displayed disks"},
        { "drives",     disks_drives,   "list all disks/set disk list"},
        { .c_name = NULL }
};

struct command  ip_commands[] = {
        { "boot",       ip_boot,        "show total stats since boot"},
        { "run",        ip_run,         "show running total stats"},
        { "time",       ip_time,        "show stats for each sample time"},
        { "zero",       ip_zero,        "re-zero running totals"},
        { .c_name = NULL }
};

#ifdef INET6
struct command  ip6_commands[] = {
        { "boot",       ip6_boot,       "show total stats since boot"},
        { "run",        ip6_run,        "show running total stats"},
        { "time",       ip6_time,       "show stats for each sample time"},
        { "zero",       ip6_zero,       "re-zero running totals"},
        { .c_name = NULL }
};
#endif

struct command netstat_commands[] = {
        { "all",        netstat_all,     "include server sockets"},
        { "display",    netstat_display, "show specified hosts or ports"},
        { "ignore",     netstat_ignore,  "hide specified hosts or ports"},
        { "names",      netstat_names,   "show names instead of addresses"},
        { "numbers",    netstat_numbers, "show addresses instead of names"},
        { "reset",      netstat_reset,   "return to default display"},
        { "show",       netstat_show,    "show current display/ignore settings"},
        { "tcp",        netstat_tcp,     "show only tcp connections"},
        { "udp",        netstat_udp,     "show only udp connections"},
        { .c_name = NULL }
};

struct command ps_commands[] = {
        { "user",       ps_user,        "limit displayed processes to a user"},
        { .c_name = NULL }
};

struct command  tcp_commands[] = {
        { "boot",       tcp_boot,       "show total stats since boot"},
        { "run",        tcp_run,        "show running total stats"},
        { "time",       tcp_time,       "show stats for each sample time"},
        { "zero",       tcp_zero,       "re-zero running totals"},
        { .c_name = NULL }
};

struct command  vmstat_commands[] = {
        { "boot",       vmstat_boot,    "show total vm stats since boot"},
        { "run",        vmstat_run,     "show running total vm stats"},
        { "time",       vmstat_time,    "show vm stats for each sample time"},
        { "zero",       vmstat_zero,    "re-zero running totals"},
        /* from disks.c */
        { "display",    disks_add,      "add a disk to displayed disks"},
        { "ignore",     disks_remove,   "remove a disk from displayed disks"},
        { "drives",     disks_drives,   "list all disks/set disk list"},
        { .c_name = NULL }
};

struct command  syscall_commands[] = {
        { "boot",       syscall_boot,   "show total syscall stats since boot"},
        { "run",        syscall_run,    "show running total syscall stats"},
        { "time",       syscall_time,   "show syscall stats for each sample time"},
        { "zero",       syscall_zero,   "re-zero running totals"},
        { "sort",       syscall_order,  "sort by [name|count|syscall]"},
        { "show",       syscall_show,   "show [count|time]"},
        { .c_name = NULL }
};

struct mode modes[] = {
        /* "pigs" is the default, it must be first. */
        { "pigs",       showpigs,       fetchpigs,      labelpigs,
          initpigs,     openpigs,       closepigs,      0,
          CF_LOADAV },
        { "bufcache",   showbufcache,   fetchbufcache,  labelbufcache,
          initbufcache, openbufcache,   closebufcache,  0,
          CF_LOADAV },
        { "df",         showdf,         fetchdf,        labeldf,
          initdf,       opendf,         closedf,        df_commands,
          CF_LOADAV },
        { "ifstat",     showifstat,     fetchifstat,    labelifstat,
          initifstat,   openifstat,     closeifstat,    ifstat_commands,
          CF_LOADAV },
        { "inet.icmp",  showicmp,       fetchicmp,      labelicmp,
          initicmp,     openicmp,       closeicmp,      icmp_commands,
          CF_LOADAV },
        { "inet.ip",    showip,         fetchip,        labelip,
          initip,       openip,         closeip,        ip_commands,
          CF_LOADAV },
        { "inet.tcp",   showtcp,        fetchtcp,       labeltcp,
          inittcp,      opentcp,        closetcp,       tcp_commands,
          CF_LOADAV },
        { "inet.tcpsyn",showtcpsyn,     fetchtcp,       labeltcpsyn,
          inittcp,      opentcp,        closetcp,       tcp_commands,
          CF_LOADAV },
#ifdef INET6
        { "inet6.ip6",  showip6,        fetchip6,       labelip6,
          initip6,      openip6,        closeip6,       ip6_commands,
          CF_LOADAV },
#endif
        { "iostat",     showiostat,     fetchiostat,    labeliostat,
          initiostat,   openiostat,     closeiostat,    iostat_commands,
          CF_LOADAV },
        { "mbufs",      showmbufs,      fetchmbufs,     labelmbufs,
          initmbufs,    openmbufs,      closembufs,     0,
          CF_LOADAV },
        { "netstat",    shownetstat,    fetchnetstat,   labelnetstat,
          initnetstat,  opennetstat,    closenetstat,   netstat_commands,
          CF_LOADAV },
        { "ps",         showps,         fetchpigs,      labelps,
          initpigs,     openpigs,       closepigs,      ps_commands,
          CF_LOADAV },
        { "swap",       showswap,       fetchswap,      labelswap,
          initswap,     openswap,       closeswap,      0,
          CF_LOADAV },
        { "vmstat",     showvmstat,     fetchvmstat,    labelvmstat,
          initvmstat,   openvmstat,     closevmstat,    vmstat_commands,
          0 },
        { "syscall",    showsyscall,    fetchsyscall,   labelsyscall,
          initsyscall,  opensyscall,    closesyscall,   syscall_commands,
          0 },
        { .c_name = NULL }
};
struct  mode *curmode = &modes[0];