1 #ifndef _LINUX_SOCKET_H 2 #define _LINUX_SOCKET_H 4 #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) 6 #include <asm/socket.h>/* arch-dependent defines */ 7 #include <linux/sockios.h>/* the SIOCxxx I/O controls */ 8 #include <linux/uio.h>/* iovec support */ 9 #include <linux/types.h>/* pid_t */ 11 typedefunsigned short sa_family_t
; 14 * 1003.1g requires sa_family_t and that sa_data is char. 18 sa_family_t sa_family
;/* address family, AF_xxx */ 19 char sa_data
[14];/* 14 bytes of protocol address */ 23 int l_onoff
;/* Linger active */ 24 int l_linger
;/* How long to linger for */ 28 * As we do 4.4BSD message passing we use a 4.4BSD message passing 29 * system, not 4.3. Thus msg_accrights(len) are now missing. They 30 * belong in an obscure libc emulation or the bin. 34 void* msg_name
;/* Socket name */ 35 int msg_namelen
;/* Length of name */ 36 struct iovec
* msg_iov
;/* Data blocks */ 37 __kernel_size_t msg_iovlen
;/* Number of blocks */ 38 void* msg_control
;/* Per protocol magic (eg BSD file descriptor passing) */ 39 __kernel_size_t msg_controllen
;/* Length of cmsg list */ 44 * POSIX 1003.1g - ancillary data object information 45 * Ancillary data consits of a sequence of pairs of 46 * (cmsghdr, cmsg_data[]) 50 __kernel_size_t cmsg_len
;/* data byte count, including hdr */ 51 int cmsg_level
;/* originating protocol */ 52 int cmsg_type
;/* protocol-specific type */ 56 * Ancilliary data object information MACROS 57 * Table 5-14 of POSIX 1003.1g 60 #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) 61 #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) 63 #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) 65 #define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) 66 #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) 67 #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 69 #define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \ 70 (struct cmsghdr *)(ctl) : \ 71 (struct cmsghdr *)NULL) 72 #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) 75 * This mess will go away with glibc 79 #define __KINLINE extern __inline__ 80 #elif defined(__GNUC__) 81 #define __KINLINE static __inline__ 82 #elif defined(__cplusplus) 83 #define __KINLINE static inline 85 #define __KINLINE static 90 * Get the next cmsg header 92 * PLEASE, do not touch this function. If you think, that it is 93 * incorrect, grep kernel sources and think about consequences 94 * before trying to improve it. 96 * Now it always returns valid, not truncated ancillary object 97 * HEADER. But caller still MUST check, that cmsg->cmsg_len is 98 * inside range, given by msg->msg_controllen before using 99 * ansillary object DATA. --ANK (980731) 102 __KINLINE
struct cmsghdr
*__cmsg_nxthdr(void*__ctl
, __kernel_size_t __size
, 103 struct cmsghdr
*__cmsg
) 105 struct cmsghdr
* __ptr
; 107 __ptr
= (struct cmsghdr
*)(((unsigned char*) __cmsg
) +CMSG_ALIGN(__cmsg
->cmsg_len
)); 108 if((unsigned long)((char*)(__ptr
+1) - (char*) __ctl
) > __size
) 114 __KINLINE
struct cmsghdr
*cmsg_nxthdr(struct msghdr
*__msg
,struct cmsghdr
*__cmsg
) 116 return__cmsg_nxthdr(__msg
->msg_control
, __msg
->msg_controllen
, __cmsg
); 119 /* "Socket"-level control message types: */ 121 #define SCM_RIGHTS 0x01/* rw: access rights (array of int) */ 122 #define SCM_CREDENTIALS 0x02/* rw: struct ucred */ 123 #define SCM_CONNECT 0x03/* rw: struct scm_connect */ 133 #define SOCK_STREAM 1/* stream (connection) socket */ 134 #define SOCK_DGRAM 2/* datagram (conn.less) socket */ 135 #define SOCK_RAW 3/* raw socket */ 136 #define SOCK_RDM 4/* reliably-delivered message */ 137 #define SOCK_SEQPACKET 5/* sequential packet socket */ 138 #define SOCK_PACKET 10/* linux specific way of */ 139 /* getting packets at the dev */ 140 /* level. For writing rarp and */ 141 /* other similar things on the */ 144 /* Supported address families. */ 146 #define AF_UNIX 1/* Unix domain sockets */ 147 #define AF_LOCAL 1/* POSIX name for AF_UNIX */ 148 #define AF_INET 2/* Internet IP Protocol */ 149 #define AF_AX25 3/* Amateur Radio AX.25 */ 150 #define AF_IPX 4/* Novell IPX */ 151 #define AF_APPLETALK 5/* AppleTalk DDP */ 152 #define AF_NETROM 6/* Amateur Radio NET/ROM */ 153 #define AF_BRIDGE 7/* Multiprotocol bridge */ 154 #define AF_ATMPVC 8/* ATM PVCs */ 155 #define AF_X25 9/* Reserved for X.25 project */ 156 #define AF_INET6 10/* IP version 6 */ 157 #define AF_ROSE 11/* Amateur Radio X.25 PLP */ 158 #define AF_DECnet 12/* Reserved for DECnet project */ 159 #define AF_NETBEUI 13/* Reserved for 802.2LLC project*/ 160 #define AF_SECURITY 14/* Security callback pseudo AF */ 161 #define pseudo_AF_KEY 15/* PF_KEY key management API */ 162 #define AF_NETLINK 16 163 #define AF_ROUTE AF_NETLINK/* Alias to emulate 4.4BSD */ 164 #define AF_PACKET 17/* Packet family */ 165 #define AF_ASH 18/* Ash */ 166 #define AF_ECONET 19/* Acorn Econet */ 167 #define AF_ATMSVC 20/* ATM SVCs */ 168 #define AF_SNA 22/* Linux SNA Project (nutters!) */ 169 #define AF_MAX 32/* For now.. */ 171 /* Protocol families, same as address families. */ 172 #define PF_UNSPEC AF_UNSPEC 173 #define PF_UNIX AF_UNIX 174 #define PF_LOCAL AF_LOCAL 175 #define PF_INET AF_INET 176 #define PF_AX25 AF_AX25 177 #define PF_IPX AF_IPX 178 #define PF_APPLETALK AF_APPLETALK 179 #define PF_NETROM AF_NETROM 180 #define PF_BRIDGE AF_BRIDGE 181 #define PF_ATMPVC AF_ATMPVC 182 #define PF_X25 AF_X25 183 #define PF_INET6 AF_INET6 184 #define PF_ROSE AF_ROSE 185 #define PF_DECnet AF_DECnet 186 #define PF_NETBEUI AF_NETBEUI 187 #define PF_SECURITY AF_SECURITY 188 #define PF_KEY pseudo_AF_KEY 189 #define PF_NETLINK AF_NETLINK 190 #define PF_ROUTE AF_ROUTE 191 #define PF_PACKET AF_PACKET 192 #define PF_ASH AF_ASH 193 #define PF_ECONET AF_ECONET 194 #define PF_ATMSVC AF_ATMSVC 195 #define PF_SNA AF_SNA 197 #define PF_MAX AF_MAX 199 /* Maximum queue length specifiable by listen. */ 200 #define SOMAXCONN 128 202 /* Flags we can use with send/ and recv. 203 Added those for 1003.1g not all are supported yet 208 #define MSG_DONTROUTE 4 210 #define MSG_PROXY 0x10/* Supply or ask second address. */ 211 #define MSG_TRUNC 0x20 212 #define MSG_DONTWAIT 0x40/* Nonblocking io */ 213 #define MSG_EOR 0x80/* End of record */ 214 #define MSG_WAITALL 0x100/* Wait for a full request */ 215 #define MSG_FIN 0x200 216 #define MSG_SYN 0x400 217 #define MSG_URG 0x800 218 #define MSG_RST 0x1000 219 #define MSG_ERRQUEUE 0x2000 220 #define MSG_NOSIGNAL 0x4000 222 #define MSG_CTLIGNORE 0x80000000 224 #define MSG_EOF MSG_FIN 225 #define MSG_CTLFLAGS (MSG_OOB|MSG_URG|MSG_FIN|MSG_SYN|MSG_RST) 228 /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */ 230 /* #define SOL_ICMP 1 No-no-no! Due to Linux :-) we cannot use SOL_ICMP=1 */ 234 #define SOL_ICMPV6 58 238 #define SOL_ATALK 258 239 #define SOL_NETROM 259 241 #define SOL_DECNET 261 243 #define SOL_PACKET 263 244 #define SOL_ATM 264/* ATM layer (cell level) */ 245 #define SOL_AAL 265/* ATM Adaption Layer (packet level) */ 250 /* TCP options - this way around because someone left a set in the c library includes */ 251 #define TCP_NODELAY 1 255 externintmemcpy_fromiovec(unsigned char*kdata
,struct iovec
*iov
,int len
); 256 externintmemcpy_fromiovecend(unsigned char*kdata
,struct iovec
*iov
, 258 externintcsum_partial_copy_fromiovecend(unsigned char*kdata
, 261 unsigned int len
,int*csump
); 263 externintverify_iovec(struct msghdr
*m
,struct iovec
*iov
,char*address
,int mode
); 264 externintmemcpy_toiovec(struct iovec
*v
,unsigned char*kdata
,int len
); 265 externintmove_addr_to_user(void*kaddr
,int klen
,void*uaddr
,int*ulen
); 266 externintmove_addr_to_kernel(void*uaddr
,int ulen
,void*kaddr
); 267 externintput_cmsg(struct msghdr
*,int level
,int type
,int len
,void*data
); 269 #endif/* not kernel and not glibc */ 270 #endif/* _LINUX_SOCKET_H */