patches/wine-03-iphlpapi.diff
author jurikm
Sun, 12 Feb 2012 14:04:10 +0000
changeset 8245 383896da4129
parent 1650 2486e311009b
permissions -rw-r--r--
SFEsauerbraten.spec: add IPS package name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
     1
diff -urN wine-1.1.13.orig/configure.ac wine-1.1.13/configure.ac
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
     2
--- wine-1.1.13.orig/configure.ac	2009-01-16 17:28:07.000000000 +0100
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
     3
+++ wine-1.1.13/configure.ac	2009-01-24 18:49:24.000000000 +0100
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
     4
@@ -272,9 +272,11 @@
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
     5
 	getopt.h \
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
     6
 	grp.h \
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
     7
 	ieeefp.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
     8
+	inet/ip.h \
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
     9
 	io.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    10
 	jack/jack.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    11
 	jpeglib.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    12
+	kstat.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    13
 	lber.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    14
 	lcms.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    15
 	lcms/lcms.h \
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    16
@@ -319,6 +321,7 @@
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    17
 	soundcard.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    18
 	stdint.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    19
 	strings.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    20
+	stropts.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    21
 	sys/asoundlib.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    22
 	sys/cdio.h \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    23
 	sys/elf32.h \
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    24
@@ -350,10 +353,13 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    25
 	sys/sockio.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    26
 	sys/soundcard.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    27
 	sys/statvfs.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    28
+	sys/stream.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    29
 	sys/strtio.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    30
 	sys/syscall.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    31
+	sys/tihdr.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    32
 	sys/time.h \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    33
 	sys/times.h \
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    34
+	sys/tiuser.h \
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    35
 	sys/uio.h \
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    36
 	sys/un.h \
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    37
 	sys/utsname.h \
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    38
@@ -1040,6 +1046,39 @@
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    39
     LIBS="$ac_save_LIBS"
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    40
 fi
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    41
 
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    42
+dnl **** Check for Solaris kstat library ***
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    43
+AC_SUBST(KSTATLIBS,"")
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    44
+if test "$ac_cv_header_kstat_h" = "yes"
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    45
+then
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    46
+    AC_CHECK_LIB(kstat, kstat_open,
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    47
+        [AC_DEFINE(HAVE_KSTAT, 1, [Define if you have the Solaris kstat library and header])
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    48
+         KSTATLIBS="-lkstat"])
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    49
+fi
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    50
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    51
+dnl **** Check for STREAMS Transport Provider Interface (TPI) ***
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    52
+if test "$ac_cv_header_stropts_h" = "yes" -a "$ac_cv_header_sys_stream_h" = "yes" -a \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    53
+    "$ac_cv_header_sys_tihdr_h" = "yes" -a "$ac_cv_header_sys_tiuser_h" = "yes" -a \
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    54
+    "$ac_cv_header_inet_ip_h" = "yes"
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    55
+then
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    56
+    AC_CACHE_CHECK([for the STREAMS Transport Provider Interface (TPI)],
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    57
+        ac_cv_c_streams_tpi,
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    58
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    59
+#include <stropts.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    60
+#include <sys/stream.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    61
+#include <sys/tihdr.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    62
+#include <sys/tiuser.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    63
+#include <inet/ip.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    64
+struct T_optmgmt_req *tor = (struct T_optmgmt_req *)NULL;
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    65
+        ]], [[ioctl(1, I_PUSH, NULL)]])], [ac_cv_c_streams_tpi=yes],[ac_cv_c_streams_tpi=no])
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    66
+   )
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    67
+
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    68
+   if test "$ac_cv_c_streams_tpi" = "yes"
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    69
+   then
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    70
+      AC_DEFINE(HAVE_STREAMS_TPI, 1,
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    71
+                [Define if you have the STREAMS Transport Provider Interface (TPI)])
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    72
+   fi
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    73
+fi
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
    74
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    75
 dnl **** Check for LittleCMS ***
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    76
 AC_SUBST(LCMSLIBS,"")
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    77
 if test "$ac_cv_header_lcms_h" = "yes" -o "$ac_cv_header_lcms_lcms_h" = "yes"
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    78
diff -urN wine-1.1.13.orig/dlls/iphlpapi/Makefile.in wine-1.1.13/dlls/iphlpapi/Makefile.in
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    79
--- wine-1.1.13.orig/dlls/iphlpapi/Makefile.in	2009-01-16 17:28:07.000000000 +0100
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    80
+++ wine-1.1.13/dlls/iphlpapi/Makefile.in	2009-01-24 18:50:35.000000000 +0100
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    81
@@ -5,7 +5,7 @@
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    82
 MODULE    = iphlpapi.dll
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    83
 IMPORTLIB = iphlpapi
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    84
 IMPORTS   = advapi32 kernel32
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    85
-EXTRALIBS = @RESOLVLIBS@
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    86
+EXTRALIBS = @RESOLVLIBS@ @KSTATLIBS@
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    87
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    88
 C_SRCS = \
1288
887909a3c624 2008-08-07 Albert Lee <[email protected]>
trisk
parents: 1265
diff changeset
    89
 	icmp.c \
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    90
diff -urN wine-1.1.13.orig/dlls/iphlpapi/ipstats.c wine-1.1.13/dlls/iphlpapi/ipstats.c
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    91
--- wine-1.1.13.orig/dlls/iphlpapi/ipstats.c	2009-01-16 17:28:07.000000000 +0100
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
    92
+++ wine-1.1.13/dlls/iphlpapi/ipstats.c	2009-01-24 22:01:41.756459359 +0100
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
    93
