Commit 298fd164 authored by Renjie Tang's avatar Renjie Tang Committed by Commit Bot

Remove Apple specific socket code for getting IPv4 address.

This code is no longer needed and breaks ARM mac.

MacOS added support for the Linux-style socket option
sometime between 2008 and 2010 (see links below) and
Chrome currently only supports macOS versions as far
back as Yosemite which was released in 2014, and
iOS 10 which was released in 2016. So we are safe to
remove this workaround which was added in 2013.

https://opensource.apple.com/source/xnu/xnu-1504.9.37/bsd/netinet/in.h
https://opensource.apple.com/source/xnu/xnu-1699.22.73/bsd/netinet/in.h
https://codereview.chromium.org/99923004/diff/200001/net/udp/udp_socket_libevent.cc

Change-Id: Ib67ec88aa618b977fe1f64a4862edda8c8ffefe1

Bug: 1128459
Change-Id: Ib67ec88aa618b977fe1f64a4862edda8c8ffefe1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2415193
Commit-Queue: Renjie Tang <renjietang@chromium.org>
Reviewed-by: default avatarDavid Schinazi <dschinazi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#808015}
parent bb9db2d0
......@@ -70,37 +70,6 @@ const int kActivityMonitorMinimumSamplesForThroughputEstimate = 2;
const base::TimeDelta kActivityMonitorMsThreshold =
base::TimeDelta::FromMilliseconds(100);
#if defined(OS_APPLE)
// When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
// requires passing IPv4 address instead of interface index. This function
// resolves IPv4 address by interface index. The |address| is returned in
// network order.
int GetIPv4AddressFromIndex(int socket, uint32_t index, uint32_t* address) {
if (!index) {
*address = htonl(INADDR_ANY);
return OK;
}
sockaddr_in* result = nullptr;
ifreq ifr;
ifr.ifr_addr.sa_family = AF_INET;
if (!if_indextoname(index, ifr.ifr_name))
return MapSystemError(errno);
int rv = ioctl(socket, SIOCGIFADDR, &ifr);
if (rv == -1)
return MapSystemError(errno);
result = reinterpret_cast<sockaddr_in*>(&ifr.ifr_addr);
if (!result)
return ERR_ADDRESS_INVALID;
*address = result->sin_addr.s_addr;
return OK;
}
#endif // OS_APPLE
#if defined(OS_MAC)
// On OSX the file descriptor is guarded to detect the cause of
......@@ -944,17 +913,9 @@ int UDPSocketPosix::SetMulticastOptions() {
if (multicast_interface_ != 0) {
switch (addr_family_) {
case AF_INET: {
#if defined(OS_APPLE)
ip_mreq mreq = {};
int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
&mreq.imr_interface.s_addr);
if (error != OK)
return error;
#else // defined(OS_APPLE)
ip_mreqn mreq = {};
mreq.imr_ifindex = multicast_interface_;
mreq.imr_address.s_addr = htonl(INADDR_ANY);
#endif // !defined(OS_APPLE)
int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
reinterpret_cast<const char*>(&mreq), sizeof(mreq));
if (rv)
......@@ -1017,18 +978,9 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_address) const {
case IPAddress::kIPv4AddressSize: {
if (addr_family_ != AF_INET)
return ERR_ADDRESS_INVALID;
#if defined(OS_APPLE)
ip_mreq mreq = {};
int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
&mreq.imr_interface.s_addr);
if (error != OK)
return error;
#else
ip_mreqn mreq = {};
mreq.imr_ifindex = multicast_interface_;
mreq.imr_address.s_addr = htonl(INADDR_ANY);
#endif
memcpy(&mreq.imr_multiaddr, group_address.bytes().data(),
IPAddress::kIPv4AddressSize);
int rv = setsockopt(socket_, IPPROTO_IP, IP_ADD_MEMBERSHIP,
......
......@@ -470,9 +470,10 @@ TEST_P(URLRequestQuicTest, CancelPushIfCached_SomeCached) {
EXPECT_TRUE(end_entry_2->HasParams());
EXPECT_EQ(-400, GetNetErrorCodeFromParams(*end_entry_2));
#if !defined(OS_FUCHSIA) && !defined(OS_IOS)
#if !defined(OS_FUCHSIA) && !defined(OS_IOS) && !defined(OS_APPLE)
// TODO(crbug.com/813631): Make this work on Fuchsia.
// TODO(crbug.com/1032568): Make this work on iOS.
// TODO(crbug.com/1128459): Turn this on for ARM mac.
// Wait until the server has processed all errors which is
// happening asynchronously
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment