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