diff -Nurp net-snmp-5.8-orig/apps/snmpstatus.c net-snmp-5.8/apps/snmpstatus.c --- net-snmp-5.8-orig/apps/snmpstatus.c 2018-10-10 09:45:14.955075516 +0000 +++ net-snmp-5.8/apps/snmpstatus.c 2018-10-10 10:15:16.131576910 +0000 @@ -96,6 +96,15 @@ size_t length_ipOutRequests = #define NETSNMP_DS_APP_DONT_FIX_PDUS 0 +/* Flags to control which additional information to request and print */ +#define NETSNMP_STATUS_REQ_NETSTAT 0x0001 +#define NETSNMP_STATUS_REQ_NETOPER 0x0002 +#define NETSNMP_STATUS_REQ_ALL 0xffff + +/* By default request and print everything and let the user decide what + to suppress */ +static unsigned int rq_status = NETSNMP_STATUS_REQ_ALL; + static void optProc(int argc, char *const *argv, int opt) { @@ -114,6 +123,22 @@ optProc(int argc, char *const *argv, int } } break; + case 'S': /* 'S' == 'Suppress' */ + while (*optarg) { + switch (*optarg++) { + case 'n': + rq_status &= ~NETSNMP_STATUS_REQ_NETSTAT; + break; + case 'i': + rq_status &= ~NETSNMP_STATUS_REQ_NETOPER; + break; + default: + fprintf(stderr, "Unknown flag passed to -S: %c\n", + optarg[-1]); + exit(1); + } + } + break; } } @@ -128,6 +153,12 @@ usage(void) " -C APPOPTS\t\tSet various application specific behaviours:\n"); fprintf(stderr, "\t\t\t f: do not fix errors and retry the request\n"); + fprintf(stderr, + " -S REQOPTS\t\tDo not request and print information about:\n"); + fprintf(stderr, + "\t\t\t n: network (packets sent/received, operational status)\n"); + fprintf(stderr, + "\t\t\t i: interface operational status\n"); } @@ -154,7 +185,7 @@ main(int argc, char *argv[]) /* * get the common command line arguments */ - switch (snmp_parse_args(argc, argv, &session, "C:", &optProc)) { + switch (snmp_parse_args(argc, argv, &session, "C:S:", &optProc)) { case NETSNMP_PARSE_ARGS_ERROR: goto out; case NETSNMP_PARSE_ARGS_SUCCESS_EXIT: @@ -185,8 +216,10 @@ main(int argc, char *argv[]) pdu = snmp_pdu_create(SNMP_MSG_GET); snmp_add_null_var(pdu, objid_sysDescr, length_sysDescr); snmp_add_null_var(pdu, objid_sysUpTime, length_sysUpTime); - snmp_add_null_var(pdu, objid_ipInReceives, length_ipInReceives); - snmp_add_null_var(pdu, objid_ipOutRequests, length_ipOutRequests); + if (rq_status & NETSNMP_STATUS_REQ_NETSTAT) { + snmp_add_null_var(pdu, objid_ipInReceives, length_ipInReceives); + snmp_add_null_var(pdu, objid_ipOutRequests, length_ipOutRequests); + } /* * do the request @@ -279,6 +312,10 @@ main(int argc, char *argv[]) if (response) snmp_free_pdu(response); + /* Suppress request to retrieve network statistics */ + if (!(rq_status & NETSNMP_STATUS_REQ_NETSTAT)) + goto done; + /* * create PDU for GET request and add object names to request */ @@ -386,11 +423,11 @@ main(int argc, char *argv[]) } printf("Interfaces: %d, Recv/Trans packets: %d/%d | IP: %d/%d\n", interfaces, ipackets, opackets, ipin, ipout); - if (down_interfaces > 0) { + if ((rq_status & NETSNMP_STATUS_REQ_NETOPER) && (down_interfaces > 0)) { printf("%d interface%s down!\n", down_interfaces, down_interfaces > 1 ? "s are" : " is"); } - + done: snmp_close(ss); out: diff -Nurp net-snmp-5.8-orig/man/snmpstatus.1.def net-snmp-5.8/man/snmpstatus.1.def --- net-snmp-5.8-orig/man/snmpstatus.1.def 2018-10-10 09:45:14.951075479 +0000 +++ net-snmp-5.8/man/snmpstatus.1.def 2018-10-10 10:15:16.131576910 +0000 @@ -32,7 +32,7 @@ snmpstatus - retrieves a fixed set of management information from a network entity .SH SYNOPSIS .B snmpstatus -[COMMON OPTIONS] [\-Cf] AGENT +[COMMON OPTIONS] [\-Cf] [\-Sni] AGENT .SH DESCRIPTION .B snmpstatus is an SNMP application that retrieves several important statistics @@ -94,6 +94,11 @@ variable (unless the option is given, see below), but this variable will then be missing from the displayed data. .PP +It is also possible to suppress parts of the default output by +using the option +.B \-S +(see below). +.PP .SH OPTIONS .TP .B COMMON OPTIONS @@ -108,5 +113,13 @@ by the agent and retry a request. In thi the command will display the data that it can. If the \-Cf option is specified, then snmpstatus will not try to fix errors, and the error will cause the command to terminate. +.TP +.B \-Sn +Do not retrieve and print network statistics such as packets +sent and received and the number of network interfaces that +are down. +.TP +.B \-Si +Do not print the number of network interfaces that are down. .SH "SEE ALSO" snmpcmd(1), snmpget(1)