Skip to content

Commit 8e3a1fb

Browse files
[release/6.0-rc2] [iOS] Make sure IPGlobalProperties and NetworkInterface.GetIsNetworkAvailable methods return the correct info (#59258)
Backport of #57096 This change makes sure some of the IPGlobalProperties stop throwing exceptions and return the correct values. GetIPv4GlobalStatistics, GetIcmpV4Statistics, GetTcpIPv4Statistics, GetUdpIPv4Statistics no longer throw NetworkInformationException. GetActiveTcpConnections no longer returns TcpConnectionInformation instances only with the State of Unknown. GetActiveTcpListeners return the correct IPEndPoint details for the IPV6 loopback. NetworkInterface.GetIsNetworkAvailable no longer returns false for every call. The reason these methods were behaving incorrectly on iOS is due to Apple not including the public headers for icmp_var.h, ip_var.h, tcp_fsm.h, if_media.h, and udp_var.h in the iOS SDK. This would lead to, for example, pal_tcpstate.c always returning TcpState_Unknown even if the underlying native value was TCPS_ESTABLISHED. This change includes the missing public headers in our build. Fixes #36890
1 parent 307d945 commit 8e3a1fb

File tree

12 files changed

+1456
-12
lines changed

12 files changed

+1456
-12
lines changed

src/libraries/Native/Unix/Common/pal_config.h.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@
7878
#cmakedefine01 HAVE_NETINET_IP_VAR_H
7979
#cmakedefine01 HAVE_NETINET_ICMP_VAR_H
8080
#cmakedefine01 HAVE_IOS_NET_ROUTE_H
81+
#cmakedefine01 HAVE_IOS_NETINET_IP_VAR_H
82+
#cmakedefine01 HAVE_IOS_NETINET_ICMP_VAR_H
83+
#cmakedefine01 HAVE_IOS_NETINET_TCPFSM_H
84+
#cmakedefine01 HAVE_IOS_NETINET_UDP_VAR_H
8185
#cmakedefine01 HAVE_RT_MSGHDR
8286
#cmakedefine01 HAVE_RT_MSGHDR2
8387
#cmakedefine01 HAVE_IF_MSGHDR2
@@ -88,6 +92,7 @@
8892
#cmakedefine01 HAVE_NET_IF_ARP_H
8993
#cmakedefine01 HAVE_SYS_MNTENT_H
9094
#cmakedefine01 HAVE_NET_IFMEDIA_H
95+
#cmakedefine01 HAVE_IOS_NET_IFMEDIA_H
9196
#cmakedefine01 HAVE_LINUX_RTNETLINK_H
9297
#cmakedefine01 HAVE_LINUX_CAN_H
9398
#cmakedefine01 HAVE_GETDOMAINNAME_SIZET

src/libraries/Native/Unix/System.Native/ios/net/if_media.h

Lines changed: 589 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/*
2+
* Copyright (c) 2000-2013 Apple Inc. All rights reserved.
3+
*
4+
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5+
*
6+
* This file contains Original Code and/or Modifications of Original Code
7+
* as defined in and that are subject to the Apple Public Source License
8+
* Version 2.0 (the 'License'). You may not use this file except in
9+
* compliance with the License. The rights granted to you under the License
10+
* may not be used to create, or enable the creation or redistribution of,
11+
* unlawful or unlicensed copies of an Apple operating system, or to
12+
* circumvent, violate, or enable the circumvention or violation of, any
13+
* terms of an Apple operating system software license agreement.
14+
*
15+
* Please obtain a copy of the License at
16+
* http://www.opensource.apple.com/apsl/ and read it before using this file.
17+
*
18+
* The Original Code and all software distributed under the License are
19+
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20+
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21+
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22+
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23+
* Please see the License for the specific language governing rights and
24+
* limitations under the License.
25+
*
26+
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27+
*/
28+
/*
29+
* Copyright (c) 1982, 1986, 1993
30+
* The Regents of the University of California. All rights reserved.
31+
*
32+
* Redistribution and use in source and binary forms, with or without
33+
* modification, are permitted provided that the following conditions
34+
* are met:
35+
* 1. Redistributions of source code must retain the above copyright
36+
* notice, this list of conditions and the following disclaimer.
37+
* 2. Redistributions in binary form must reproduce the above copyright
38+
* notice, this list of conditions and the following disclaimer in the
39+
* documentation and/or other materials provided with the distribution.
40+
* 3. All advertising materials mentioning features or use of this software
41+
* must display the following acknowledgement:
42+
* This product includes software developed by the University of
43+
* California, Berkeley and its contributors.
44+
* 4. Neither the name of the University nor the names of its contributors
45+
* may be used to endorse or promote products derived from this software
46+
* without specific prior written permission.
47+
*
48+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
49+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
52+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58+
* SUCH DAMAGE.
59+
*
60+
* @(#)icmp_var.h 8.1 (Berkeley) 6/10/93
61+
* $FreeBSD: src/sys/netinet/icmp_var.h,v 1.15.2.1 2001/02/24 21:35:18 bmilekic Exp $
62+
*/
63+
64+
#ifndef _NETINET_ICMP_VAR_H_
65+
#pragma clang diagnostic push
66+
#pragma clang diagnostic ignored "-Wreserved-id-macro"
67+
#define _NETINET_ICMP_VAR_H_
68+
#pragma clang diagnostic pop
69+
#include <sys/appleapiopts.h>
70+
71+
/*
72+
* Variables related to this implementation
73+
* of the internet control message protocol.
74+
*/
75+
struct icmpstat {
76+
/* statistics related to icmp packets generated */
77+
u_int32_t icps_error; /* # of calls to icmp_error */
78+
u_int32_t icps_oldshort; /* no error 'cuz old ip too short */
79+
u_int32_t icps_oldicmp; /* no error 'cuz old was icmp */
80+
u_int32_t icps_outhist[ICMP_MAXTYPE + 1];
81+
/* statistics related to input messages processed */
82+
u_int32_t icps_badcode; /* icmp_code out of range */
83+
u_int32_t icps_tooshort; /* packet < ICMP_MINLEN */
84+
u_int32_t icps_checksum; /* bad checksum */
85+
u_int32_t icps_badlen; /* calculated bound mismatch */
86+
u_int32_t icps_reflect; /* number of responses */
87+
u_int32_t icps_inhist[ICMP_MAXTYPE + 1];
88+
u_int32_t icps_bmcastecho;/* b/mcast echo requests dropped */
89+
u_int32_t icps_bmcasttstamp; /* b/mcast tstamp requests dropped */
90+
};
91+
92+
/*
93+
* Names for ICMP sysctl objects
94+
*/
95+
#define ICMPCTL_MASKREPL 1 /* allow replies to netmask requests */
96+
#define ICMPCTL_STATS 2 /* statistics (read-only) */
97+
#define ICMPCTL_ICMPLIM 3
98+
#define ICMPCTL_TIMESTAMP 4 /* allow replies to time stamp requests */
99+
#define ICMPCTL_MAXID 5
100+
101+
#ifdef BSD_KERNEL_PRIVATE
102+
#define ICMPCTL_NAMES { \
103+
{ 0, 0 }, \
104+
{ "maskrepl", CTLTYPE_INT }, \
105+
{ "stats", CTLTYPE_STRUCT }, \
106+
{ "icmplim", CTLTYPE_INT }, \
107+
{ "icmptimestamp", CTLTYPE_INT }, \
108+
}
109+
110+
SYSCTL_DECL(_net_inet_icmp);
111+
#ifdef ICMP_BANDLIM
112+
extern boolean_t badport_bandlim(int which);
113+
#endif
114+
#define BANDLIM_ICMP_UNREACH 0
115+
#define BANDLIM_ICMP_ECHO 1
116+
#define BANDLIM_ICMP_TSTAMP 2
117+
#define BANDLIM_MAX 4
118+
119+
extern struct icmpstat icmpstat;
120+
#endif /* BSD_KERNEL_PRIVATE */
121+
#endif /* _NETINET_ICMP_VAR_H_ */

0 commit comments

Comments
 (0)