• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_SRC_CORE_LIB_IOMGR_PORT_H
19 #define GRPC_SRC_CORE_LIB_IOMGR_PORT_H
20 
21 #include <grpc/support/port_platform.h>
22 
23 // IWYU pragma: no_include <features.h>
24 // IWYU pragma: no_include <linux/version.h>
25 
26 // This needs to be separate from the other conditions because it needs to
27 // apply to custom sockets too
28 #ifdef GPR_WINDOWS
29 #define GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY 1
30 #endif
31 #if defined(GPR_WINDOWS)
32 #define GRPC_WINSOCK_SOCKET 1
33 #ifndef __MINGW32__
34 #define GRPC_HAVE_UNIX_SOCKET 1
35 #endif  // __MINGW32__
36 #define GRPC_WINDOWS_SOCKETUTILS 1
37 #define GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER 1
38 #elif defined(GPR_ANDROID)
39 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
40 #define GRPC_HAVE_IP_PKTINFO 1
41 #define GRPC_HAVE_MSG_NOSIGNAL 1
42 #define GRPC_HAVE_UNIX_SOCKET 1
43 #if defined(LINUX_VERSION_CODE) && defined(__NDK_MAJOR__)
44 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) && __NDK_MAJOR__ >= 14
45 #define GRPC_HAVE_VSOCK 1
46 #endif
47 #endif
48 #define GRPC_LINUX_EVENTFD 1
49 #define GRPC_POSIX_SOCKET 1
50 #define GRPC_POSIX_SOCKETUTILS 1
51 #define GRPC_POSIX_WAKEUP_FD 1
52 #elif defined(GPR_LINUX)
53 #define GRPC_HAVE_ARPA_NAMESER 1
54 #define GRPC_HAVE_IFADDRS 1
55 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
56 #define GRPC_HAVE_IP_PKTINFO 1
57 #define GRPC_HAVE_MSG_NOSIGNAL 1
58 #define GRPC_HAVE_UNIX_SOCKET 1
59 // Linux has TCP_INQ support since 4.18, but it is safe to set
60 // the socket option on older kernels.
61 #define GRPC_HAVE_TCP_INQ 1
62 #ifdef LINUX_VERSION_CODE
63 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
64 #define GRPC_LINUX_ERRQUEUE 1
65 #endif  // LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
66 #endif  // LINUX_VERSION_CODE
67 #if defined(LINUX_VERSION_CODE) && defined(__GLIBC_PREREQ)
68 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) && __GLIBC_PREREQ(2, 18)
69 #define GRPC_HAVE_VSOCK 1
70 #endif
71 #endif
72 #define GRPC_LINUX_MULTIPOLL_WITH_EPOLL 1
73 #define GRPC_POSIX_FORK 1
74 #define GRPC_POSIX_HOST_NAME_MAX 1
75 #define GRPC_POSIX_SOCKET 1
76 #define GRPC_POSIX_WAKEUP_FD 1
77 #ifdef __GLIBC_PREREQ
78 #if __GLIBC_PREREQ(2, 4)
79 #define GRPC_LINUX_EPOLL 1
80 #endif
81 #if __GLIBC_PREREQ(2, 9)
82 #define GRPC_LINUX_EPOLL_CREATE1 1
83 #define GRPC_LINUX_EVENTFD 1
84 #endif
85 #if __GLIBC_PREREQ(2, 10)
86 #define GRPC_LINUX_SOCKETUTILS 1
87 #endif
88 #if !(__GLIBC_PREREQ(2, 18))
89 //
90 // TCP_USER_TIMEOUT wasn't imported to glibc until 2.18. Use Linux system
91 // header instead.
92 //
93 #define GRPC_LINUX_TCP_H 1
94 #endif  // __GLIBC_PREREQ(2, 17)
95 #endif
96 #ifndef __GLIBC__
97 #define GRPC_LINUX_EPOLL 1
98 #define GRPC_LINUX_EPOLL_CREATE1 1
99 #define GRPC_LINUX_EVENTFD 1
100 #define GRPC_MSG_IOVLEN_TYPE int
101 #endif
102 #ifndef GRPC_LINUX_EVENTFD
103 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
104 #endif
105 #ifndef GRPC_LINUX_SOCKETUTILS
106 #define GRPC_POSIX_SOCKETUTILS
107 #endif
108 #elif defined(GPR_APPLE)
109 #define GRPC_HAVE_ARPA_NAMESER 1
110 #define GRPC_HAVE_IFADDRS 1
111 #define GRPC_HAVE_SO_NOSIGPIPE 1
112 #define GRPC_HAVE_UNIX_SOCKET 1
113 #define GRPC_MSG_IOVLEN_TYPE int
114 #define GRPC_POSIX_FORK 1
115 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
116 #ifdef GRPC_CFSTREAM
117 #define GRPC_CFSTREAM_IOMGR 1
118 #define GRPC_CFSTREAM_CLIENT 1
119 #define GRPC_CFSTREAM_ENDPOINT 1
120 #define GRPC_APPLE_EV 1
121 #define GRPC_POSIX_SOCKET_ARES_EV_DRIVER 1
122 #define GRPC_POSIX_SOCKET_EV 1
123 #define GRPC_POSIX_SOCKET_EV_EPOLL1 1
124 #define GRPC_POSIX_SOCKET_EV_POLL 1
125 #define GRPC_POSIX_SOCKET_IF_NAMETOINDEX 1
126 #define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS 1
127 #define GRPC_POSIX_SOCKET_SOCKADDR 1
128 #define GRPC_POSIX_SOCKET_SOCKET_FACTORY 1
129 #define GRPC_POSIX_SOCKET_TCP 1
130 #define GRPC_POSIX_SOCKET_TCP_CLIENT 1
131 #define GRPC_POSIX_SOCKET_TCP_SERVER 1
132 #define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON 1
133 #define GRPC_POSIX_SOCKET_UDP_SERVER 1
134 #define GRPC_POSIX_SOCKET_UTILS_COMMON 1
135 #else
136 #define GRPC_POSIX_SOCKET 1
137 #endif
138 #define GRPC_POSIX_SOCKETUTILS 1
139 #define GRPC_POSIX_SYSCONF 1
140 #define GRPC_POSIX_WAKEUP_FD 1
141 #elif defined(GPR_FREEBSD)
142 #define GRPC_HAVE_ARPA_NAMESER 1
143 #define GRPC_HAVE_IFADDRS 1
144 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
145 #define GRPC_HAVE_SO_NOSIGPIPE 1
146 #define GRPC_HAVE_UNIX_SOCKET 1
147 #define GRPC_POSIX_FORK 1
148 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
149 #define GRPC_POSIX_SOCKET 1
150 #define GRPC_POSIX_SOCKETUTILS 1
151 #define GRPC_POSIX_WAKEUP_FD 1
152 #elif defined(GPR_OPENBSD)
153 #define GRPC_HAVE_IFADDRS 1
154 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
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_SOLARIS)
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_AIX)
167 #define GRPC_HAVE_UNIX_SOCKET 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_NETBSD)
173 #define GRPC_HAVE_ARPA_NAMESER 1
174 #define GRPC_HAVE_IFADDRS 1
175 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
176 #define GRPC_HAVE_SO_NOSIGPIPE 1
177 #define GRPC_HAVE_UNIX_SOCKET 1
178 #define GRPC_POSIX_FORK 1
179 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
180 #define GRPC_POSIX_SOCKET 1
181 #define GRPC_POSIX_SOCKETUTILS 1
182 #define GRPC_POSIX_WAKEUP_FD 1
183 #elif defined(GPR_NACL)
184 #define GRPC_HAVE_ARPA_NAMESER 1
185 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
186 #define GRPC_POSIX_SOCKET 1
187 #define GRPC_POSIX_SOCKETUTILS 1
188 #define GRPC_POSIX_WAKEUP_FD 1
189 #elif defined(GPR_FUCHSIA)
190 #define GRPC_HAVE_IFADDRS 1
191 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
192 #define GRPC_HAVE_IP_PKTINFO 1
193 // Zircon does not support the MSG_NOSIGNAL flag since it doesn't support
194 // signals.
195 #undef GRPC_HAVE_MSG_NOSIGNAL
196 #define GRPC_HAVE_UNIX_SOCKET 1
197 #define GRPC_POSIX_WAKEUP_FD 1
198 // TODO(rudominer) Check that this does something we want.
199 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
200 #define GRPC_POSIX_SOCKET 1
201 #define GRPC_POSIX_SOCKETADDR 1
202 // TODO(rudominer) Check this does something we want.
203 #define GRPC_POSIX_SOCKETUTILS 1
204 #define GRPC_TIMER_USE_GENERIC 1
205 #elif defined(GPR_HAIKU)
206 #define GRPC_HAVE_ARPA_NAMESER 1
207 #define GRPC_HAVE_IFADDRS 1
208 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
209 #define GRPC_HAVE_UNIX_SOCKET 1
210 #define GRPC_POSIX_FORK 1
211 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
212 #define GRPC_POSIX_SOCKET 1
213 #define GRPC_POSIX_SOCKETUTILS 1
214 #define GRPC_POSIX_WAKEUP_FD 1
215 #elif defined(__QNX__) || defined(__QNXNTO__)
216 #define GRPC_HAVE_ARPA_NAMESER 1
217 #define GRPC_HAVE_IFADDRS 1
218 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
219 #define GRPC_HAVE_IP_PKTINFO 1
220 #define GRPC_HAVE_MSG_NOSIGNAL 1
221 #define GRPC_HAVE_UNIX_SOCKET 1
222 // TODO(rbyshliaha): Find a way to understand if VSOCK package is installed in
223 //                   a toolchain to enable GRPC_HAVE_VSOCK.
224 #define GRPC_POSIX_SOCKET 1
225 #define GRPC_POSIX_WAKEUP_FD 1
226 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
227 #define GRPC_POSIX_SOCKETUTILS 1
228 #define GRPC_POSIX_SYSCONF 1
229 #elif !defined(GPR_NO_AUTODETECT_PLATFORM)
230 #error "Platform not recognized"
231 #endif
232 
233 #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
234         defined(GRPC_CFSTREAM) !=                               \
235     1
236 #error \
237     "Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CFSTREAM"
238 #endif
239 
240 #ifdef GRPC_POSIX_SOCKET
241 #define GRPC_POSIX_SOCKET_ARES_EV_DRIVER 1
242 #define GRPC_POSIX_SOCKET_EV 1
243 #define GRPC_POSIX_SOCKET_EV_POLL 1
244 #define GRPC_POSIX_SOCKET_EV_EPOLL1 1
245 #define GRPC_POSIX_SOCKET_IF_NAMETOINDEX 1
246 #define GRPC_POSIX_SOCKET_IOMGR 1
247 #define GRPC_POSIX_SOCKET_RESOLVE_ADDRESS 1
248 #define GRPC_POSIX_SOCKET_SOCKADDR 1
249 #define GRPC_POSIX_SOCKET_SOCKET_FACTORY 1
250 #define GRPC_POSIX_SOCKET_TCP 1
251 #define GRPC_POSIX_SOCKET_TCP_CLIENT 1
252 #define GRPC_POSIX_SOCKET_TCP_SERVER 1
253 #define GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON 1
254 #define GRPC_POSIX_SOCKET_UDP_SERVER 1
255 #define GRPC_POSIX_SOCKET_UTILS_COMMON 1
256 #endif
257 
258 #if defined(GRPC_POSIX_HOST_NAME_MAX) && defined(GRPC_POSIX_SYSCONF)
259 #error "Cannot define both GRPC_POSIX_HOST_NAME_MAX and GRPC_POSIX_SYSCONF"
260 #endif
261 #if !defined(GRPC_POSIX_HOST_NAME_MAX) && !defined(GRPC_POSIX_SYSCONF)
262 #define GRPC_GETHOSTNAME_FALLBACK 1
263 #endif
264 
265 #endif  // GRPC_SRC_CORE_LIB_IOMGR_PORT_H
266