$NetBSD: patch-ab,v 1.1 2003/09/14 11:57:03 tron Exp $

--- agent/mibgroup/mibII/ipv6.c	12 Sep 2003 23:10:08 -0000	1.1.1.1
+++ agent/mibgroup/mibII/ipv6.c	13 Sep 2003 05:36:50 -0000	1.2
@@ -1225,6 +1225,10 @@
     caddr_t         p;
     static struct in6pcb in6pcb, udb6;
     int             found, hitnext;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    struct inpcbtable udbtable;
+    caddr_t	    first;
+#endif
 #if defined(__FreeBSD__) && __FreeBSD__ >= 3
     char           *sysctl_buf;
     struct xinpgen *xig, *oxig;
@@ -1234,7 +1238,11 @@
     DEBUGMSGOID(("mibII/ipv6", name, *length));
     DEBUGMSG(("mibII/ipv6", " %d\n", exact));
 
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    if (!auto_nlist("udbtable", (char *) &udbtable, sizeof(udbtable)))
+        return NULL;
+    first = p = (caddr_t)udbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
     if (!auto_nlist("udb6", (char *) &udb6, sizeof(udb6)))
         return NULL;
     p = (caddr_t) udb6.in6p_next;
@@ -1260,7 +1268,9 @@
            (int) vp->namelen * sizeof(oid));
     DEBUGMSGTL(("mibII/ipv6", "start: p=%x\n", p));
     while (
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+              p &&  p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
               p && (u_long) p != auto_nlist_value("udb6")
 #else
               xig->xig_len > sizeof(struct xinpgen)
@@ -1273,6 +1283,12 @@
 #else
         in6pcb = ((struct xinpcb *) xig)->xi_inp;
 #endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	if (in6pcb.in6p_af != AF_INET6) {
+	    p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+	    continue;
+	}
+#endif
         j = (int) vp->namelen;
         for (i = 0; i < sizeof(struct in6_addr); i++)
             newname[j++] = in6pcb.in6p_laddr.s6_addr[i];
@@ -1325,7 +1341,9 @@
                 }
             }
         }
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
         p = (caddr_t) in6pcb.in6p_next;
 #else
         xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
@@ -1383,6 +1401,10 @@
     int             found, hitnext;
     static int      tcp6statemap[TCP6_NSTATES];
     static int      initialized = 0;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    struct inpcbtable tcbtable;
+    caddr_t	    first;
+#endif
 #if defined(__FreeBSD__) && __FreeBSD__ >= 3
     char           *sysctl_buf;
     struct xinpgen *xig, *oxig;
@@ -1407,7 +1429,11 @@
     DEBUGMSGOID(("mibII/ipv6", name, *length));
     DEBUGMSG(("mibII/ipv6", " %d\n", exact));
 
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    if (!auto_nlist("tcbtable", (char *) &tcbtable, sizeof(tcbtable)))
+        return NULL;
+    first = p = (caddr_t)udbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
     if (!auto_nlist("tcb6", (char *) &tcb6, sizeof(tcb6)))
         return NULL;
     p = (caddr_t) tcb6.in6p_next;
@@ -1433,7 +1459,9 @@
     memcpy((char *) newname, (char *) vp->name,
            (int) vp->namelen * sizeof(oid));
     while (
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+              p &&  p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
               p && (u_long) p != auto_nlist_value("tcb6")
 #else
               xig->xig_len > sizeof(struct xinpgen)
@@ -1450,6 +1478,12 @@
 #else
         in6pcb = ((struct xinpcb *) xig)->xi_inp;
 #endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	if (in6pcb.in6p_af != AF_INET6) {
+	    p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+	    continue;
+	}
+#endif
         if (klookup
             ((u_long) in6pcb.in6p_ppcb, (char *) &tcp6cb, sizeof(tcp6cb))
             < 0) {
@@ -1520,7 +1554,9 @@
         }
 
       skip:
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
         p = (caddr_t) in6pcb.in6p_next;
 #else
         xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
