Index: systat.1 =================================================================== RCS file: /cvs/src/usr.bin/systat/systat.1,v retrieving revision 1.102 diff -u -p -r1.102 systat.1 --- systat.1 15 Jun 2017 03:47:07 -0000 1.102 +++ systat.1 15 Nov 2017 03:24:53 -0000 @@ -126,6 +126,7 @@ argument expects to be one of: .Ic vmstat , .Ic pigs , .Ic ifstat , +.Ic iqdrops , .Ic iostat , .Ic sensors , .Ic mbufs , @@ -287,6 +288,10 @@ between display refreshes. changes the counters to show the average per second over the display refresh interval; this is the default. +.It Ic iqdrops +Displays a similar view to +.Ic ifstat , +but shows queue drops instead of errors. .It Ic iostat Display statistics about disk throughput. Statistics Index: systat.h =================================================================== RCS file: /cvs/src/usr.bin/systat/systat.h,v retrieving revision 1.21 diff -u -p -r1.21 systat.h --- systat.h 12 Mar 2015 01:03:00 -0000 1.21 +++ systat.h 15 Nov 2017 03:24:53 -0000 @@ -103,9 +103,11 @@ struct ifcount { u_int64_t ifc_ib; /* input bytes */ u_int64_t ifc_ip; /* input packets */ u_int64_t ifc_ie; /* input errors */ + u_int64_t ifc_iq; /* input qdrops */ u_int64_t ifc_ob; /* output bytes */ u_int64_t ifc_op; /* output packets */ u_int64_t ifc_oe; /* output errors */ + u_int64_t ifc_oq; /* output qdrops */ u_int64_t ifc_co; /* collisions */ int ifc_flags; /* up / down */ int ifc_state; /* link state */ Index: if.c =================================================================== RCS file: /cvs/src/usr.bin/systat/if.c,v retrieving revision 1.23 diff -u -p -r1.23 if.c --- if.c 16 Jan 2015 00:03:37 -0000 1.23 +++ if.c 15 Nov 2017 03:24:53 -0000 @@ -69,6 +69,8 @@ field_def fields_if[] = { {"OERRS", 5, 8, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0}, {"COLLS", 5, 8, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0}, {"DESC", 14, 64, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0}, + {"IDROP", 5, 8, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0}, + {"ODROP", 5, 8, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0}, }; @@ -82,6 +84,8 @@ field_def fields_if[] = { #define FLD_IF_OERRS FIELD_ADDR(fields_if,7) #define FLD_IF_COLLS FIELD_ADDR(fields_if,8) #define FLD_IF_DESC FIELD_ADDR(fields_if,9) +#define FLD_IF_IDROP FIELD_ADDR(fields_if,10) +#define FLD_IF_ODROP FIELD_ADDR(fields_if,11) /* Define views */ @@ -91,6 +95,12 @@ field_def *view_if_0[] = { FLD_IF_OERRS, FLD_IF_COLLS, NULL }; +field_def *view_if_1[] = { + FLD_IF_IFACE, FLD_IF_STATE, FLD_IF_DESC, FLD_IF_IPKTS, + FLD_IF_IBYTES, FLD_IF_IDROP, FLD_IF_OPKTS, FLD_IF_OBYTES, + FLD_IF_ODROP, FLD_IF_COLLS, NULL +}; + /* Define view managers */ struct view_manager ifstat_mgr = { @@ -100,6 +110,7 @@ struct view_manager ifstat_mgr = { field_view views_if[] = { {view_if_0, "ifstat", '1', &ifstat_mgr}, + {view_if_1, "iqdrops", '1', &ifstat_mgr}, {NULL, NULL, 0, NULL} }; @@ -264,9 +275,11 @@ fetchifstat(void) UPDATE(ifc_ip, ifm_data.ifi_ipackets); UPDATE(ifc_ib, ifm_data.ifi_ibytes); UPDATE(ifc_ie, ifm_data.ifi_ierrors); + UPDATE(ifc_iq, ifm_data.ifi_iqdrops); UPDATE(ifc_op, ifm_data.ifi_opackets); UPDATE(ifc_ob, ifm_data.ifi_obytes); UPDATE(ifc_oe, ifm_data.ifi_oerrors); + UPDATE(ifc_oq, ifm_data.ifi_oqdrops); UPDATE(ifc_co, ifm_data.ifi_collisions); ifs->ifs_cur.ifc_flags = ifm.ifm_flags; ifs->ifs_cur.ifc_state = ifm.ifm_data.ifi_link_state; @@ -316,10 +329,12 @@ showifstat(struct ifstat *ifs) print_fld_sdiv(FLD_IF_IBYTES, ifs->ifs_cur.ifc_ib * conv, div); print_fld_size(FLD_IF_IPKTS, ifs->ifs_cur.ifc_ip); print_fld_size(FLD_IF_IERRS, ifs->ifs_cur.ifc_ie); + print_fld_size(FLD_IF_IDROP, ifs->ifs_cur.ifc_iq); print_fld_sdiv(FLD_IF_OBYTES, ifs->ifs_cur.ifc_ob * conv, div); print_fld_size(FLD_IF_OPKTS, ifs->ifs_cur.ifc_op); print_fld_size(FLD_IF_OERRS, ifs->ifs_cur.ifc_oe); + print_fld_size(FLD_IF_ODROP, ifs->ifs_cur.ifc_oq); print_fld_size(FLD_IF_COLLS, ifs->ifs_cur.ifc_co); @@ -337,10 +352,12 @@ showtotal(void) print_fld_sdiv(FLD_IF_IBYTES, sum.ifc_ib * conv, div); print_fld_size(FLD_IF_IPKTS, sum.ifc_ip); print_fld_size(FLD_IF_IERRS, sum.ifc_ie); + print_fld_size(FLD_IF_IDROP, sum.ifc_iq); print_fld_sdiv(FLD_IF_OBYTES, sum.ifc_ob * conv, div); print_fld_size(FLD_IF_OPKTS, sum.ifc_op); print_fld_size(FLD_IF_OERRS, sum.ifc_oe); + print_fld_size(FLD_IF_ODROP, sum.ifc_oq); print_fld_size(FLD_IF_COLLS, sum.ifc_co);