| 1 | #ifndef _LINUX_SOCKET_H
|
| 2 | #define _LINUX_SOCKET_H
|
| 3 |
|
| 4 |
|
| 5 | #include <asm/socket.h>
|
| 6 | #include <linux/sockios.h>
|
| 7 | #include <linux/uio.h>
|
| 8 | #include <linux/types.h>
|
| 9 | #include <linux/compiler.h>
|
| 10 | #include <uapi/linux/socket.h>
|
| 11 |
|
| 12 | struct pid;
|
| 13 | struct cred;
|
| 14 |
|
| 15 | #define __sockaddr_check_size(size) \
|
| 16 | BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage)))
|
| 17 |
|
| 18 | #ifdef CONFIG_PROC_FS
|
| 19 | struct seq_file;
|
| 20 | extern void socket_seq_show(struct seq_file *seq);
|
| 21 | #endif
|
| 22 |
|
| 23 | typedef __kernel_sa_family_t sa_family_t;
|
| 24 |
|
| 25 | |
| 26 | * 1003.1g requires sa_family_t and that sa_data is char.
|
| 27 |
|
| 28 |
|
| 29 | struct sockaddr {
|
| 30 | sa_family_t sa_family;
|
| 31 | char sa_data[14];
|
| 32 | };
|
| 33 |
|
| 34 | struct linger {
|
| 35 | int l_onoff;
|
| 36 | int l_linger;
|
| 37 | };
|
| 38 |
|
| 39 | #define sockaddr_storage __kernel_sockaddr_storage
|
| 40 |
|
| 41 | |
| 42 | * As we do 4.4BSD message passing we use a 4.4BSD message passing
|
| 43 | * system, not 4.3. Thus msg_accrights(len) are now missing. They
|
| 44 | * belong in an obscure libc emulation or the bin.
|
| 45 |
|
| 46 |
|
| 47 | struct msghdr {
|
| 48 | void * msg_name;
|
| 49 | int msg_namelen;
|
| 50 | struct iovec * msg_iov;
|
| 51 | __kernel_size_t msg_iovlen;
|
| 52 | void * msg_control;
|
| 53 | __kernel_size_t msg_controllen;
|
| 54 | unsigned int msg_flags;
|
| 55 | };
|
| 56 |
|
| 57 |
|
| 58 | struct mmsghdr {
|
| 59 | struct msghdr msg_hdr;
|
| 60 | unsigned int msg_len;
|
| 61 | };
|
| 62 |
|
| 63 | |
| 64 | * POSIX 1003.1g - ancillary data object information
|
| 65 | * Ancillary data consits of a sequence of pairs of
|
| 66 | * (cmsghdr, cmsg_data[])
|
| 67 |
|
| 68 |
|
| 69 | struct cmsghdr {
|
| 70 | __kernel_size_t cmsg_len;
|
| 71 | int cmsg_level;
|
| 72 | int cmsg_type;
|
| 73 | };
|
| 74 |
|
| 75 | |
| 76 | * Ancillary data object information MACROS
|
| 77 | * Table 5-14 of POSIX 1003.1g
|
| 78 |
|
| 79 |
|
| 80 | #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg))
|
| 81 | #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg))
|
| 82 |
|
| 83 | #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
|
| 84 |
|
| 85 | #define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
|
| 86 | #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
|
| 87 | #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
|
| 88 |
|
| 89 | #define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \
|
| 90 | (struct cmsghdr *)(ctl) : \
|
| 91 | (struct cmsghdr *)NULL)
|
| 92 | #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
|
| 93 | #define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && \
|
| 94 | (cmsg)->cmsg_len <= (unsigned long) \
|
| 95 | ((mhdr)->msg_controllen - \
|
| 96 | ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
|
| 97 |
|
| 98 | |
| 99 | * Get the next cmsg header
|
| 100 | *
|
| 101 | * PLEASE, do not touch this function. If you think, that it is
|
| 102 | * incorrect, grep kernel sources and think about consequences
|
| 103 | * before trying to improve it.
|
| 104 | *
|
| 105 | * Now it always returns valid, not truncated ancillary object
|
| 106 | * HEADER. But caller still MUST check, that cmsg->cmsg_len is
|
| 107 | * inside range, given by msg->msg_controllen before using
|
| 108 | * ancillary object DATA. --ANK (980731)
|
| 109 |
|
| 110 |
|
| 111 | static inline struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
|
| 112 | struct cmsghdr *__cmsg)
|
| 113 | {
|
| 114 | struct cmsghdr * __ptr;
|
| 115 |
|
| 116 | __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
|
| 117 | if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
|
| 118 | return (struct cmsghdr *)0;
|
| 119 |
|
| 120 | return __ptr;
|
| 121 | }
|
| 122 |
|
| 123 | static inline struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
|
| 124 | {
|
| 125 | return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
|
| 126 | }
|
| 127 |
|
| 128 |
|
| 129 |
|
| 130 | #define SCM_RIGHTS 0x01
|
| 131 | #define SCM_CREDENTIALS 0x02
|
| 132 | #define SCM_SECURITY 0x03
|
| 133 |
|
| 134 | struct ucred {
|
| 135 | __u32 pid;
|
| 136 | __u32 uid;
|
| 137 | __u32 gid;
|
| 138 | };
|
| 139 |
|
| 140 |
|
| 141 | #define AF_UNSPEC 0
|
| 142 | #define AF_UNIX 1
|
| 143 | #define AF_LOCAL 1
|
| 144 | #define AF_INET 2
|
| 145 | #define AF_AX25 3
|
| 146 | #define AF_IPX 4
|
| 147 | #define AF_APPLETALK 5
|
| 148 | #define AF_NETROM 6
|
| 149 | #define AF_BRIDGE 7
|
| 150 | #define AF_ATMPVC 8
|
| 151 | #define AF_X25 9
|
| 152 | #define AF_INET6 10
|
| 153 | #define AF_ROSE 11
|
| 154 | #define AF_DECnet 12
|
| 155 | #define AF_NETBEUI 13
|
| 156 | #define AF_SECURITY 14
|
| 157 | #define AF_KEY 15
|
| 158 | #define AF_NETLINK 16
|
| 159 | #define AF_ROUTE AF_NETLINK
|
| 160 | #define AF_PACKET 17
|
| 161 | #define AF_ASH 18
|
| 162 | #define AF_ECONET 19
|
| 163 | #define AF_ATMSVC 20
|
| 164 | #define AF_RDS 21
|
| 165 | #define AF_SNA 22
|
| 166 | #define AF_IRDA 23
|
| 167 | #define AF_PPPOX 24
|
| 168 | #define AF_WANPIPE 25
|
| 169 | #define AF_LLC 26
|
| 170 | #define AF_CAN 29
|
| 171 | #define AF_TIPC 30
|
| 172 | #define AF_BLUETOOTH 31
|
| 173 | #define AF_IUCV 32
|
| 174 | #define AF_RXRPC 33
|
| 175 | #define AF_ISDN 34
|
| 176 | #define AF_PHONET 35
|
| 177 | #define AF_IEEE802154 36
|
| 178 | #define AF_CAIF 37
|
| 179 | #define AF_ALG 38
|
| 180 | #define AF_NFC 39
|
| 181 | #define AF_VSOCK 40
|
| 182 | #define AF_MAX 41
|
| 183 |
|
| 184 |
|
| 185 | #define PF_UNSPEC AF_UNSPEC
|
| 186 | #define PF_UNIX AF_UNIX
|
| 187 | #define PF_LOCAL AF_LOCAL
|
| 188 | #define PF_INET AF_INET
|
| 189 | #define PF_AX25 AF_AX25
|
| 190 | #define PF_IPX AF_IPX
|
| 191 | #define PF_APPLETALK AF_APPLETALK
|
| 192 | #define PF_NETROM AF_NETROM
|
| 193 | #define PF_BRIDGE AF_BRIDGE
|
| 194 | #define PF_ATMPVC AF_ATMPVC
|
| 195 | #define PF_X25 AF_X25
|
| 196 | #define PF_INET6 AF_INET6
|
| 197 | #define PF_ROSE AF_ROSE
|
| 198 | #define PF_DECnet AF_DECnet
|
| 199 | #define PF_NETBEUI AF_NETBEUI
|
| 200 | #define PF_SECURITY AF_SECURITY
|
| 201 | #define PF_KEY AF_KEY
|
| 202 | #define PF_NETLINK AF_NETLINK
|
| 203 | #define PF_ROUTE AF_ROUTE
|
| 204 | #define PF_PACKET AF_PACKET
|
| 205 | #define PF_ASH AF_ASH
|
| 206 | #define PF_ECONET AF_ECONET
|
| 207 | #define PF_ATMSVC AF_ATMSVC
|
| 208 | #define PF_RDS AF_RDS
|
| 209 | #define PF_SNA AF_SNA
|
| 210 | #define PF_IRDA AF_IRDA
|
| 211 | #define PF_PPPOX AF_PPPOX
|
| 212 | #define PF_WANPIPE AF_WANPIPE
|
| 213 | #define PF_LLC AF_LLC
|
| 214 | #define PF_CAN AF_CAN
|
| 215 | #define PF_TIPC AF_TIPC
|
| 216 | #define PF_BLUETOOTH AF_BLUETOOTH
|
| 217 | #define PF_IUCV AF_IUCV
|
| 218 | #define PF_RXRPC AF_RXRPC
|
| 219 | #define PF_ISDN AF_ISDN
|
| 220 | #define PF_PHONET AF_PHONET
|
| 221 | #define PF_IEEE802154 AF_IEEE802154
|
| 222 | #define PF_CAIF AF_CAIF
|
| 223 | #define PF_ALG AF_ALG
|
| 224 | #define PF_NFC AF_NFC
|
| 225 | #define PF_VSOCK AF_VSOCK
|
| 226 | #define PF_MAX AF_MAX
|
| 227 |
|
| 228 |
|
| 229 | #define SOMAXCONN 128
|
| 230 |
|
| 231 | |
| 232 | Added those for 1003.1g not all are supported yet
|
| 233 |
|
| 234 |
|
| 235 | #define MSG_OOB 1
|
| 236 | #define MSG_PEEK 2
|
| 237 | #define MSG_DONTROUTE 4
|
| 238 | #define MSG_TRYHARD 4
|
| 239 | #define MSG_CTRUNC 8
|
| 240 | #define MSG_PROBE 0x10
|
| 241 | #define MSG_TRUNC 0x20
|
| 242 | #define MSG_DONTWAIT 0x40
|
| 243 | #define MSG_EOR 0x80
|
| 244 | #define MSG_WAITALL 0x100
|
| 245 | #define MSG_FIN 0x200
|
| 246 | #define MSG_SYN 0x400
|
| 247 | #define MSG_CONFIRM 0x800
|
| 248 | #define MSG_RST 0x1000
|
| 249 | #define MSG_ERRQUEUE 0x2000
|
| 250 | #define MSG_NOSIGNAL 0x4000
|
| 251 | #define MSG_MORE 0x8000
|
| 252 | #define MSG_WAITFORONE 0x10000
|
| 253 | #define MSG_SENDPAGE_NOTLAST 0x20000
|
| 254 | #define MSG_EOF MSG_FIN
|
| 255 |
|
| 256 | #define MSG_FASTOPEN 0x20000000
|
| 257 | #define MSG_CMSG_CLOEXEC 0x40000000 |
| 258 | descriptor received through
|
| 259 | SCM_RIGHTS
|
| 260 | #if defined(CONFIG_COMPAT)
|
| 261 | #define MSG_CMSG_COMPAT 0x80000000
|
| 262 | #else
|
| 263 | #define MSG_CMSG_COMPAT 0
|
| 264 | #endif
|
| 265 |
|
| 266 |
|
| 267 |
|
| 268 | #define SOL_IP 0
|
| 269 |
|
| 270 | #define SOL_TCP 6
|
| 271 | #define SOL_UDP 17
|
| 272 | #define SOL_IPV6 41
|
| 273 | #define SOL_ICMPV6 58
|
| 274 | #define SOL_SCTP 132
|
| 275 | #define SOL_UDPLITE 136
|
| 276 | #define SOL_RAW 255
|
| 277 | #define SOL_IPX 256
|
| 278 | #define SOL_AX25 257
|
| 279 | #define SOL_ATALK 258
|
| 280 | #define SOL_NETROM 259
|
| 281 | #define SOL_ROSE 260
|
| 282 | #define SOL_DECNET 261
|
| 283 | #define SOL_X25 262
|
| 284 | #define SOL_PACKET 263
|
| 285 | #define SOL_ATM 264
|
| 286 | #define SOL_AAL 265
|
| 287 | #define SOL_IRDA 266
|
| 288 | #define SOL_NETBEUI 267
|
| 289 | #define SOL_LLC 268
|
| 290 | #define SOL_DCCP 269
|
| 291 | #define SOL_NETLINK 270
|
| 292 | #define SOL_TIPC 271
|
| 293 | #define SOL_RXRPC 272
|
| 294 | #define SOL_PPPOL2TP 273
|
| 295 | #define SOL_BLUETOOTH 274
|
| 296 | #define SOL_PNPIPE 275
|
| 297 | #define SOL_RDS 276
|
| 298 | #define SOL_IUCV 277
|
| 299 | #define SOL_CAIF 278
|
| 300 | #define SOL_ALG 279
|
| 301 | #define SOL_NFC 280
|
| 302 |
|
| 303 |
|
| 304 | #define IPX_TYPE 1
|
| 305 |
|
| 306 | extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
|
| 307 |
|
| 308 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
|
| 309 | extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
|
| 310 | int offset, int len);
|
| 311 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
|
| 312 | struct iovec *iov,
|
| 313 | int offset,
|
| 314 | unsigned int len, __wsum *csump);
|
| 315 |
|
| 316 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode);
|
| 317 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
|
| 318 | extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,
|
| 319 | int offset, int len);
|
| 320 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr);
|
| 321 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
|
| 322 |
|
| 323 | struct timespec;
|
| 324 |
|
| 325 | extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
|
| 326 | unsigned int flags, struct timespec *timeout);
|
| 327 | extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg,
|
| 328 | unsigned int vlen, unsigned int flags);
|
| 329 | #endif
|