$NetBSD: patch-dl,v 1.5 2011/05/27 10:55:25 adam Exp $

--- agent/mibgroup/mibII/tcp.c.orig	2010-11-30 04:04:26.000000000 +0000
+++ agent/mibgroup/mibII/tcp.c
@@ -180,6 +180,16 @@ init_tcp(void)
 #define USES_TRADITIONAL_TCPSTAT
 #endif
 
+#ifdef TCP_NSTATS
+typedef uint32_t tcp_stats[TCP_NSTATS];
+#define TCP_STAT_STRUCTURE	tcp_stats
+#endif
+
+#ifdef dragonfly
+#define TCP_STAT_STRUCTURE	struct tcp_stats
+#define USES_TRADITIONAL_TCPSTAT
+#endif
+
 #if !defined(TCP_STAT_STRUCTURE)
 #define TCP_STAT_STRUCTURE	struct tcpstat
 #define USES_TRADITIONAL_TCPSTAT
@@ -307,6 +317,75 @@ tcp_handler(netsnmp_mib_handler         
 #endif			/* linux */
         netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
         continue;
+#elif defined(TCP_NSTAT)
+    case TCPRTOALGORITHM:      /* Assume Van Jacobsen's algorithm */
+        ret_value = 4;
+        type = ASN_INTEGER;
+        break;
+    case TCPRTOMIN:
+#ifdef TCPTV_NEEDS_HZ
+        ret_value = TCPTV_MIN;
+#else
+        ret_value = TCPTV_MIN / PR_SLOWHZ * 1000;
+#endif
+        type = ASN_INTEGER;
+        break;
+    case TCPRTOMAX:
+#ifdef TCPTV_NEEDS_HZ
+        ret_value = TCPTV_REXMTMAX;
+#else
+        ret_value = TCPTV_REXMTMAX / PR_SLOWHZ * 1000;
+#endif
+        type = ASN_INTEGER;
+        break;
+    case TCPMAXCONN:
+        ret_value = -1;		/* Dynamic maximum */
+        type = ASN_INTEGER;
+        break;
+    case TCPACTIVEOPENS:
+        ret_value = tcpstat[TCP_STAT_CONNATTEMPT];
+        break;
+    case TCPPASSIVEOPENS:
+        ret_value = tcpstat[TCP_STAT_ACCEPTS];
+        break;
+        /*
+         * NB:  tcps_drops is actually the sum of the two MIB
+         *      counters tcpAttemptFails and tcpEstabResets.
+         */
+    case TCPATTEMPTFAILS:
+        ret_value = tcpstat[TCP_STAT_CONNDROPS];
+        break;
+    case TCPESTABRESETS:
+        ret_value = tcpstat[TCP_STAT_DROPS];
+        break;
+    case TCPCURRESTAB:
+#ifdef USING_MIBII_TCPTABLE_MODULE
+        ret_value = TCP_Count_Connections();
+#else
+        ret_value = 0;
+#endif
+        type = ASN_GAUGE;
+        break;
+    case TCPINSEGS:
+        ret_value = tcpstat[TCP_STAT_RCVTOTAL];
+        break;
+    case TCPOUTSEGS:
+        /*
+         * RFC 1213 defines this as the number of segments sent
+         * "excluding those containing only retransmitted octets"
+         */
+        ret_value = tcpstat[TCP_STAT_SNDTOTAL] - tcpstat[TCP_STAT_SNDREXMITPACK];
+        break;
+    case TCPRETRANSSEGS:
+        ret_value = tcpstat[TCP_STAT_SNDREXMITPACK];
+        break;
+    case TCPINERRS:
+        ret_value = tcpstat[TCP_STAT_RCVBADSUM] + tcpstat[TCP_STAT_RCVBADOFF]
+            + tcpstat[TCP_STAT_RCVMEMDROP] + tcpstat[TCP_STAT_RCVSHORT];
+        break;
+    case TCPOUTRSTS:
+        ret_value = tcpstat[TCP_STAT_SNDCTRL] - tcpstat[TCP_STAT_CLOSED];
+        break;
 #elif defined(USES_TRADITIONAL_TCPSTAT) && !defined(_USE_FIRST_PROTOCOL)
 #ifdef HAVE_SYS_TCPIPSTATS_H
     /*
