1 #ifndef _LINUX_SOCKET_H
2 #define _LINUX_SOCKET_H
3
4 #include <asm/socket.h> /* arch-dependent defines */
5 #include <linux/sockios.h> /* the SIOCxxx I/O controls */
6 #include <linux/uio.h> /* iovec support */
7
8 struct sockaddr {
9 unsigned short sa_family; /* address family, AF_xxx */
10 char sa_data[14]; /* 14 bytes of protocol address */
11 };
12
13 struct linger {
14 int l_onoff; /* Linger active */
15 int l_linger; /* How long to linger for */
16 };
17
18 struct msghdr
19 {
20 void * msg_name; /* Socket name */
21 int msg_namelen; /* Length of name */
22 struct iovec * msg_iov; /* Data blocks */
23 int msg_iovlen; /* Number of blocks */
24 void * msg_accrights; /* Per protocol magic (eg BSD file descriptor passing) */
25 int msg_accrightslen; /* Length of rights list */
26 };
27
28 /* Socket types. */
29 #define SOCK_STREAM 1 /* stream (connection) socket */
30 #define SOCK_DGRAM 2 /* datagram (conn.less) socket */
31 #define SOCK_RAW 3 /* raw socket */
32 #define SOCK_RDM 4 /* reliably-delivered message */
33 #define SOCK_SEQPACKET 5 /* sequential packet socket */
34 #define SOCK_PACKET 10 /* linux specific way of */
35 /* getting packets at the dev */
36 /* level. For writing rarp and */
37 /* other similar things on the */
38 /* user level. */
39
40 /* Supported address families. */
41 #define AF_UNSPEC 0
42 #define AF_UNIX 1 /* Unix domain sockets */
43 #define AF_INET 2 /* Internet IP Protocol */
44 #define AF_AX25 3 /* Amateur Radio AX.25 */
45 #define AF_IPX 4 /* Novell IPX */
46 #define AF_APPLETALK 5 /* Appletalk DDP */
47 #define AF_NETROM 6 /* Amateur radio NetROM */
48 #define AF_BRIDGE 7 /* Multiprotocol bridge */
49 #define AF_AAL5 8 /* Reserved for Werner's ATM */
50 #define AF_X25 9 /* Reserved for X.25 project */
51 #define AF_INET6 10 /* IP version 6 */
52 #define AF_MAX 12 /* For now.. */
53
54 /* Protocol families, same as address families. */
55 #define PF_UNSPEC AF_UNSPEC
56 #define PF_UNIX AF_UNIX
57 #define PF_INET AF_INET
58 #define PF_AX25 AF_AX25
59 #define PF_IPX AF_IPX
60 #define PF_APPLETALK AF_APPLETALK
61 #define PF_NETROM AF_NETROM
62 #define PF_BRIDGE AF_BRIDGE
63 #define PF_AAL5 AF_AAL5
64 #define PF_X25 AF_X25
65 #define PF_INET6 AF_INET6
66
67 #define PF_MAX AF_MAX
68
69 /* Maximum queue length specificable by listen. */
70 #define SOMAXCONN 128
71
72 /* Flags we can use with send/ and recv. */
73 #define MSG_OOB 1
74 #define MSG_PEEK 2
75 #define MSG_DONTROUTE 4
76
77 /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
78 #define SOL_IP 0
79 #define SOL_IPX 256
80 #define SOL_AX25 257
81 #define SOL_ATALK 258
82 #define SOL_NETROM 259
83 #define SOL_TCP 6
84 #define SOL_UDP 17
85
86 /* IP options */
87 #define IP_TOS 1
88 #define IPTOS_LOWDELAY 0x10
89 #define IPTOS_THROUGHPUT 0x08
90 #define IPTOS_RELIABILITY 0x04
91 #define IP_TTL 2
92 #define IP_HDRINCL 3
93 #ifdef V1_3_WILL_DO_THIS_FUNKY_STUFF
94 #define IP_OPTIONS 4
95 #endif
96
97 #define IP_MULTICAST_IF 32
98 #define IP_MULTICAST_TTL 33
99 #define IP_MULTICAST_LOOP 34
100 #define IP_ADD_MEMBERSHIP 35
101 #define IP_DROP_MEMBERSHIP 36
102
103
104 /* These need to appear somewhere around here */
105 #define IP_DEFAULT_MULTICAST_TTL 1
106 #define IP_DEFAULT_MULTICAST_LOOP 1
107 #define IP_MAX_MEMBERSHIPS 20
108
109 /* IPX options */
110 #define IPX_TYPE 1
111
112 /* TCP options - this way around because someone left a set in the c library includes */
113 #define TCP_NODELAY 1
114 #define TCP_MAXSEG 2
115
116 /* The various priorities. */
117 #define SOPRI_INTERACTIVE 0
118 #define SOPRI_NORMAL 1
119 #define SOPRI_BACKGROUND 2
120
121 #ifdef __KERNEL__
122 extern void memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
123 extern int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int mode);
124 extern void memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
125 extern int move_addr_to_user(void *kaddr, int klen, void *uaddr, int *ulen);
126 extern int move_addr_to_kernel(void *uaddr, int ulen, void *kaddr);
127 #endif
128 #endif /* _LINUX_SOCKET_H */