@@ -1,5 +1,21 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    94
 /* Copyright (C) 2003,2006 Juan Lang
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    95
  * Copyright (C) 2007 TransGaming Technologies Inc.
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    96
+ * Copyright (c) 2008 Albert Lee <[email protected]>
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    97
+ * Portions derived from netstat.c with the following copyright:
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
    98
+ * Copyright (c) Sun Microsystems, Inc.  1994. All rights reserved.
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
    99
+ *
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   100
+ * License is granted to copy, to use, and to make and to use derivative works
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   101
+ * for research and evaluation purposes, provided that Sun Microsystems is
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   102
+ * acknowledged in all documentation pertaining to any such copy or
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   103
+ * derivative work. Sun Microsystems grants no other licenses expressed or
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   104
+ * implied. The Sun Microsystems  trade name should not be used in any
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   105
+ * advertising without its written permission.
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   106
+ *
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   107
+ * SUN MICROSYSTEMS MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF THIS
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   108
+ * SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software is provided "as is"
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   109
+ * without express or implied warranty of any kind.
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   110
+ *
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   111
+ * These notices must be retained in any copies of any part of this software.
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   112
  *
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   113
  * This library is free software; you can redistribute it and/or
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   114
  * modify it under the terms of the GNU Lesser General Public
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   115
@@ -16,7 +32,7 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   116
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   117
  *
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   118
  * This file implements statistics getting using the /proc filesystem exported
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   119
- * by Linux, and maybe other OSes.
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   120
+ * by Linux, BSD sysctls, Solaris libkstat, and TPI on platforms with STREAMS.
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   121
  */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   122
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   123
 #include "config.h"
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   124
@@ -102,6 +118,32 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   125
 #include <sys/sysctl.h>
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   126
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   127
 
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   128
+#ifdef HAVE_KSTAT_H
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   129
+#include <kstat.h>
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   130
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   131
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   132
+#ifdef HAVE_STROPTS_H
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   133
+#include <stropts.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   134
+#ifdef HAVE_SYS_STREAM_H
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   135
+#include <sys/stream.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   136
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   137
+#ifdef HAVE_SYS_TIHDR_H
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   138
+#include <sys/tihdr.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   139
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   140
+#ifdef HAVE_SYS_TIUSER_H
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   141
+#include <sys/tiuser.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   142
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   143
+#ifdef HAVE_INET_IP_H
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   144
+#include <inet/ip.h>
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   145
+#ifndef IRE_CACHETABLE
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   146
+#define IRE_CACHETABLE (IRE_CACHE|IRE_BROADCAST|IRE_LOCAL|IRE_LOOPBACK)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   147
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   148
+/* To work around redefined ERR macro */
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   149
+#undef ERR
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   150
+#define ERR WINE_ERR
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   151
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   152
+#endif
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   153
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   154
 #ifndef ROUNDUP
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   155
 #define ROUNDUP(a) \
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   156
 	((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   157
@@ -136,6 +178,180 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   158
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   159
 WINE_DEFAULT_DEBUG_CHANNEL(iphlpapi);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   160
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   161
+#ifdef HAVE_KSTAT
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   162
+struct kstat_mib_map {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   163
+  const char *name;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   164
+  unsigned int offset;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   165
+};
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   166
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   167
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   168
+#ifdef HAVE_STREAMS_TPI
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   169
+typedef struct mib_item_s {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   170
+  struct mib_item_s *next_item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   171
+  long group;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   172
+  long mib_id;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   173
+  long length;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   174
+  char *valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   175
+} mib_item_t;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   176
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   177
+static int mibopen(void);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   178
+static mib_item_t *mibget(int sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   179
+static void mibfree(mib_item_t *);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   180
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   181
+static const char mib_dev[] = "/dev/arp";
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   182
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   183
+static int mibopen(void)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   184
+{
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   185
+   int sd;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   186
+   if ((sd = open(mib_dev, O_RDWR)) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   187
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   188
+     return -1;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   189
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   190
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   191
+   if ((ioctl(sd, I_PUSH, "tcp") < 0) ||
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   192
+       (ioctl(sd, I_PUSH, "udp") < 0) ||
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   193
+       (ioctl(sd, I_PUSH, "icmp") < 0)) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   194
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   195
+     return -1;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   196
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   197
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   198
+   return sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   199
+}
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   200
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   201
+static mib_item_t *
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   202
+mibget(int sd)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   203
+{
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   204
+  char buf[512];
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   205
+  int flags;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   206
+  int j, getcode;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   207
+  struct strbuf ctlbuf, databuf;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   208
+  struct T_optmgmt_req *tor = (struct T_optmgmt_req *)buf;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   209
+  struct T_optmgmt_ack *toa = (struct T_optmgmt_ack *)buf;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   210
+  struct T_error_ack   *tea = (struct T_error_ack *)buf;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   211
+  struct opthdr *req;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   212
+  mib_item_t    *first_item = NULL;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   213
+  mib_item_t    *last_item  = NULL;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   214
+  mib_item_t    *temp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   215
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   216
+#ifdef T_SVR4_OPTMGMT_REQ
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   217
+  tor->PRIM_type = T_SVR4_OPTMGMT_REQ;
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   218
+#else
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   219
+  tor->PRIM_type = T_OPTMGMT_REQ;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   220
+#endif
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   221
+  tor->OPT_offset = sizeof(struct T_optmgmt_req);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   222
+  tor->OPT_length = sizeof(struct opthdr);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   223
+  tor->MGMT_flags = T_CURRENT;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   224
+
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   225
+  req = (struct opthdr *)(tor + 1);
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   226
+  req->level = MIB2_IP;
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   227
+  req->name = req->len = 0;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   228
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   229
+  ctlbuf.buf = buf;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   230
+  ctlbuf.maxlen = sizeof(buf);
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   231
+  ctlbuf.len = tor->OPT_length + tor->OPT_offset;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   232
+  flags = 0;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   233
+  if (putmsg(sd, &ctlbuf, (struct strbuf *)NULL, flags) == -1)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   234
+  {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   235
+    ERR ("mibget putmsg(ctl) failed\n");
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   236
+    goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   237
+  }
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   238
+
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   239
+  req = (struct opthdr *)(toa + 1);
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   240
+  for (j=1; ; j++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   241
+  {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   242
+    flags = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   243
+    getcode = getmsg(sd, &ctlbuf, (struct strbuf *)NULL, &flags);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   244
+    if (getcode == -1)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   245
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   246
+      ERR ("mibget getmsg(ctl) failed\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   247
+      goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   248
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   249
+    if (getcode == 0
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   250
+        && ctlbuf.len >= sizeof(struct T_optmgmt_ack)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   251
+        && toa->PRIM_type == T_OPTMGMT_ACK
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   252
+        && toa->MGMT_flags == T_SUCCESS
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   253
+        && req->len == 0) {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   254
+      return first_item;    /* this is EOD msg */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   255
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   256
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   257
+    if (ctlbuf.len >= sizeof(struct T_error_ack)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   258
+    && tea->PRIM_type == T_ERROR_ACK) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   259
+      ERR (
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   260
+      "mibget %d gives (%d) T_ERROR_ACK: TLI_error = 0x%lx, UNIX_error = 0x%lx\n",
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   261
+        j, getcode, tea->TLI_error, tea->UNIX_error);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   262
+      goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   263
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   264
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   265
+    if (getcode != MOREDATA
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   266
+        || ctlbuf.len < sizeof(struct T_optmgmt_ack)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   267
+        || toa->PRIM_type != T_OPTMGMT_ACK
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   268
+        || toa->MGMT_flags != T_SUCCESS)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   269
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   270
+      ERR (
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   271
+      "mibget getmsg(ctl) %d returned %d, ctlbuf.len = %d, PRIM_type = %ld\n",
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   272
+         j, getcode, ctlbuf.len, toa->PRIM_type);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   273
+      if (toa->PRIM_type == T_OPTMGMT_ACK)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   274
+        ERR (
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   275
+        "T_OPTMGMT_ACK: MGMT_flags = 0x%lx, req->len = %ld\n",
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   276
+          toa->MGMT_flags, req->len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   277
+      goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   278
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   279
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   280
+    temp = (mib_item_t *)HeapAlloc(GetProcessHeap(), 0, sizeof(mib_item_t));
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   281
+    if (!temp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   282
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   283
+      ERR ("mibget malloc failed\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   284
+      goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   285
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   286
+    if (last_item)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   287
+      last_item->next_item = temp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   288
+    else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   289
+      first_item = temp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   290
+    last_item = temp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   291
+    last_item->next_item = NULL;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   292
+    last_item->group = req->level;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   293
+    last_item->mib_id = req->name;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   294
+    last_item->length = req->len;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   295
+    last_item->valp = (char *)HeapAlloc(GetProcessHeap(), 0, req->len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   296
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   297
+    databuf.maxlen = last_item->length;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   298
+    databuf.buf    = last_item->valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   299
+    databuf.len    = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   300
+    flags = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   301
+    getcode = getmsg(sd, (struct strbuf *)NULL, &databuf, &flags);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   302
+    if (getcode == -1)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   303
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   304
+      ERR ("mibget getmsg(data) failed\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   305
+      goto error_exit;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   306
+    } else if (getcode != 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   307
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   308
+      ERR (
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   309
+      "mibget getmsg(data) returned %d, databuf.maxlen = %d, databuf.len = %d\n",
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   310
+         getcode, databuf.maxlen, databuf.len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   311
+      goto error_exit;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   312
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   313
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   314
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   315
+error_exit:;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   316
+  mibfree(first_item);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   317
+  return NULL;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   318
+}
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   319
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   320
+static void
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   321
+mibfree(mib_item_t * first_item)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   322
+{
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   323
+  mib_item_t *last_item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   324
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   325
+  while (first_item) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   326
+    last_item = first_item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   327
+    first_item = first_item->next_item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   328
+    if (last_item->valp)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   329
+      HeapFree(GetProcessHeap(), 0, last_item->valp);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   330
+    HeapFree(GetProcessHeap(), 0, last_item);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   331
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   332
+}
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   333
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   334
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   335
 DWORD getInterfaceStatsByName(const char *name, PMIB_IFROW entry)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   336
 {
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   337
 #if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_IFLIST)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   338
@@ -185,7 +401,73 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   339
       }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   340
       HeapFree (GetProcessHeap (), 0, buf);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   341
       return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   342
-#else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   343
+#elif defined(HAVE_KSTAT)
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   344
+  static const struct kstat_mib_map ifrow_map[] =
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   345
+  {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   346
+    { "rbytes", offsetof(MIB_IFROW, dwInOctets) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   347
+    { "norcvbuf", offsetof(MIB_IFROW, dwInDiscards) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   348
+    { "ierrors", offsetof(MIB_IFROW, dwInErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   349
+    { "unknowns", offsetof(MIB_IFROW, dwInUnknownProtos) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   350
+    { "obytes", offsetof(MIB_IFROW, dwOutOctets) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   351
+    { "noxmtbuf", offsetof(MIB_IFROW, dwOutDiscards) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   352
+    { "oerrors", offsetof(MIB_IFROW, dwOutErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   353
+    { NULL, 0 },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   354
+  };
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   355
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   356
+  kstat_ctl_t *kc;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   357
+  kstat_t *ksp, *mac_ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   358
+  kstat_named_t *knp;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   359
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   360
+  if (!name || !entry)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   361
+    return ERROR_INVALID_PARAMETER;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   362
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   363
+  /* get interface stats from driver or mac module
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   364
+     no outQLen */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   365
+  kc = kstat_open();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   366
+  ksp = kstat_lookup(kc, NULL, -1, (char *)name);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   367
+  if (ksp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   368
+  { /* Check if the interface has a MAC, and use that instead */
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   369
+    int i;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   370
+    if ((mac_ksp = kstat_lookup(kc, ksp->ks_module, ksp->ks_instance, (char *)"mac")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   371
+      ksp = mac_ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   372
+    kstat_read(kc, ksp, NULL);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   373
+    for (i = 0; ifrow_map[i].name != NULL; i++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   374
+    {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   375
+      if ((knp = kstat_data_lookup(ksp, (char *)ifrow_map[i].name)) != NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   376
+        *(DWORD *)((char *)entry + ifrow_map[i].offset) = knp->value.ui32;
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   377
+    }
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   378
+    if ((knp = kstat_data_lookup(ksp, (char *)"ifspeed")) != NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   379
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   380
+      entry->dwSpeed = knp->value.ui64;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   381
+      /* Windows doesn't believe in 10G Ethernet */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   382
+      if (knp->value.ui64 >= ((unsigned long)-1))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   383
+         entry->dwSpeed = ((unsigned long)-1);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   384
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   385
+    if ((knp = kstat_data_lookup(ksp, (char *)"link_up")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   386
+      entry->dwOperStatus = knp->value.ui32 ?
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   387
+        MIB_IF_OPER_STATUS_OPERATIONAL : MIB_IF_OPER_STATUS_DISCONNECTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   388
+    if ((knp = kstat_data_lookup(ksp, (char *)"multircv")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   389
+      entry->dwInNUcastPkts = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   390
+    if ((knp = kstat_data_lookup(ksp, (char *)"brdcstrcv")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   391
+      entry->dwInNUcastPkts += knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   392
+    if ((knp = kstat_data_lookup(ksp, (char *)"ipackets")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   393
+      entry->dwInUcastPkts = knp->value.ui32 - entry->dwInNUcastPkts;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   394
+    if ((knp = kstat_data_lookup(ksp, (char *)"multixmt")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   395
+      entry->dwOutNUcastPkts = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   396
+    if ((knp = kstat_data_lookup(ksp, (char *)"brdcstxmt")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   397
+      entry->dwOutNUcastPkts += knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   398
+    if ((knp = kstat_data_lookup(ksp, (char *)"opackets")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   399
+      entry->dwOutUcastPkts = knp->value.ui32 - entry->dwOutNUcastPkts;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   400
+    kstat_close(kc);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   401
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   402
+  else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   403
+  {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   404
+    kstat_close(kc);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   405
+    return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   406
+  }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   407
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   408
+  return NO_ERROR;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   409
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   410
   /* get interface stats from /proc/net/dev, no error if can't
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   411
      no inUnknownProtos, outNUcastPkts, outQLen */
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   412
   FILE *fp;
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   413
@@ -332,7 +614,68 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   414
   stats->stats.icmpOutStats.dwAddrMaskReps = icmp_stat.icps_outhist[ICMP_MASKREPLY];
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   415
 
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   416
   return NO_ERROR;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   417
-#else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   418
+#elif defined(HAVE_KSTAT)
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   419
+  static const struct kstat_mib_map icmp_map[] =
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   420
+  {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   421
+    { "inMsgs", offsetof(MIB_ICMP, stats.icmpInStats.dwMsgs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   422
+    { "inErrors", offsetof(MIB_ICMP, stats.icmpInStats.dwErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   423
+    { "inDestUnreachs", offsetof(MIB_ICMP, stats.icmpInStats.dwDestUnreachs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   424
+    { "inTimeExcds", offsetof(MIB_ICMP, stats.icmpInStats.dwTimeExcds) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   425
+    { "inParmProbs", offsetof(MIB_ICMP, stats.icmpInStats.dwParmProbs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   426
+    { "inSrcQuenchs", offsetof(MIB_ICMP, stats.icmpInStats.dwSrcQuenchs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   427
+    { "inRedirects", offsetof(MIB_ICMP, stats.icmpInStats.dwRedirects) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   428
+    { "inEchos", offsetof(MIB_ICMP, stats.icmpInStats.dwEchos) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   429
+    { "inEchoReps", offsetof(MIB_ICMP, stats.icmpInStats.dwEchoReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   430
+    { "inTimestamps", offsetof(MIB_ICMP, stats.icmpInStats.dwTimestamps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   431
+    { "inTimestampReps", offsetof(MIB_ICMP, stats.icmpInStats.dwTimestampReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   432
+    { "inAddrMasks", offsetof(MIB_ICMP, stats.icmpInStats.dwAddrMasks) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   433
+    { "inAddrMaskReps", offsetof(MIB_ICMP, stats.icmpInStats.dwAddrMaskReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   434
+    { "outMsgs", offsetof(MIB_ICMP, stats.icmpOutStats.dwMsgs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   435
+    { "outErrors", offsetof(MIB_ICMP, stats.icmpOutStats.dwErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   436
+    { "outDestUnreachs", offsetof(MIB_ICMP, stats.icmpOutStats.dwDestUnreachs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   437
+    { "outTimeExcds", offsetof(MIB_ICMP, stats.icmpOutStats.dwTimeExcds) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   438
+    { "outParmProbs", offsetof(MIB_ICMP, stats.icmpOutStats.dwParmProbs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   439
+    { "outSrcQuenchs", offsetof(MIB_ICMP, stats.icmpOutStats.dwSrcQuenchs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   440
+    { "outRedirects", offsetof(MIB_ICMP, stats.icmpOutStats.dwRedirects) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   441
+    { "outEchos", offsetof(MIB_ICMP, stats.icmpOutStats.dwEchos) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   442
+    { "outEchoReps", offsetof(MIB_ICMP, stats.icmpOutStats.dwEchoReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   443
+    { "outTimestamps", offsetof(MIB_ICMP, stats.icmpOutStats.dwTimestamps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   444
+    { "outTimestampReps", offsetof(MIB_ICMP, stats.icmpOutStats.dwTimestampReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   445
+    { "outAddrMasks", offsetof(MIB_ICMP, stats.icmpOutStats.dwAddrMasks) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   446
+    { "outAddrMaskReps", offsetof(MIB_ICMP, stats.icmpOutStats.dwAddrMaskReps) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   447
+    { NULL, 0 }
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   448
+  };
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   449
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   450
+  kstat_ctl_t *kc;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   451
+  kstat_t *ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   452
+  kstat_named_t *knp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   453
+  int i;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   454
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   455
+  if (!stats)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   456
+    return ERROR_INVALID_PARAMETER;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   457
+  
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   458
+  memset(stats, 0, sizeof(MIB_ICMP));
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   459
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   460
+  kc = kstat_open();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   461
+  ksp = kstat_lookup(kc, (char *)"ip", 0, (char *)"icmp");
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   462
+  if (ksp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   463
+  {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   464
+    kstat_read(kc, ksp, NULL);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   465
+    for (i = 0; icmp_map[i].name != NULL; i++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   466
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   467
+      if ((knp = kstat_data_lookup(ksp, (char *)icmp_map[i].name)) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   468
+        *(DWORD *)((char *)stats + icmp_map[i].offset) = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   469
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   470
+    kstat_close(kc);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   471
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   472
+  else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   473
+  {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   474
+    kstat_close(kc);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   475
+    return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   476
+  }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   477
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   478
+  return NO_ERROR;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   479
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   480
   FILE *fp;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   481
 
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   482
   if (!stats)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   483
@@ -517,7 +860,62 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   484
   stats->dwReasmReqds = ip_stat.ips_fragments;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   485
 
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   486
   return NO_ERROR;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   487
-#else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   488
+#elif defined(HAVE_KSTAT)
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   489
+  static const struct kstat_mib_map ipstats_map[] =
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   490
+  {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   491
+    { "forwarding", offsetof(MIB_IPSTATS, dwForwarding) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   492
+    { "defaultTTL", offsetof(MIB_IPSTATS, dwDefaultTTL) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   493
+    { "inReceives", offsetof(MIB_IPSTATS, dwInReceives) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   494
+    { "inHdrErrors", offsetof(MIB_IPSTATS, dwInHdrErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   495
+    { "inAddrErrors", offsetof(MIB_IPSTATS, dwInAddrErrors) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   496
+    { "forwDatagrams", offsetof(MIB_IPSTATS, dwForwDatagrams) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   497
+    { "inUnknownProtos", offsetof(MIB_IPSTATS, dwInUnknownProtos) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   498
+    { "inDiscards", offsetof(MIB_IPSTATS, dwInDiscards) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   499
+    { "inDelivers", offsetof(MIB_IPSTATS, dwInDelivers) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   500
+    { "outRequests", offsetof(MIB_IPSTATS, dwOutRequests) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   501
+    { "routingDiscards", offsetof(MIB_IPSTATS, dwRoutingDiscards) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   502
+    { "outDiscards", offsetof(MIB_IPSTATS, dwOutDiscards) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   503
+    { "outNoRoutes", offsetof(MIB_IPSTATS, dwOutNoRoutes) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   504
+    { "reasmTimeout", offsetof(MIB_IPSTATS, dwReasmTimeout) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   505
+    { "reasmReqds", offsetof(MIB_IPSTATS, dwReasmReqds) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   506
+    { "reasmOks", offsetof(MIB_IPSTATS, dwReasmOks) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   507
+    { "reasmFails", offsetof(MIB_IPSTATS, dwReasmFails) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   508
+    { "fragOks", offsetof(MIB_IPSTATS, dwFragOks) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   509
+    { "fragFails", offsetof(MIB_IPSTATS, dwFragFails) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   510
+    { "fragCreates", offsetof(MIB_IPSTATS, dwFragCreates) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   511
+    { NULL, 0 }
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   512
+  };
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   513
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   514
+  kstat_ctl_t *kc;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   515
+  kstat_t *ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   516
+  kstat_named_t *knp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   517
+  int i;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   518
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   519
+  if (!stats)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   520
+    return ERROR_INVALID_PARAMETER;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   521
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   522
+  memset(stats, 0, sizeof(MIB_IPSTATS));
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   523
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   524
+  kc = kstat_open();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   525
+  ksp = kstat_lookup(kc, (char *)"ip", 0, (char *)"ip");
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   526
+  if (ksp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   527
+  {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   528
+    kstat_read(kc, ksp, NULL);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   529
+    for (i = 0; ipstats_map[i].name != NULL; i++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   530
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   531
+      if ((knp = kstat_data_lookup(ksp, (char *)ipstats_map[i].name)) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   532
+        *(DWORD *)((char *)stats + ipstats_map[i].offset) = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   533
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   534
+    kstat_close(kc);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   535
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   536
+  else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   537
+  {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   538
+    kstat_close(kc);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   539
+    return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   540
+  }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   541
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   542
+  return NO_ERROR;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   543
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   544
   FILE *fp;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   545
 
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   546
   if (!stats)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   547
@@ -675,7 +1073,55 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   548
 
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   549
   return NO_ERROR;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   550
 
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   551
-#else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   552
+#elif defined(HAVE_KSTAT)
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   553
+  static const struct kstat_mib_map tcpstats_map[] =
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   554
+  {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   555
+    { "rtoAlgorithm", offsetof(MIB_TCPSTATS, dwRtoAlgorithm) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   556
+    { "rtoMin", offsetof(MIB_TCPSTATS, dwRtoMin) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   557
+    { "rtoMax", offsetof(MIB_TCPSTATS, dwRtoMax) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   558
+    { "maxConn", offsetof(MIB_TCPSTATS, dwMaxConn) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   559
+    { "activeOpens", offsetof(MIB_TCPSTATS, dwActiveOpens) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   560
+    { "passiveOpens", offsetof(MIB_TCPSTATS, dwPassiveOpens) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   561
+    { "attemptFails", offsetof(MIB_TCPSTATS, dwAttemptFails) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   562
+    { "estabResets", offsetof(MIB_TCPSTATS, dwEstabResets) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   563
+    { "currEstab", offsetof(MIB_TCPSTATS, dwCurrEstab) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   564
+    { "inSegs", offsetof(MIB_TCPSTATS, dwInSegs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   565
+    { "outSegs", offsetof(MIB_TCPSTATS, dwOutSegs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   566
+    { "retransSegs", offsetof(MIB_TCPSTATS, dwRetransSegs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   567
+    { "inErrs", offsetof(MIB_TCPSTATS, dwInErrs) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   568
+    { "outRsts", offsetof(MIB_TCPSTATS, dwOutRsts) },
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   569
+    { NULL, 0 }
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   570
+  };
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   571
+  kstat_ctl_t *kc;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   572
+  kstat_t *ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   573
+  kstat_named_t *knp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   574
+  int i;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   575
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   576
+  if (!stats)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   577
+    return ERROR_INVALID_PARAMETER;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   578
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   579
+  memset(stats, 0, sizeof(MIB_TCPSTATS));
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   580
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   581
+  kc = kstat_open();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   582
+  ksp = kstat_lookup(kc, (char *)"tcp", 0, (char *)"tcp");
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   583
+  if (ksp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   584
+  {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   585
+    kstat_read(kc, ksp, NULL);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   586
+    for (i = 0; tcpstats_map[i].name != NULL; i++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   587
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   588
+      if ((knp = kstat_data_lookup(ksp, (char *)tcpstats_map[i].name)) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   589
+        *(DWORD *)((char *)stats + tcpstats_map[i].offset) = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   590
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   591
+    kstat_close(kc);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   592
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   593
+  else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   594
+  {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   595
+    kstat_close(kc);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   596
+    return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   597
+  }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   598
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   599
+  return NO_ERROR;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   600
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   601
   FILE *fp;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   602
 
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   603
   if (!stats)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   604
@@ -796,7 +1242,37 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   605
   stats->dwNumAddrs = getNumUdpEntries();
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   606
 
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   607
   return NO_ERROR;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   608
-#else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   609
+#elif defined(HAVE_KSTAT)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   610
+  kstat_ctl_t *kc;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   611
+  kstat_t *ksp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   612
+  kstat_named_t *knp;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   613
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   614
+  if (!stats)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   615
+    return ERROR_INVALID_PARAMETER;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   616
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   617
+  memset(stats, 0, sizeof(MIB_UDPSTATS));
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   618
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   619
+  kc = kstat_open();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   620
+  ksp = kstat_lookup(kc, (char *)"udp", 0, (char *)"udp");
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   621
+  if (ksp)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   622
+  {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   623
+    kstat_read(kc, ksp, NULL);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   624
+    if ((knp = kstat_data_lookup(ksp, (char *)"inDatagrams")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   625
+      stats->dwInDatagrams = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   626
+    if ((knp = kstat_data_lookup(ksp, (char *)"inErrors")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   627
+      stats->dwInErrors = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   628
+    if ((knp = kstat_data_lookup(ksp, (char *)"outDatagrams")) != NULL)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   629
+      stats->dwOutDatagrams = knp->value.ui32;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   630
+    kstat_close(kc);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   631
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   632
+  else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   633
+  {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   634
+    kstat_close(kc);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   635
+    return ERROR_NOT_SUPPORTED;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   636
+  }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   637
+
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   638
+  return NO_ERROR;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   639
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   640
   FILE *fp;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   641
 
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   642
   if (!stats)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   643
@@ -855,6 +1331,7 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   644
 #endif
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   645
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   646
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   647
+#if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H) || defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   648
 static DWORD getNumWithOneHeader(const char *filename)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   649
 {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   650
 #if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   651
@@ -975,6 +1452,7 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   652
   return ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   653
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   654
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   655
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   656
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   657
 DWORD getNumRoutes(void)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   658
 {
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   659
@@ -1023,8 +1501,46 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   660
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   661
    HeapFree (GetProcessHeap (), 0, buf);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   662
    return RouteCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   663
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   664
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   665
+   DWORD RouteCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   666
+   int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   667
+   mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   668
+   mib2_ipRouteEntry_t *rp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   669
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   670
+   if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   671
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   672
+     ERR ("Unable to open %s to count routes!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   673
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   674
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   675
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   676
+   if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   677
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   678
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   679
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   680
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   681
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   682
+   for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   683
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   684
+     if ((item->group != MIB2_IP) || (item->mib_id != MIB2_IP_21))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   685
+       continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   686
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   687
+     for (rp = (mib2_ipRouteEntry_t *)item->valp;
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   688
+          (char *)rp < (char *)item->valp + item->length; rp++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   689
+     {
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   690
+       if ((rp->ipRouteInfo.re_ire_type & IRE_CACHETABLE) != 0)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   691
+         continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   692
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   693
+       RouteCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   694
+     }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   695
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   696
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   697
+   mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   698
+   close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   699
+   return RouteCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   700
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   701
    return getNumWithOneHeader("/proc/net/route");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   702
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   703
+   return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   704
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   705
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   706
 
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   707
@@ -1053,21 +1569,21 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   708
        if (sysctl (mib, 6, NULL, &needed, NULL, 0) < 0)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   709
        {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   710
           ERR ("sysctl 1 failed!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   711
-          HeapFree (GetProcessHeap (), 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   712
+          HeapFree (heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   713
           return NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   714
        }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   715
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   716
        buf = HeapAlloc (GetProcessHeap (), 0, needed);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   717
        if (!buf)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   718
        {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   719
-          HeapFree (GetProcessHeap (), 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   720
+          HeapFree (heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   721
           return ERROR_OUTOFMEMORY;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   722
        }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   723
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   724
        if (sysctl (mib, 6, buf, &needed, NULL, 0) < 0)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   725
        {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   726
           ERR ("sysctl 2 failed!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   727
-          HeapFree (GetProcessHeap (), 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   728
+          HeapFree (heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   729
           HeapFree (GetProcessHeap (), 0, buf);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   730
           return NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   731
        }
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   732
@@ -1158,7 +1674,76 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   733
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   734
        HeapFree (GetProcessHeap (), 0, buf);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   735
        ret = NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   736
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   737
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   738
+       DWORD RouteCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   739
+       int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   740
+       mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   741
+       mib2_ipRouteEntry_t *rp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   742
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   743
+       if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   744
+       {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   745
+         ERR ("Unable to open %s to list routes!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   746
+         HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   747
+         return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   748
+       }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   749
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   750
+       if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   751
+       {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   752
+         HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   753
+         close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   754
+         return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   755
+       }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   756
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   757
+       for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   758
+       {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   759
+         if ((item->group != MIB2_IP) || (item->mib_id != MIB2_IP_21))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   760
+           continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   761
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   762
+         for (rp = (mib2_ipRouteEntry_t *)item->valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   763
+              (char *)rp < (char *)item->valp + item->length; rp++) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   764
+           char name[IF_NAMESIZE];
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   765
+           int len;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   766
+           DWORD index;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   767
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   768
+           if (RouteCount == numRoutes) /* in case of race */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   769
+             break;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   770
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   771
+           if ((rp->ipRouteInfo.re_ire_type & IRE_CACHETABLE) != 0)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   772
+             continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   773
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   774
+           memset(&table->table[RouteCount], 0, sizeof(MIB_IPFORWARDROW));
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   775
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   776
+           table->table[RouteCount].dwForwardDest = rp->ipRouteDest;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   777
+           table->table[RouteCount].dwForwardMask = rp->ipRouteMask;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   778
+           table->table[RouteCount].dwForwardNextHop = rp->ipRouteNextHop;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   779
+             
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   780
+           len = rp->ipRouteIfIndex.o_length;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   781
+           if (len > IF_NAMESIZE - 1)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   782
+             len = IF_NAMESIZE - 1;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   783
+           memcpy(name, rp->ipRouteIfIndex.o_bytes, len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   784
+           name[len] = '\0';
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   785
+           if (getInterfaceIndexByName(name, &index) == NO_ERROR)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   786
+             table->table[RouteCount].dwForwardIfIndex = index;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   787
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   788
+           table->table[RouteCount].dwForwardType = rp->ipRouteType;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   789
+           table->table[RouteCount].dwForwardProto = rp->ipRouteProto;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   790
+           table->table[RouteCount].dwForwardAge = rp->ipRouteAge;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   791
+           table->table[RouteCount].dwForwardMetric1 = rp->ipRouteMetric1;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   792
+           table->table[RouteCount].dwForwardMetric2 = rp->ipRouteMetric2;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   793
+           table->table[RouteCount].dwForwardMetric3 = rp->ipRouteMetric3;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   794
+           table->table[RouteCount].dwForwardMetric4 = rp->ipRouteMetric4;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   795
+           table->table[RouteCount].dwForwardMetric5 = rp->ipRouteMetric5;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   796
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   797
+           RouteCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   798
+         }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   799
+       }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   800
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   801
+       *ppIpForwardTable = table;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   802
+       table->dwNumEntries = RouteCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   803
+       ret = NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   804
+       mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   805
+       close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   806
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   807
       FILE *fp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   808
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   809
       ret = NO_ERROR;
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   810
@@ -1243,6 +1828,9 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   811
         ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   812
         return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   813
       }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   814
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   815
+      ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   816
+      return ERROR_NOT_SUPPORTED; 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   817
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   818
     }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   819
     else
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   820
@@ -1292,8 +1880,42 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   821
   }
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   822
   HeapFree (GetProcessHeap (), 0, buf);
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   823
   return arpEntries;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   824
-#endif
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   825
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   826
+   DWORD ArpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   827
+   int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   828
+   mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   829
+   mib2_ipNetToMediaEntry_t *np;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   830
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   831
+   if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   832
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   833
+     ERR ("Unable to open %s to count ARP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   834
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   835
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   836
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   837
+   if ((head = mibget(sd)) == NULL) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   838
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   839
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   840
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   841
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   842
+   for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   843
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   844
+     if ((item->group != MIB2_IP) || (item->mib_id != MIB2_IP_MEDIA))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   845
+       continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   846
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   847
+     for (np = (mib2_ipNetToMediaEntry_t *)item->valp;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   848
+            (char *)np < (char *)item->valp + item->length; np++)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   849
+       ArpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   850
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   851
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   852
+   mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   853
+   close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   854
+   return ArpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   855
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   856
   return getNumWithOneHeader("/proc/net/arp");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   857
+#else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   858
+  ERR ("unimplemented!\n");
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   859
+  return ERROR_NOT_SUPPORTED;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   860
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   861
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   862
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   863
 DWORD getArpTable(PMIB_IPNETTABLE *ppIpNetTable, HANDLE heap, DWORD flags)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   864
@@ -1375,7 +1997,76 @@
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   865
     else
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   866
         ret = ERROR_OUTOFMEMORY;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   867
   return ret;
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   868
-#endif
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   869
+#elif defined(HAVE_STREAMS_TPI)
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   870
+    if (table)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   871
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   872
+      DWORD ArpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   873
+      int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   874
+      mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   875
+      mib2_ipNetToMediaEntry_t *np;
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   876
+ 
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   877
+      if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   878
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   879
+        ERR ("Unable to open %s to count ARP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   880
+        HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   881
+        return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   882
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   883
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   884
+      if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   885
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   886
+        HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   887
+        close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   888
+        return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   889
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   890
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   891
+      for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   892
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   893
+        if ((item->group != MIB2_IP) || (item->mib_id != MIB2_IP_MEDIA))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   894
+          continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   895
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   896
+        for (np = (mib2_ipNetToMediaEntry_t *)item->valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   897
+               (char *)np < (char *)item->valp + item->length; np++) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   898
+          char name[IF_NAMESIZE];
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   899
+          int len;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   900
+          DWORD index;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   901
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   902
+          if (ArpCount == numEntries) /* in case of race */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   903
+            break;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   904
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   905
+          memset(&table->table[ArpCount], 0, sizeof(MIB_IPNETROW));
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   906
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   907
+          len = np->ipNetToMediaIfIndex.o_length;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   908
+          if (len > IF_NAMESIZE - 1)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   909
+            len = IF_NAMESIZE - 1;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   910
+          memcpy(name, np->ipNetToMediaIfIndex.o_bytes, len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   911
+          name[len] = '\0';
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   912
+          if (getInterfaceIndexByName(name, &index) == NO_ERROR)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   913
+            table->table[ArpCount].dwIndex = index;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   914
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   915
+          len = np->ipNetToMediaPhysAddress.o_length;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   916
+          if (len > MAXLEN_PHYSADDR)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   917
+             len = MAXLEN_PHYSADDR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   918
+          table->table[ArpCount].dwPhysAddrLen = len;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   919
+          memcpy(table->table[ArpCount].bPhysAddr, np->ipNetToMediaPhysAddress.o_bytes, len);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   920
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   921
+          table->table[ArpCount].dwAddr = np->ipNetToMediaNetAddress;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   922
+          table->table[ArpCount].dwType = np->ipNetToMediaType;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   923
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   924
+          ArpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   925
+        }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   926
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   927
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   928
+      *ppIpNetTable = table;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   929
+      table->dwNumEntries = ArpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   930
+      ret = NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   931
+      mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   932
+      close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   933
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   934
+    else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   935
+      ret = ERROR_OUTOFMEMORY;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   936
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   937
+  return ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   938
+#elif defined(__linux__)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   939
 
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   940
     if (table) {
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   941
       FILE *fp;
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   942
@@ -1452,14 +2143,52 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   943
       ret = ERROR_OUTOFMEMORY;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   944
   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   945
   return ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   946
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   947
+  ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   948
+  return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   949
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   950
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   951
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   952
 DWORD getNumUdpEntries(void)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   953
 {
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   954
 #if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H)
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   955
    return getNumWithOneHeader ("net.inet.udp.pcblist");
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   956
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   957
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   958
+   DWORD UdpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   959
+   int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   960
+   mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   961
+   mib2_udpEntry_t *ude;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   962
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   963
+   if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   964
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   965
+     ERR ("Unable to open %s to count UDP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   966
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   967
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   968
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   969
+   if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   970
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   971
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   972
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   973
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   974
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   975
+   for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
   976
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   977
+     if ((item->group != MIB2_UDP) || (item->mib_id != MIB2_UDP_ENTRY))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   978
+       continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   979
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   980
+     for (ude = (mib2_udpEntry_t *)item->valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   981
+            (char *)ude < (char *)item->valp + item->length; ude++) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   982
+       UdpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   983
+     }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   984
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   985
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   986
+   mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   987
+   close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   988
+   return UdpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   989
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   990
   return getNumWithOneHeader("/proc/net/udp");
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   991
+#else
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   992
+  return 0;
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
   993
 #endif
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   994
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   995
 
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
   996
@@ -1467,10 +2196,70 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   997
 {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   998
   DWORD ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
   999
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1000
-#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1001
-  ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1002
-  return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1003
-#endif
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1004
+#ifdef HAVE_STREAMS_TPI
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1005
+  if (!ppUdpTable)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1006
+    ret = ERROR_INVALID_PARAMETER;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1007
+  else {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1008
+    DWORD numEntries = getNumUdpEntries();
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1009
+    DWORD size = sizeof(MIB_UDPTABLE);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1010
+    PMIB_UDPTABLE table;
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
  1011
+
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1012
+    if (numEntries > 1)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1013
+      size += (numEntries - 1) * sizeof(MIB_IPNETROW);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1014
+    table = HeapAlloc(heap, flags, size);
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1015
+    if (table)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1016
+    {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1017
+      DWORD UdpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1018
+      int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1019
+      mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1020
+      mib2_udpEntry_t *ude;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1021
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1022
+      if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1023
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1024
+        ERR ("Unable to open %s to list UDP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1025
+        HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1026
+        return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1027
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1028
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1029
+      if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1030
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1031
+        HeapFree(heap, 0, table);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1032
+        close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1033
+        return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1034
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1035
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1036
+      for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1037
+      {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1038
+        if ((item->group != MIB2_UDP) || (item->mib_id != MIB2_UDP_ENTRY))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1039
+          continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1040
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1041
+        for (ude = (mib2_udpEntry_t *)item->valp;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1042
+               (char *)ude < (char *)item->valp + item->length; ude++)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1043
+        {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1044
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1045
+          if (UdpCount == numEntries) /* in case of race */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1046
+            break;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1047
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1048
+          memset(&table->table[UdpCount], 0, sizeof(MIB_UDPROW));
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1049
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1050
+          table->table[UdpCount].dwLocalAddr = ude->udpLocalAddress;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1051
+          table->table[UdpCount].dwLocalPort = ude->udpLocalPort;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1052
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1053
+          UdpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1054
+        }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1055
+      }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1056
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1057
+      *ppUdpTable = table;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1058
+      table->dwNumEntries = UdpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1059
+      ret = NO_ERROR;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1060
+      mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1061
+      close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1062
+    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1063
+    else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1064
+      ret = ERROR_OUTOFMEMORY;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1065
+  }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1066
+  return ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1067
+#elif defined(__linux__)
1265
205cb8a210b5 2008-07-09 Albert Lee <[email protected]>
trisk
parents: 1026
diff changeset
  1068
 
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1069
   if (!ppUdpTable)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1070
     ret = ERROR_INVALID_PARAMETER;
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1071
@@ -1529,6 +2318,10 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1072
       ret = ERROR_OUTOFMEMORY;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1073
   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1074
   return ret;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1075
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1076
+  ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1077
+  return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1078
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1079
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1080
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1081
 
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1082
@@ -1536,14 +2329,48 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1083
 {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1084
 #if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1085
    return getNumWithOneHeader ("net.inet.tcp.pcblist");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1086
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1087
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1088
+   DWORD TcpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1089
+   int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1090
+   mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1091
+   mib2_tcpConnEntry_t *tp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1092
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1093
+   if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1094
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1095
+     ERR ("Unable to open %s to count TCP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1096
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1097
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1098
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1099
+   if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1100
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1101
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1102
+     return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1103
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1104
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1105
+   for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1106
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1107
+     if ((item->group != MIB2_TCP) || (item->mib_id != MIB2_TCP_CONN))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1108
+       continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1109
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1110
+     for (tp = (mib2_tcpConnEntry_t *)item->valp;
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1111
+            (char *)tp < (char *)item->valp + item->length; tp++)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1112
+       TcpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1113
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1114
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1115
+   mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1116
+   close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1117
+   return TcpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1118
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1119
    return getNumWithOneHeader ("/proc/net/tcp");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1120
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1121
+   return 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1122
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1123
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1124
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1125
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1126
 /* Why not a lookup table? Because the TCPS_* constants are different
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1127
    on different platforms */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1128
+#if (defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_NETINET_IN_PCB_H)) || defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1129
 static DWORD TCPStateToMIBState (int state)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1130
 {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1131
    switch (state)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1132
@@ -1562,6 +2389,7 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1133
       case TCPS_CLOSED: return MIB_TCP_STATE_CLOSED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1134
    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1135
 }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1136
+#endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1137
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1138
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1139
 DWORD getTcpTable(PMIB_TCPTABLE *ppTcpTable, DWORD maxEntries, HANDLE heap,
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1140
@@ -1573,7 +2401,12 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1141
    size_t Len = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1142
    char *Buf;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1143
    struct xinpgen *pXIG, *pOrigXIG;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1144
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1145
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1146
+   DWORD TcpCount = 0;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1147
+   int sd;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1148
+   mib_item_t *head, *item;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1149
+   mib2_tcpConnEntry_t *tp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1150
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1151
    FILE *fp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1152
    char buf[512] = { 0 }, *ptr;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1153
 #endif
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1154
@@ -1684,7 +2517,47 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1155
    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1156
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1157
    HeapFree (GetProcessHeap (), 0, Buf);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1158
-#else
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1159
+#elif defined(HAVE_STREAMS_TPI)
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1160
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1161
+   if ((sd = mibopen()) < 0)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1162
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1163
+     ERR ("Unable to open %s to list TCP entries!\n", mib_dev);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1164
+     return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1165
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1166
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1167
+   if ((head = mibget(sd)) == NULL)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1168
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1169
+     close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1170
+     return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1171
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1172
+
1026
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1173
+   for (item = head; item; item = item->next_item)
179f274163dd 2008-04-10 Albert Lee <[email protected]>
trisk
parents: 991
diff changeset
  1174
+   {
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1175
+     if ((item->group != MIB2_TCP) || (item->mib_id != MIB2_TCP_CONN))
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1176
+       continue;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1177
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1178
+     for (tp = (mib2_tcpConnEntry_t *)item->valp;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1179
+         (char *)tp < (char *)item->valp + item->length; tp++) {
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1180
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1181
+       if (TcpCount == numEntries) /* in case of race */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1182
+         break;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1183
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1184
+       memset(&table->table[TcpCount], 0, sizeof(MIB_TCPROW));
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1185
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1186
+       table->table[TcpCount].dwState = tp->tcpConnState;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1187
+       table->table[TcpCount].dwLocalAddr = tp->tcpConnLocalAddress;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1188
+       table->table[TcpCount].dwLocalPort = tp->tcpConnLocalPort;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1189
+       table->table[TcpCount].dwRemoteAddr = tp->tcpConnRemAddress;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1190
+       table->table[TcpCount].dwRemotePort = tp->tcpConnRemPort;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1191
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1192
+       TcpCount++;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1193
+     }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1194
+   }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1195
+
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1196
+   table->dwNumEntries = TcpCount;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1197
+   mibfree(head);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1198
+   close(sd);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1199
+#elif defined(__linux__)
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1200
    /* get from /proc/net/tcp, no error if can't */
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1201
    fp = fopen("/proc/net/tcp", "r");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1202
    if (!fp)
1650
2486e311009b * Bump to 1.1.13
tom68
parents: 1498
diff changeset
  1203
@@ -1735,6 +2608,9 @@
991
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1204
       }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1205
    }
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1206
    fclose(fp);
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1207
+#else
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1208
+   ERR ("unimplemented!\n");
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1209
+   return ERROR_NOT_SUPPORTED;
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1210
 #endif
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1211
 
8567773a366e 2008-03-19 Albert Lee <[email protected]>
trisk
parents:
diff changeset
  1212
    return NO_ERROR;