Eric Durbin : iphlpapi: Implement getUDPStats on FreeBSD.

Alexandre Julliard julliard at winehq.org
Thu Jun 26 06:48:03 CDT 2008


Module: wine
Branch: master
Commit: 6d4eab9ab44100f13c4ca5802f579a28a5055a94
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6d4eab9ab44100f13c4ca5802f579a28a5055a94

Author: Eric Durbin <eadurbin at freebsd.org>
Date:   Tue Jun 24 22:44:13 2008 -0500

iphlpapi: Implement getUDPStats on FreeBSD.

---

 configure               |   11 ++++++++++-
 configure.ac            |    9 ++++++++-
 dlls/iphlpapi/ipstats.c |   31 +++++++++++++++++++++++++++++++
 include/config.h.in     |    6 ++++++
 4 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index e855076..b9ef219 100755
--- a/configure
+++ b/configure
@@ -7085,6 +7085,7 @@ done
 
 
 
+
 for ac_header in \
 	AudioUnit/AudioUnit.h \
 	Carbon/Carbon.h \
@@ -7136,6 +7137,7 @@ for ac_header in \
 	netinet/in_systm.h \
 	netinet/tcp.h \
 	netinet/tcp_fsm.h \
+	netinet/udp.h \
 	openssl/err.h \
 	openssl/ssl.h \
 	png.h \
@@ -7551,7 +7553,8 @@ done
 
 
 
-for ac_header in netinet/tcp_var.h
+
+for ac_header in netinet/tcp_var.h netinet/udp_var.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -7575,6 +7578,12 @@ cat >>conftest.$ac_ext <<_ACEOF
      #ifdef HAVE_NETINET_IN_H
      # include <netinet/in.h>
      #endif
+     #ifdef HAVE_NETINET_IP_VAR_H
+     # include <netinet/ip_var.h>
+     #endif
+     #ifdef HAVE_NETINET_UDP_H
+     # include <netinet/udp.h>
+     #endif
      #ifdef HAVE_NETINET_TCP_H
      # include <netinet/tcp.h>
      #endif
diff --git a/configure.ac b/configure.ac
index 77287de..482c6dd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -276,6 +276,7 @@ AC_CHECK_HEADERS(\
 	netinet/in_systm.h \
 	netinet/tcp.h \
 	netinet/tcp_fsm.h \
+	netinet/udp.h \
 	openssl/err.h \
 	openssl/ssl.h \
 	png.h \
@@ -359,7 +360,7 @@ AC_CHECK_HEADERS([netinet/in_pcb.h netinet/ip_var.h net/if.h net/if_arp.h net/if
      # include <netinet/in.h>
      #endif])
 
-AC_CHECK_HEADERS([netinet/tcp_var.h],,,
+AC_CHECK_HEADERS([netinet/tcp_var.h netinet/udp_var.h],,,
     [#include <sys/types.h>
      #ifdef HAVE_SYS_SOCKET_H
      # include <sys/socket.h>
@@ -370,6 +371,12 @@ AC_CHECK_HEADERS([netinet/tcp_var.h],,,
      #ifdef HAVE_NETINET_IN_H
      # include <netinet/in.h>
      #endif
+     #ifdef HAVE_NETINET_IP_VAR_H
+     # include <netinet/ip_var.h>
+     #endif
+     #ifdef HAVE_NETINET_UDP_H
+     # include <netinet/udp.h>
+     #endif
      #ifdef HAVE_NETINET_TCP_H
      # include <netinet/tcp.h>
      #endif])
diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c
index fa2826d..772006b 100644
--- a/dlls/iphlpapi/ipstats.c
+++ b/dlls/iphlpapi/ipstats.c
@@ -68,6 +68,12 @@
 #ifdef HAVE_NETINET_IP_VAR_H
 #include <netinet/ip_var.h>
 #endif
+#ifdef HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+#ifdef HAVE_NETINET_UDP_VAR_H
+#include <netinet/udp_var.h>
+#endif
 
 #ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
@@ -587,6 +593,30 @@ DWORD getTCPStats(MIB_TCPSTATS *stats)
 
 DWORD getUDPStats(MIB_UDPSTATS *stats)
 {
+#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS)
+  int mib[] = {CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS};
+#define MIB_LEN (sizeof(mib) / sizeof(mib[0]))
+  struct udpstat udp_stat;
+  size_t needed;
+  if (!stats)
+      return ERROR_INVALID_PARAMETER;
+
+  needed = sizeof(udp_stat);
+
+  if(sysctl(mib, MIB_LEN, &udp_stat, &needed, NULL, 0) == -1)
+  {
+      ERR ("failed to get udpstat\n");
+      return ERROR_NOT_SUPPORTED;
+  }
+
+  stats->dwInDatagrams = udp_stat.udps_ipackets;
+  stats->dwOutDatagrams = udp_stat.udps_opackets;
+  stats->dwNoPorts = udp_stat.udps_noport;
+  stats->dwInErrors = udp_stat.udps_hdrops + udp_stat.udps_badsum + udp_stat.udps_fullsock + udp_stat.udps_badlen;
+  stats->dwNumAddrs = getNumUdpEntries();
+
+  return NO_ERROR;
+#else
   FILE *fp;
 
   if (!stats)
@@ -642,6 +672,7 @@ DWORD getUDPStats(MIB_UDPSTATS *stats)
   }
 
   return NO_ERROR;
+#endif
 }
 
 static DWORD getNumWithOneHeader(const char *filename)
diff --git a/include/config.h.in b/include/config.h.in
index 9833b23..f9d27ae 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -456,6 +456,12 @@
 /* Define to 1 if you have the <netinet/tcp_var.h> header file. */
 #undef HAVE_NETINET_TCP_VAR_H
 
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#undef HAVE_NETINET_UDP_H
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+#undef HAVE_NETINET_UDP_VAR_H
+
 /* Define to 1 if you have the <netipx/ipx.h> header file. */
 #undef HAVE_NETIPX_IPX_H
 




More information about the wine-cvs mailing list