1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_SOCKET_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_SOCKET_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _K_SS_MAXSIZE 128
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
17951a39d68df598db08dfced8b4707755864a0492Ying Wang
18951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct __kernel_sockaddr_storage {
19951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short ss_family;
20951a39d68df598db08dfced8b4707755864a0492Ying Wang
21951a39d68df598db08dfced8b4707755864a0492Ying Wang char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
22951a39d68df598db08dfced8b4707755864a0492Ying Wang
23951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));
24951a39d68df598db08dfced8b4707755864a0492Ying Wang
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined(__GLIBC__) || __GLIBC__ < 2
26951a39d68df598db08dfced8b4707755864a0492Ying Wang
27951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/socket.h>
28951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/sockios.h>
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/uio.h>
30951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/types.h>
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/compiler.h>
32951a39d68df598db08dfced8b4707755864a0492Ying Wang
33951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef unsigned short sa_family_t;
34951a39d68df598db08dfced8b4707755864a0492Ying Wang
35951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sockaddr {
36951a39d68df598db08dfced8b4707755864a0492Ying Wang sa_family_t sa_family;
37951a39d68df598db08dfced8b4707755864a0492Ying Wang char sa_data[14];
38951a39d68df598db08dfced8b4707755864a0492Ying Wang};
39951a39d68df598db08dfced8b4707755864a0492Ying Wang
40951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct linger {
41951a39d68df598db08dfced8b4707755864a0492Ying Wang int l_onoff;
42951a39d68df598db08dfced8b4707755864a0492Ying Wang int l_linger;
43951a39d68df598db08dfced8b4707755864a0492Ying Wang};
44951a39d68df598db08dfced8b4707755864a0492Ying Wang
45951a39d68df598db08dfced8b4707755864a0492Ying Wang#define sockaddr_storage __kernel_sockaddr_storage
46951a39d68df598db08dfced8b4707755864a0492Ying Wang
47951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct msghdr {
48951a39d68df598db08dfced8b4707755864a0492Ying Wang void * msg_name;
49951a39d68df598db08dfced8b4707755864a0492Ying Wang int msg_namelen;
50951a39d68df598db08dfced8b4707755864a0492Ying Wang struct iovec * msg_iov;
51951a39d68df598db08dfced8b4707755864a0492Ying Wang __kernel_size_t msg_iovlen;
52951a39d68df598db08dfced8b4707755864a0492Ying Wang void * msg_control;
53951a39d68df598db08dfced8b4707755864a0492Ying Wang __kernel_size_t msg_controllen;
54951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned msg_flags;
55951a39d68df598db08dfced8b4707755864a0492Ying Wang};
56951a39d68df598db08dfced8b4707755864a0492Ying Wang
57951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct cmsghdr {
58951a39d68df598db08dfced8b4707755864a0492Ying Wang __kernel_size_t cmsg_len;
59951a39d68df598db08dfced8b4707755864a0492Ying Wang int cmsg_level;
60951a39d68df598db08dfced8b4707755864a0492Ying Wang int cmsg_type;
61951a39d68df598db08dfced8b4707755864a0492Ying Wang};
62951a39d68df598db08dfced8b4707755864a0492Ying Wang
63951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg))
64951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg))
65951a39d68df598db08dfced8b4707755864a0492Ying Wang
66951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
67951a39d68df598db08dfced8b4707755864a0492Ying Wang
68951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
69951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
70951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
71951a39d68df598db08dfced8b4707755864a0492Ying Wang
72951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ?   (struct cmsghdr *)(ctl) :   (struct cmsghdr *)NULL)
73951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
74951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) &&   (cmsg)->cmsg_len <= (unsigned long)   ((mhdr)->msg_controllen -   ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
75951a39d68df598db08dfced8b4707755864a0492Ying Wang
76951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __GNUC__
77951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __KINLINE static __inline__
78951a39d68df598db08dfced8b4707755864a0492Ying Wang#elif defined(__cplusplus)
79951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __KINLINE static inline
80951a39d68df598db08dfced8b4707755864a0492Ying Wang#else
81951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __KINLINE static
82951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
83951a39d68df598db08dfced8b4707755864a0492Ying Wang
84951a39d68df598db08dfced8b4707755864a0492Ying Wang__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
85951a39d68df598db08dfced8b4707755864a0492Ying Wang struct cmsghdr *__cmsg)
86951a39d68df598db08dfced8b4707755864a0492Ying Wang{
87951a39d68df598db08dfced8b4707755864a0492Ying Wang struct cmsghdr * __ptr;
88951a39d68df598db08dfced8b4707755864a0492Ying Wang
89951a39d68df598db08dfced8b4707755864a0492Ying Wang __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
90951a39d68df598db08dfced8b4707755864a0492Ying Wang if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
91951a39d68df598db08dfced8b4707755864a0492Ying Wang return (struct cmsghdr *)0;
92951a39d68df598db08dfced8b4707755864a0492Ying Wang
93951a39d68df598db08dfced8b4707755864a0492Ying Wang return __ptr;
94951a39d68df598db08dfced8b4707755864a0492Ying Wang}
95951a39d68df598db08dfced8b4707755864a0492Ying Wang
96951a39d68df598db08dfced8b4707755864a0492Ying Wang__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
97951a39d68df598db08dfced8b4707755864a0492Ying Wang{
98951a39d68df598db08dfced8b4707755864a0492Ying Wang return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
99951a39d68df598db08dfced8b4707755864a0492Ying Wang}
100951a39d68df598db08dfced8b4707755864a0492Ying Wang
101951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SCM_RIGHTS 0x01
102951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SCM_CREDENTIALS 0x02
103951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SCM_SECURITY 0x03
104951a39d68df598db08dfced8b4707755864a0492Ying Wang
105951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct ucred {
106951a39d68df598db08dfced8b4707755864a0492Ying Wang __u32 pid;
107951a39d68df598db08dfced8b4707755864a0492Ying Wang __u32 uid;
108951a39d68df598db08dfced8b4707755864a0492Ying Wang __u32 gid;
109951a39d68df598db08dfced8b4707755864a0492Ying Wang};
110951a39d68df598db08dfced8b4707755864a0492Ying Wang
111951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_UNSPEC 0
112951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_UNIX 1
113951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_LOCAL 1
114951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_INET 2
115951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_AX25 3
116951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_IPX 4
117951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_APPLETALK 5
118951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_NETROM 6
119951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_BRIDGE 7
120951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ATMPVC 8
121951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_X25 9
122951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_INET6 10
123951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ROSE 11
124951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_DECnet 12
125951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_NETBEUI 13
126951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_SECURITY 14
127951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_KEY 15
128951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_NETLINK 16
129951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ROUTE AF_NETLINK
130951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_PACKET 17
131951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ASH 18
132951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ECONET 19
133951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_ATMSVC 20
134951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_SNA 22
135951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_IRDA 23
136951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_PPPOX 24
137951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_WANPIPE 25
138951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_LLC 26
139951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_TIPC 30
140951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_BLUETOOTH 31
141951a39d68df598db08dfced8b4707755864a0492Ying Wang#define AF_MAX 32
142951a39d68df598db08dfced8b4707755864a0492Ying Wang
143951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_UNSPEC AF_UNSPEC
144951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_UNIX AF_UNIX
145951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_LOCAL AF_LOCAL
146951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_INET AF_INET
147951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_AX25 AF_AX25
148951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_IPX AF_IPX
149951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_APPLETALK AF_APPLETALK
150951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_NETROM AF_NETROM
151951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_BRIDGE AF_BRIDGE
152951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ATMPVC AF_ATMPVC
153951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_X25 AF_X25
154951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_INET6 AF_INET6
155951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ROSE AF_ROSE
156951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_DECnet AF_DECnet
157951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_NETBEUI AF_NETBEUI
158951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_SECURITY AF_SECURITY
159951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_KEY AF_KEY
160951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_NETLINK AF_NETLINK
161951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ROUTE AF_ROUTE
162951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_PACKET AF_PACKET
163951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ASH AF_ASH
164951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ECONET AF_ECONET
165951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_ATMSVC AF_ATMSVC
166951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_SNA AF_SNA
167951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_IRDA AF_IRDA
168951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_PPPOX AF_PPPOX
169951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_WANPIPE AF_WANPIPE
170951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_LLC AF_LLC
171951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_TIPC AF_TIPC
172951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_BLUETOOTH AF_BLUETOOTH
173951a39d68df598db08dfced8b4707755864a0492Ying Wang#define PF_MAX AF_MAX
174951a39d68df598db08dfced8b4707755864a0492Ying Wang
175951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOMAXCONN 128
176951a39d68df598db08dfced8b4707755864a0492Ying Wang
177951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_OOB 1
178951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_PEEK 2
179951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_DONTROUTE 4
180951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_TRYHARD 4
181951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_CTRUNC 8
182951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_PROBE 0x10
183951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_TRUNC 0x20
184951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_DONTWAIT 0x40
185951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_EOR 0x80
186951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_WAITALL 0x100
187951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_FIN 0x200
188951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_SYN 0x400
189951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_CONFIRM 0x800
190951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_RST 0x1000
191951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_ERRQUEUE 0x2000
192951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_NOSIGNAL 0x4000
193951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_MORE 0x8000
194951a39d68df598db08dfced8b4707755864a0492Ying Wang
195951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_EOF MSG_FIN
196951a39d68df598db08dfced8b4707755864a0492Ying Wang
197951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MSG_CMSG_COMPAT 0
198951a39d68df598db08dfced8b4707755864a0492Ying Wang
199951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_IP 0
200951a39d68df598db08dfced8b4707755864a0492Ying Wang
201951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_TCP 6
202951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_UDP 17
203951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_IPV6 41
204951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_ICMPV6 58
205951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_SCTP 132
206951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_RAW 255
207951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_IPX 256
208951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_AX25 257
209951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_ATALK 258
210951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_NETROM 259
211951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_ROSE 260
212951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_DECNET 261
213951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_X25 262
214951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_PACKET 263
215951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_ATM 264
216951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_AAL 265
217951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_IRDA 266
218951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_NETBEUI 267
219951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_LLC 268
220951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_DCCP 269
221951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_NETLINK 270
222951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SOL_TIPC 271
223951a39d68df598db08dfced8b4707755864a0492Ying Wang
224951a39d68df598db08dfced8b4707755864a0492Ying Wang#define IPX_TYPE 1
225951a39d68df598db08dfced8b4707755864a0492Ying Wang
226951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
227951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
228