$NetBSD: patch-ad,v 1.5 2009/02/28 15:30:13 adam Exp $

--- dlls/iphlpapi/ipstats.c.orig	2009-02-27 23:21:46.000000000 +0100
+++ dlls/iphlpapi/ipstats.c
@@ -27,6 +27,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
+#if defined(__NetBSD__)
+#include <sys/param.h>
+#endif
+#include <unistd.h>
 #ifdef HAVE_ALIAS_H
 #include <alias.h>
 #endif
@@ -287,7 +291,7 @@ DWORD getInterfaceStatsByName(const char
 
 DWORD getICMPStats(MIB_ICMP *stats)
 {
-#if defined(HAVE_SYS_SYSCTL_H) && defined(ICMPCTL_STATS)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(ICMPCTL_STATS) && !defined(__NetBSD__)
   int mib[] = {CTL_NET, PF_INET, IPPROTO_ICMP, ICMPCTL_STATS};
 #define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
   size_t needed;
@@ -484,7 +488,7 @@ DWORD getICMPStats(MIB_ICMP *stats)
 
 DWORD getIPStats(PMIB_IPSTATS stats)
 {
-#if defined(HAVE_SYS_SYSCTL_H) && defined(IPCTL_STATS)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(IPCTL_STATS) && !defined(__NetBSD__)
   int mib[] = {CTL_NET, PF_INET, IPPROTO_IP, IPCTL_STATS};
 #define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
   int ip_ttl, ip_forwarding;
@@ -653,7 +657,7 @@ DWORD getIPStats(PMIB_IPSTATS stats)
 
 DWORD getTCPStats(MIB_TCPSTATS *stats)
 {
-#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) && !defined(__NetBSD__)
 #ifndef TCPTV_MIN  /* got removed in Mac OS X for some reason */
 #define TCPTV_MIN 2
 #define TCPTV_REXMTMAX 128
@@ -790,7 +794,7 @@ DWORD getTCPStats(MIB_TCPSTATS *stats)
 
 DWORD getUDPStats(MIB_UDPSTATS *stats)
 {
-#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) && !defined(__NetBSD__)
   int mib[] = {CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS};
 #define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
   struct udpstat udp_stat;
@@ -1032,7 +1036,11 @@ DWORD getNumRoutes(void)
 
       /* Ignore all entries except for gateway routes which aren't
          multicast */
+#if !defined(RTF_MULTICAST)
+      if (!(rtm->rtm_flags & RTF_GATEWAY))
+#else
       if (!(rtm->rtm_flags & RTF_GATEWAY) || (rtm->rtm_flags & RTF_MULTICAST))
+#endif
          continue;
 
       RouteCount++;
@@ -1108,8 +1116,12 @@ DWORD getRouteTable(PMIB_IPFORWARDTABLE 
 
           /* Ignore all entries except for gateway routes which aren't
              multicast */
+#if !defined(RTF_MULTICAST)
+          if (!(rtm->rtm_flags & RTF_GATEWAY))
+#else
           if (!(rtm->rtm_flags & RTF_GATEWAY) ||
               (rtm->rtm_flags & RTF_MULTICAST))
+#endif
              continue;
 
           memset (&table->table[table->dwNumEntries], 0,
@@ -1270,7 +1282,7 @@ DWORD getRouteTable(PMIB_IPFORWARDTABLE 
 
 DWORD getNumArpEntries(void)
 {
-#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP) && !defined(__NetBSD__)
   int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS, RTF_LLINFO};
 #define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
   DWORD arpEntries = 0;
@@ -1326,7 +1338,7 @@ DWORD getArpTable(PMIB_IPNETTABLE *ppIpN
     if (numEntries > 1)
       size += (numEntries - 1) * sizeof(MIB_IPNETROW);
     table = HeapAlloc(heap, flags, size);
-#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
+#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP) && !defined(__NetBSD__)
     if (table)
     {
       int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS, RTF_LLINFO};
