aboutsummaryrefslogtreecommitdiff
path: root/contrib/bsnmp/snmp_mibII/mibII_tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bsnmp/snmp_mibII/mibII_tcp.c')
-rw-r--r--contrib/bsnmp/snmp_mibII/mibII_tcp.c16
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: