Alexandre Julliard : iphlpapi: Implemented AllocateAndGetIpForwardTableFromStack for Solaris.

Alexandre Julliard julliard at winehq.org
Wed Mar 11 10:04:19 CDT 2009


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Mar 10 17:11:44 2009 +0100

iphlpapi: Implemented AllocateAndGetIpForwardTableFromStack for Solaris.

---

 dlls/iphlpapi/ipstats.c |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c
index 9a157cd..69f3376 100644
--- a/dlls/iphlpapi/ipstats.c
+++ b/dlls/iphlpapi/ipstats.c
@@ -1054,6 +1054,44 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw
         }
         else ret = ERROR_NOT_SUPPORTED;
     }
+#elif defined(HAVE_SYS_TIHDR_H) && defined(T_OPTMGMT_ACK)
+    {
+        void *data;
+        int fd, len, namelen;
+        mib2_ipRouteEntry_t *entry;
+        char name[64];
+
+        if ((fd = open_streams_mib( NULL )) != -1)
+        {
+            if ((data = read_mib_entry( fd, MIB2_IP, MIB2_IP_ROUTE, &len )))
+            {
+                for (entry = data; (char *)(entry + 1) <= (char *)data + len; entry++)
+                {
+                    row.dwForwardDest      = entry->ipRouteDest;
+                    row.dwForwardMask      = entry->ipRouteMask;
+                    row.dwForwardPolicy    = 0;
+                    row.dwForwardNextHop   = entry->ipRouteNextHop;
+                    row.dwForwardType      = entry->ipRouteType;
+                    row.dwForwardProto     = entry->ipRouteProto;
+                    row.dwForwardAge       = entry->ipRouteAge;
+                    row.dwForwardNextHopAS = 0;
+                    row.dwForwardMetric1   = entry->ipRouteMetric1;
+                    row.dwForwardMetric2   = entry->ipRouteMetric2;
+                    row.dwForwardMetric3   = entry->ipRouteMetric3;
+                    row.dwForwardMetric4   = entry->ipRouteMetric4;
+                    row.dwForwardMetric5   = entry->ipRouteMetric5;
+                    namelen = min( sizeof(name) - 1, entry->ipRouteIfIndex.o_length );
+                    memcpy( name, entry->ipRouteIfIndex.o_bytes, namelen );
+                    name[namelen] = 0;
+                    getInterfaceIndexByName( name, &row.dwForwardIfIndex );
+                    if (!(table = append_ipforward_row( heap, flags, table, &count, &row ))) break;
+                }
+                HeapFree( GetProcessHeap(), 0, data );
+            }
+            close( fd );
+        }
+        else ret = ERROR_NOT_SUPPORTED;
+    }
 #elif defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
     {
        int mib[6] = {CTL_NET, PF_ROUTE, 0, PF_INET, NET_RT_DUMP, 0};




More information about the wine-cvs mailing list