Blame view

include/linux/net.h 9.61 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /*
   * NET		An implementation of the SOCKET network access protocol.
   *		This is the master header file for the Linux NET layer,
   *		or, in plain English: the networking handling part of the
   *		kernel.
   *
   * Version:	@(#)net.h	1.0.3	05/25/93
   *
   * Authors:	Orest Zborowski, <obz@Kodak.COM>
02c30a84e   Jesper Juhl   [PATCH] update Ro...
10
   *		Ross Biro
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
   *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
   *
   *		This program is free software; you can redistribute it and/or
   *		modify it under the terms of the GNU General Public License
   *		as published by the Free Software Foundation; either version
   *		2 of the License, or (at your option) any later version.
   */
  #ifndef _LINUX_NET_H
  #define _LINUX_NET_H
0098b7273   Rusty Russell   [NET]: NPROTO is ...
20
  #include <linux/socket.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
  #include <asm/socket.h>
0098b7273   Rusty Russell   [NET]: NPROTO is ...
22
  #define NPROTO		AF_MAX
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  
  #define SYS_SOCKET	1		/* sys_socket(2)		*/
  #define SYS_BIND	2		/* sys_bind(2)			*/
  #define SYS_CONNECT	3		/* sys_connect(2)		*/
  #define SYS_LISTEN	4		/* sys_listen(2)		*/
  #define SYS_ACCEPT	5		/* sys_accept(2)		*/
  #define SYS_GETSOCKNAME	6		/* sys_getsockname(2)		*/
  #define SYS_GETPEERNAME	7		/* sys_getpeername(2)		*/
  #define SYS_SOCKETPAIR	8		/* sys_socketpair(2)		*/
  #define SYS_SEND	9		/* sys_send(2)			*/
  #define SYS_RECV	10		/* sys_recv(2)			*/
  #define SYS_SENDTO	11		/* sys_sendto(2)		*/
  #define SYS_RECVFROM	12		/* sys_recvfrom(2)		*/
  #define SYS_SHUTDOWN	13		/* sys_shutdown(2)		*/
  #define SYS_SETSOCKOPT	14		/* sys_setsockopt(2)		*/
  #define SYS_GETSOCKOPT	15		/* sys_getsockopt(2)		*/
  #define SYS_SENDMSG	16		/* sys_sendmsg(2)		*/
  #define SYS_RECVMSG	17		/* sys_recvmsg(2)		*/
de11defeb   Ulrich Drepper   reintroduce accept4
41
  #define SYS_ACCEPT4	18		/* sys_accept4(2)		*/
a2e272554   Arnaldo Carvalho de Melo   net: Introduce re...
42
  #define SYS_RECVMMSG	19		/* sys_recvmmsg(2)		*/
228e548e6   Anton Blanchard   net: Add sendmmsg...
43
  #define SYS_SENDMMSG	20		/* sys_sendmmsg(2)		*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
47
48
49
50
51
52
53
54
55
  
  typedef enum {
  	SS_FREE = 0,			/* not allocated		*/
  	SS_UNCONNECTED,			/* unconnected to any socket	*/
  	SS_CONNECTING,			/* in process of connecting	*/
  	SS_CONNECTED,			/* connected to socket		*/
  	SS_DISCONNECTING		/* in process of disconnecting	*/
  } socket_state;
  
  #define __SO_ACCEPTCON	(1 << 16)	/* performed a listen		*/
  
  #ifdef __KERNEL__
eacf17bdb   David Woodhouse   Don't include <li...
56
  #include <linux/stringify.h>
cb4db4c22   David Woodhouse   [NET]: Don't expo...
57
  #include <linux/random.h>
5770a3fb5   David Woodhouse   Fix userspace exp...
58
59
  #include <linux/wait.h>
  #include <linux/fcntl.h>	/* For O_CLOEXEC and O_NONBLOCK */
29a020d35   Eric Dumazet   [PATCH] net: kmem...
60
  #include <linux/kmemcheck.h>
438154823   Eric Dumazet   net: sock_def_rea...
61
  #include <linux/rcupdate.h>
5770a3fb5   David Woodhouse   Fix userspace exp...
62
63
64
65
66
  
  struct poll_table_struct;
  struct pipe_inode_info;
  struct inode;
  struct net;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
70
71
  
  #define SOCK_ASYNC_NOSPACE	0
  #define SOCK_ASYNC_WAITDATA	1
  #define SOCK_NOSPACE		2
  #define SOCK_PASSCRED		3
