5f14cd6b9101d68a6dd0a03376021f8fe7cb1380
[platform/upstream/grpc.git] / src / core / lib / iomgr / port.h
1 /*
2  *
3  * Copyright 2016 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 #ifndef GRPC_CORE_LIB_IOMGR_PORT_H
19 #define GRPC_CORE_LIB_IOMGR_PORT_H
20
21 #include <grpc/support/port_platform.h>
22
23 #ifdef GRPC_UV
24 #ifndef GRPC_CUSTOM_SOCKET
25 #define GRPC_CUSTOM_SOCKET
26 #endif
27 #endif
28 /* This needs to be separate from the other conditions because it needs to
29  * apply to custom sockets too */
30 #ifdef GPR_WINDOWS
31 #define GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY 1
32 #endif
33 #if defined(GRPC_CUSTOM_SOCKET)
34 // Do Nothing
35 #elif defined(GRPC_USE_EVENT_ENGINE)
36 // Do Nothing
37 #elif defined(GPR_WINDOWS)
38 #define GRPC_WINSOCK_SOCKET 1
39 #define GRPC_WINDOWS_SOCKETUTILS 1
40 #define GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER 1
41 #elif defined(GPR_ANDROID)
42 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
43 #define GRPC_HAVE_IP_PKTINFO 1
44 #define GRPC_HAVE_MSG_NOSIGNAL 1
45 #define GRPC_HAVE_UNIX_SOCKET 1
46 #define GRPC_LINUX_EVENTFD 1
47 #define GRPC_POSIX_SOCKET 1
48 #define GRPC_POSIX_SOCKETUTILS 1
49 #define GRPC_POSIX_WAKEUP_FD 1
50 #elif defined(GPR_LINUX)
51 #define GRPC_HAVE_ARPA_NAMESER 1
52 #define GRPC_HAVE_IFADDRS 1
53 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
54 #define GRPC_HAVE_IP_PKTINFO 1
55 #define GRPC_HAVE_MSG_NOSIGNAL 1
56 #define GRPC_HAVE_UNIX_SOCKET 1
57 /* Linux has TCP_INQ support since 4.18, but it is safe to set
58    the socket option on older kernels. */
59 #define GRPC_HAVE_TCP_INQ 1
60 #ifdef LINUX_VERSION_CODE
61 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
62 #define GRPC_LINUX_ERRQUEUE 1
63 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0) */
64 #endif /* LINUX_VERSION_CODE */
65 #define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1
66 #define GRPC_POSIX_FORK 1
67 #define GRPC_POSIX_HOST_NAME_MAX 1
68 #define GRPC_POSIX_SOCKET 1
69 #define GRPC_POSIX_WAKEUP_FD 1
70 #ifdef __GLIBC_PREREQ
71 #if __GLIBC_PREREQ(2, 4)
72 #define GRPC_LINUX_EPOLL 1
73 #endif
74 #if __GLIBC_PREREQ(2, 9)
75 #define GRPC_LINUX_EPOLL_CREATE1 1
76 #define GRPC_LINUX_EVENTFD 1
77 #endif
78 #if __GLIBC_PREREQ(2, 10)
79 #define GRPC_LINUX_SOCKETUTILS 1
80 #endif
81 #if !(__GLIBC_PREREQ(2, 17))
82 /*
83  * TCP_USER_TIMEOUT wasn't imported to glibc until 2.17. Use Linux system
84  * header instead.
85  */
86 #define GRPC_LINUX_TCP_H 1
87 #endif /* __GLIBC_PREREQ(2, 17) */
88 #endif
89 #ifndef __GLIBC__
90 #define GRPC_LINUX_EPOLL 1
91 #define GRPC_LINUX_EPOLL_CREATE1 1
92 #define GRPC_LINUX_EVENTFD 1
93 #define GRPC_MSG_IOVLEN_TYPE int
94 #endif
95 #ifndef GRPC_LINUX_EVENTFD
96 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
97 #endif
98 #ifndef GRPC_LINUX_SOCKETUTILS
99 #define GRPC_POSIX_SOCKETUTILS
100 #endif
101 #elif defined(GPR_APPLE)
102 #define GRPC_HAVE_ARPA_NAMESER 1
103 #define GRPC_HAVE_IFADDRS 1
104 #define GRPC_HAVE_SO_NOSIGPIPE 1
105 #define GRPC_HAVE_UNIX_SOCKET 1
106 #define GRPC_MSG_IOVLEN_TYPE int
107 #define GRPC_POSIX_FORK 1
108 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
109 #ifdef GRPC_CFSTREAM
110 #define GRPC_CFSTREAM_IOMGR 1
111 #define GRPC_CFSTREAM_CLIENT 1
112 #define GRPC_CFSTREAM_ENDPOINT 1
113 #define GRPC_APPLE_EV 1
114 #define GRPC_POSIX_SOCKET_ARES_EV_DRIVER 1
115 #define GRPC_POSIX_SOCKET_EV 1
116 #define GRPC_POSIX_SOCKET_EV_EPOLL1 1
117 #define GRPC_POSIX_SOCKET_EV_EPOLLEX 1
118 #define GRPC_POSIX_SOCKET_EV_POLL 1
119 #define GRPC_POSIX_SOCKET_IF_NAMETOINDEX 1
120 #define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS 1
121 #define GRPC_POSIX_SOCKET_SOCKADDR 1
122 #define GRPC_POSIX_SOCKET_SOCKET_FACTORY 1
123 #define GRPC_POSIX_SOCKET_TCP 1
124 #define GRPC_POSIX_SOCKET_TCP_CLIENT 1
125 #define GRPC_POSIX_SOCKET_TCP_SERVER 1
126 #define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON 1
127 #define GRPC_POSIX_SOCKET_UDP_SERVER 1
128 #define GRPC_POSIX_SOCKET_UTILS_COMMON 1
129 #else
130 #define GRPC_POSIX_SOCKET 1
131 #endif
132 #define GRPC_POSIX_SOCKETUTILS 1
133 #define GRPC_POSIX_SYSCONF 1
134 #define GRPC_POSIX_WAKEUP_FD 1
135 #elif defined(GPR_FREEBSD)
136 #define GRPC_HAVE_ARPA_NAMESER 1
137 #define GRPC_HAVE_IFADDRS 1
138 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
139 #define GRPC_HAVE_SO_NOSIGPIPE 1
140 #define GRPC_HAVE_UNIX_SOCKET 1
141 #define GRPC_POSIX_FORK 1
142 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
143 #define GRPC_POSIX_SOCKET 1
144 #define GRPC_POSIX_SOCKETUTILS 1
145 #define GRPC_POSIX_WAKEUP_FD 1
146 #elif defined(GPR_OPENBSD)
147 #define GRPC_HAVE_IFADDRS 1
148 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
149 #define GRPC_HAVE_UNIX_SOCKET 1
150 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
151 #define GRPC_POSIX_SOCKET 1
152 #define GRPC_POSIX_SOCKETUTILS 1
153 #define GRPC_POSIX_WAKEUP_FD 1
154 #elif defined(GPR_SOLARIS)
155 #define GRPC_HAVE_UNIX_SOCKET 1
156 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
157 #define GRPC_POSIX_SOCKET 1
158 #define GRPC_POSIX_SOCKETUTILS 1
159 #define GRPC_POSIX_WAKEUP_FD 1
160 #elif defined(GPR_AIX)
161 #define GRPC_HAVE_UNIX_SOCKET 1
162 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
163 #define GRPC_POSIX_SOCKET 1
164 #define GRPC_POSIX_SOCKETUTILS 1
165 #define GRPC_POSIX_WAKEUP_FD 1
166 #elif defined(GPR_NACL)
167 #define GRPC_HAVE_ARPA_NAMESER 1
168 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
169 #define GRPC_POSIX_SOCKET 1
170 #define GRPC_POSIX_SOCKETUTILS 1
171 #define GRPC_POSIX_WAKEUP_FD 1
172 #elif defined(GPR_FUCHSIA)
173 #define GRPC_HAVE_IFADDRS 1
174 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
175 #define GRPC_HAVE_IP_PKTINFO 1
176 // Zircon does not support the MSG_NOSIGNAL flag since it doesn't support
177 // signals.
178 #undef GRPC_HAVE_MSG_NOSIGNAL
179 #define GRPC_HAVE_UNIX_SOCKET 1
180 #define GRPC_POSIX_WAKEUP_FD 1
181 // TODO(rudominer) Check that this does something we want.
182 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
183 #define GRPC_POSIX_SOCKET 1
184 #define GRPC_POSIX_SOCKETADDR 1
185 // TODO(rudominer) Check this does something we want.
186 #define GRPC_POSIX_SOCKETUTILS 1
187 #define GRPC_TIMER_USE_GENERIC 1
188 #elif !defined(GPR_NO_AUTODETECT_PLATFORM)
189 #error "Platform not recognized"
190 #endif
191
192 #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
193         defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_CFSTREAM) +  \
194         defined(GRPC_USE_EVENT_ENGINE) !=                       \
195     1
196 #error \
197     "Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CUSTOM_SOCKET, GRPC_CFSTREAM, GRPC_USE_EVENT_ENGINE"
198 #endif
199
200 #ifdef GRPC_POSIX_SOCKET
201 #define GRPC_POSIX_SOCKET_ARES_EV_DRIVER 1
202 #define GRPC_POSIX_SOCKET_EV 1
203 #define GRPC_POSIX_SOCKET_EV_EPOLLEX 1
204 #define GRPC_POSIX_SOCKET_EV_POLL 1
205 #define GRPC_POSIX_SOCKET_EV_EPOLL1 1
206 #define GRPC_POSIX_SOCKET_IF_NAMETOINDEX 1
207 #define GRPC_POSIX_SOCKET_IOMGR 1
208 #define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS 1
209 #define GRPC_POSIX_SOCKET_SOCKADDR 1
210 #define GRPC_POSIX_SOCKET_SOCKET_FACTORY 1
211 #define GRPC_POSIX_SOCKET_TCP 1
212 #define GRPC_POSIX_SOCKET_TCP_CLIENT 1
213 #define GRPC_POSIX_SOCKET_TCP_SERVER 1
214 #define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON 1
215 #define GRPC_POSIX_SOCKET_UDP_SERVER 1
216 #define GRPC_POSIX_SOCKET_UTILS_COMMON 1
217 #endif
218
219 #if defined(GRPC_POSIX_HOST_NAME_MAX) && defined(GRPC_POSIX_SYSCONF)
220 #error "Cannot define both GRPC_POSIX_HOST_NAME_MAX and GRPC_POSIX_SYSCONF"
221 #endif
222 #if !defined(GRPC_POSIX_HOST_NAME_MAX) && !defined(GRPC_POSIX_SYSCONF)
223 #define GRPC_GETHOSTNAME_FALLBACK 1
224 #endif
225
226 #endif /* GRPC_CORE_LIB_IOMGR_PORT_H */