mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 04:08:31 +00:00
nsiproxy.sys: Implement IPv6 icmpstats get_all_parameters on Mac OS and BSD.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0a70e1ac63
commit
84e9696078
52
configure
vendored
52
configure
vendored
|
@ -8879,6 +8879,38 @@ if test "x$ac_cv_header_netinet_icmp_var_h" = xyes
|
|||
then :
|
||||
printf "%s\n" "#define HAVE_NETINET_ICMP_VAR_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_header_compile "$LINENO" "netinet/icmp6.h" "ac_cv_header_netinet_icmp6_h" "#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
# include <sys/socketvar.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_NETINET_IP_H
|
||||
# include <netinet/ip.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IP_VAR_H
|
||||
# include <netinet/ip_var.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IP_ICMP_H
|
||||
# include <netinet/ip_icmp.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_UDP_H
|
||||
# include <netinet/udp.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_TCP_H
|
||||
# include <netinet/tcp.h>
|
||||
#endif
|
||||
"
|
||||
if test "x$ac_cv_header_netinet_icmp6_h" = xyes
|
||||
then :
|
||||
printf "%s\n" "#define HAVE_NETINET_ICMP6_H 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
ac_fn_c_check_header_compile "$LINENO" "netinet/tcp_var.h" "ac_cv_header_netinet_tcp_var_h" "#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
@ -20645,6 +20677,26 @@ printf "%s\n" "#define HAVE_STRUCT_ICMPSTAT_ICPS_ERROR 1" >>confdefs.h
|
|||
fi
|
||||
|
||||
|
||||
ac_fn_c_check_member "$LINENO" "struct icmp6stat" "icp6s_error" "ac_cv_member_struct_icmp6stat_icp6s_error" "#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_NETINET_ICMP6_H
|
||||
#include <netinet/icmp6.h>
|
||||
#endif
|
||||
"
|
||||
if test "x$ac_cv_member_struct_icmp6stat_icp6s_error" = xyes
|
||||
then :
|
||||
|
||||
printf "%s\n" "#define HAVE_STRUCT_ICMP6STAT_ICP6S_ERROR 1" >>confdefs.h
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
ac_fn_c_check_member "$LINENO" "struct tcpstat" "tcps_connattempt" "ac_cv_member_struct_tcpstat_tcps_connattempt" "#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
#include <sys/socketvar.h>
|
||||
|
|
15
configure.ac
15
configure.ac
|
@ -555,7 +555,7 @@ AC_CHECK_HEADERS(\
|
|||
# include <netinet/ip.h>
|
||||
#endif])
|
||||
|
||||
AC_CHECK_HEADERS([netinet/udp_var.h netinet/icmp_var.h netinet/tcp_var.h ],,,
|
||||
AC_CHECK_HEADERS([netinet/udp_var.h netinet/icmp_var.h netinet/icmp6.h netinet/tcp_var.h ],,,
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SOCKETVAR_H
|
||||
|
@ -2237,6 +2237,19 @@ AC_CHECK_MEMBERS([struct icmpstat.icps_error],,,
|
|||
#include <netinet/icmp_var.h>
|
||||
#endif])
|
||||
|
||||
dnl Check for struct icmp6stat
|
||||
AC_CHECK_MEMBERS([struct icmp6stat.icp6s_error],,,
|
||||
[#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_NETINET_ICMP6_H
|
||||
#include <netinet/icmp6.h>
|
||||
#endif])
|
||||
|
||||
dnl Check for struct tcpstat
|
||||
AC_CHECK_MEMBERS([struct tcpstat.tcps_connattempt],,,
|
||||
[#include <sys/types.h>
|
||||
|
|
|
@ -59,6 +59,24 @@
|
|||
#include <netinet/icmp_var.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETINET_ICMP6_H
|
||||
#include <netinet/icmp6.h>
|
||||
#undef ICMP6_DST_UNREACH
|
||||
#undef ICMP6_PACKET_TOO_BIG
|
||||
#undef ICMP6_TIME_EXCEEDED
|
||||
#undef ICMP6_PARAM_PROB
|
||||
#undef ICMP6_ECHO_REQUEST
|
||||
#undef ICMP6_ECHO_REPLY
|
||||
#undef ICMP6_MEMBERSHIP_QUERY
|
||||
#undef ICMP6_MEMBERSHIP_REPORT
|
||||
#undef ICMP6_MEMBERSHIP_REDUCTION
|
||||
#undef ND_ROUTER_SOLICIT
|
||||
#undef ND_ROUTER_ADVERT
|
||||
#undef ND_NEIGHBOR_SOLICIT
|
||||
#undef ND_NEIGHBOR_ADVERT
|
||||
#undef ND_REDIRECT
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETINET_IF_ETHER_H
|
||||
#include <netinet/if_ether.h>
|
||||
#endif
|
||||
|
@ -472,6 +490,63 @@ static NTSTATUS ipv6_icmpstats_get_all_parameters( const void *key, UINT key_siz
|
|||
if (dynamic_data) *(struct nsi_ip_icmpstats_dynamic *)dynamic_data = dyn;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
#elif defined(HAVE_SYS_SYSCTL_H) && defined(ICMPV6CTL_STATS) && defined(HAVE_STRUCT_ICMP6STAT_ICP6S_ERROR)
|
||||
{
|
||||
int mib[] = { CTL_NET, PF_INET6, IPPROTO_ICMPV6, ICMPV6CTL_STATS };
|
||||
struct icmp6stat icmp_stat;
|
||||
size_t needed = sizeof(icmp_stat);
|
||||
int i;
|
||||
|
||||
if (sysctl( mib, ARRAY_SIZE(mib), &icmp_stat, &needed, NULL, 0 ) == -1) return STATUS_NOT_SUPPORTED;
|
||||
|
||||
dyn.in_msgs = icmp_stat.icp6s_badcode + icmp_stat.icp6s_checksum + icmp_stat.icp6s_tooshort +
|
||||
icmp_stat.icp6s_badlen + icmp_stat.icp6s_nd_toomanyopt;
|
||||
for (i = 0; i <= ICMP6_MAXTYPE; i++)
|
||||
dyn.in_msgs += icmp_stat.icp6s_inhist[i];
|
||||
|
||||
dyn.in_errors = icmp_stat.icp6s_badcode + icmp_stat.icp6s_checksum + icmp_stat.icp6s_tooshort +
|
||||
icmp_stat.icp6s_badlen + icmp_stat.icp6s_nd_toomanyopt;
|
||||
|
||||
dyn.in_type_counts[ICMP6_DST_UNREACH] = icmp_stat.icp6s_inhist[ICMP6_DST_UNREACH];
|
||||
dyn.in_type_counts[ICMP6_PACKET_TOO_BIG] = icmp_stat.icp6s_inhist[ICMP6_PACKET_TOO_BIG];
|
||||
dyn.in_type_counts[ICMP6_TIME_EXCEEDED] = icmp_stat.icp6s_inhist[ICMP6_TIME_EXCEEDED];
|
||||
dyn.in_type_counts[ICMP6_PARAM_PROB] = icmp_stat.icp6s_inhist[ICMP6_PARAM_PROB];
|
||||
dyn.in_type_counts[ICMP6_ECHO_REQUEST] = icmp_stat.icp6s_inhist[ICMP6_ECHO_REQUEST];
|
||||
dyn.in_type_counts[ICMP6_ECHO_REPLY] = icmp_stat.icp6s_inhist[ICMP6_ECHO_REPLY];
|
||||
dyn.in_type_counts[ICMP6_MEMBERSHIP_QUERY] = icmp_stat.icp6s_inhist[ICMP6_MEMBERSHIP_QUERY];
|
||||
dyn.in_type_counts[ICMP6_MEMBERSHIP_REPORT] = icmp_stat.icp6s_inhist[ICMP6_MEMBERSHIP_REPORT];
|
||||
dyn.in_type_counts[ICMP6_MEMBERSHIP_REDUCTION] = icmp_stat.icp6s_inhist[ICMP6_MEMBERSHIP_REDUCTION];
|
||||
dyn.in_type_counts[ND_ROUTER_SOLICIT] = icmp_stat.icp6s_inhist[ND_ROUTER_SOLICIT];
|
||||
dyn.in_type_counts[ND_ROUTER_ADVERT] = icmp_stat.icp6s_inhist[ND_ROUTER_ADVERT];
|
||||
dyn.in_type_counts[ND_NEIGHBOR_SOLICIT] = icmp_stat.icp6s_inhist[ND_NEIGHBOR_SOLICIT];
|
||||
dyn.in_type_counts[ND_NEIGHBOR_ADVERT] = icmp_stat.icp6s_inhist[ND_NEIGHBOR_ADVERT];
|
||||
dyn.in_type_counts[ND_REDIRECT] = icmp_stat.icp6s_inhist[ND_REDIRECT];
|
||||
dyn.in_type_counts[ICMP6_V2_MEMBERSHIP_REPORT] = icmp_stat.icp6s_inhist[MLDV2_LISTENER_REPORT];
|
||||
|
||||
dyn.out_msgs = icmp_stat.icp6s_canterror + icmp_stat.icp6s_toofreq;
|
||||
for (i = 0; i <= ICMP6_MAXTYPE; i++)
|
||||
dyn.out_msgs += icmp_stat.icp6s_outhist[i];
|
||||
|
||||
dyn.out_errors = icmp_stat.icp6s_canterror + icmp_stat.icp6s_toofreq;
|
||||
|
||||
dyn.out_type_counts[ICMP6_DST_UNREACH] = icmp_stat.icp6s_outhist[ICMP6_DST_UNREACH];
|
||||
dyn.out_type_counts[ICMP6_PACKET_TOO_BIG] = icmp_stat.icp6s_outhist[ICMP6_PACKET_TOO_BIG];
|
||||
dyn.out_type_counts[ICMP6_TIME_EXCEEDED] = icmp_stat.icp6s_outhist[ICMP6_TIME_EXCEEDED];
|
||||
dyn.out_type_counts[ICMP6_PARAM_PROB] = icmp_stat.icp6s_outhist[ICMP6_PARAM_PROB];
|
||||
dyn.out_type_counts[ICMP6_ECHO_REQUEST] = icmp_stat.icp6s_outhist[ICMP6_ECHO_REQUEST];
|
||||
dyn.out_type_counts[ICMP6_ECHO_REPLY] = icmp_stat.icp6s_outhist[ICMP6_ECHO_REPLY];
|
||||
dyn.out_type_counts[ICMP6_MEMBERSHIP_QUERY] = icmp_stat.icp6s_outhist[ICMP6_MEMBERSHIP_QUERY];
|
||||
dyn.out_type_counts[ICMP6_MEMBERSHIP_REPORT] = icmp_stat.icp6s_outhist[ICMP6_MEMBERSHIP_REPORT];
|
||||
dyn.out_type_counts[ICMP6_MEMBERSHIP_REDUCTION] = icmp_stat.icp6s_outhist[ICMP6_MEMBERSHIP_REDUCTION];
|
||||
dyn.out_type_counts[ND_ROUTER_SOLICIT] = icmp_stat.icp6s_outhist[ND_ROUTER_SOLICIT];
|
||||
dyn.out_type_counts[ND_ROUTER_ADVERT] = icmp_stat.icp6s_outhist[ND_ROUTER_ADVERT];
|
||||
dyn.out_type_counts[ND_NEIGHBOR_SOLICIT] = icmp_stat.icp6s_outhist[ND_NEIGHBOR_SOLICIT];
|
||||
dyn.out_type_counts[ND_NEIGHBOR_ADVERT] = icmp_stat.icp6s_outhist[ND_NEIGHBOR_ADVERT];
|
||||
dyn.out_type_counts[ND_REDIRECT] = icmp_stat.icp6s_outhist[ND_REDIRECT];
|
||||
dyn.out_type_counts[ICMP6_V2_MEMBERSHIP_REPORT] = icmp_stat.icp6s_outhist[MLDV2_LISTENER_REPORT];
|
||||
if (dynamic_data) *(struct nsi_ip_icmpstats_dynamic *)dynamic_data = dyn;
|
||||
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 <netinet/icmp6.h> header file. */
|
||||
#undef HAVE_NETINET_ICMP6_H
|
||||
|
||||
/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
|
||||
#undef HAVE_NETINET_ICMP_VAR_H
|
||||
|
||||
|
@ -443,6 +446,9 @@
|
|||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if `icp6s_error' is a member of `struct icmp6stat'. */
|
||||
#undef HAVE_STRUCT_ICMP6STAT_ICP6S_ERROR
|
||||
|
||||
/* Define to 1 if `icps_error' is a member of `struct icmpstat'. */
|
||||
#undef HAVE_STRUCT_ICMPSTAT_ICPS_ERROR
|
||||
|
||||
|
|
Loading…
Reference in a new issue