1#ifndef SOCKET32_H
2#define SOCKET32_H 1
3
4#define MAX_SOCK_ADDR	128		/* 108 for Unix domain -
5					   16 for IP, 16 for IPX,
6					   24 for IPv6,
7					   about 80 for AX.25 */
8
9extern struct socket *sockfd_lookup(int fd, int *err);
10
11extern __inline__ void sockfd_put(struct socket *sock)
12{
13	fput(sock->file);
14}
15
16struct msghdr32 {
17        u32               msg_name;
18        int               msg_namelen;
19        u32               msg_iov;
20        __kernel_size_t32 msg_iovlen;
21        u32               msg_control;
22        __kernel_size_t32 msg_controllen;
23        unsigned          msg_flags;
24};
25
26struct cmsghdr32 {
27        __kernel_size_t32 cmsg_len;
28        int               cmsg_level;
29        int               cmsg_type;
30};
31
32/* Bleech... */
33#define __CMSG32_NXTHDR(ctl, len, cmsg, cmsglen) __cmsg32_nxthdr((ctl),(len),(cmsg),(cmsglen))
34#define CMSG32_NXTHDR(mhdr, cmsg, cmsglen) cmsg32_nxthdr((mhdr), (cmsg), (cmsglen))
35
36#define CMSG32_ALIGN(len) ( ((len)+sizeof(int)-1) & ~(sizeof(int)-1) )
37
38#define CMSG32_DATA(cmsg)	((void *)((char *)(cmsg) + CMSG32_ALIGN(sizeof(struct cmsghdr32))))
39#define CMSG32_SPACE(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + CMSG32_ALIGN(len))
40#define CMSG32_LEN(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + (len))
41
42#define __CMSG32_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr32) ? \
43				    (struct cmsghdr32 *)(ctl) : \
44				    (struct cmsghdr32 *)NULL)
45#define CMSG32_FIRSTHDR(msg)	__CMSG32_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
46
47__inline__ struct cmsghdr32 *__cmsg32_nxthdr(void *__ctl, __kernel_size_t __size,
48					      struct cmsghdr32 *__cmsg, int __cmsg_len)
49{
50	struct cmsghdr32 * __ptr;
51
52	__ptr = (struct cmsghdr32 *)(((unsigned char *) __cmsg) +
53				     CMSG32_ALIGN(__cmsg_len));
54	if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
55		return NULL;
56
57	return __ptr;
58}
59
60__inline__ struct cmsghdr32 *cmsg32_nxthdr (struct msghdr *__msg,
61					    struct cmsghdr32 *__cmsg,
62					    int __cmsg_len)
63{
64	return __cmsg32_nxthdr(__msg->msg_control, __msg->msg_controllen,
65			       __cmsg, __cmsg_len);
66}
67
68#endif
69