11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions of source code must retain the above copyright
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    the documentation and/or other materials provided with the
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    distribution.
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
2843d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SYS_SOCKET_H_
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SYS_SOCKET_H_
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h>
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/socket.h>
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3643d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko#include <asm/fcntl.h>
3786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#include <asm/socket.h>
3886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#include <linux/sockios.h>
3986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#include <linux/uio.h>
4086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#include <linux/types.h>
4186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#include <linux/compiler.h>
4286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
4586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define sockaddr_storage __kernel_sockaddr_storage
469f87a0b285128542a221f2b69d3b959a4e33c054Elliott Hughestypedef unsigned short sa_family_t;
4786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
48a8b1eb3fcf13fab029a16fa3b6636218a64c4583Elliott Hughesstruct timespec;
49a8b1eb3fcf13fab029a16fa3b6636218a64c4583Elliott Hughes
506437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#ifdef __mips__
516437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_DGRAM      1
526437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_STREAM     2
536437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_RAW        3
546437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_RDM        4
556437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_SEQPACKET  5
566437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_DCCP       6
576437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#define SOCK_PACKET     10
586437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#else
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_STREAM      1
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_DGRAM       2
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_RAW         3
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_RDM         4
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_SEQPACKET   5
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SOCK_PACKET      10
656437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#endif
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
6743d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko#define SOCK_CLOEXEC O_CLOEXEC
6843d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko#define SOCK_NONBLOCK O_NONBLOCK
6943d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko
701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectenum {
7143d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko  SHUT_RD = 0,
721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SHUT_RD         SHUT_RD
7343d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko  SHUT_WR,
741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SHUT_WR         SHUT_WR
7543d2137af0e2f65b7febf4414e10b979aa0007bfAndrei Emeltchenko  SHUT_RDWR
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SHUT_RDWR       SHUT_RDWR
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
7986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughesstruct sockaddr {
806ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  sa_family_t sa_family;
816ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  char sa_data[14];
8286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes};
831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
8486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughesstruct linger {
856ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  int l_onoff;
866ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  int l_linger;
8786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes};
8886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
8986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughesstruct msghdr {
906ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  void* msg_name;
916ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  socklen_t msg_namelen;
926ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  struct iovec* msg_iov;
936ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  size_t msg_iovlen;
946ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  void* msg_control;
956ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  size_t msg_controllen;
966ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  int msg_flags;
976ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet};
986ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet
996ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquetstruct mmsghdr {
1006ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  struct msghdr msg_hdr;
1016ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  unsigned int msg_len;
10286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes};
10386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
10486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughesstruct cmsghdr {
1056ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  size_t cmsg_len;
1066ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  int cmsg_level;
1076ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  int cmsg_type;
10886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes};
10986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
110096b4eb752aa7a5392875cb2f2faf0d67c676ac1Calin Juravle#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr((mhdr), (cmsg))
11186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
1126ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet#define CMSG_DATA(cmsg) ((void*)((char*)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
11386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
11486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
115f1de90b3a26d6ec46c0f1c741ef93509fe69f942Calin Juravle#define CMSG_FIRSTHDR(msg) \
116f1de90b3a26d6ec46c0f1c741ef93509fe69f942Calin Juravle  ((msg)->msg_controllen >= sizeof(struct cmsghdr) \
117f1de90b3a26d6ec46c0f1c741ef93509fe69f942Calin Juravle   ? (struct cmsghdr*) (msg)->msg_control : (struct cmsghdr*) NULL)
1186ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) &&   (cmsg)->cmsg_len <= (unsigned long)   ((mhdr)->msg_controllen -   ((char*)(cmsg) - (char*)(mhdr)->msg_control)))
11986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
120096b4eb752aa7a5392875cb2f2faf0d67c676ac1Calin Juravlestruct cmsghdr* __cmsg_nxthdr(struct msghdr*, struct cmsghdr*);
12186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
12286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SCM_RIGHTS 0x01
12386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SCM_CREDENTIALS 0x02
12486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SCM_SECURITY 0x03
12586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
12686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughesstruct ucred {
1276ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  pid_t pid;
1286ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  uid_t uid;
1296ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet  gid_t gid;
13086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes};
13186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
13286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_UNSPEC 0
13386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_UNIX 1
13486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_LOCAL 1
13586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_INET 2
13686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_AX25 3
13786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_IPX 4
13886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_APPLETALK 5
13986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_NETROM 6
14086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_BRIDGE 7
14186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ATMPVC 8
14286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_X25 9
14386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_INET6 10
14486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ROSE 11
14586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_DECnet 12
14686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_NETBEUI 13
14786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_SECURITY 14
14886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_KEY 15
14986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_NETLINK 16
15086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ROUTE AF_NETLINK
15186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_PACKET 17
15286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ASH 18
15386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ECONET 19
15486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_ATMSVC 20
155d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_RDS 21
15686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_SNA 22
15786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_IRDA 23
15886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_PPPOX 24
15986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_WANPIPE 25
16086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_LLC 26
161d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_CAN 29
16286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_TIPC 30
16386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_BLUETOOTH 31
164d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_IUCV 32
165d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_RXRPC 33
166d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_ISDN 34
167d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_PHONET 35
168d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_IEEE802154 36
169d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_CAIF 37
170d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define AF_ALG 38
17186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define AF_MAX 39
17286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
17386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_UNSPEC AF_UNSPEC
17486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_UNIX AF_UNIX
17586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_LOCAL AF_LOCAL
17686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_INET AF_INET
17786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_AX25 AF_AX25
17886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_IPX AF_IPX
17986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_APPLETALK AF_APPLETALK
18086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_NETROM AF_NETROM
18186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_BRIDGE AF_BRIDGE
18286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ATMPVC AF_ATMPVC
18386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_X25 AF_X25
18486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_INET6 AF_INET6
18586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ROSE AF_ROSE
18686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_DECnet AF_DECnet
18786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_NETBEUI AF_NETBEUI
18886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_SECURITY AF_SECURITY
18986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_KEY AF_KEY
19086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_NETLINK AF_NETLINK
19186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ROUTE AF_ROUTE
19286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_PACKET AF_PACKET
19386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ASH AF_ASH
19486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ECONET AF_ECONET
19586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_ATMSVC AF_ATMSVC
196d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_RDS AF_RDS
19786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_SNA AF_SNA
19886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_IRDA AF_IRDA
19986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_PPPOX AF_PPPOX
20086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_WANPIPE AF_WANPIPE
20186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_LLC AF_LLC
202d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_CAN AF_CAN
20386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_TIPC AF_TIPC
20486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_BLUETOOTH AF_BLUETOOTH
205d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_IUCV AF_IUCV
206d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_RXRPC AF_RXRPC
207d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_ISDN AF_ISDN
208d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_PHONET AF_PHONET
209d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_IEEE802154 AF_IEEE802154
21086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_CAIF AF_CAIF
211d73c0b300e2dbaa4cc59f87fc1435661e5e1c736Elliott Hughes#define PF_ALG AF_ALG
21286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define PF_MAX AF_MAX
21386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
21486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOMAXCONN 128
21586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
21686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_OOB 1
21786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_PEEK 2
21886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_DONTROUTE 4
21986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_TRYHARD 4
22086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_CTRUNC 8
22186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_PROBE 0x10
22286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_TRUNC 0x20
22386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_DONTWAIT 0x40
22486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_EOR 0x80
22586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_WAITALL 0x100
22686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_FIN 0x200
22786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_SYN 0x400
22886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_CONFIRM 0x800
22986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_RST 0x1000
23086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_ERRQUEUE 0x2000
23186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_NOSIGNAL 0x4000
23286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_MORE 0x8000
2336ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet#define MSG_WAITFORONE 0x10000
2346ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet#define MSG_FASTOPEN 0x20000000
2356ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet#define MSG_CMSG_CLOEXEC 0x40000000
23686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_EOF MSG_FIN
23786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define MSG_CMSG_COMPAT 0
23886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
23986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_IP 0
24086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_TCP 6
24186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_UDP 17
24286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_IPV6 41
24386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_ICMPV6 58
24486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_SCTP 132
24586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_RAW 255
24686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_IPX 256
24786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_AX25 257
24886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_ATALK 258
24986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_NETROM 259
25086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_ROSE 260
25186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_DECNET 261
25286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_X25 262
25386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_PACKET 263
25486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_ATM 264
25586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_AAL 265
25686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_IRDA 266
25786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_NETBEUI 267
25886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_LLC 268
25986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_DCCP 269
26086ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_NETLINK 270
26186ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define SOL_TIPC 271
26286ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
26386ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#define IPX_TYPE 1
26486ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes
26586ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#ifdef __i386__
26686ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes# define __socketcall extern __attribute__((__cdecl__))
26786ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#else
26886ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes# define __socketcall extern
26986ec05acc9df3098c4e99e5b3ad85dcef66712c7Elliott Hughes#endif
2701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2716ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int accept(int, struct sockaddr*, socklen_t*);
2729cea3775056d0a8d04d49c3983440b89d82a462bChristopher Ferris__socketcall int accept4(int, struct sockaddr*, socklen_t*, int);
2736ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int bind(int, const struct sockaddr*, int);
2746ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int connect(int, const struct sockaddr*, socklen_t);
2756ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int getpeername(int, struct sockaddr*, socklen_t*);
2766ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int getsockname(int, struct sockaddr*, socklen_t*);
2776ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int getsockopt(int, int, int, void*, socklen_t*);
2781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__socketcall int listen(int, int);
2796ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*);
280247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes__socketcall int recvmsg(int, struct msghdr*, int);
2816ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int sendmmsg(int, const struct mmsghdr*, unsigned int, int);
282247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes__socketcall int sendmsg(int, const struct msghdr*, int);
2836ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int setsockopt(int, int, int, const void*, socklen_t);
2841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__socketcall int shutdown(int, int);
2856ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int socket(int, int, int);
2866ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall int socketpair(int, int, int, int*);
2871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
288247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesextern ssize_t send(int, const void*, size_t, int);
289247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesextern ssize_t recv(int, void*, size_t, int);
2901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2916ff0c75c838e73d2aeccc0102ab58a7b865172caGuillaume Ranquet__socketcall ssize_t sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t);
292247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes__socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, socklen_t*);
2931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
29460f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich#if defined(__BIONIC_FORTIFY)
29560f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich__errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer");
296247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesextern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*);
297247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesextern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*)
29860f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich    __asm__(__USER_LABEL_PREFIX__ "recvfrom");
29960f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
30060f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich__BIONIC_FORTIFY_INLINE
301247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) {
30260f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  size_t bos = __bos0(buf);
30360f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
30460f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich#if !defined(__clang__)
30560f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
306247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes    return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len);
30760f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  }
30860f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
30960f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  if (__builtin_constant_p(len) && (len <= bos)) {
310247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes    return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len);
31160f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  }
31260f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
31360f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  if (__builtin_constant_p(len) && (len > bos)) {
31460f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich    __recvfrom_error();
31560f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich  }
31660f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich#endif
31760f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
318247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes  return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len);
31960f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich}
32060f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
32160f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich__BIONIC_FORTIFY_INLINE
322247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughesssize_t recv(int socket, void* buf, size_t len, int flags) {
323247dc91889ffc8b71fc3371edba9d834afab96abElliott Hughes  return recvfrom(socket, buf, len, flags, NULL, 0);
32460f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich}
32560f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
32660f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich#endif /* __BIONIC_FORTIFY */
32760f4f9a5b99a0a66817f50edfc2194a49f8b5146Nick Kralevich
3281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#undef __socketcall
3291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
3311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SYS_SOCKET_H */
333