nsiproxy.sys: Implement IPv6 ipstats get_all_parameters on Mac OS and BSD.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
84e9696078
commit
2264663c74
|
@ -8761,6 +8761,32 @@ if test "x$ac_cv_header_netinet_udp_h" = xyes
|
|||
then :
|
||||
printf "%s\n" "#define HAVE_NETINET_UDP_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_header_compile "$LINENO" "netinet6/ip6_var.h" "ac_cv_header_netinet6_ip6_var_h" "#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
# include <sys/socketvar.h>
|
||||
#endif
|
||||
#ifdef HAVE_NET_ROUTE_H
|
||||
# include <net/route.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_SYSTM_H
|
||||
# include <netinet/in_systm.h>
|
||||
#endif
|
||||
#ifdef HAVE_NET_IF_H
|
||||
# include <net/if.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IP_H
|
||||
# include <netinet/ip.h>
|
||||
#endif
|
||||
"
|
||||
if test "x$ac_cv_header_netinet6_ip6_var_h" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_NETINET6_IP6_VAR_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_header_compile "$LINENO" "netipx/ipx.h" "ac_cv_header_netipx_ipx_h" "#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
@ -20651,6 +20677,26 @@ printf "%s\n" "#define HAVE_STRUCT_IP_STATS_IPS_TOTAL 1" >>confdefs.h
|
|||
fi
|
||||
|
||||
|
||||
ac_fn_c_check_member "$LINENO" "struct ip6stat" "ip6s_total" "ac_cv_member_struct_ip6stat_ip6s_total" "#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
#include <sys/socketvar.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET6_IP6_VAR_H
|
||||
#include <netinet6/ip6_var.h>
|
||||
#endif
|
||||
"
|
||||
if test "x$ac_cv_member_struct_ip6stat_ip6s_total" = xyes
|
||||
then :
|
||||
|
||||
printf "%s\n" "#define HAVE_STRUCT_IP6STAT_IP6S_TOTAL 1" >>confdefs.h
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
ac_fn_c_check_member "$LINENO" "struct icmpstat" "icps_error" "ac_cv_member_struct_icmpstat_icps_error" "#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
#include <sys/socketvar.h>
|
||||
|
|
14
configure.ac
14
configure.ac
|
@ -532,6 +532,7 @@ AC_CHECK_HEADERS(\
|
|||
netinet/ip_icmp.h \
|
||||
netinet/ip_var.h \
|
||||
netinet/udp.h \
|
||||
netinet6/ip6_var.h \
|
||||
netipx/ipx.h \
|
||||
sys/un.h \
|
||||
,,,[#include <sys/types.h>
|
||||
|
@ -2218,6 +2219,19 @@ AC_CHECK_MEMBERS([struct ip_stats.ips_total],,,
|
|||
#include <netinet/ip_var.h>
|
||||
#endif])
|
||||
|
||||
dnl Check for struct ip6stat
|
||||
AC_CHECK_MEMBERS([struct ip6stat.ip6s_total],,,
|
||||
[#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
#include <sys/socketvar.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET6_IP6_VAR_H
|
||||
#include <netinet6/ip6_var.h>
|
||||
#endif])
|
||||
|
||||
dnl Check for struct icmpstat
|
||||
AC_CHECK_MEMBERS([struct icmpstat.icps_error],,,
|
||||
[#include <sys/types.h>
|
||||
|
|
|
@ -55,6 +55,50 @@
|
|||
#include <netinet/ip_var.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETINET6_IP6_VAR_H
|
||||
#include <netinet6/ip6_var.h>
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
/* For reasons unknown, Mac OS doesn't export <netinet6/ip6_var.h> to user-
|
||||
* space. We'll have to define the needed struct ourselves.
|
||||
*/
|
||||
struct ip6stat {
|
||||
u_quad_t ip6s_total;
|
||||
u_quad_t ip6s_tooshort;
|
||||
u_quad_t ip6s_toosmall;
|
||||
u_quad_t ip6s_fragments;
|
||||
u_quad_t ip6s_fragdropped;
|
||||
u_quad_t ip6s_fragtimeout;
|
||||
u_quad_t ip6s_fragoverflow;
|
||||
u_quad_t ip6s_forward;
|
||||
u_quad_t ip6s_cantforward;
|
||||
u_quad_t ip6s_redirectsent;
|
||||
u_quad_t ip6s_delivered;
|
||||
u_quad_t ip6s_localout;
|
||||
u_quad_t ip6s_odropped;
|
||||
u_quad_t ip6s_reassembled;
|
||||
u_quad_t ip6s_atmfrag_rcvd;
|
||||
u_quad_t ip6s_fragmented;
|
||||
u_quad_t ip6s_ofragments;
|
||||
u_quad_t ip6s_cantfrag;
|
||||
u_quad_t ip6s_badoptions;
|
||||
u_quad_t ip6s_noroute;
|
||||
u_quad_t ip6s_badvers;
|
||||
u_quad_t ip6s_rawout;
|
||||
u_quad_t ip6s_badscope;
|
||||
u_quad_t ip6s_notmember;
|
||||
u_quad_t ip6s_nxthist[256];
|
||||
u_quad_t ip6s_m1;
|
||||
u_quad_t ip6s_m2m[32];
|
||||
u_quad_t ip6s_mext1;
|
||||
u_quad_t ip6s_mext2m;
|
||||
u_quad_t ip6s_exthdrtoolong;
|
||||
u_quad_t ip6s_nogif;
|
||||
u_quad_t ip6s_toomanyhdr;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETINET_ICMP_VAR_H
|
||||
#include <netinet/icmp_var.h>
|
||||
#endif
|
||||
|
@ -729,6 +773,37 @@ static NTSTATUS ipv6_ipstats_get_all_parameters( const void *key, UINT key_size,
|
|||
if (static_data) *(struct nsi_ip_ipstats_static *)static_data = stat;
|
||||
return status;
|
||||
}
|
||||
#elif defined(HAVE_SYS_SYSCTL_H) && defined(IPV6CTL_STATS) && (defined(HAVE_STRUCT_IP6STAT_IP6S_TOTAL) || defined(__APPLE__))
|
||||
{
|
||||
int mib[] = { CTL_NET, PF_INET6, IPPROTO_IPV6, IPV6CTL_STATS };
|
||||
struct ip6stat ip_stat;
|
||||
size_t needed;
|
||||
|
||||
needed = sizeof(ip_stat);
|
||||
if (sysctl( mib, ARRAY_SIZE(mib), &ip_stat, &needed, NULL, 0 ) == -1) return STATUS_NOT_SUPPORTED;
|
||||
|
||||
dyn.in_recv = ip_stat.ip6s_total;
|
||||
dyn.in_hdr_errs = ip_stat.ip6s_tooshort + ip_stat.ip6s_toosmall + ip_stat.ip6s_badvers +
|
||||
ip_stat.ip6s_badoptions + ip_stat.ip6s_exthdrtoolong + ip_stat.ip6s_toomanyhdr;
|
||||
dyn.in_addr_errs = ip_stat.ip6s_cantforward + ip_stat.ip6s_badscope + ip_stat.ip6s_notmember;
|
||||
dyn.fwd_dgrams = ip_stat.ip6s_forward;
|
||||
dyn.in_discards = ip_stat.ip6s_fragdropped;
|
||||
dyn.in_delivers = ip_stat.ip6s_delivered;
|
||||
dyn.out_reqs = ip_stat.ip6s_localout;
|
||||
dyn.out_discards = ip_stat.ip6s_odropped;
|
||||
dyn.out_no_routes = ip_stat.ip6s_noroute;
|
||||
stat.reasm_timeout = ip_stat.ip6s_fragtimeout;
|
||||
dyn.reasm_reqds = ip_stat.ip6s_fragments;
|
||||
dyn.reasm_oks = ip_stat.ip6s_reassembled;
|
||||
dyn.reasm_fails = ip_stat.ip6s_fragments - ip_stat.ip6s_reassembled;
|
||||
dyn.frag_oks = ip_stat.ip6s_fragmented;
|
||||
dyn.frag_fails = ip_stat.ip6s_cantfrag;
|
||||
dyn.frag_creates = ip_stat.ip6s_ofragments;
|
||||
|
||||
if (dynamic_data) *(struct nsi_ip_ipstats_dynamic *)dynamic_data = dyn;
|
||||
if (static_data) *(struct nsi_ip_ipstats_static *)static_data = stat;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
#else
|
||||
FIXME( "not implemented\n" );
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
|
|
|
@ -257,6 +257,9 @@
|
|||
/* Define to 1 if you have the <netdb.h> header file. */
|
||||
#undef HAVE_NETDB_H
|
||||
|
||||
/* Define to 1 if you have the <netinet6/ip6_var.h> header file. */
|
||||
#undef HAVE_NETINET6_IP6_VAR_H
|
||||
|
||||
/* Define to 1 if you have the <netinet/icmp6.h> header file. */
|
||||
#undef HAVE_NETINET_ICMP6_H
|
||||
|
||||
|
@ -458,6 +461,9 @@
|
|||
/* Define to 1 if `ipi6_addr' is a member of `struct in6_pktinfo'. */
|
||||
#undef HAVE_STRUCT_IN6_PKTINFO_IPI6_ADDR
|
||||
|
||||
/* Define to 1 if `ip6s_total' is a member of `struct ip6stat'. */
|
||||
#undef HAVE_STRUCT_IP6STAT_IP6S_TOTAL
|
||||
|
||||
/* Define to 1 if `ips_total' is a member of `struct ipstat'. */
|
||||
#undef HAVE_STRUCT_IPSTAT_IPS_TOTAL
|
||||
|
||||
|
|
Loading…
Reference in New Issue