877ce7c1b   Catherine Zhang   [AF_UNIX]: Datagr...
72
  #define SOCK_PASSSEC		4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
74
  
  #ifndef ARCH_HAS_SOCKET_TYPES
4dc3b16ba   Pavel Pisa   [PATCH] DocBook: ...
75
76
77
78
79
80
81
  /**
   * enum sock_type - Socket types
   * @SOCK_STREAM: stream (connection) socket
   * @SOCK_DGRAM: datagram (conn.less) socket
   * @SOCK_RAW: raw socket
   * @SOCK_RDM: reliably-delivered message
   * @SOCK_SEQPACKET: sequential packet socket
8f2709b54   Randy Dunlap   [PATCH] kernel-do...
82
   * @SOCK_DCCP: Datagram Congestion Control Protocol socket
4dc3b16ba   Pavel Pisa   [PATCH] DocBook: ...
83
84
85
   * @SOCK_PACKET: linux specific way of getting packets at the dev level.
   *		  For writing rarp and other similar things on the user level.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
87
88
   * When adding some new socket type please
   * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
   * overrides this enum for binary compat reasons.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
90
91
92
93
94
95
   */
  enum sock_type {
  	SOCK_STREAM	= 1,
  	SOCK_DGRAM	= 2,
  	SOCK_RAW	= 3,
  	SOCK_RDM	= 4,
  	SOCK_SEQPACKET	= 5,
7c657876b   Arnaldo Carvalho de Melo   [DCCP]: Initial i...
96
  	SOCK_DCCP	= 6,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
99
100
  	SOCK_PACKET	= 10,
  };
  
  #define SOCK_MAX (SOCK_PACKET + 1)
a677a039b   Ulrich Drepper   flag parameters: ...
101
102
103
  /* Mask which covers at least up to SOCK_MASK-1.  The
   * remaining bits are used as flags. */
  #define SOCK_TYPE_MASK 0xf
de11defeb   Ulrich Drepper   reintroduce accept4
104
  /* Flags for socket, socketpair, accept4 */
a677a039b   Ulrich Drepper   flag parameters: ...
105
  #define SOCK_CLOEXEC	O_CLOEXEC
c019bbc61   Ulrich Drepper   flag parameters: ...
106
107
108
  #ifndef SOCK_NONBLOCK
  #define SOCK_NONBLOCK	O_NONBLOCK
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
110
  
  #endif /* ARCH_HAS_SOCKET_TYPES */
91cf45f02   Trond Myklebust   [NET]: Add the he...
111
112
113
114
115
  enum sock_shutdown_cmd {
  	SHUT_RD		= 0,
  	SHUT_WR		= 1,
  	SHUT_RDWR	= 2,
  };
