chromium/third_party/grpc/src/src/core/lib/iomgr/port.h

//
//
// Copyright 2016 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//
#ifndef GRPC_SRC_CORE_LIB_IOMGR_PORT_H
#define GRPC_SRC_CORE_LIB_IOMGR_PORT_H

#include <grpc/support/port_platform.h>

// IWYU pragma: no_include <features.h>
// IWYU pragma: no_include <linux/version.h>

// This needs to be separate from the other conditions because it needs to
// apply to custom sockets too
#ifdef GPR_WINDOWS
#define GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
#endif
#if defined(GPR_WINDOWS)
#define GRPC_WINSOCK_SOCKET
#define GRPC_WINDOWS_SOCKETUTILS
#define GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER
#elif defined(GPR_ANDROID)
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_IP_PKTINFO
#define GRPC_HAVE_MSG_NOSIGNAL
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_LINUX_EVENTFD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_LINUX)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_IP_PKTINFO
#define GRPC_HAVE_MSG_NOSIGNAL
#define GRPC_HAVE_UNIX_SOCKET
// Linux has TCP_INQ support since 4.18, but it is safe to set
// the socket option on older kernels.
#define GRPC_HAVE_TCP_INQ
#ifdef LINUX_VERSION_CODE
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
#define GRPC_LINUX_ERRQUEUE
#endif  // LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
#endif  // LINUX_VERSION_CODE
#define GRPC_LINUX_MULTIPOLL_WITH_EPOLL
#define GRPC_POSIX_FORK
#define GRPC_POSIX_HOST_NAME_MAX
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_WAKEUP_FD
#ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 4)
#define GRPC_LINUX_EPOLL
#endif
#if __GLIBC_PREREQ(2, 9)
#define GRPC_LINUX_EPOLL_CREATE1
#define GRPC_LINUX_EVENTFD
#endif
#if __GLIBC_PREREQ(2, 10)
#define GRPC_LINUX_SOCKETUTILS
#endif
#if !(__GLIBC_PREREQ(2, 18))
//
// TCP_USER_TIMEOUT wasn't imported to glibc until 2.18. Use Linux system
// header instead.
//
#define GRPC_LINUX_TCP_H
#endif  // __GLIBC_PREREQ(2, 17)
#endif
#ifndef __GLIBC__
#define GRPC_LINUX_EPOLL
#define GRPC_LINUX_EPOLL_CREATE1
#define GRPC_LINUX_EVENTFD
#define GRPC_MSG_IOVLEN_TYPE
#endif
#ifndef GRPC_LINUX_EVENTFD
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#endif
#ifndef GRPC_LINUX_SOCKETUTILS
#define GRPC_POSIX_SOCKETUTILS
#endif
#elif defined(GPR_APPLE)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_SO_NOSIGPIPE
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_MSG_IOVLEN_TYPE
#define GRPC_POSIX_FORK
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#ifdef GRPC_CFSTREAM
#define GRPC_CFSTREAM_IOMGR
#define GRPC_CFSTREAM_CLIENT
#define GRPC_CFSTREAM_ENDPOINT
#define GRPC_APPLE_EV
#define GRPC_POSIX_SOCKET_ARES_EV_DRIVER
#define GRPC_POSIX_SOCKET_EV
#define GRPC_POSIX_SOCKET_EV_EPOLL1
#define GRPC_POSIX_SOCKET_EV_POLL
#define GRPC_POSIX_SOCKET_IF_NAMETOINDEX
#define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
#define GRPC_POSIX_SOCKET_SOCKADDR
#define GRPC_POSIX_SOCKET_SOCKET_FACTORY
#define GRPC_POSIX_SOCKET_TCP
#define GRPC_POSIX_SOCKET_TCP_CLIENT
#define GRPC_POSIX_SOCKET_TCP_SERVER
#define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
#define GRPC_POSIX_SOCKET_UDP_SERVER
#define GRPC_POSIX_SOCKET_UTILS_COMMON
#else
#define GRPC_POSIX_SOCKET
#endif
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_SYSCONF
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_FREEBSD)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_SO_NOSIGPIPE
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_FORK
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_OPENBSD)
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_SOLARIS)
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_AIX)
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_NETBSD)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_SO_NOSIGPIPE
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_FORK
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_NACL)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif defined(GPR_FUCHSIA)
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_IP_PKTINFO
// Zircon does not support the MSG_NOSIGNAL flag since it doesn't support
// signals.
#undef GRPC_HAVE_MSG_NOSIGNAL
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_WAKEUP_FD
// TODO(rudominer) Check that this does something we want.
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETADDR
// TODO(rudominer) Check this does something we want.
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_TIMER_USE_GENERIC
#elif defined(GPR_HAIKU)
#define GRPC_HAVE_ARPA_NAMESER
#define GRPC_HAVE_IFADDRS
#define GRPC_HAVE_IPV6_RECVPKTINFO
#define GRPC_HAVE_UNIX_SOCKET
#define GRPC_POSIX_FORK
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
#define GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKETUTILS
#define GRPC_POSIX_WAKEUP_FD
#elif !defined(GPR_NO_AUTODETECT_PLATFORM)
#error "Platform not recognized"
#endif

#if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
        defined(GRPC_CFSTREAM) !=                               \
    1
#error \
    "Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CFSTREAM"
#endif

#ifdef GRPC_POSIX_SOCKET
#define GRPC_POSIX_SOCKET_ARES_EV_DRIVER
#define GRPC_POSIX_SOCKET_EV
#define GRPC_POSIX_SOCKET_EV_POLL
#define GRPC_POSIX_SOCKET_EV_EPOLL1
#define GRPC_POSIX_SOCKET_IF_NAMETOINDEX
#define GRPC_POSIX_SOCKET_IOMGR
#define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
#define GRPC_POSIX_SOCKET_SOCKADDR
#define GRPC_POSIX_SOCKET_SOCKET_FACTORY
#define GRPC_POSIX_SOCKET_TCP
#define GRPC_POSIX_SOCKET_TCP_CLIENT
#define GRPC_POSIX_SOCKET_TCP_SERVER
#define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
#define GRPC_POSIX_SOCKET_UDP_SERVER
#define GRPC_POSIX_SOCKET_UTILS_COMMON
#endif

#if defined(GRPC_POSIX_HOST_NAME_MAX) && defined(GRPC_POSIX_SYSCONF)
#error "Cannot define both GRPC_POSIX_HOST_NAME_MAX and GRPC_POSIX_SYSCONF"
#endif
#if !defined(GRPC_POSIX_HOST_NAME_MAX) && !defined(GRPC_POSIX_SYSCONF)
#define GRPC_GETHOSTNAME_FALLBACK
#endif

#endif  // GRPC_SRC_CORE_LIB_IOMGR_PORT_H