diff options
Diffstat (limited to 'contrib/bsnmp/snmp_mibII/mibII_tcp.c')
-rw-r--r-- | contrib/bsnmp/snmp_mibII/mibII_tcp.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/contrib/bsnmp/snmp_mibII/mibII_tcp.c b/contrib/bsnmp/snmp_mibII/mibII_tcp.c index c798bae1fa17..913a53736d23 100644 --- a/contrib/bsnmp/snmp_mibII/mibII_tcp.c +++ b/contrib/bsnmp/snmp_mibII/mibII_tcp.c @@ -47,6 +47,7 @@ struct tcp_index { static uint64_t tcp_tick; static uint64_t tcp_stats_tick; static struct tcpstat tcpstat; +static uint64_t tcps_states[TCP_NSTATES]; static struct xinpgen *xinpgen; static size_t xinpgen_len; static u_int tcp_total; @@ -78,6 +79,17 @@ fetch_tcp_stats(void) return (-1); } + len = sizeof(tcps_states); + if (sysctlbyname("net.inet.tcp.states", &tcps_states, &len, NULL, + 0) == -1) { + syslog(LOG_ERR, "net.inet.tcp.states: %m"); + return (-1); + } + if (len != sizeof(tcps_states)) { + syslog(LOG_ERR, "net.inet.tcp.states: wrong size"); + return (-1); + } + tcp_stats_tick = get_ticks(); return (0); @@ -231,8 +243,8 @@ op_tcp(struct snmp_context *ctx __unused, struct snmp_value *value, break; case LEAF_tcpCurrEstab: - value->v.uint32 = tcpstat.tcps_states[TCPS_ESTABLISHED] + - tcpstat.tcps_states[TCPS_CLOSE_WAIT]; + value->v.uint32 = tcps_states[TCPS_ESTABLISHED] + + tcps_states[TCPS_CLOSE_WAIT]; break; case LEAF_tcpInSegs: |