438154823   Eric Dumazet   net: sock_def_rea...
116
  struct socket_wq {
eaefd1105   Eric Dumazet   net: add __rcu an...
117
  	/* Note: wait MUST be first field of socket_wq */
438154823   Eric Dumazet   net: sock_def_rea...
118
119
120
121
  	wait_queue_head_t	wait;
  	struct fasync_struct	*fasync_list;
  	struct rcu_head		rcu;
  } ____cacheline_aligned_in_smp;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
  /**
   *  struct socket - general BSD socket
4dc3b16ba   Pavel Pisa   [PATCH] DocBook: ...
124
   *  @state: socket state (%SS_CONNECTED, etc)
2c693610f   Richard Kennedy   net: remove paddi...
125
   *  @type: socket type (%SOCK_STREAM, etc)
4dc3b16ba   Pavel Pisa   [PATCH] DocBook: ...
126
127
   *  @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc)
   *  @ops: protocol specific socket operations
4dc3b16ba   Pavel Pisa   [PATCH] DocBook: ...
128
129
   *  @file: File back pointer for gc
   *  @sk: internal networking protocol agnostic socket representation
e2aec372f   Randy Dunlap   linux/net.h: fix ...
130
   *  @wq: wait queue for several uses
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
   */
  struct socket {
  	socket_state		state;
29a020d35   Eric Dumazet   [PATCH] net: kmem...
134
135
  
  	kmemcheck_bitfield_begin(type);
2c693610f   Richard Kennedy   net: remove paddi...
136
  	short			type;
29a020d35   Eric Dumazet   [PATCH] net: kmem...
137
  	kmemcheck_bitfield_end(type);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
  	unsigned long		flags;
438154823   Eric Dumazet   net: sock_def_rea...
139

eaefd1105   Eric Dumazet   net: add __rcu an...
140
  	struct socket_wq __rcu	*wq;
8bdd663ab   Eric Dumazet   net: reorder fiel...
141

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
143
  	struct file		*file;
  	struct sock		*sk;
8bdd663ab   Eric Dumazet   net: reorder fiel...
144
  	const struct proto_ops	*ops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
  };
  
  struct vm_area_struct;
  struct page;
  struct kiocb;
  struct sockaddr;
  struct msghdr;
  struct module;
  
  struct proto_ops {
  	int		family;
  	struct module	*owner;
  	int		(*release)   (struct socket *sock);
  	int		(*bind)	     (struct socket *sock,
  				      struct sockaddr *myaddr,
  				      int sockaddr_len);
  	int		(*connect)   (struct socket *sock,
  				      struct sockaddr *vaddr,
  				      int sockaddr_len, int flags);
  	int		(*socketpair)(struct socket *sock1,
  				      struct socket *sock2);
  	int		(*accept)    (struct socket *sock,
  				      struct socket *newsock, int flags);
  	int		(*getname)   (struct socket *sock,
  				      struct sockaddr *addr,
  				      int *sockaddr_len, int peer);
  	unsigned int	(*poll)	     (struct file *file, struct socket *sock,
  				      struct poll_table_struct *wait);
  	int		(*ioctl)     (struct socket *sock, unsigned int cmd,
  				      unsigned long arg);
1621e0940   Alexey Dobriyan   net: CONFIG_COMPA...
175
  #ifdef CONFIG_COMPAT
89bbfc95d   Shaun Pereira   [NET]: allow 32 b...
176
177
  	int	 	(*compat_ioctl) (struct socket *sock, unsigned int cmd,
  				      unsigned long arg);
1621e0940   Alexey Dobriyan   net: CONFIG_COMPA...
178
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
179
180
181
  	int		(*listen)    (struct socket *sock, int len);
  	int		(*shutdown)  (struct socket *sock, int flags);
  	int		(*setsockopt)(struct socket *sock, int level,
b7058842c   David S. Miller   net: Make setsock...
182
  				      int optname, char __user *optval, unsigned int optlen);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
  	int		(*getsockopt)(struct socket *sock, int level,
  				      int optname, char __user *optval, int __user *optlen);
1621e0940   Alexey Dobriyan   net: CONFIG_COMPA...
185
  #ifdef CONFIG_COMPAT
3fdadf7d2   Dmitry Mishin   [NET]: {get|set}s...
186
  	int		(*compat_setsockopt)(struct socket *sock, int level,
b7058842c   David S. Miller   net: Make setsock...
187
  				      int optname, char __user *optval, unsigned int optlen);
3fdadf7d2   Dmitry Mishin   [NET]: {get|set}s...
188
189
  	int		(*compat_getsockopt)(struct socket *sock, int level,
  				      int optname, char __user *optval, int __user *optlen);
1621e0940   Alexey Dobriyan   net: CONFIG_COMPA...
190
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
192
193
194
195
196
197
198
199
  	int		(*sendmsg)   (struct kiocb *iocb, struct socket *sock,
  				      struct msghdr *m, size_t total_len);
  	int		(*recvmsg)   (struct kiocb *iocb, struct socket *sock,
  				      struct msghdr *m, size_t total_len,
  				      int flags);
  	int		(*mmap)	     (struct file *file, struct socket *sock,
  				      struct vm_area_struct * vma);
  	ssize_t		(*sendpage)  (struct socket *sock, struct page *page,
  				      int offset, size_t size, int flags);
9c55e01c0   Jens Axboe   [TCP]: Splice rec...
200
201
  	ssize_t 	(*splice_read)(struct socket *sock,  loff_t *ppos,
  				       struct pipe_inode_info *pipe, size_t len, unsigned int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
  };
38bfd8f5b   Cyrill Gorcunov   net,socket: intro...
203
204
  #define DECLARE_SOCKADDR(type, dst, src)	\
  	type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; })
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
205
206
  struct net_proto_family {
  	int		family;
3f378b684   Eric Paris   net: pass kern to...
207
208
  	int		(*create)(struct net *net, struct socket *sock,
  				  int protocol, int kern);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
209
210
211
212
213
  	struct module	*owner;
  };
  
  struct iovec;
  struct kvec;
