411 lines
14 KiB
C
411 lines
14 KiB
C
|
#ifndef _SYS_SOCKET_H
|
||
|
#define _SYS_SOCKET_H
|
||
|
|
||
|
#include <sys/cdefs.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <inttypes.h>
|
||
|
|
||
|
__BEGIN_DECLS
|
||
|
|
||
|
#define SOL_SOCKET 1
|
||
|
|
||
|
#define SO_DEBUG 1
|
||
|
#define SO_REUSEADDR 2
|
||
|
#define SO_TYPE 3
|
||
|
#define SO_ERROR 4
|
||
|
#define SO_DONTROUTE 5
|
||
|
#define SO_BROADCAST 6
|
||
|
#define SO_SNDBUF 7
|
||
|
#define SO_RCVBUF 8
|
||
|
#define SO_KEEPALIVE 9
|
||
|
#define SO_OOBINLINE 10
|
||
|
#define SO_NO_CHECK 11
|
||
|
#define SO_PRIORITY 12
|
||
|
#define SO_LINGER 13
|
||
|
#define SO_BSDCOMPAT 14
|
||
|
/* To add :#define SO_REUSEPORT 15 */
|
||
|
#define SO_PASSCRED 16
|
||
|
#define SO_PEERCRED 17
|
||
|
#define SO_RCVLOWAT 18
|
||
|
#define SO_SNDLOWAT 19
|
||
|
#define SO_RCVTIMEO 20
|
||
|
#define SO_SNDTIMEO 21
|
||
|
#define SO_ACCEPTCONN 30
|
||
|
|
||
|
/* Security levels - as per NRL IPv6 - don't actually do anything */
|
||
|
#define SO_SECURITY_AUTHENTICATION 22
|
||
|
#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
|
||
|
#define SO_SECURITY_ENCRYPTION_NETWORK 24
|
||
|
|
||
|
#define SO_BINDTODEVICE 25
|
||
|
|
||
|
/* Socket filtering */
|
||
|
#define SO_ATTACH_FILTER 26
|
||
|
#define SO_DETACH_FILTER 27
|
||
|
|
||
|
#define SO_PEERNAME 28
|
||
|
#define SO_TIMESTAMP 29
|
||
|
#define SCM_TIMESTAMP SO_TIMESTAMP
|
||
|
|
||
|
/* Socket types. */
|
||
|
#define SOCK_STREAM 1 /* stream (connection) socket */
|
||
|
#define SOCK_DGRAM 2 /* datagram (conn.less) socket */
|
||
|
#define SOCK_RAW 3 /* raw socket */
|
||
|
#define SOCK_RDM 4 /* reliably-delivered message */
|
||
|
#define SOCK_SEQPACKET 5 /* sequential packet socket */
|
||
|
#define SOCK_PACKET 10 /* linux specific way of */
|
||
|
/* getting packets at the dev */
|
||
|
/* level. For writing rarp and */
|
||
|
/* other similar things on the */
|
||
|
/* user level. */
|
||
|
|
||
|
struct sockaddr {
|
||
|
sa_family_t sa_family;
|
||
|
char sa_data[14];
|
||
|
};
|
||
|
|
||
|
struct linger {
|
||
|
int l_onoff;
|
||
|
int l_linger;
|
||
|
};
|
||
|
|
||
|
struct iovec {
|
||
|
void* iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
|
||
|
size_t iov_len; /* Must be size_t (1003.1g) */
|
||
|
};
|
||
|
|
||
|
struct msghdr {
|
||
|
void* msg_name; /* Socket name */
|
||
|
int msg_namelen; /* Length of name */
|
||
|
struct iovec* msg_iov; /* Data blocks */
|
||
|
size_t msg_iovlen; /* Number of blocks */
|
||
|
void* msg_control; /* Per protocol magic (eg BSD file descriptor passing) */
|
||
|
size_t msg_controllen; /* Length of cmsg list */
|
||
|
unsigned msg_flags;
|
||
|
};
|
||
|
|
||
|
struct cmsghdr {
|
||
|
size_t cmsg_len; /* data byte count, including hdr */
|
||
|
int cmsg_level; /* originating protocol */
|
||
|
int cmsg_type; /* protocol-specific type */
|
||
|
};
|
||
|
|
||
|
#define UIO_FASTIOV 8
|
||
|
#define UIO_MAXIOV 1024
|
||
|
|
||
|
/* "Socket"-level control message types: */
|
||
|
|
||
|
#define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
|
||
|
#define SCM_CREDENTIALS 0x02 /* rw: struct ucred */
|
||
|
#define SCM_CONNECT 0x03 /* rw: struct scm_connect */
|
||
|
|
||
|
struct ucred {
|
||
|
unsigned int pid;
|
||
|
unsigned int uid;
|
||
|
unsigned int gid;
|
||
|
};
|
||
|
|
||
|
/* Supported address families. */
|
||
|
#define AF_UNSPEC 0
|
||
|
#define AF_UNIX 1 /* Unix domain sockets */
|
||
|
#define AF_LOCAL 1 /* POSIX name for AF_UNIX */
|
||
|
#define AF_INET 2 /* Internet IP Protocol */
|
||
|
#define AF_AX25 3 /* Amateur Radio AX.25 */
|
||
|
#define AF_IPX 4 /* Novell IPX */
|
||
|
#define AF_APPLETALK 5 /* AppleTalk DDP */
|
||
|
#define AF_NETROM 6 /* Amateur Radio NET/ROM */
|
||
|
#define AF_BRIDGE 7 /* Multiprotocol bridge */
|
||
|
#define AF_ATMPVC 8 /* ATM PVCs */
|
||
|
#define AF_X25 9 /* Reserved for X.25 project */
|
||
|
#define AF_INET6 10 /* IP version 6 */
|
||
|
#define AF_ROSE 11 /* Amateur Radio X.25 PLP */
|
||
|
#define AF_DECnet 12 /* Reserved for DECnet project */
|
||
|
#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/
|
||
|
#define AF_SECURITY 14 /* Security callback pseudo AF */
|
||
|
#define AF_KEY 15 /* PF_KEY key management API */
|
||
|
#define AF_NETLINK 16
|
||
|
#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */
|
||
|
#define AF_PACKET 17 /* Packet family */
|
||
|
#define AF_ASH 18 /* Ash */
|
||
|
#define AF_ECONET 19 /* Acorn Econet */
|
||
|
#define AF_ATMSVC 20 /* ATM SVCs */
|
||
|
#define AF_SNA 22 /* Linux SNA Project (nutters!) */
|
||
|
#define AF_IRDA 23 /* IRDA sockets */
|
||
|
#define AF_PPPOX 24 /* PPPoX sockets */
|
||
|
#define AF_WANPIPE 25 /* Wanpipe API Sockets */
|
||
|
#define AF_MAX 32 /* For now.. */
|
||
|
|
||
|
/* Protocol families, same as address families. */
|
||
|
#define PF_UNSPEC AF_UNSPEC
|
||
|
#define PF_UNIX AF_UNIX
|
||
|
#define PF_LOCAL AF_LOCAL
|
||
|
#define PF_INET AF_INET
|
||
|
#define PF_AX25 AF_AX25
|
||
|
#define PF_IPX AF_IPX
|
||
|
#define PF_APPLETALK AF_APPLETALK
|
||
|
#define PF_NETROM AF_NETROM
|
||
|
#define PF_BRIDGE AF_BRIDGE
|
||
|
#define PF_ATMPVC AF_ATMPVC
|
||
|
#define PF_X25 AF_X25
|
||
|
#define PF_INET6 AF_INET6
|
||
|
#define PF_ROSE AF_ROSE
|
||
|
#define PF_DECnet AF_DECnet
|
||
|
#define PF_NETBEUI AF_NETBEUI
|
||
|
#define PF_SECURITY AF_SECURITY
|
||
|
#define PF_KEY AF_KEY
|
||
|
#define PF_NETLINK AF_NETLINK
|
||
|
#define PF_ROUTE AF_ROUTE
|
||
|
#define PF_PACKET AF_PACKET
|
||
|
#define PF_ASH AF_ASH
|
||
|
#define PF_ECONET AF_ECONET
|
||
|
#define PF_ATMSVC AF_ATMSVC
|
||
|
#define PF_SNA AF_SNA
|
||
|
#define PF_IRDA AF_IRDA
|
||
|
#define PF_PPPOX AF_PPPOX
|
||
|
#define PF_WANPIPE AF_WANPIPE
|
||
|
#define PF_MAX AF_MAX
|
||
|
|
||
|
/* Maximum queue length specifiable by listen. */
|
||
|
#define SOMAXCONN 128
|
||
|
|
||
|
/* Flags we can use with send/ and recv.
|
||
|
Added those for 1003.1g not all are supported yet */
|
||
|
#define MSG_OOB 1
|
||
|
#define MSG_PEEK 2
|
||
|
#define MSG_DONTROUTE 4
|
||
|
#define MSG_TRYHARD 4 /* Synonym for MSG_DONTROUTE for DECnet */
|
||
|
#define MSG_CTRUNC 8
|
||
|
#define MSG_PROBE 0x10 /* Do not send. Only probe path f.e. for MTU */
|
||
|
#define MSG_TRUNC 0x20
|
||
|
#define MSG_DONTWAIT 0x40 /* Nonblocking io */
|
||
|
#define MSG_EOR 0x80 /* End of record */
|
||
|
#define MSG_WAITALL 0x100 /* Wait for a full request */
|
||
|
#define MSG_FIN 0x200
|
||
|
#define MSG_EOF MSG_FIN
|
||
|
#define MSG_SYN 0x400
|
||
|
#define MSG_CONFIRM 0x800 /* Confirm path validity */
|
||
|
#define MSG_RST 0x1000
|
||
|
#define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */
|
||
|
#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
|
||
|
#define MSG_MORE 0x8000 /* Sender will send more */
|
||
|
|
||
|
/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
|
||
|
#define SOL_IP 0
|
||
|
/* #define SOL_ICMP 1 No-no-no! Due to Linux :-) we cannot use SOL_ICMP=1 */
|
||
|
#define SOL_TCP 6
|
||
|
#define SOL_UDP 17
|
||
|
#define SOL_IPV6 41
|
||
|
#define SOL_ICMPV6 58
|
||
|
#define SOL_RAW 255
|
||
|
#define SOL_IPX 256
|
||
|
#define SOL_AX25 257
|
||
|
#define SOL_ATALK 258
|
||
|
#define SOL_NETROM 259
|
||
|
#define SOL_ROSE 260
|
||
|
#define SOL_DECNET 261
|
||
|
#define SOL_X25 262
|
||
|
#define SOL_PACKET 263
|
||
|
#define SOL_ATM 264 /* ATM layer (cell level) */
|
||
|
#define SOL_AAL 265 /* ATM Adaption Layer (packet level) */
|
||
|
#define SOL_IRDA 266
|
||
|
|
||
|
/* IPX options */
|
||
|
#define IPX_TYPE 1
|
||
|
|
||
|
#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
|
||
|
#define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg))
|
||
|
#define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg))
|
||
|
|
||
|
static inline struct cmsghdr* __cmsg_nxthdr(void *__ctl, size_t __size, struct cmsghdr *__cmsg)
|
||
|
{
|
||
|
struct cmsghdr * __ptr;
|
||
|
__ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
|
||
|
if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
|
||
|
return (struct cmsghdr *)0;
|
||
|
return __ptr;
|
||
|
}
|
||
|
|
||
|
static inline struct cmsghdr* cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
|
||
|
{
|
||
|
return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
|
||
|
}
|
||
|
|
||
|
#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
|
||
|
#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
|
||
|
#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
|
||
|
|
||
|
#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \
|
||
|
(struct cmsghdr *)(ctl) : \
|
||
|
(struct cmsghdr *)NULL)
|
||
|
#define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
|
||
|
|
||
|
struct sockaddr_storage {
|
||
|
sa_family_t ss_family;
|
||
|
uint32_t __ss_align;
|
||
|
char __ss_padding[(128 - (2 * sizeof (uint32_t ))) ];
|
||
|
};
|
||
|
|
||
|
#ifndef SOCK_DGRAM
|
||
|
/* the Linux kernel headers suck really badly on non-x86 */
|
||
|
#define SOCK_STREAM 1 /* stream (connection) socket */
|
||
|
#define SOCK_DGRAM 2 /* datagram (conn.less) socket */
|
||
|
#define SOCK_RAW 3 /* raw socket */
|
||
|
#define SOCK_RDM 4 /* reliably-delivered message */
|
||
|
#define SOCK_SEQPACKET 5 /* sequential packet socket */
|
||
|
#define SOCK_PACKET 10 /* linux specific way of */
|
||
|
#endif
|
||
|
|
||
|
int socket(int domain, int type, int protocol) ;
|
||
|
int accept(int s, struct sockaddr *addr, socklen_t *addrlen) ;
|
||
|
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) ;
|
||
|
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) ;
|
||
|
int recv(int s, void *buf, size_t len, int flags) ;
|
||
|
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) ;
|
||
|
int recvmsg(int s, struct msghdr *msg, int flags) ;
|
||
|
int send(int s, const void *msg, size_t len, int flags) ;
|
||
|
int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) ;
|
||
|
int sendmsg(int s, const struct msghdr *msg, int flags) ;
|
||
|
|
||
|
int getpeername(int s, struct sockaddr *name, socklen_t *namelen) ;
|
||
|
int getsockname(int s , struct sockaddr * name , socklen_t * namelen) ;
|
||
|
|
||
|
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) ;
|
||
|
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) ;
|
||
|
|
||
|
int listen(int s, int backlog) ;
|
||
|
|
||
|
#define SHUT_RD 0
|
||
|
#define SHUT_WR 1
|
||
|
#define SHUT_RDWR 2
|
||
|
int shutdown(int s, int how) ;
|
||
|
|
||
|
int socketpair(int d, int type, int protocol, int sv[2]);
|
||
|
|
||
|
/* currently not supported: */
|
||
|
#define NI_NOFQDN 1
|
||
|
|
||
|
#define NI_NUMERICHOST 2
|
||
|
#define NI_NAMEREQD 4
|
||
|
#define NI_NUMERICSERV 8
|
||
|
#define NI_DGRAM 16
|
||
|
|
||
|
struct addrinfo {
|
||
|
int ai_flags;
|
||
|
int ai_family;
|
||
|
int ai_socktype;
|
||
|
int ai_protocol;
|
||
|
size_t ai_addrlen;
|
||
|
struct sockaddr *ai_addr;
|
||
|
char *ai_canonname;
|
||
|
struct addrinfo *ai_next;
|
||
|
};
|
||
|
|
||
|
int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
|
||
|
size_t hostlen, char *serv, size_t servlen, int flags) ;
|
||
|
int getaddrinfo(const char *node, const char *service, const struct
|
||
|
addrinfo *hints, struct addrinfo **res) ;
|
||
|
void freeaddrinfo(struct addrinfo *res) ;
|
||
|
const char *gai_strerror(int errcode) ;
|
||
|
|
||
|
#define EAI_FAMILY -1
|
||
|
#define EAI_SOCKTYPE -2
|
||
|
#define EAI_BADFLAGS -3
|
||
|
#define EAI_NONAME -4
|
||
|
#define EAI_SERVICE -5
|
||
|
#define EAI_ADDRFAMILY -6
|
||
|
#define EAI_NODATA -7
|
||
|
#define EAI_MEMORY -8
|
||
|
#define EAI_FAIL -9
|
||
|
#define EAI_AGAIN -10
|
||
|
#define EAI_SYSTEM -11
|
||
|
|
||
|
#define AI_NUMERICHOST 1
|
||
|
#define AI_CANONNAME 2
|
||
|
#define AI_PASSIVE 4
|
||
|
|
||
|
/* Linux-specific socket ioctls */
|
||
|
#define SIOCINQ FIONREAD
|
||
|
#define SIOCOUTQ TIOCOUTQ
|
||
|
|
||
|
/* Routing table calls. */
|
||
|
#define SIOCADDRT 0x890B /* add routing table entry */
|
||
|
#define SIOCDELRT 0x890C /* delete routing table entry */
|
||
|
#define SIOCRTMSG 0x890D /* call to routing system */
|
||
|
|
||
|
/* Socket configuration controls. */
|
||
|
#define SIOCGIFNAME 0x8910 /* get iface name */
|
||
|
#define SIOCSIFLINK 0x8911 /* set iface channel */
|
||
|
#define SIOCGIFCONF 0x8912 /* get iface list */
|
||
|
#define SIOCGIFFLAGS 0x8913 /* get flags */
|
||
|
#define SIOCSIFFLAGS 0x8914 /* set flags */
|
||
|
#define SIOCGIFADDR 0x8915 /* get PA address */
|
||
|
#define SIOCSIFADDR 0x8916 /* set PA address */
|
||
|
#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */
|
||
|
#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */
|
||
|
#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
|
||
|
#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
|
||
|
#define SIOCGIFNETMASK 0x891b /* get network PA mask */
|
||
|
#define SIOCSIFNETMASK 0x891c /* set network PA mask */
|
||
|
#define SIOCGIFMETRIC 0x891d /* get metric */
|
||
|
#define SIOCSIFMETRIC 0x891e /* set metric */
|
||
|
#define SIOCGIFMEM 0x891f /* get memory address (BSD) */
|
||
|
#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
|
||
|
#define SIOCGIFMTU 0x8921 /* get MTU size */
|
||
|
#define SIOCSIFMTU 0x8922 /* set MTU size */
|
||
|
#define SIOCSIFNAME 0x8923 /* set interface name */
|
||
|
#define SIOCSIFHWADDR 0x8924 /* set hardware address */
|
||
|
#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */
|
||
|
#define SIOCSIFENCAP 0x8926
|
||
|
#define SIOCGIFHWADDR 0x8927 /* Get hardware address */
|
||
|
#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */
|
||
|
#define SIOCSIFSLAVE 0x8930
|
||
|
#define SIOCADDMULTI 0x8931 /* Multicast address lists */
|
||
|
#define SIOCDELMULTI 0x8932
|
||
|
#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
|
||
|
#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */
|
||
|
#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */
|
||
|
#define SIOCGIFPFLAGS 0x8935
|
||
|
#define SIOCDIFADDR 0x8936 /* delete PA address */
|
||
|
#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */
|
||
|
#define SIOCGIFCOUNT 0x8938 /* get number of devices */
|
||
|
|
||
|
#define SIOCGIFBR 0x8940 /* Bridging support */
|
||
|
#define SIOCSIFBR 0x8941 /* Set bridging options */
|
||
|
|
||
|
#define SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
|
||
|
#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
|
||
|
|
||
|
#define SIOCGIFDIVERT 0x8944 /* Frame diversion support */
|
||
|
#define SIOCSIFDIVERT 0x8945 /* Set frame diversion options */
|
||
|
|
||
|
#define SIOCETHTOOL 0x8946 /* Ethtool interface */
|
||
|
|
||
|
/* ARP cache control calls. */
|
||
|
/* 0x8950 - 0x8952 * obsolete calls, don't re-use */
|
||
|
#define SIOCDARP 0x8953 /* delete ARP table entry */
|
||
|
#define SIOCGARP 0x8954 /* get ARP table entry */
|
||
|
#define SIOCSARP 0x8955 /* set ARP table entry */
|
||
|
|
||
|
/* RARP cache control calls. */
|
||
|
#define SIOCDRARP 0x8960 /* delete RARP table entry */
|
||
|
#define SIOCGRARP 0x8961 /* get RARP table entry */
|
||
|
#define SIOCSRARP 0x8962 /* set RARP table entry */
|
||
|
|
||
|
/* Driver configuration calls */
|
||
|
|
||
|
#define SIOCGIFMAP 0x8970 /* Get device parameters */
|
||
|
#define SIOCSIFMAP 0x8971 /* Set device parameters */
|
||
|
|
||
|
/* DLCI configuration calls */
|
||
|
|
||
|
#define SIOCADDDLCI 0x8980 /* Create new DLCI device */
|
||
|
#define SIOCDELDLCI 0x8981 /* Delete DLCI device */
|
||
|
|
||
|
#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */
|
||
|
|
||
|
#define _LINUX_SOCKET_H
|
||
|
|
||
|
__END_DECLS
|
||
|
|
||
|
#endif
|