• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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