8d8ad9d7c   Pavel Emelyanov   [NET]: Name magic...
214
215
216
217
218
219
  enum {
  	SOCK_WAKE_IO,
  	SOCK_WAKE_WAITD,
  	SOCK_WAKE_SPACE,
  	SOCK_WAKE_URG,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
  extern int	     sock_wake_async(struct socket *sk, int how, int band);
f0fd27d42   Stephen Hemminger   [NET]: sock_regis...
221
222
  extern int	     sock_register(const struct net_proto_family *fam);
  extern void	     sock_unregister(int family);
721db93a5   Pavel Emelyanov   net: Export __soc...
223
224
  extern int	     __sock_create(struct net *net, int family, int type, int proto,
  				 struct socket **res, int kern);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
225
226
227
228
229
230
231
232
233
234
235
  extern int	     sock_create(int family, int type, int proto,
  				 struct socket **res);
  extern int	     sock_create_kern(int family, int type, int proto,
  				      struct socket **res);
  extern int	     sock_create_lite(int family, int type, int proto,
  				      struct socket **res); 
  extern void	     sock_release(struct socket *sock);
  extern int   	     sock_sendmsg(struct socket *sock, struct msghdr *msg,
  				  size_t len);
  extern int	     sock_recvmsg(struct socket *sock, struct msghdr *msg,
  				  size_t size, int flags);
a677a039b   Ulrich Drepper   flag parameters: ...
236
  extern int 	     sock_map_fd(struct socket *sock, int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
237
238
239
  extern struct socket *sockfd_lookup(int fd, int *err);
  #define		     sockfd_put(sock) fput(sock->file)
  extern int	     net_ratelimit(void);
aaa248f6c   Stephen Hemminger   [PATCH] rename ne...
240
241
  
  #define net_random()		random32()
a64b78a07   Al Viro   [NET]: Annotate n...
242
  #define net_srandom(seed)	srandom32((__force u32)seed)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
244
245
246
247
248
  
  extern int   	     kernel_sendmsg(struct socket *sock, struct msghdr *msg,
  				    struct kvec *vec, size_t num, size_t len);
  extern int   	     kernel_recvmsg(struct socket *sock, struct msghdr *msg,
  				    struct kvec *vec, size_t num,
  				    size_t len, int flags);
ac5a488ef   Sridhar Samudrala   [NET]: Round out ...
249
250
251
252
253
254
255
256
257
258
259
260
261
262
  extern int kernel_bind(struct socket *sock, struct sockaddr *addr,
  		       int addrlen);
  extern int kernel_listen(struct socket *sock, int backlog);
  extern int kernel_accept(struct socket *sock, struct socket **newsock,
  			 int flags);
  extern int kernel_connect(struct socket *sock, struct sockaddr *addr,
  			  int addrlen, int flags);
  extern int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
  			      int *addrlen);
  extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
  			      int *addrlen);
  extern int kernel_getsockopt(struct socket *sock, int level, int optname,
  			     char *optval, int *optlen);
  extern int kernel_setsockopt(struct socket *sock, int level, int optname,
b7058842c   David S. Miller   net: Make setsock...
263
  			     char *optval, unsigned int optlen);
ac5a488ef   Sridhar Samudrala   [NET]: Round out ...
264
265
266
  extern int kernel_sendpage(struct socket *sock, struct page *page, int offset,
  			   size_t size, int flags);
  extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
91cf45f02   Trond Myklebust   [NET]: Add the he...
267
268
  extern int kernel_sock_shutdown(struct socket *sock,
  				enum sock_shutdown_cmd how);
ac5a488ef   Sridhar Samudrala   [NET]: Round out ...
269

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
270
271
  #define MODULE_ALIAS_NETPROTO(proto) \
  	MODULE_ALIAS("net-pf-" __stringify(proto))
4fdb3bb72   Harald Welte   [NETLINK]: Add pr...
272
273
  #define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \
  	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto))
305e1e969   Jean Delvare   [INET]: Let inet_...
274
275
276
  #define MODULE_ALIAS_NET_PF_PROTO_TYPE(pf, proto, type) \
  	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
  		     "-type-" __stringify(type))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
278
  #endif /* __KERNEL__ */
  #endif	/* _LINUX_NET_H */