140dbba57SAssar Westerlund /*- 2*7f2d13d6SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3*7f2d13d6SPedro F. Giffuni * 440dbba57SAssar Westerlund * Copyright (c) 2000 Assar Westerlund 540dbba57SAssar Westerlund * All rights reserved. 640dbba57SAssar Westerlund * 740dbba57SAssar Westerlund * Redistribution and use in source and binary forms, with or without 840dbba57SAssar Westerlund * modification, are permitted provided that the following conditions 940dbba57SAssar Westerlund * are met: 1040dbba57SAssar Westerlund * 1. Redistributions of source code must retain the above copyright 1140dbba57SAssar Westerlund * notice, this list of conditions and the following disclaimer 1240dbba57SAssar Westerlund * in this position and unchanged. 1340dbba57SAssar Westerlund * 2. Redistributions in binary form must reproduce the above copyright 1440dbba57SAssar Westerlund * notice, this list of conditions and the following disclaimer in the 1540dbba57SAssar Westerlund * documentation and/or other materials provided with the distribution. 1640dbba57SAssar Westerlund * 3. The name of the author may not be used to endorse or promote products 1721dc7d4fSJens Schweikhardt * derived from this software without specific prior written permission 1840dbba57SAssar Westerlund * 1940dbba57SAssar Westerlund * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2040dbba57SAssar Westerlund * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2140dbba57SAssar Westerlund * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2240dbba57SAssar Westerlund * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2340dbba57SAssar Westerlund * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2440dbba57SAssar Westerlund * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2540dbba57SAssar Westerlund * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2640dbba57SAssar Westerlund * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2740dbba57SAssar Westerlund * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2840dbba57SAssar Westerlund * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2940dbba57SAssar Westerlund * 3040dbba57SAssar Westerlund * $FreeBSD$ 3140dbba57SAssar Westerlund */ 3240dbba57SAssar Westerlund 3340dbba57SAssar Westerlund #ifndef _LINUX_SOCKET_H_ 3440dbba57SAssar Westerlund #define _LINUX_SOCKET_H_ 3540dbba57SAssar Westerlund 3640dbba57SAssar Westerlund /* msg flags in recvfrom/recvmsg */ 3740dbba57SAssar Westerlund 3840dbba57SAssar Westerlund #define LINUX_MSG_OOB 0x01 3940dbba57SAssar Westerlund #define LINUX_MSG_PEEK 0x02 4040dbba57SAssar Westerlund #define LINUX_MSG_DONTROUTE 0x04 4140dbba57SAssar Westerlund #define LINUX_MSG_CTRUNC 0x08 4240dbba57SAssar Westerlund #define LINUX_MSG_PROXY 0x10 4340dbba57SAssar Westerlund #define LINUX_MSG_TRUNC 0x20 4440dbba57SAssar Westerlund #define LINUX_MSG_DONTWAIT 0x40 4540dbba57SAssar Westerlund #define LINUX_MSG_EOR 0x80 4640dbba57SAssar Westerlund #define LINUX_MSG_WAITALL 0x100 4740dbba57SAssar Westerlund #define LINUX_MSG_FIN 0x200 4840dbba57SAssar Westerlund #define LINUX_MSG_SYN 0x400 4940dbba57SAssar Westerlund #define LINUX_MSG_CONFIRM 0x800 5040dbba57SAssar Westerlund #define LINUX_MSG_RST 0x1000 5140dbba57SAssar Westerlund #define LINUX_MSG_ERRQUEUE 0x2000 5240dbba57SAssar Westerlund #define LINUX_MSG_NOSIGNAL 0x4000 53e1ff74c0SDmitry Chagin #define LINUX_MSG_WAITFORONE 0x10000 543a72bf04SDmitry Chagin #define LINUX_MSG_CMSG_CLOEXEC 0x40000000 5540dbba57SAssar Westerlund 5674f5d680SKonstantin Belousov /* Socket-level control message types */ 5774f5d680SKonstantin Belousov 5874f5d680SKonstantin Belousov #define LINUX_SCM_RIGHTS 0x01 59605da56bSAndriy Gapon #define LINUX_SCM_CREDENTIALS 0x02 60bbf392d5SDmitry Chagin #define LINUX_SCM_TIMESTAMP 0x1D 6174f5d680SKonstantin Belousov 62b7aaa9fdSDmitry Chagin struct l_msghdr { 63b7aaa9fdSDmitry Chagin l_uintptr_t msg_name; 64b7aaa9fdSDmitry Chagin l_int msg_namelen; 65b7aaa9fdSDmitry Chagin l_uintptr_t msg_iov; 66b7aaa9fdSDmitry Chagin l_size_t msg_iovlen; 67b7aaa9fdSDmitry Chagin l_uintptr_t msg_control; 68b7aaa9fdSDmitry Chagin l_size_t msg_controllen; 69b7aaa9fdSDmitry Chagin l_uint msg_flags; 70b7aaa9fdSDmitry Chagin }; 71b7aaa9fdSDmitry Chagin 72e1ff74c0SDmitry Chagin struct l_mmsghdr { 73e1ff74c0SDmitry Chagin struct l_msghdr msg_hdr; 74e1ff74c0SDmitry Chagin l_uint msg_len; 75e1ff74c0SDmitry Chagin 76e1ff74c0SDmitry Chagin }; 77e1ff74c0SDmitry Chagin 78b7aaa9fdSDmitry Chagin struct l_cmsghdr { 79b7aaa9fdSDmitry Chagin l_size_t cmsg_len; 80b7aaa9fdSDmitry Chagin l_int cmsg_level; 81b7aaa9fdSDmitry Chagin l_int cmsg_type; 82b7aaa9fdSDmitry Chagin }; 83b7aaa9fdSDmitry Chagin 841ce4275dSPedro F. Giffuni /* Ancillary data object information macros */ 8574f5d680SKonstantin Belousov 8674f5d680SKonstantin Belousov #define LINUX_CMSG_ALIGN(len) roundup2(len, sizeof(l_ulong)) 8774f5d680SKonstantin Belousov #define LINUX_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + \ 8874f5d680SKonstantin Belousov LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr)))) 8974f5d680SKonstantin Belousov #define LINUX_CMSG_SPACE(len) (LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr)) + \ 9074f5d680SKonstantin Belousov LINUX_CMSG_ALIGN(len)) 9174f5d680SKonstantin Belousov #define LINUX_CMSG_LEN(len) (LINUX_CMSG_ALIGN(sizeof(struct l_cmsghdr)) + \ 9274f5d680SKonstantin Belousov (len)) 9374f5d680SKonstantin Belousov #define LINUX_CMSG_FIRSTHDR(msg) \ 9474f5d680SKonstantin Belousov ((msg)->msg_controllen >= \ 9574f5d680SKonstantin Belousov sizeof(struct l_cmsghdr) ? \ 96605da56bSAndriy Gapon (struct l_cmsghdr *) \ 97605da56bSAndriy Gapon PTRIN((msg)->msg_control) : \ 9874f5d680SKonstantin Belousov (struct l_cmsghdr *)(NULL)) 9974f5d680SKonstantin Belousov #define LINUX_CMSG_NXTHDR(msg, cmsg) \ 10074f5d680SKonstantin Belousov ((((char *)(cmsg) + \ 10174f5d680SKonstantin Belousov LINUX_CMSG_ALIGN((cmsg)->cmsg_len) + \ 10274f5d680SKonstantin Belousov sizeof(*(cmsg))) > \ 103605da56bSAndriy Gapon (((char *)PTRIN((msg)->msg_control)) + \ 10474f5d680SKonstantin Belousov (msg)->msg_controllen)) ? \ 10574f5d680SKonstantin Belousov (struct l_cmsghdr *) NULL : \ 10674f5d680SKonstantin Belousov (struct l_cmsghdr *)((char *)(cmsg) + \ 10774f5d680SKonstantin Belousov LINUX_CMSG_ALIGN((cmsg)->cmsg_len))) 10874f5d680SKonstantin Belousov 10974f5d680SKonstantin Belousov #define CMSG_HDRSZ CMSG_LEN(0) 11074f5d680SKonstantin Belousov #define L_CMSG_HDRSZ LINUX_CMSG_LEN(0) 11174f5d680SKonstantin Belousov 11213f20d7eSDmitry Chagin /* Supported address families */ 11313f20d7eSDmitry Chagin 11413f20d7eSDmitry Chagin #define LINUX_AF_UNSPEC 0 11513f20d7eSDmitry Chagin #define LINUX_AF_UNIX 1 11613f20d7eSDmitry Chagin #define LINUX_AF_INET 2 11713f20d7eSDmitry Chagin #define LINUX_AF_AX25 3 11813f20d7eSDmitry Chagin #define LINUX_AF_IPX 4 11913f20d7eSDmitry Chagin #define LINUX_AF_APPLETALK 5 12013f20d7eSDmitry Chagin #define LINUX_AF_INET6 10 12113f20d7eSDmitry Chagin 122eeb63e51SDmitry Chagin /* Supported socket types */ 123eeb63e51SDmitry Chagin 124eeb63e51SDmitry Chagin #define LINUX_SOCK_STREAM 1 125eeb63e51SDmitry Chagin #define LINUX_SOCK_DGRAM 2 126eeb63e51SDmitry Chagin #define LINUX_SOCK_RAW 3 127eeb63e51SDmitry Chagin #define LINUX_SOCK_RDM 4 128eeb63e51SDmitry Chagin #define LINUX_SOCK_SEQPACKET 5 129eeb63e51SDmitry Chagin 130eeb63e51SDmitry Chagin #define LINUX_SOCK_MAX LINUX_SOCK_SEQPACKET 131eeb63e51SDmitry Chagin 1323933bde2SDmitry Chagin #define LINUX_SOCK_TYPE_MASK 0xf 1333933bde2SDmitry Chagin 1343933bde2SDmitry Chagin /* Flags for socket, socketpair, accept4 */ 1353933bde2SDmitry Chagin 1363933bde2SDmitry Chagin #define LINUX_SOCK_CLOEXEC LINUX_O_CLOEXEC 1373933bde2SDmitry Chagin #define LINUX_SOCK_NONBLOCK LINUX_O_NONBLOCK 1383933bde2SDmitry Chagin 139d4dd69c4SDmitry Chagin struct l_ucred { 140d4dd69c4SDmitry Chagin uint32_t pid; 141d4dd69c4SDmitry Chagin uint32_t uid; 142d4dd69c4SDmitry Chagin uint32_t gid; 143d4dd69c4SDmitry Chagin }; 144d4dd69c4SDmitry Chagin 145a12b9b3dSDmitry Chagin #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) 146a12b9b3dSDmitry Chagin struct linux_accept_args { 14756fba8e6SDmitry Chagin register_t s; 14856fba8e6SDmitry Chagin register_t addr; 14956fba8e6SDmitry Chagin register_t namelen; 150a12b9b3dSDmitry Chagin }; 151a12b9b3dSDmitry Chagin 152a12b9b3dSDmitry Chagin int linux_accept(struct thread *td, struct linux_accept_args *args); 153a12b9b3dSDmitry Chagin 154d825ce0aSJohn Baldwin /* Operations for socketcall */ 155d825ce0aSJohn Baldwin #define LINUX_SOCKET 1 156d825ce0aSJohn Baldwin #define LINUX_BIND 2 157d825ce0aSJohn Baldwin #define LINUX_CONNECT 3 158d825ce0aSJohn Baldwin #define LINUX_LISTEN 4 159d825ce0aSJohn Baldwin #define LINUX_ACCEPT 5 160d825ce0aSJohn Baldwin #define LINUX_GETSOCKNAME 6 161d825ce0aSJohn Baldwin #define LINUX_GETPEERNAME 7 162d825ce0aSJohn Baldwin #define LINUX_SOCKETPAIR 8 163d825ce0aSJohn Baldwin #define LINUX_SEND 9 164d825ce0aSJohn Baldwin #define LINUX_RECV 10 165d825ce0aSJohn Baldwin #define LINUX_SENDTO 11 166d825ce0aSJohn Baldwin #define LINUX_RECVFROM 12 167d825ce0aSJohn Baldwin #define LINUX_SHUTDOWN 13 168d825ce0aSJohn Baldwin #define LINUX_SETSOCKOPT 14 169d825ce0aSJohn Baldwin #define LINUX_GETSOCKOPT 15 170d825ce0aSJohn Baldwin #define LINUX_SENDMSG 16 171d825ce0aSJohn Baldwin #define LINUX_RECVMSG 17 172d825ce0aSJohn Baldwin #define LINUX_ACCEPT4 18 173e1ff74c0SDmitry Chagin #define LINUX_RECVMMSG 19 174e1ff74c0SDmitry Chagin #define LINUX_SENDMMSG 20 175c1c8a121SDmitry Chagin #endif /* __i386__ || (__amd64__ && COMPAT_LINUX32) */ 176d825ce0aSJohn Baldwin 17785712939SDmitry Chagin /* Socket defines */ 17885712939SDmitry Chagin #define LINUX_SOL_SOCKET 1 17985712939SDmitry Chagin #define LINUX_SOL_IP 0 18085712939SDmitry Chagin #define LINUX_SOL_TCP 6 18185712939SDmitry Chagin #define LINUX_SOL_UDP 17 18285712939SDmitry Chagin #define LINUX_SOL_IPV6 41 18385712939SDmitry Chagin #define LINUX_SOL_IPX 256 18485712939SDmitry Chagin #define LINUX_SOL_AX25 257 18585712939SDmitry Chagin 18685712939SDmitry Chagin #define LINUX_SO_DEBUG 1 18785712939SDmitry Chagin #define LINUX_SO_REUSEADDR 2 18885712939SDmitry Chagin #define LINUX_SO_TYPE 3 18985712939SDmitry Chagin #define LINUX_SO_ERROR 4 19085712939SDmitry Chagin #define LINUX_SO_DONTROUTE 5 19185712939SDmitry Chagin #define LINUX_SO_BROADCAST 6 19285712939SDmitry Chagin #define LINUX_SO_SNDBUF 7 19385712939SDmitry Chagin #define LINUX_SO_RCVBUF 8 19485712939SDmitry Chagin #define LINUX_SO_KEEPALIVE 9 19585712939SDmitry Chagin #define LINUX_SO_OOBINLINE 10 19685712939SDmitry Chagin #define LINUX_SO_NO_CHECK 11 19785712939SDmitry Chagin #define LINUX_SO_PRIORITY 12 19885712939SDmitry Chagin #define LINUX_SO_LINGER 13 19985712939SDmitry Chagin #ifndef LINUX_SO_PASSCRED /* powerpc differs */ 20085712939SDmitry Chagin #define LINUX_SO_PASSCRED 16 20185712939SDmitry Chagin #define LINUX_SO_PEERCRED 17 20285712939SDmitry Chagin #define LINUX_SO_RCVLOWAT 18 20385712939SDmitry Chagin #define LINUX_SO_SNDLOWAT 19 20485712939SDmitry Chagin #define LINUX_SO_RCVTIMEO 20 20585712939SDmitry Chagin #define LINUX_SO_SNDTIMEO 21 20685712939SDmitry Chagin #endif 20785712939SDmitry Chagin #define LINUX_SO_TIMESTAMP 29 20885712939SDmitry Chagin #define LINUX_SO_ACCEPTCONN 30 20985712939SDmitry Chagin 210d825ce0aSJohn Baldwin /* Socket options */ 211d825ce0aSJohn Baldwin #define LINUX_IP_TOS 1 212d825ce0aSJohn Baldwin #define LINUX_IP_TTL 2 213d825ce0aSJohn Baldwin #define LINUX_IP_HDRINCL 3 214d825ce0aSJohn Baldwin #define LINUX_IP_OPTIONS 4 215d825ce0aSJohn Baldwin 216d825ce0aSJohn Baldwin #define LINUX_IP_MULTICAST_IF 32 217d825ce0aSJohn Baldwin #define LINUX_IP_MULTICAST_TTL 33 218d825ce0aSJohn Baldwin #define LINUX_IP_MULTICAST_LOOP 34 219d825ce0aSJohn Baldwin #define LINUX_IP_ADD_MEMBERSHIP 35 220d825ce0aSJohn Baldwin #define LINUX_IP_DROP_MEMBERSHIP 36 221d825ce0aSJohn Baldwin 22286a9058bSAndrey V. Elsukov #define LINUX_IPV6_CHECKSUM 7 22386a9058bSAndrey V. Elsukov #define LINUX_IPV6_NEXTHOP 9 22486a9058bSAndrey V. Elsukov #define LINUX_IPV6_UNICAST_HOPS 16 22586a9058bSAndrey V. Elsukov #define LINUX_IPV6_MULTICAST_IF 17 22686a9058bSAndrey V. Elsukov #define LINUX_IPV6_MULTICAST_HOPS 18 22786a9058bSAndrey V. Elsukov #define LINUX_IPV6_MULTICAST_LOOP 19 22886a9058bSAndrey V. Elsukov #define LINUX_IPV6_ADD_MEMBERSHIP 20 22986a9058bSAndrey V. Elsukov #define LINUX_IPV6_DROP_MEMBERSHIP 21 23086a9058bSAndrey V. Elsukov #define LINUX_IPV6_V6ONLY 26 23186a9058bSAndrey V. Elsukov 23286a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVPKTINFO 49 23386a9058bSAndrey V. Elsukov #define LINUX_IPV6_PKTINFO 50 23486a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVHOPLIMIT 51 23586a9058bSAndrey V. Elsukov #define LINUX_IPV6_HOPLIMIT 52 23686a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVHOPOPTS 53 23786a9058bSAndrey V. Elsukov #define LINUX_IPV6_HOPOPTS 54 23886a9058bSAndrey V. Elsukov #define LINUX_IPV6_RTHDRDSTOPTS 55 23986a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVRTHDR 56 24086a9058bSAndrey V. Elsukov #define LINUX_IPV6_RTHDR 57 24186a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVDSTOPTS 58 24286a9058bSAndrey V. Elsukov #define LINUX_IPV6_DSTOPTS 59 24386a9058bSAndrey V. Elsukov #define LINUX_IPV6_RECVPATHMTU 60 24486a9058bSAndrey V. Elsukov #define LINUX_IPV6_PATHMTU 61 24586a9058bSAndrey V. Elsukov #define LINUX_IPV6_DONTFRAG 62 24686a9058bSAndrey V. Elsukov 247d825ce0aSJohn Baldwin #define LINUX_TCP_NODELAY 1 248d825ce0aSJohn Baldwin #define LINUX_TCP_MAXSEG 2 249d825ce0aSJohn Baldwin #define LINUX_TCP_KEEPIDLE 4 250d825ce0aSJohn Baldwin #define LINUX_TCP_KEEPINTVL 5 251d825ce0aSJohn Baldwin #define LINUX_TCP_KEEPCNT 6 252d825ce0aSJohn Baldwin #define LINUX_TCP_MD5SIG 14 253d825ce0aSJohn Baldwin 25440dbba57SAssar Westerlund #endif /* _LINUX_SOCKET_H_ */ 255