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