1#ifndef _LINUX_SOCKET_H
2#define _LINUX_SOCKET_H
3
4
5
6
7#define _K_SS_MAXSIZE 128
8#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
9
10
11struct __kernel_sockaddr_storage {
12 unsigned short ss_family;
13
14 char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
15
16
17} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));
18
19#ifdef __KERNEL__
20
21#include <asm/socket.h>
22#include <linux/sockios.h>
23#include <linux/uio.h>
24#include <linux/types.h>
25#include <linux/compiler.h>
26
27#ifdef __KERNEL__
28# ifdef CONFIG_PROC_FS
29struct seq_file;
30extern void socket_seq_show(struct seq_file *seq);
31# endif
32#endif
33
34typedef unsigned short sa_family_t;
35
36
37
38
39
40struct sockaddr {
41 sa_family_t sa_family;
42 char sa_data[14];
43};
44
45struct linger {
46 int l_onoff;
47 int l_linger;
48};
49
50#define sockaddr_storage __kernel_sockaddr_storage
51
52
53
54
55
56
57
58struct msghdr {
59 void * msg_name;
60 int msg_namelen;
61 struct iovec * msg_iov;
62 __kernel_size_t msg_iovlen;
63 void * msg_control;
64 __kernel_size_t msg_controllen;
65 unsigned msg_flags;
66};
67
68
69
70
71
72
73
74struct cmsghdr {
75 __kernel_size_t cmsg_len;
76 int cmsg_level;
77 int cmsg_type;
78};
79
80
81
82
83
84
85#define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg))
86#define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg))
87
88#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
89
90#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
91#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
92#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
93
94#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \
95 (struct cmsghdr *)(ctl) : \
96 (struct cmsghdr *)NULL)
97#define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
98#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && \
99 (cmsg)->cmsg_len <= (unsigned long) \
100 ((mhdr)->msg_controllen - \
101 ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116static inline struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
117 struct cmsghdr *__cmsg)
118{
119 struct cmsghdr * __ptr;
120
121 __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
122 if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
123 return (struct cmsghdr *)0;
124
125 return __ptr;
126}
127
128static inline struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
129{
130 return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
131}
132
133
134
135#define SCM_RIGHTS 0x01
136#define SCM_CREDENTIALS 0x02
137#define SCM_SECURITY 0x03
138
139struct ucred {
140 __u32 pid;
141 __u32 uid;
142 __u32 gid;
143};
144
145
146#define AF_UNSPEC 0
147#define AF_UNIX 1
148#define AF_LOCAL 1
149#define AF_INET 2
150#define AF_AX25 3
151#define AF_IPX 4
152#define AF_APPLETALK 5
153#define AF_NETROM 6
154#define AF_BRIDGE 7
155#define AF_ATMPVC 8
156#define AF_X25 9
157#define AF_INET6 10
158#define AF_ROSE 11
159#define AF_DECnet 12
160#define AF_NETBEUI 13
161#define AF_SECURITY 14
162#define AF_KEY 15
163#define AF_NETLINK 16
164#define AF_ROUTE AF_NETLINK
165#define AF_PACKET 17
166#define AF_ASH 18
167#define AF_ECONET 19
168#define AF_ATMSVC 20
169#define AF_RDS 21
170#define AF_SNA 22
171#define AF_IRDA 23
172#define AF_PPPOX 24
173#define AF_WANPIPE 25
174#define AF_LLC 26
175#define AF_CAN 29
176#define AF_TIPC 30
177#define AF_BLUETOOTH 31
178#define AF_IUCV 32
179#define AF_RXRPC 33
180#define AF_ISDN 34
181#define AF_PHONET 35
182#define AF_IEEE802154 36
183#define AF_MAX 37
184
185
186#define PF_UNSPEC AF_UNSPEC
187#define PF_UNIX AF_UNIX
188#define PF_LOCAL AF_LOCAL
189#define PF_INET AF_INET
190#define PF_AX25 AF_AX25
191#define PF_IPX AF_IPX
192#define PF_APPLETALK AF_APPLETALK
193#define PF_NETROM AF_NETROM
194#define PF_BRIDGE AF_BRIDGE
195#define PF_ATMPVC AF_ATMPVC
196#define PF_X25 AF_X25
197#define PF_INET6 AF_INET6
198#define PF_ROSE AF_ROSE
199#define PF_DECnet AF_DECnet
200#define PF_NETBEUI AF_NETBEUI
201#define PF_SECURITY AF_SECURITY
202#define PF_KEY AF_KEY
203#define PF_NETLINK AF_NETLINK
204#define PF_ROUTE AF_ROUTE
205#define PF_PACKET AF_PACKET
206#define PF_ASH AF_ASH
207#define PF_ECONET AF_ECONET
208#define PF_ATMSVC AF_ATMSVC
209#define PF_RDS AF_RDS
210#define PF_SNA AF_SNA
211#define PF_IRDA AF_IRDA
212#define PF_PPPOX AF_PPPOX
213#define PF_WANPIPE AF_WANPIPE
214#define PF_LLC AF_LLC
215#define PF_CAN AF_CAN
216#define PF_TIPC AF_TIPC
217#define PF_BLUETOOTH AF_BLUETOOTH
218#define PF_IUCV AF_IUCV
219#define PF_RXRPC AF_RXRPC
220#define PF_ISDN AF_ISDN
221#define PF_PHONET AF_PHONET
222#define PF_IEEE802154 AF_IEEE802154
223#define PF_MAX AF_MAX
224
225
226#define SOMAXCONN 128
227
228
229
230
231
232#define MSG_OOB 1
233#define MSG_PEEK 2
234#define MSG_DONTROUTE 4
235#define MSG_TRYHARD 4
236#define MSG_CTRUNC 8
237#define MSG_PROBE 0x10
238#define MSG_TRUNC 0x20
239#define MSG_DONTWAIT 0x40
240#define MSG_EOR 0x80
241#define MSG_WAITALL 0x100
242#define MSG_FIN 0x200
243#define MSG_SYN 0x400
244#define MSG_CONFIRM 0x800
245#define MSG_RST 0x1000
246#define MSG_ERRQUEUE 0x2000
247#define MSG_NOSIGNAL 0x4000
248#define MSG_MORE 0x8000
249
250#define MSG_EOF MSG_FIN
251
252#define MSG_CMSG_CLOEXEC 0x40000000
253
254
255#if defined(CONFIG_COMPAT)
256#define MSG_CMSG_COMPAT 0x80000000
257#else
258#define MSG_CMSG_COMPAT 0
259#endif
260
261
262
263#define SOL_IP 0
264
265#define SOL_TCP 6
266#define SOL_UDP 17
267#define SOL_IPV6 41
268#define SOL_ICMPV6 58
269#define SOL_SCTP 132
270#define SOL_UDPLITE 136
271#define SOL_RAW 255
272#define SOL_IPX 256
273#define SOL_AX25 257
274#define SOL_ATALK 258
275#define SOL_NETROM 259
276#define SOL_ROSE 260
277#define SOL_DECNET 261
278#define SOL_X25 262
279#define SOL_PACKET 263
280#define SOL_ATM 264
281#define SOL_AAL 265
282#define SOL_IRDA 266
283#define SOL_NETBEUI 267
284#define SOL_LLC 268
285#define SOL_DCCP 269
286#define SOL_NETLINK 270
287#define SOL_TIPC 271
288#define SOL_RXRPC 272
289#define SOL_PPPOL2TP 273
290#define SOL_BLUETOOTH 274
291#define SOL_PNPIPE 275
292#define SOL_RDS 276
293#define SOL_IUCV 277
294
295
296#define IPX_TYPE 1
297
298#ifdef __KERNEL__
299extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
300extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
301 int offset, int len);
302extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
303 struct iovec *iov,
304 int offset,
305 unsigned int len, __wsum *csump);
306
307extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode);
308extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
309extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,
310 int offset, int len);
311extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen);
312extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr);
313extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
314
315#endif
316#endif
317#endif
318