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