Make QUICHE compile for MacOS
This fixes all of the compile issues. There are still unit tests that do not pass; those will be addressed separately.
PiperOrigin-RevId: 493000948
diff --git a/quiche/quic/core/quic_udp_socket_posix.cc b/quiche/quic/core/quic_udp_socket_posix.cc
index 248fee3..5335723 100644
--- a/quiche/quic/core/quic_udp_socket_posix.cc
+++ b/quiche/quic/core/quic_udp_socket_posix.cc
@@ -2,6 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#if defined(__APPLE__) && !defined(__APPLE_USE_RFC_3542)
+// This must be defined before including any system headers.
+#define __APPLE_USE_RFC_3542
+#endif // defined(__APPLE__) && !defined(__APPLE_USE_RFC_3542)
+
#include <arpa/inet.h>
#include <fcntl.h>
#include <net/if.h>
diff --git a/quiche/quic/masque/masque_utils.cc b/quiche/quic/masque/masque_utils.cc
index b432a7a..548f62b 100644
--- a/quiche/quic/masque/masque_utils.cc
+++ b/quiche/quic/masque/masque_utils.cc
@@ -4,10 +4,12 @@
#include "quiche/quic/masque/masque_utils.h"
+#if defined(__linux__)
#include <fcntl.h>
#include <linux/if.h>
#include <linux/if_tun.h>
#include <sys/ioctl.h>
+#endif // defined(__linux__)
namespace quic {
@@ -48,6 +50,7 @@
return os;
}
+#if defined(__linux__)
int CreateTunInterface(const QuicIpAddress& client_address, bool server) {
if (!client_address.IsIPv4()) {
QUIC_LOG(ERROR) << "CreateTunInterface currently only supports IPv4";
@@ -136,5 +139,12 @@
}
return -1;
}
+#else
+int CreateTunInterface(const QuicIpAddress& /*client_address*/,
+ bool /*server*/) {
+ // Unsupported.
+ return -1;
+}
+#endif // defined(__linux__)
} // namespace quic
diff --git a/quiche/quic/tools/quic_server.cc b/quiche/quic/tools/quic_server.cc
index aace378..738d8c9 100644
--- a/quiche/quic/tools/quic_server.cc
+++ b/quiche/quic/tools/quic_server.cc
@@ -125,9 +125,8 @@
overflow_supported_ = socket_api.EnableDroppedPacketCount(fd_);
socket_api.EnableReceiveTimestamp(fd_);
- sockaddr_storage addr = address.generic_address();
- int rc = bind(fd_, reinterpret_cast<sockaddr*>(&addr), sizeof(addr));
- if (rc < 0) {
+ bool success = socket_api.Bind(fd_, address);
+ if (!success) {
QUIC_LOG(ERROR) << "Bind failed: " << strerror(errno);
return false;
}
diff --git a/quiche/quic/tools/quic_server_test.cc b/quiche/quic/tools/quic_server_test.cc
index 26075a1..facd42e 100644
--- a/quiche/quic/tools/quic_server_test.cc
+++ b/quiche/quic/tools/quic_server_test.cc
@@ -146,18 +146,21 @@
DoAll(testing::Assign(&more_chlos, false), testing::Return(false)));
// Send a packet to trigger epoll event.
- int fd = socket(
- AddressFamilyUnderTest() == IpAddressFamily::IP_V4 ? AF_INET : AF_INET6,
- SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP);
- ASSERT_LT(0, fd);
+ QuicUdpSocketApi socket_api;
+ SocketFd fd =
+ socket_api.Create(server_address_.host().AddressFamilyToInt(),
+ /*receive_buffer_size =*/kDefaultSocketReceiveBuffer,
+ /*send_buffer_size =*/kDefaultSocketReceiveBuffer);
+ ASSERT_NE(fd, kQuicInvalidSocketFd);
char buf[1024];
memset(buf, 0, ABSL_ARRAYSIZE(buf));
- sockaddr_storage storage = server_address_.generic_address();
- int rc = sendto(fd, buf, ABSL_ARRAYSIZE(buf), 0,
- reinterpret_cast<sockaddr*>(&storage), sizeof(storage));
- if (rc < 0) {
- QUIC_DLOG(INFO) << errno << " " << strerror(errno);
+ QuicUdpPacketInfo packet_info;
+ packet_info.SetPeerAddress(server_address_);
+ WriteResult result =
+ socket_api.WritePacket(fd, buf, sizeof(buf), packet_info);
+ if (result.status != WRITE_STATUS_OK) {
+ QUIC_LOG(ERROR) << "Write error for UDP packet: " << result.error_code;
}
while (more_chlos) {