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 static 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
) 109 return(struct cmsghdr
*)0; 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 */ 131 /* Supported address families. */ 133 #define AF_UNIX 1/* Unix domain sockets */ 134 #define AF_LOCAL 1/* POSIX name for AF_UNIX */ 135 #define AF_INET 2/* Internet IP Protocol */ 136 #define AF_AX25 3/* Amateur Radio AX.25 */ 137 #define AF_IPX 4/* Novell IPX */ 138 #define AF_APPLETALK 5/* AppleTalk DDP */ 139 #define AF_NETROM 6/* Amateur Radio NET/ROM */ 140 #define AF_BRIDGE 7/* Multiprotocol bridge */ 141 #define AF_ATMPVC 8/* ATM PVCs */ 142 #define AF_X25 9/* Reserved for X.25 project */ 143 #define AF_INET6 10/* IP version 6 */ 144 #define AF_ROSE 11/* Amateur Radio X.25 PLP */ 145 #define AF_DECnet 12/* Reserved for DECnet project */ 146 #define AF_NETBEUI 13/* Reserved for 802.2LLC project*/ 147 #define AF_SECURITY 14/* Security callback pseudo AF */ 148 #define AF_KEY 15/* PF_KEY key management API */ 149 #define AF_NETLINK 16 150 #define AF_ROUTE AF_NETLINK/* Alias to emulate 4.4BSD */ 151 #define AF_PACKET 17/* Packet family */ 152 #define AF_ASH 18/* Ash */ 153 #define AF_ECONET 19/* Acorn Econet */ 154 #define AF_ATMSVC 20/* ATM SVCs */ 155 #define AF_SNA 22/* Linux SNA Project (nutters!) */ 156 #define AF_IRDA 23/* IRDA sockets */ 157 #define AF_PPPOX 24/* PPPoX sockets */ 158 #define AF_MAX 32/* For now.. */ 160 /* Protocol families, same as address families. */ 161 #define PF_UNSPEC AF_UNSPEC 162 #define PF_UNIX AF_UNIX 163 #define PF_LOCAL AF_LOCAL 164 #define PF_INET AF_INET 165 #define PF_AX25 AF_AX25 166 #define PF_IPX AF_IPX 167 #define PF_APPLETALK AF_APPLETALK 168 #define PF_NETROM AF_NETROM 169 #define PF_BRIDGE AF_BRIDGE 170 #define PF_ATMPVC AF_ATMPVC 171 #define PF_X25 AF_X25 172 #define PF_INET6 AF_INET6 173 #define PF_ROSE AF_ROSE 174 #define PF_DECnet AF_DECnet 175 #define PF_NETBEUI AF_NETBEUI 176 #define PF_SECURITY AF_SECURITY 177 #define PF_KEY AF_KEY 178 #define PF_NETLINK AF_NETLINK 179 #define PF_ROUTE AF_ROUTE 180 #define PF_PACKET AF_PACKET 181 #define PF_ASH AF_ASH 182 #define PF_ECONET AF_ECONET 183 #define PF_ATMSVC AF_ATMSVC 184 #define PF_SNA AF_SNA 185 #define PF_IRDA AF_IRDA 186 #define PF_PPPOX AF_PPPOX 187 #define PF_MAX AF_MAX 189 /* Maximum queue length specifiable by listen. */ 190 #define SOMAXCONN 128 192 /* Flags we can use with send/ and recv. 193 Added those for 1003.1g not all are supported yet 198 #define MSG_DONTROUTE 4 199 #define MSG_TRYHARD 4/* Synonym for MSG_DONTROUTE for DECnet */ 201 #define MSG_PROBE 0x10/* Do not send. Only probe path f.e. for MTU */ 202 #define MSG_TRUNC 0x20 203 #define MSG_DONTWAIT 0x40/* Nonblocking io */ 204 #define MSG_EOR 0x80/* End of record */ 205 #define MSG_WAITALL 0x100/* Wait for a full request */ 206 #define MSG_FIN 0x200 207 #define MSG_SYN 0x400 208 #define MSG_CONFIRM 0x800/* Confirm path validity */ 209 #define MSG_RST 0x1000 210 #define MSG_ERRQUEUE 0x2000/* Fetch message from error queue */ 211 #define MSG_NOSIGNAL 0x4000/* Do not generate SIGPIPE */ 213 #define MSG_EOF MSG_FIN 216 /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */ 218 /* #define SOL_ICMP 1 No-no-no! Due to Linux :-) we cannot use SOL_ICMP=1 */ 222 #define SOL_ICMPV6 58 226 #define SOL_ATALK 258 227 #define SOL_NETROM 259 229 #define SOL_DECNET 261 231 #define SOL_PACKET 263 232 #define SOL_ATM 264/* ATM layer (cell level) */ 233 #define SOL_AAL 265/* ATM Adaption Layer (packet level) */ 240 externintmemcpy_fromiovec(unsigned char*kdata
,struct iovec
*iov
,int len
); 241 externintmemcpy_fromiovecend(unsigned char*kdata
,struct iovec
*iov
, 243 externintcsum_partial_copy_fromiovecend(unsigned char*kdata
, 246 unsigned int len
,int*csump
); 248 externintverify_iovec(struct msghdr
*m
,struct iovec
*iov
,char*address
,int mode
); 249 externintmemcpy_toiovec(struct iovec
*v
,unsigned char*kdata
,int len
); 250 externvoidmemcpy_tokerneliovec(struct iovec
*iov
,unsigned char*kdata
,int len
); 251 externintmove_addr_to_user(void*kaddr
,int klen
,void*uaddr
,int*ulen
); 252 externintmove_addr_to_kernel(void*uaddr
,int ulen
,void*kaddr
); 253 externintput_cmsg(struct msghdr
*,int level
,int type
,int len
,void*data
); 255 #endif/* not kernel and not glibc */ 256 #endif/* _LINUX_SOCKET_H */