1 /*
2 * Copyright (C) 2017 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 #include <sys/socket.h>
30
31 #include "header_checks.h"
32
sys_socket_h()33 static void sys_socket_h() {
34 TYPE(socklen_t);
35 TYPE(sa_family_t);
36
37 TYPE(struct sockaddr);
38 STRUCT_MEMBER(struct sockaddr, sa_family_t, sa_family);
39 STRUCT_MEMBER_ARRAY(struct sockaddr, char/*[]*/, sa_data);
40
41 TYPE(struct sockaddr_storage);
42 STRUCT_MEMBER(struct sockaddr_storage, sa_family_t, ss_family);
43
44 TYPE(struct msghdr);
45 STRUCT_MEMBER(struct msghdr, void*, msg_name);
46 STRUCT_MEMBER(struct msghdr, socklen_t, msg_namelen);
47 STRUCT_MEMBER(struct msghdr, struct iovec*, msg_iov);
48 #if defined(__BIONIC__) || defined(__GLIBC__)
49 STRUCT_MEMBER(struct msghdr, size_t, msg_iovlen);
50 #else
51 STRUCT_MEMBER(struct msghdr, int, msg_iovlen);
52 #endif
53 STRUCT_MEMBER(struct msghdr, void*, msg_control);
54 #if defined(__BIONIC__) || defined(__GLIBC__)
55 STRUCT_MEMBER(struct msghdr, size_t, msg_controllen);
56 #else
57 STRUCT_MEMBER(struct msghdr, socklen_t, msg_controllen);
58 #endif
59 STRUCT_MEMBER(struct msghdr, int, msg_flags);
60
61 TYPE(struct iovec);
62
63 TYPE(struct cmsghdr);
64 #if defined(__BIONIC__) || defined(__GLIBC__)
65 STRUCT_MEMBER(struct cmsghdr, size_t, cmsg_len);
66 #else
67 STRUCT_MEMBER(struct cmsghdr, socklen_t, cmsg_len);
68 #endif
69 STRUCT_MEMBER(struct cmsghdr, int, cmsg_level);
70 STRUCT_MEMBER(struct cmsghdr, int, cmsg_type);
71
72 MACRO(SCM_RIGHTS);
73
74 #if !defined(CMSG_DATA)
75 #error CMSG_DATA
76 #endif
77 #if !defined(CMSG_NXTHDR)
78 #error CMSG_NXTHDR
79 #endif
80 #if !defined(CMSG_FIRSTHDR)
81 #error CMSG_FIRSTHDR
82 #endif
83
84 TYPE(struct linger);
85 STRUCT_MEMBER(struct linger, int, l_onoff);
86 STRUCT_MEMBER(struct linger, int, l_linger);
87
88 MACRO(SOCK_DGRAM);
89 MACRO(SOCK_RAW);
90 MACRO(SOCK_SEQPACKET);
91 MACRO(SOCK_STREAM);
92
93 MACRO(SOL_SOCKET);
94
95 MACRO(SO_ACCEPTCONN);
96 MACRO(SO_BROADCAST);
97 MACRO(SO_DEBUG);
98 MACRO(SO_DONTROUTE);
99 MACRO(SO_ERROR);
100 MACRO(SO_KEEPALIVE);
101 MACRO(SO_LINGER);
102 MACRO(SO_OOBINLINE);
103 MACRO(SO_RCVBUF);
104 MACRO(SO_RCVLOWAT);
105 MACRO(SO_RCVTIMEO);
106 MACRO(SO_REUSEADDR);
107 MACRO(SO_SNDBUF);
108 MACRO(SO_SNDLOWAT);
109 MACRO(SO_SNDTIMEO);
110 MACRO(SO_TYPE);
111
112 MACRO(SOMAXCONN);
113
114 MACRO(MSG_CTRUNC);
115 MACRO(MSG_DONTROUTE);
116 MACRO(MSG_EOR);
117 MACRO(MSG_OOB);
118 MACRO(MSG_NOSIGNAL);
119 MACRO(MSG_PEEK);
120 MACRO(MSG_TRUNC);
121 MACRO(MSG_WAITALL);
122
123 MACRO(AF_INET);
124 MACRO(AF_INET6);
125 MACRO(AF_UNIX);
126 MACRO_VALUE(AF_UNSPEC, 0);
127
128 MACRO(SHUT_RD);
129 MACRO(SHUT_RDWR);
130 MACRO(SHUT_WR);
131
132 TYPE(size_t);
133 TYPE(ssize_t);
134
135 FUNCTION(accept, int (*f)(int, struct sockaddr*, socklen_t*));
136 FUNCTION(bind, int (*f)(int, const struct sockaddr*, socklen_t));
137 FUNCTION(connect, int (*f)(int, const struct sockaddr*, socklen_t));
138 FUNCTION(getpeername, int (*f)(int, struct sockaddr*, socklen_t*));
139 FUNCTION(getsockname, int (*f)(int, struct sockaddr*, socklen_t*));
140 FUNCTION(getsockopt, int (*f)(int, int, int, void*, socklen_t*));
141 FUNCTION(listen, int (*f)(int, int));
142 FUNCTION(recv, ssize_t (*f)(int, void*, size_t, int));
143 FUNCTION(recvfrom, ssize_t (*f)(int, void*, size_t, int, struct sockaddr*, socklen_t*));
144 FUNCTION(send, ssize_t (*f)(int, const void*, size_t, int));
145 FUNCTION(sendmsg, ssize_t (*f)(int, const struct msghdr*, int));
146 FUNCTION(sendto, ssize_t (*f)(int, const void*, size_t, int, const struct sockaddr*, socklen_t));
147 FUNCTION(setsockopt, int (*f)(int, int, int, const void*, socklen_t));
148 FUNCTION(shutdown, int (*f)(int, int));
149 #if !defined(__BIONIC__) // Obsolete, plus ioctl disallowed by SELinux.
150 FUNCTION(sockatmark, int (*f)(int));
151 #endif
152 FUNCTION(socket, int (*f)(int, int, int));
153 FUNCTION(socketpair, int (*f)(int, int, int, int[2]));
154 }
155