@@ -1587,6 +1623,10 @@
     int             found, hitnext;
     static int      tcpstatemap[TCP_NSTATES];
     static int      initialized = 0;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    struct inpcbtable tcbtable;
+    caddr_t	    first;
+#endif
 #if defined(__FreeBSD__) && __FreeBSD__ >= 3
     char           *sysctl_buf;
     struct xinpgen *xig, *oxig;
@@ -1611,7 +1651,11 @@
     DEBUGMSGOID(("mibII/ipv6", name, *length));
     DEBUGMSG(("mibII/ipv6", " %d\n", exact));
 
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+    if (!auto_nlist("tcbtable", (char *) &tcbtable, sizeof(tcbtable)))
+        return NULL;
+    first = p = (caddr_t)tcbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
     if (!auto_nlist("tcb6", (char *) &tcb6, sizeof(tcb6)))
         return NULL;
     p = (caddr_t) tcb6.in6p_next;
@@ -1637,7 +1681,9 @@
     memcpy((char *) newname, (char *) vp->name,
            (int) vp->namelen * sizeof(oid));
     while (
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	      p && p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
               p && (u_long) p != auto_nlist_value("tcb6")
 #else
               xig->xig_len > sizeof(struct xinpgen)
@@ -1647,14 +1693,20 @@
 
 #if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
         if (klookup((u_long) p, (char *) &in6pcb, sizeof(in6pcb)) < 0)
-#else
-        in6pcb = ((struct xinpcb *) xig)->xi_inp;
-#endif
         {
             DEBUGMSGTL(("mibII/ipv6", "klookup fail for in6pcb at %x\n",
                         p));
             break;
         }
+#else
+        in6pcb = ((struct xinpcb *) xig)->xi_inp;
+#endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	if (in6pcb.in6p_af != AF_INET6) {
+	    p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+	    continue;
+	}
+#endif
         if (klookup
             ((u_long) in6pcb.in6p_ppcb, (char *) &tcpcb, sizeof(tcpcb))
             < 0) {
@@ -1725,7 +1777,9 @@
         }
 
       skip:
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
         p = (caddr_t) in6pcb.in6p_next;
 #else
         xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
Index: agent/mibgroup/mibII/tcpTable.c
===================================================================
RCS file: /cvsroot/apps/net-snmp/agent/mibgroup/mibII/tcpTable.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- agent/mibgroup/mibII/tcpTable.c	12 Sep 2003 23:10:08 -0000	1.1.1.1
+++ agent/mibgroup/mibII/tcpTable.c	13 Sep 2003 05:36:50 -0000	1.2
@@ -499,6 +499,10 @@
             snmp_log_perror("TCP_Count_Connections - inpcb");
             break;
         }
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	if (inpcb.inp_af != AF_INET)
+	    continue;
+#endif
 #if !(defined(freebsd2) || defined(netbsd1) || defined(openbsd2))
         if (inpcb.INP_PREV_SYMBOL != prev) {    /* ??? */
             sleep(1);
Index: agent/mibgroup/mibII/udpTable.c
===================================================================
RCS file: /cvsroot/apps/net-snmp/agent/mibgroup/mibII/udpTable.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- agent/mibgroup/mibII/udpTable.c	12 Sep 2003 23:10:08 -0000	1.1.1.1
+++ agent/mibgroup/mibII/udpTable.c	13 Sep 2003 05:36:50 -0000	1.2
@@ -178,6 +178,16 @@
     LowState = -1;              /* UDP doesn't have 'State', but it's a useful flag */
     UDP_Scan_Init();
     for (;;) {
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000	/*1.6Y*/
+	if (inpcb.inp_af != AF_INET) {
+	    if ((i = UDP_Scan_Next(&inpcb)) < 0)
+		goto Again;
+	    if (i == 0)
+		break;              /* Done */
+	    cp = (u_char *) & inpcb.inp_laddr.s_addr;
+	    continue;
+	}
+#endif
 #ifdef hpux11
         if ((i = UDP_Scan_Next(&udp)) == 0)
             break;              /* Done */

