Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
84e96960
Commit
84e96960
authored
Apr 19, 2022
by
Chip Davis
Committed by
Alexandre Julliard
May 13, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nsiproxy.sys: Implement IPv6 icmpstats get_all_parameters on Mac OS and BSD.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
0a70e1ac
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
1 deletion
+147
-1
configure
configure
+52
-0
configure.ac
configure.ac
+14
-1
ip.c
dlls/nsiproxy.sys/ip.c
+75
-0
config.h.in
include/config.h.in
+6
-0
No files found.
configure
View file @
84e96960
...
...
@@ -8880,6 +8880,38 @@ 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>
#ifdef HAVE_SYS_SOCKETVAR_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>
...
...
configure.ac
View file @
84e96960
...
...
@@ -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>
...
...
dlls/nsiproxy.sys/ip.c
View file @
84e96960
...
...
@@ -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
;
...
...
include/config.h.in
View file @
84e96960
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment