1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_TAG "OsConstants"
18
19#include "JNIHelp.h"
20#include "JniConstants.h"
21#include "Portability.h"
22
23#include <errno.h>
24#include <fcntl.h>
25#include <netdb.h>
26#include <netinet/icmp6.h>
27#include <netinet/in.h>
28#include <netinet/ip_icmp.h>
29#include <netinet/tcp.h>
30#include <poll.h>
31#include <signal.h>
32#include <stdlib.h>
33#include <sys/ioctl.h>
34#include <sys/mman.h>
35#include <sys/prctl.h>
36#include <sys/socket.h>
37#include <sys/stat.h>
38#include <sys/un.h>
39#include <sys/wait.h>
40#include <sys/xattr.h>
41#include <unistd.h>
42
43#include <net/if_arp.h>
44#include <linux/if_ether.h>
45
46// After the others because these are not necessarily self-contained in glibc.
47#include <linux/if_addr.h>
48#include <linux/rtnetlink.h>
49
50// Include linux socket constants for setting sockopts
51#include <linux/udp.h>
52
53#include <net/if.h> // After <sys/socket.h> to work around a Mac header file bug.
54
55#if defined(__BIONIC__)
56#include <linux/capability.h>
57#endif
58
59static void initConstant(JNIEnv* env, jclass c, const char* fieldName, int value) {
60    jfieldID field = env->GetStaticFieldID(c, fieldName, "I");
61    env->SetStaticIntField(c, field, value);
62}
63
64static void OsConstants_initConstants(JNIEnv* env, jclass c) {
65    initConstant(env, c, "AF_INET", AF_INET);
66    initConstant(env, c, "AF_INET6", AF_INET6);
67    initConstant(env, c, "AF_PACKET", AF_PACKET);
68    initConstant(env, c, "AF_NETLINK", AF_NETLINK);
69    initConstant(env, c, "AF_UNIX", AF_UNIX);
70    initConstant(env, c, "AF_UNSPEC", AF_UNSPEC);
71    initConstant(env, c, "AI_ADDRCONFIG", AI_ADDRCONFIG);
72    initConstant(env, c, "AI_ALL", AI_ALL);
73    initConstant(env, c, "AI_CANONNAME", AI_CANONNAME);
74    initConstant(env, c, "AI_NUMERICHOST", AI_NUMERICHOST);
75#if defined(AI_NUMERICSERV)
76    initConstant(env, c, "AI_NUMERICSERV", AI_NUMERICSERV);
77#endif
78    initConstant(env, c, "AI_PASSIVE", AI_PASSIVE);
79    initConstant(env, c, "AI_V4MAPPED", AI_V4MAPPED);
80    initConstant(env, c, "ARPHRD_ETHER", ARPHRD_ETHER);
81    initConstant(env, c, "ARPHRD_LOOPBACK", ARPHRD_LOOPBACK);
82#if defined(CAP_LAST_CAP)
83    initConstant(env, c, "CAP_AUDIT_CONTROL", CAP_AUDIT_CONTROL);
84    initConstant(env, c, "CAP_AUDIT_WRITE", CAP_AUDIT_WRITE);
85    initConstant(env, c, "CAP_BLOCK_SUSPEND", CAP_BLOCK_SUSPEND);
86    initConstant(env, c, "CAP_CHOWN", CAP_CHOWN);
87    initConstant(env, c, "CAP_DAC_OVERRIDE", CAP_DAC_OVERRIDE);
88    initConstant(env, c, "CAP_DAC_READ_SEARCH", CAP_DAC_READ_SEARCH);
89    initConstant(env, c, "CAP_FOWNER", CAP_FOWNER);
90    initConstant(env, c, "CAP_FSETID", CAP_FSETID);
91    initConstant(env, c, "CAP_IPC_LOCK", CAP_IPC_LOCK);
92    initConstant(env, c, "CAP_IPC_OWNER", CAP_IPC_OWNER);
93    initConstant(env, c, "CAP_KILL", CAP_KILL);
94    initConstant(env, c, "CAP_LAST_CAP", CAP_LAST_CAP);
95    initConstant(env, c, "CAP_LEASE", CAP_LEASE);
96    initConstant(env, c, "CAP_LINUX_IMMUTABLE", CAP_LINUX_IMMUTABLE);
97    initConstant(env, c, "CAP_MAC_ADMIN", CAP_MAC_ADMIN);
98    initConstant(env, c, "CAP_MAC_OVERRIDE", CAP_MAC_OVERRIDE);
99    initConstant(env, c, "CAP_MKNOD", CAP_MKNOD);
100    initConstant(env, c, "CAP_NET_ADMIN", CAP_NET_ADMIN);
101    initConstant(env, c, "CAP_NET_BIND_SERVICE", CAP_NET_BIND_SERVICE);
102    initConstant(env, c, "CAP_NET_BROADCAST", CAP_NET_BROADCAST);
103    initConstant(env, c, "CAP_NET_RAW", CAP_NET_RAW);
104    initConstant(env, c, "CAP_SETFCAP", CAP_SETFCAP);
105    initConstant(env, c, "CAP_SETGID", CAP_SETGID);
106    initConstant(env, c, "CAP_SETPCAP", CAP_SETPCAP);
107    initConstant(env, c, "CAP_SETUID", CAP_SETUID);
108    initConstant(env, c, "CAP_SYS_ADMIN", CAP_SYS_ADMIN);
109    initConstant(env, c, "CAP_SYS_BOOT", CAP_SYS_BOOT);
110    initConstant(env, c, "CAP_SYS_CHROOT", CAP_SYS_CHROOT);
111    initConstant(env, c, "CAP_SYSLOG", CAP_SYSLOG);
112    initConstant(env, c, "CAP_SYS_MODULE", CAP_SYS_MODULE);
113    initConstant(env, c, "CAP_SYS_NICE", CAP_SYS_NICE);
114    initConstant(env, c, "CAP_SYS_PACCT", CAP_SYS_PACCT);
115    initConstant(env, c, "CAP_SYS_PTRACE", CAP_SYS_PTRACE);
116    initConstant(env, c, "CAP_SYS_RAWIO", CAP_SYS_RAWIO);
117    initConstant(env, c, "CAP_SYS_RESOURCE", CAP_SYS_RESOURCE);
118    initConstant(env, c, "CAP_SYS_TIME", CAP_SYS_TIME);
119    initConstant(env, c, "CAP_SYS_TTY_CONFIG", CAP_SYS_TTY_CONFIG);
120    initConstant(env, c, "CAP_WAKE_ALARM", CAP_WAKE_ALARM);
121#endif
122    initConstant(env, c, "E2BIG", E2BIG);
123    initConstant(env, c, "EACCES", EACCES);
124    initConstant(env, c, "EADDRINUSE", EADDRINUSE);
125    initConstant(env, c, "EADDRNOTAVAIL", EADDRNOTAVAIL);
126    initConstant(env, c, "EAFNOSUPPORT", EAFNOSUPPORT);
127    initConstant(env, c, "EAGAIN", EAGAIN);
128    initConstant(env, c, "EAI_AGAIN", EAI_AGAIN);
129    initConstant(env, c, "EAI_BADFLAGS", EAI_BADFLAGS);
130    initConstant(env, c, "EAI_FAIL", EAI_FAIL);
131    initConstant(env, c, "EAI_FAMILY", EAI_FAMILY);
132    initConstant(env, c, "EAI_MEMORY", EAI_MEMORY);
133    initConstant(env, c, "EAI_NODATA", EAI_NODATA);
134    initConstant(env, c, "EAI_NONAME", EAI_NONAME);
135#if defined(EAI_OVERFLOW)
136    initConstant(env, c, "EAI_OVERFLOW", EAI_OVERFLOW);
137#endif
138    initConstant(env, c, "EAI_SERVICE", EAI_SERVICE);
139    initConstant(env, c, "EAI_SOCKTYPE", EAI_SOCKTYPE);
140    initConstant(env, c, "EAI_SYSTEM", EAI_SYSTEM);
141    initConstant(env, c, "EALREADY", EALREADY);
142    initConstant(env, c, "EBADF", EBADF);
143    initConstant(env, c, "EBADMSG", EBADMSG);
144    initConstant(env, c, "EBUSY", EBUSY);
145    initConstant(env, c, "ECANCELED", ECANCELED);
146    initConstant(env, c, "ECHILD", ECHILD);
147    initConstant(env, c, "ECONNABORTED", ECONNABORTED);
148    initConstant(env, c, "ECONNREFUSED", ECONNREFUSED);
149    initConstant(env, c, "ECONNRESET", ECONNRESET);
150    initConstant(env, c, "EDEADLK", EDEADLK);
151    initConstant(env, c, "EDESTADDRREQ", EDESTADDRREQ);
152    initConstant(env, c, "EDOM", EDOM);
153    initConstant(env, c, "EDQUOT", EDQUOT);
154    initConstant(env, c, "EEXIST", EEXIST);
155    initConstant(env, c, "EFAULT", EFAULT);
156    initConstant(env, c, "EFBIG", EFBIG);
157    initConstant(env, c, "EHOSTUNREACH", EHOSTUNREACH);
158    initConstant(env, c, "EIDRM", EIDRM);
159    initConstant(env, c, "EILSEQ", EILSEQ);
160    initConstant(env, c, "EINPROGRESS", EINPROGRESS);
161    initConstant(env, c, "EINTR", EINTR);
162    initConstant(env, c, "EINVAL", EINVAL);
163    initConstant(env, c, "EIO", EIO);
164    initConstant(env, c, "EISCONN", EISCONN);
165    initConstant(env, c, "EISDIR", EISDIR);
166    initConstant(env, c, "ELOOP", ELOOP);
167    initConstant(env, c, "EMFILE", EMFILE);
168    initConstant(env, c, "EMLINK", EMLINK);
169    initConstant(env, c, "EMSGSIZE", EMSGSIZE);
170    initConstant(env, c, "EMULTIHOP", EMULTIHOP);
171    initConstant(env, c, "ENAMETOOLONG", ENAMETOOLONG);
172    initConstant(env, c, "ENETDOWN", ENETDOWN);
173    initConstant(env, c, "ENETRESET", ENETRESET);
174    initConstant(env, c, "ENETUNREACH", ENETUNREACH);
175    initConstant(env, c, "ENFILE", ENFILE);
176    initConstant(env, c, "ENOBUFS", ENOBUFS);
177    initConstant(env, c, "ENODATA", ENODATA);
178    initConstant(env, c, "ENODEV", ENODEV);
179    initConstant(env, c, "ENOENT", ENOENT);
180    initConstant(env, c, "ENOEXEC", ENOEXEC);
181    initConstant(env, c, "ENOLCK", ENOLCK);
182    initConstant(env, c, "ENOLINK", ENOLINK);
183    initConstant(env, c, "ENOMEM", ENOMEM);
184    initConstant(env, c, "ENOMSG", ENOMSG);
185    initConstant(env, c, "ENONET", ENONET);
186    initConstant(env, c, "ENOPROTOOPT", ENOPROTOOPT);
187    initConstant(env, c, "ENOSPC", ENOSPC);
188    initConstant(env, c, "ENOSR", ENOSR);
189    initConstant(env, c, "ENOSTR", ENOSTR);
190    initConstant(env, c, "ENOSYS", ENOSYS);
191    initConstant(env, c, "ENOTCONN", ENOTCONN);
192    initConstant(env, c, "ENOTDIR", ENOTDIR);
193    initConstant(env, c, "ENOTEMPTY", ENOTEMPTY);
194    initConstant(env, c, "ENOTSOCK", ENOTSOCK);
195    initConstant(env, c, "ENOTSUP", ENOTSUP);
196    initConstant(env, c, "ENOTTY", ENOTTY);
197    initConstant(env, c, "ENXIO", ENXIO);
198    initConstant(env, c, "EOPNOTSUPP", EOPNOTSUPP);
199    initConstant(env, c, "EOVERFLOW", EOVERFLOW);
200    initConstant(env, c, "EPERM", EPERM);
201    initConstant(env, c, "EPIPE", EPIPE);
202    initConstant(env, c, "EPROTO", EPROTO);
203    initConstant(env, c, "EPROTONOSUPPORT", EPROTONOSUPPORT);
204    initConstant(env, c, "EPROTOTYPE", EPROTOTYPE);
205    initConstant(env, c, "ERANGE", ERANGE);
206    initConstant(env, c, "EROFS", EROFS);
207    initConstant(env, c, "ESPIPE", ESPIPE);
208    initConstant(env, c, "ESRCH", ESRCH);
209    initConstant(env, c, "ESTALE", ESTALE);
210    initConstant(env, c, "ETH_P_ALL", ETH_P_ALL);
211    initConstant(env, c, "ETH_P_ARP", ETH_P_ARP);
212    initConstant(env, c, "ETH_P_IP", ETH_P_IP);
213    initConstant(env, c, "ETH_P_IPV6", ETH_P_IPV6);
214    initConstant(env, c, "ETIME", ETIME);
215    initConstant(env, c, "ETIMEDOUT", ETIMEDOUT);
216    initConstant(env, c, "ETXTBSY", ETXTBSY);
217    initConstant(env, c, "EUSERS", EUSERS);
218#if EWOULDBLOCK != EAGAIN
219#error EWOULDBLOCK != EAGAIN
220#endif
221    initConstant(env, c, "EXDEV", EXDEV);
222    initConstant(env, c, "EXIT_FAILURE", EXIT_FAILURE);
223    initConstant(env, c, "EXIT_SUCCESS", EXIT_SUCCESS);
224    initConstant(env, c, "FD_CLOEXEC", FD_CLOEXEC);
225    initConstant(env, c, "FIONREAD", FIONREAD);
226    initConstant(env, c, "F_DUPFD", F_DUPFD);
227    initConstant(env, c, "F_DUPFD_CLOEXEC", F_DUPFD_CLOEXEC);
228    initConstant(env, c, "F_GETFD", F_GETFD);
229    initConstant(env, c, "F_GETFL", F_GETFL);
230    initConstant(env, c, "F_GETLK", F_GETLK);
231#if defined(F_GETLK64)
232    initConstant(env, c, "F_GETLK64", F_GETLK64);
233#endif
234    initConstant(env, c, "F_GETOWN", F_GETOWN);
235    initConstant(env, c, "F_OK", F_OK);
236    initConstant(env, c, "F_RDLCK", F_RDLCK);
237    initConstant(env, c, "F_SETFD", F_SETFD);
238    initConstant(env, c, "F_SETFL", F_SETFL);
239    initConstant(env, c, "F_SETLK", F_SETLK);
240#if defined(F_SETLK64)
241    initConstant(env, c, "F_SETLK64", F_SETLK64);
242#endif
243    initConstant(env, c, "F_SETLKW", F_SETLKW);
244#if defined(F_SETLKW64)
245    initConstant(env, c, "F_SETLKW64", F_SETLKW64);
246#endif
247    initConstant(env, c, "F_SETOWN", F_SETOWN);
248    initConstant(env, c, "F_UNLCK", F_UNLCK);
249    initConstant(env, c, "F_WRLCK", F_WRLCK);
250    initConstant(env, c, "ICMP_ECHO", ICMP_ECHO);
251    initConstant(env, c, "ICMP_ECHOREPLY", ICMP_ECHOREPLY);
252    initConstant(env, c, "ICMP6_ECHO_REQUEST", ICMP6_ECHO_REQUEST);
253    initConstant(env, c, "ICMP6_ECHO_REPLY", ICMP6_ECHO_REPLY);
254#if defined(IFA_F_DADFAILED)
255    initConstant(env, c, "IFA_F_DADFAILED", IFA_F_DADFAILED);
256#endif
257#if defined(IFA_F_DEPRECATED)
258    initConstant(env, c, "IFA_F_DEPRECATED", IFA_F_DEPRECATED);
259#endif
260#if defined(IFA_F_HOMEADDRESS)
261    initConstant(env, c, "IFA_F_HOMEADDRESS", IFA_F_HOMEADDRESS);
262#endif
263#if defined(IFA_F_NODAD)
264    initConstant(env, c, "IFA_F_NODAD", IFA_F_NODAD);
265#endif
266#if defined(IFA_F_OPTIMISTIC)
267    initConstant(env, c, "IFA_F_OPTIMISTIC", IFA_F_OPTIMISTIC);
268#endif
269#if defined(IFA_F_PERMANENT)
270    initConstant(env, c, "IFA_F_PERMANENT", IFA_F_PERMANENT);
271#endif
272#if defined(IFA_F_SECONDARY)
273    initConstant(env, c, "IFA_F_SECONDARY", IFA_F_SECONDARY);
274#endif
275#if defined(IFA_F_TEMPORARY)
276    initConstant(env, c, "IFA_F_TEMPORARY", IFA_F_TEMPORARY);
277#endif
278#if defined(IFA_F_TENTATIVE)
279    initConstant(env, c, "IFA_F_TENTATIVE", IFA_F_TENTATIVE);
280#endif
281    initConstant(env, c, "IFF_ALLMULTI", IFF_ALLMULTI);
282#if defined(IFF_AUTOMEDIA)
283    initConstant(env, c, "IFF_AUTOMEDIA", IFF_AUTOMEDIA);
284#endif
285    initConstant(env, c, "IFF_BROADCAST", IFF_BROADCAST);
286    initConstant(env, c, "IFF_DEBUG", IFF_DEBUG);
287#if defined(IFF_DYNAMIC)
288    initConstant(env, c, "IFF_DYNAMIC", IFF_DYNAMIC);
289#endif
290    initConstant(env, c, "IFF_LOOPBACK", IFF_LOOPBACK);
291#if defined(IFF_MASTER)
292    initConstant(env, c, "IFF_MASTER", IFF_MASTER);
293#endif
294    initConstant(env, c, "IFF_MULTICAST", IFF_MULTICAST);
295    initConstant(env, c, "IFF_NOARP", IFF_NOARP);
296    initConstant(env, c, "IFF_NOTRAILERS", IFF_NOTRAILERS);
297    initConstant(env, c, "IFF_POINTOPOINT", IFF_POINTOPOINT);
298#if defined(IFF_PORTSEL)
299    initConstant(env, c, "IFF_PORTSEL", IFF_PORTSEL);
300#endif
301    initConstant(env, c, "IFF_PROMISC", IFF_PROMISC);
302    initConstant(env, c, "IFF_RUNNING", IFF_RUNNING);
303#if defined(IFF_SLAVE)
304    initConstant(env, c, "IFF_SLAVE", IFF_SLAVE);
305#endif
306    initConstant(env, c, "IFF_UP", IFF_UP);
307    initConstant(env, c, "IPPROTO_ICMP", IPPROTO_ICMP);
308    initConstant(env, c, "IPPROTO_ICMPV6", IPPROTO_ICMPV6);
309    initConstant(env, c, "IPPROTO_IP", IPPROTO_IP);
310    initConstant(env, c, "IPPROTO_IPV6", IPPROTO_IPV6);
311    initConstant(env, c, "IPPROTO_RAW", IPPROTO_RAW);
312    initConstant(env, c, "IPPROTO_TCP", IPPROTO_TCP);
313    initConstant(env, c, "IPPROTO_UDP", IPPROTO_UDP);
314    initConstant(env, c, "IPV6_CHECKSUM", IPV6_CHECKSUM);
315    initConstant(env, c, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS);
316    initConstant(env, c, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF);
317    initConstant(env, c, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP);
318#if defined(IPV6_RECVDSTOPTS)
319    initConstant(env, c, "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS);
320#endif
321#if defined(IPV6_RECVHOPLIMIT)
322    initConstant(env, c, "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT);
323#endif
324#if defined(IPV6_RECVHOPOPTS)
325    initConstant(env, c, "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS);
326#endif
327#if defined(IPV6_RECVPKTINFO)
328    initConstant(env, c, "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO);
329#endif
330#if defined(IPV6_RECVRTHDR)
331    initConstant(env, c, "IPV6_RECVRTHDR", IPV6_RECVRTHDR);
332#endif
333#if defined(IPV6_RECVTCLASS)
334    initConstant(env, c, "IPV6_RECVTCLASS", IPV6_RECVTCLASS);
335#endif
336#if defined(IPV6_TCLASS)
337    initConstant(env, c, "IPV6_TCLASS", IPV6_TCLASS);
338#endif
339    initConstant(env, c, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS);
340    initConstant(env, c, "IPV6_V6ONLY", IPV6_V6ONLY);
341    initConstant(env, c, "IP_MULTICAST_ALL", IP_MULTICAST_ALL);
342    initConstant(env, c, "IP_MULTICAST_IF", IP_MULTICAST_IF);
343    initConstant(env, c, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);
344    initConstant(env, c, "IP_MULTICAST_TTL", IP_MULTICAST_TTL);
345    initConstant(env, c, "IP_RECVTOS", IP_RECVTOS);
346    initConstant(env, c, "IP_TOS", IP_TOS);
347    initConstant(env, c, "IP_TTL", IP_TTL);
348#if defined(_LINUX_CAPABILITY_VERSION_3)
349    initConstant(env, c, "_LINUX_CAPABILITY_VERSION_3", _LINUX_CAPABILITY_VERSION_3);
350#endif
351    initConstant(env, c, "MAP_FIXED", MAP_FIXED);
352    initConstant(env, c, "MAP_POPULATE", MAP_POPULATE);
353    initConstant(env, c, "MAP_PRIVATE", MAP_PRIVATE);
354    initConstant(env, c, "MAP_SHARED", MAP_SHARED);
355#if defined(MCAST_JOIN_GROUP)
356    initConstant(env, c, "MCAST_JOIN_GROUP", MCAST_JOIN_GROUP);
357#endif
358#if defined(MCAST_LEAVE_GROUP)
359    initConstant(env, c, "MCAST_LEAVE_GROUP", MCAST_LEAVE_GROUP);
360#endif
361#if defined(MCAST_JOIN_SOURCE_GROUP)
362    initConstant(env, c, "MCAST_JOIN_SOURCE_GROUP", MCAST_JOIN_SOURCE_GROUP);
363#endif
364#if defined(MCAST_LEAVE_SOURCE_GROUP)
365    initConstant(env, c, "MCAST_LEAVE_SOURCE_GROUP", MCAST_LEAVE_SOURCE_GROUP);
366#endif
367#if defined(MCAST_BLOCK_SOURCE)
368    initConstant(env, c, "MCAST_BLOCK_SOURCE", MCAST_BLOCK_SOURCE);
369#endif
370#if defined(MCAST_UNBLOCK_SOURCE)
371    initConstant(env, c, "MCAST_UNBLOCK_SOURCE", MCAST_UNBLOCK_SOURCE);
372#endif
373    initConstant(env, c, "MCL_CURRENT", MCL_CURRENT);
374    initConstant(env, c, "MCL_FUTURE", MCL_FUTURE);
375    initConstant(env, c, "MSG_CTRUNC", MSG_CTRUNC);
376    initConstant(env, c, "MSG_DONTROUTE", MSG_DONTROUTE);
377    initConstant(env, c, "MSG_EOR", MSG_EOR);
378    initConstant(env, c, "MSG_OOB", MSG_OOB);
379    initConstant(env, c, "MSG_PEEK", MSG_PEEK);
380    initConstant(env, c, "MSG_TRUNC", MSG_TRUNC);
381    initConstant(env, c, "MSG_WAITALL", MSG_WAITALL);
382    initConstant(env, c, "MS_ASYNC", MS_ASYNC);
383    initConstant(env, c, "MS_INVALIDATE", MS_INVALIDATE);
384    initConstant(env, c, "MS_SYNC", MS_SYNC);
385    initConstant(env, c, "NETLINK_ROUTE", NETLINK_ROUTE);
386    initConstant(env, c, "NI_DGRAM", NI_DGRAM);
387    initConstant(env, c, "NI_NAMEREQD", NI_NAMEREQD);
388    initConstant(env, c, "NI_NOFQDN", NI_NOFQDN);
389    initConstant(env, c, "NI_NUMERICHOST", NI_NUMERICHOST);
390    initConstant(env, c, "NI_NUMERICSERV", NI_NUMERICSERV);
391    initConstant(env, c, "O_ACCMODE", O_ACCMODE);
392    initConstant(env, c, "O_APPEND", O_APPEND);
393    initConstant(env, c, "O_CLOEXEC", O_CLOEXEC);
394    initConstant(env, c, "O_CREAT", O_CREAT);
395    initConstant(env, c, "O_EXCL", O_EXCL);
396    initConstant(env, c, "O_NOCTTY", O_NOCTTY);
397    initConstant(env, c, "O_NOFOLLOW", O_NOFOLLOW);
398    initConstant(env, c, "O_NONBLOCK", O_NONBLOCK);
399    initConstant(env, c, "O_RDONLY", O_RDONLY);
400    initConstant(env, c, "O_RDWR", O_RDWR);
401    initConstant(env, c, "O_SYNC", O_SYNC);
402    initConstant(env, c, "O_DSYNC", O_DSYNC);
403    initConstant(env, c, "O_TRUNC", O_TRUNC);
404    initConstant(env, c, "O_WRONLY", O_WRONLY);
405    initConstant(env, c, "POLLERR", POLLERR);
406    initConstant(env, c, "POLLHUP", POLLHUP);
407    initConstant(env, c, "POLLIN", POLLIN);
408    initConstant(env, c, "POLLNVAL", POLLNVAL);
409    initConstant(env, c, "POLLOUT", POLLOUT);
410    initConstant(env, c, "POLLPRI", POLLPRI);
411    initConstant(env, c, "POLLRDBAND", POLLRDBAND);
412    initConstant(env, c, "POLLRDNORM", POLLRDNORM);
413    initConstant(env, c, "POLLWRBAND", POLLWRBAND);
414    initConstant(env, c, "POLLWRNORM", POLLWRNORM);
415#if defined(PR_CAP_AMBIENT)
416    initConstant(env, c, "PR_CAP_AMBIENT", PR_CAP_AMBIENT);
417#endif
418#if defined(PR_CAP_AMBIENT_RAISE)
419    initConstant(env, c, "PR_CAP_AMBIENT_RAISE", PR_CAP_AMBIENT_RAISE);
420#endif
421#if defined(PR_GET_DUMPABLE)
422    initConstant(env, c, "PR_GET_DUMPABLE", PR_GET_DUMPABLE);
423#endif
424#if defined(PR_SET_DUMPABLE)
425    initConstant(env, c, "PR_SET_DUMPABLE", PR_SET_DUMPABLE);
426#endif
427#if defined(PR_SET_NO_NEW_PRIVS)
428    initConstant(env, c, "PR_SET_NO_NEW_PRIVS", PR_SET_NO_NEW_PRIVS);
429#endif
430    initConstant(env, c, "PROT_EXEC", PROT_EXEC);
431    initConstant(env, c, "PROT_NONE", PROT_NONE);
432    initConstant(env, c, "PROT_READ", PROT_READ);
433    initConstant(env, c, "PROT_WRITE", PROT_WRITE);
434    initConstant(env, c, "R_OK", R_OK);
435// NOTE: The RT_* constants are not preprocessor defines, they're enum
436// members. The best we can do (barring UAPI / kernel version checks) is
437// to hope they exist on all host linuxes we're building on. These
438// constants have been around since 2.6.35 at least, so we should be ok.
439    initConstant(env, c, "RT_SCOPE_HOST", RT_SCOPE_HOST);
440    initConstant(env, c, "RT_SCOPE_LINK", RT_SCOPE_LINK);
441    initConstant(env, c, "RT_SCOPE_NOWHERE", RT_SCOPE_NOWHERE);
442    initConstant(env, c, "RT_SCOPE_SITE", RT_SCOPE_SITE);
443    initConstant(env, c, "RT_SCOPE_UNIVERSE", RT_SCOPE_UNIVERSE);
444    initConstant(env, c, "RTMGRP_IPV4_IFADDR", RTMGRP_IPV4_IFADDR);
445    initConstant(env, c, "RTMGRP_IPV4_MROUTE", RTMGRP_IPV4_MROUTE);
446    initConstant(env, c, "RTMGRP_IPV4_ROUTE", RTMGRP_IPV4_ROUTE);
447    initConstant(env, c, "RTMGRP_IPV4_RULE", RTMGRP_IPV4_RULE);
448    initConstant(env, c, "RTMGRP_IPV6_IFADDR", RTMGRP_IPV6_IFADDR);
449    initConstant(env, c, "RTMGRP_IPV6_IFINFO", RTMGRP_IPV6_IFINFO);
450    initConstant(env, c, "RTMGRP_IPV6_MROUTE", RTMGRP_IPV6_MROUTE);
451    initConstant(env, c, "RTMGRP_IPV6_PREFIX", RTMGRP_IPV6_PREFIX);
452    initConstant(env, c, "RTMGRP_IPV6_ROUTE", RTMGRP_IPV6_ROUTE);
453    initConstant(env, c, "RTMGRP_LINK", RTMGRP_LINK);
454    initConstant(env, c, "RTMGRP_NEIGH", RTMGRP_NEIGH);
455    initConstant(env, c, "RTMGRP_NOTIFY", RTMGRP_NOTIFY);
456    initConstant(env, c, "RTMGRP_TC", RTMGRP_TC);
457    initConstant(env, c, "SEEK_CUR", SEEK_CUR);
458    initConstant(env, c, "SEEK_END", SEEK_END);
459    initConstant(env, c, "SEEK_SET", SEEK_SET);
460    initConstant(env, c, "SHUT_RD", SHUT_RD);
461    initConstant(env, c, "SHUT_RDWR", SHUT_RDWR);
462    initConstant(env, c, "SHUT_WR", SHUT_WR);
463    initConstant(env, c, "SIGABRT", SIGABRT);
464    initConstant(env, c, "SIGALRM", SIGALRM);
465    initConstant(env, c, "SIGBUS", SIGBUS);
466    initConstant(env, c, "SIGCHLD", SIGCHLD);
467    initConstant(env, c, "SIGCONT", SIGCONT);
468    initConstant(env, c, "SIGFPE", SIGFPE);
469    initConstant(env, c, "SIGHUP", SIGHUP);
470    initConstant(env, c, "SIGILL", SIGILL);
471    initConstant(env, c, "SIGINT", SIGINT);
472    initConstant(env, c, "SIGIO", SIGIO);
473    initConstant(env, c, "SIGKILL", SIGKILL);
474    initConstant(env, c, "SIGPIPE", SIGPIPE);
475    initConstant(env, c, "SIGPROF", SIGPROF);
476#if defined(SIGPWR)
477    initConstant(env, c, "SIGPWR", SIGPWR);
478#endif
479    initConstant(env, c, "SIGQUIT", SIGQUIT);
480#if defined(SIGRTMAX)
481    initConstant(env, c, "SIGRTMAX", SIGRTMAX);
482#endif
483#if defined(SIGRTMIN)
484    initConstant(env, c, "SIGRTMIN", SIGRTMIN);
485#endif
486    initConstant(env, c, "SIGSEGV", SIGSEGV);
487#if defined(SIGSTKFLT)
488    initConstant(env, c, "SIGSTKFLT", SIGSTKFLT);
489#endif
490    initConstant(env, c, "SIGSTOP", SIGSTOP);
491    initConstant(env, c, "SIGSYS", SIGSYS);
492    initConstant(env, c, "SIGTERM", SIGTERM);
493    initConstant(env, c, "SIGTRAP", SIGTRAP);
494    initConstant(env, c, "SIGTSTP", SIGTSTP);
495    initConstant(env, c, "SIGTTIN", SIGTTIN);
496    initConstant(env, c, "SIGTTOU", SIGTTOU);
497    initConstant(env, c, "SIGURG", SIGURG);
498    initConstant(env, c, "SIGUSR1", SIGUSR1);
499    initConstant(env, c, "SIGUSR2", SIGUSR2);
500    initConstant(env, c, "SIGVTALRM", SIGVTALRM);
501    initConstant(env, c, "SIGWINCH", SIGWINCH);
502    initConstant(env, c, "SIGXCPU", SIGXCPU);
503    initConstant(env, c, "SIGXFSZ", SIGXFSZ);
504    initConstant(env, c, "SIOCGIFADDR", SIOCGIFADDR);
505    initConstant(env, c, "SIOCGIFBRDADDR", SIOCGIFBRDADDR);
506    initConstant(env, c, "SIOCGIFDSTADDR", SIOCGIFDSTADDR);
507    initConstant(env, c, "SIOCGIFNETMASK", SIOCGIFNETMASK);
508    initConstant(env, c, "SOCK_DGRAM", SOCK_DGRAM);
509    initConstant(env, c, "SOCK_RAW", SOCK_RAW);
510    initConstant(env, c, "SOCK_SEQPACKET", SOCK_SEQPACKET);
511    initConstant(env, c, "SOCK_STREAM", SOCK_STREAM);
512    initConstant(env, c, "SOL_SOCKET", SOL_SOCKET);
513#if defined(SO_BINDTODEVICE)
514    initConstant(env, c, "SO_BINDTODEVICE", SO_BINDTODEVICE);
515#endif
516    initConstant(env, c, "SO_BROADCAST", SO_BROADCAST);
517    initConstant(env, c, "SO_DEBUG", SO_DEBUG);
518#if defined(SO_DOMAIN)
519    initConstant(env, c, "SO_DOMAIN", SO_DOMAIN);
520#endif
521    initConstant(env, c, "SO_DONTROUTE", SO_DONTROUTE);
522    initConstant(env, c, "SO_ERROR", SO_ERROR);
523    initConstant(env, c, "SO_KEEPALIVE", SO_KEEPALIVE);
524    initConstant(env, c, "SO_LINGER", SO_LINGER);
525    initConstant(env, c, "SO_OOBINLINE", SO_OOBINLINE);
526#if defined(SO_PASSCRED)
527    initConstant(env, c, "SO_PASSCRED", SO_PASSCRED);
528#endif
529#if defined(SO_PEERCRED)
530    initConstant(env, c, "SO_PEERCRED", SO_PEERCRED);
531#endif
532#if defined(SO_PROTOCOL)
533    initConstant(env, c, "SO_PROTOCOL", SO_PROTOCOL);
534#endif
535    initConstant(env, c, "SO_RCVBUF", SO_RCVBUF);
536    initConstant(env, c, "SO_RCVLOWAT", SO_RCVLOWAT);
537    initConstant(env, c, "SO_RCVTIMEO", SO_RCVTIMEO);
538    initConstant(env, c, "SO_REUSEADDR", SO_REUSEADDR);
539    initConstant(env, c, "SO_SNDBUF", SO_SNDBUF);
540    initConstant(env, c, "SO_SNDLOWAT", SO_SNDLOWAT);
541    initConstant(env, c, "SO_SNDTIMEO", SO_SNDTIMEO);
542    initConstant(env, c, "SO_TYPE", SO_TYPE);
543    initConstant(env, c, "STDERR_FILENO", STDERR_FILENO);
544    initConstant(env, c, "STDIN_FILENO", STDIN_FILENO);
545    initConstant(env, c, "STDOUT_FILENO", STDOUT_FILENO);
546    initConstant(env, c, "ST_MANDLOCK", ST_MANDLOCK);
547    initConstant(env, c, "ST_NOATIME", ST_NOATIME);
548    initConstant(env, c, "ST_NODEV", ST_NODEV);
549    initConstant(env, c, "ST_NODIRATIME", ST_NODIRATIME);
550    initConstant(env, c, "ST_NOEXEC", ST_NOEXEC);
551    initConstant(env, c, "ST_NOSUID", ST_NOSUID);
552    initConstant(env, c, "ST_RDONLY", ST_RDONLY);
553    initConstant(env, c, "ST_RELATIME", ST_RELATIME);
554    initConstant(env, c, "ST_SYNCHRONOUS", ST_SYNCHRONOUS);
555    initConstant(env, c, "S_IFBLK", S_IFBLK);
556    initConstant(env, c, "S_IFCHR", S_IFCHR);
557    initConstant(env, c, "S_IFDIR", S_IFDIR);
558    initConstant(env, c, "S_IFIFO", S_IFIFO);
559    initConstant(env, c, "S_IFLNK", S_IFLNK);
560    initConstant(env, c, "S_IFMT", S_IFMT);
561    initConstant(env, c, "S_IFREG", S_IFREG);
562    initConstant(env, c, "S_IFSOCK", S_IFSOCK);
563    initConstant(env, c, "S_IRGRP", S_IRGRP);
564    initConstant(env, c, "S_IROTH", S_IROTH);
565    initConstant(env, c, "S_IRUSR", S_IRUSR);
566    initConstant(env, c, "S_IRWXG", S_IRWXG);
567    initConstant(env, c, "S_IRWXO", S_IRWXO);
568    initConstant(env, c, "S_IRWXU", S_IRWXU);
569    initConstant(env, c, "S_ISGID", S_ISGID);
570    initConstant(env, c, "S_ISUID", S_ISUID);
571    initConstant(env, c, "S_ISVTX", S_ISVTX);
572    initConstant(env, c, "S_IWGRP", S_IWGRP);
573    initConstant(env, c, "S_IWOTH", S_IWOTH);
574    initConstant(env, c, "S_IWUSR", S_IWUSR);
575    initConstant(env, c, "S_IXGRP", S_IXGRP);
576    initConstant(env, c, "S_IXOTH", S_IXOTH);
577    initConstant(env, c, "S_IXUSR", S_IXUSR);
578    initConstant(env, c, "TCP_NODELAY", TCP_NODELAY);
579#if defined(TCP_USER_TIMEOUT)
580    initConstant(env, c, "TCP_USER_TIMEOUT", TCP_USER_TIMEOUT);
581#endif
582    initConstant(env, c, "TIOCOUTQ", TIOCOUTQ);
583    initConstant(env, c, "UDP_ENCAP", UDP_ENCAP);
584    initConstant(env, c, "UDP_ENCAP_ESPINUDP_NON_IKE", UDP_ENCAP_ESPINUDP_NON_IKE);
585    initConstant(env, c, "UDP_ENCAP_ESPINUDP", UDP_ENCAP_ESPINUDP);
586    // UNIX_PATH_MAX is mentioned in some versions of unix(7), but not actually declared.
587    initConstant(env, c, "UNIX_PATH_MAX", sizeof(sockaddr_un::sun_path));
588    initConstant(env, c, "WCONTINUED", WCONTINUED);
589    initConstant(env, c, "WEXITED", WEXITED);
590    initConstant(env, c, "WNOHANG", WNOHANG);
591    initConstant(env, c, "WNOWAIT", WNOWAIT);
592    initConstant(env, c, "WSTOPPED", WSTOPPED);
593    initConstant(env, c, "WUNTRACED", WUNTRACED);
594    initConstant(env, c, "W_OK", W_OK);
595    initConstant(env, c, "XATTR_CREATE", XATTR_CREATE);
596    initConstant(env, c, "XATTR_REPLACE", XATTR_REPLACE);
597    initConstant(env, c, "X_OK", X_OK);
598    initConstant(env, c, "_SC_2_CHAR_TERM", _SC_2_CHAR_TERM);
599    initConstant(env, c, "_SC_2_C_BIND", _SC_2_C_BIND);
600    initConstant(env, c, "_SC_2_C_DEV", _SC_2_C_DEV);
601#if defined(_SC_2_C_VERSION)
602    initConstant(env, c, "_SC_2_C_VERSION", _SC_2_C_VERSION);
603#endif
604    initConstant(env, c, "_SC_2_FORT_DEV", _SC_2_FORT_DEV);
605    initConstant(env, c, "_SC_2_FORT_RUN", _SC_2_FORT_RUN);
606    initConstant(env, c, "_SC_2_LOCALEDEF", _SC_2_LOCALEDEF);
607    initConstant(env, c, "_SC_2_SW_DEV", _SC_2_SW_DEV);
608    initConstant(env, c, "_SC_2_UPE", _SC_2_UPE);
609    initConstant(env, c, "_SC_2_VERSION", _SC_2_VERSION);
610    initConstant(env, c, "_SC_AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX);
611    initConstant(env, c, "_SC_AIO_MAX", _SC_AIO_MAX);
612    initConstant(env, c, "_SC_AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX);
613    initConstant(env, c, "_SC_ARG_MAX", _SC_ARG_MAX);
614    initConstant(env, c, "_SC_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO);
615    initConstant(env, c, "_SC_ATEXIT_MAX", _SC_ATEXIT_MAX);
616#if defined(_SC_AVPHYS_PAGES)
617    initConstant(env, c, "_SC_AVPHYS_PAGES", _SC_AVPHYS_PAGES);
618#endif
619    initConstant(env, c, "_SC_BC_BASE_MAX", _SC_BC_BASE_MAX);
620    initConstant(env, c, "_SC_BC_DIM_MAX", _SC_BC_DIM_MAX);
621    initConstant(env, c, "_SC_BC_SCALE_MAX", _SC_BC_SCALE_MAX);
622    initConstant(env, c, "_SC_BC_STRING_MAX", _SC_BC_STRING_MAX);
623    initConstant(env, c, "_SC_CHILD_MAX", _SC_CHILD_MAX);
624    initConstant(env, c, "_SC_CLK_TCK", _SC_CLK_TCK);
625    initConstant(env, c, "_SC_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX);
626    initConstant(env, c, "_SC_DELAYTIMER_MAX", _SC_DELAYTIMER_MAX);
627    initConstant(env, c, "_SC_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX);
628    initConstant(env, c, "_SC_FSYNC", _SC_FSYNC);
629    initConstant(env, c, "_SC_GETGR_R_SIZE_MAX", _SC_GETGR_R_SIZE_MAX);
630    initConstant(env, c, "_SC_GETPW_R_SIZE_MAX", _SC_GETPW_R_SIZE_MAX);
631    initConstant(env, c, "_SC_IOV_MAX", _SC_IOV_MAX);
632    initConstant(env, c, "_SC_JOB_CONTROL", _SC_JOB_CONTROL);
633    initConstant(env, c, "_SC_LINE_MAX", _SC_LINE_MAX);
634    initConstant(env, c, "_SC_LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX);
635    initConstant(env, c, "_SC_MAPPED_FILES", _SC_MAPPED_FILES);
636    initConstant(env, c, "_SC_MEMLOCK", _SC_MEMLOCK);
637    initConstant(env, c, "_SC_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE);
638    initConstant(env, c, "_SC_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION);
639    initConstant(env, c, "_SC_MESSAGE_PASSING", _SC_MESSAGE_PASSING);
640    initConstant(env, c, "_SC_MQ_OPEN_MAX", _SC_MQ_OPEN_MAX);
641    initConstant(env, c, "_SC_MQ_PRIO_MAX", _SC_MQ_PRIO_MAX);
642    initConstant(env, c, "_SC_NGROUPS_MAX", _SC_NGROUPS_MAX);
643    initConstant(env, c, "_SC_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF);
644    initConstant(env, c, "_SC_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN);
645    initConstant(env, c, "_SC_OPEN_MAX", _SC_OPEN_MAX);
646    initConstant(env, c, "_SC_PAGESIZE", _SC_PAGESIZE);
647    initConstant(env, c, "_SC_PAGE_SIZE", _SC_PAGE_SIZE);
648    initConstant(env, c, "_SC_PASS_MAX", _SC_PASS_MAX);
649#if defined(_SC_PHYS_PAGES)
650    initConstant(env, c, "_SC_PHYS_PAGES", _SC_PHYS_PAGES);
651#endif
652    initConstant(env, c, "_SC_PRIORITIZED_IO", _SC_PRIORITIZED_IO);
653    initConstant(env, c, "_SC_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING);
654    initConstant(env, c, "_SC_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS);
655    initConstant(env, c, "_SC_RE_DUP_MAX", _SC_RE_DUP_MAX);
656    initConstant(env, c, "_SC_RTSIG_MAX", _SC_RTSIG_MAX);
657    initConstant(env, c, "_SC_SAVED_IDS", _SC_SAVED_IDS);
658    initConstant(env, c, "_SC_SEMAPHORES", _SC_SEMAPHORES);
659    initConstant(env, c, "_SC_SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX);
660    initConstant(env, c, "_SC_SEM_VALUE_MAX", _SC_SEM_VALUE_MAX);
661    initConstant(env, c, "_SC_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS);
662    initConstant(env, c, "_SC_SIGQUEUE_MAX", _SC_SIGQUEUE_MAX);
663    initConstant(env, c, "_SC_STREAM_MAX", _SC_STREAM_MAX);
664    initConstant(env, c, "_SC_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO);
665    initConstant(env, c, "_SC_THREADS", _SC_THREADS);
666    initConstant(env, c, "_SC_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR);
667    initConstant(env, c, "_SC_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE);
668    initConstant(env, c, "_SC_THREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS);
669    initConstant(env, c, "_SC_THREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX);
670    initConstant(env, c, "_SC_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING);
671    initConstant(env, c, "_SC_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT);
672    initConstant(env, c, "_SC_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT);
673    initConstant(env, c, "_SC_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS);
674    initConstant(env, c, "_SC_THREAD_STACK_MIN", _SC_THREAD_STACK_MIN);
675    initConstant(env, c, "_SC_THREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX);
676    initConstant(env, c, "_SC_TIMERS", _SC_TIMERS);
677    initConstant(env, c, "_SC_TIMER_MAX", _SC_TIMER_MAX);
678    initConstant(env, c, "_SC_TTY_NAME_MAX", _SC_TTY_NAME_MAX);
679    initConstant(env, c, "_SC_TZNAME_MAX", _SC_TZNAME_MAX);
680    initConstant(env, c, "_SC_VERSION", _SC_VERSION);
681    initConstant(env, c, "_SC_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32);
682    initConstant(env, c, "_SC_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG);
683    initConstant(env, c, "_SC_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64);
684    initConstant(env, c, "_SC_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG);
685    initConstant(env, c, "_SC_XOPEN_CRYPT", _SC_XOPEN_CRYPT);
686    initConstant(env, c, "_SC_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N);
687    initConstant(env, c, "_SC_XOPEN_LEGACY", _SC_XOPEN_LEGACY);
688    initConstant(env, c, "_SC_XOPEN_REALTIME", _SC_XOPEN_REALTIME);
689    initConstant(env, c, "_SC_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS);
690    initConstant(env, c, "_SC_XOPEN_SHM", _SC_XOPEN_SHM);
691    initConstant(env, c, "_SC_XOPEN_UNIX", _SC_XOPEN_UNIX);
692    initConstant(env, c, "_SC_XOPEN_VERSION", _SC_XOPEN_VERSION);
693    initConstant(env, c, "_SC_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION);
694}
695
696static JNINativeMethod gMethods[] = {
697    NATIVE_METHOD(OsConstants, initConstants, "()V"),
698};
699void register_android_system_OsConstants(JNIEnv* env) {
700    jniRegisterNativeMethods(env, "android/system/OsConstants", gMethods, NELEM(gMethods));
701}
702