Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Apr 14-17, 2025
Register
Loading...
v5.9
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * NET		An implementation of the SOCKET network access protocol.
  4 *		This is the master header file for the Linux NET layer,
  5 *		or, in plain English: the networking handling part of the
  6 *		kernel.
  7 *
  8 * Version:	@(#)net.h	1.0.3	05/25/93
  9 *
 10 * Authors:	Orest Zborowski, <obz@Kodak.COM>
 11 *		Ross Biro
 12 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 
 
 
 
 
 13 */
 14#ifndef _LINUX_NET_H
 15#define _LINUX_NET_H
 16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 17#include <linux/stringify.h>
 18#include <linux/random.h>
 19#include <linux/wait.h>
 20#include <linux/fcntl.h>	/* For O_CLOEXEC and O_NONBLOCK */
 
 21#include <linux/rcupdate.h>
 22#include <linux/once.h>
 23#include <linux/fs.h>
 24#include <linux/mm.h>
 25#include <linux/sockptr.h>
 26
 27#include <uapi/linux/net.h>
 28
 29struct poll_table_struct;
 30struct pipe_inode_info;
 31struct inode;
 32struct file;
 33struct net;
 34
 35/* Historically, SOCKWQ_ASYNC_NOSPACE & SOCKWQ_ASYNC_WAITDATA were located
 36 * in sock->flags, but moved into sk->sk_wq->flags to be RCU protected.
 37 * Eventually all flags will be in sk->sk_wq->flags.
 38 */
 39#define SOCKWQ_ASYNC_NOSPACE	0
 40#define SOCKWQ_ASYNC_WAITDATA	1
 41#define SOCK_NOSPACE		2
 42#define SOCK_PASSCRED		3
 43#define SOCK_PASSSEC		4
 
 44
 45#ifndef ARCH_HAS_SOCKET_TYPES
 46/**
 47 * enum sock_type - Socket types
 48 * @SOCK_STREAM: stream (connection) socket
 49 * @SOCK_DGRAM: datagram (conn.less) socket
 50 * @SOCK_RAW: raw socket
 51 * @SOCK_RDM: reliably-delivered message
 52 * @SOCK_SEQPACKET: sequential packet socket
 53 * @SOCK_DCCP: Datagram Congestion Control Protocol socket
 54 * @SOCK_PACKET: linux specific way of getting packets at the dev level.
 55 *		  For writing rarp and other similar things on the user level.
 56 *
 57 * When adding some new socket type please
 58 * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
 59 * overrides this enum for binary compat reasons.
 60 */
 61enum sock_type {
 62	SOCK_STREAM	= 1,
 63	SOCK_DGRAM	= 2,
 64	SOCK_RAW	= 3,
 65	SOCK_RDM	= 4,
 66	SOCK_SEQPACKET	= 5,
 67	SOCK_DCCP	= 6,
 68	SOCK_PACKET	= 10,
 69};
 70
 71#define SOCK_MAX (SOCK_PACKET + 1)
 72/* Mask which covers at least up to SOCK_MASK-1.  The
 73 * remaining bits are used as flags. */
 74#define SOCK_TYPE_MASK 0xf
 75
 76/* Flags for socket, socketpair, accept4 */
 77#define SOCK_CLOEXEC	O_CLOEXEC
 78#ifndef SOCK_NONBLOCK
 79#define SOCK_NONBLOCK	O_NONBLOCK
 80#endif
 81
 82#endif /* ARCH_HAS_SOCKET_TYPES */
 83
 84/**
 85 * enum sock_shutdown_cmd - Shutdown types
 86 * @SHUT_RD: shutdown receptions
 87 * @SHUT_WR: shutdown transmissions
 88 * @SHUT_RDWR: shutdown receptions/transmissions
 89 */
 90enum sock_shutdown_cmd {
 91	SHUT_RD,
 92	SHUT_WR,
 93	SHUT_RDWR,
 94};
 95
 96struct socket_wq {
 97	/* Note: wait MUST be first field of socket_wq */
 98	wait_queue_head_t	wait;
 99	struct fasync_struct	*fasync_list;
100	unsigned long		flags; /* %SOCKWQ_ASYNC_NOSPACE, etc */
101	struct rcu_head		rcu;
102} ____cacheline_aligned_in_smp;
103
104/**
105 *  struct socket - general BSD socket
106 *  @state: socket state (%SS_CONNECTED, etc)
107 *  @type: socket type (%SOCK_STREAM, etc)
108 *  @flags: socket flags (%SOCK_NOSPACE, etc)
109 *  @ops: protocol specific socket operations
110 *  @file: File back pointer for gc
111 *  @sk: internal networking protocol agnostic socket representation
112 *  @wq: wait queue for several uses
113 */
114struct socket {
115	socket_state		state;
116
 
117	short			type;
 
118
119	unsigned long		flags;
120
 
 
121	struct file		*file;
122	struct sock		*sk;
123	const struct proto_ops	*ops;
124
125	struct socket_wq	wq;
126};
127
128struct vm_area_struct;
129struct page;
 
130struct sockaddr;
131struct msghdr;
132struct module;
133struct sk_buff;
134typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
135			       unsigned int, size_t);
136
137struct proto_ops {
138	int		family;
139	struct module	*owner;
140	int		(*release)   (struct socket *sock);
141	int		(*bind)	     (struct socket *sock,
142				      struct sockaddr *myaddr,
143				      int sockaddr_len);
144	int		(*connect)   (struct socket *sock,
145				      struct sockaddr *vaddr,
146				      int sockaddr_len, int flags);
147	int		(*socketpair)(struct socket *sock1,
148				      struct socket *sock2);
149	int		(*accept)    (struct socket *sock,
150				      struct socket *newsock, int flags, bool kern);
151	int		(*getname)   (struct socket *sock,
152				      struct sockaddr *addr,
153				      int peer);
154	__poll_t	(*poll)	     (struct file *file, struct socket *sock,
155				      struct poll_table_struct *wait);
156	int		(*ioctl)     (struct socket *sock, unsigned int cmd,
157				      unsigned long arg);
158#ifdef CONFIG_COMPAT
159	int	 	(*compat_ioctl) (struct socket *sock, unsigned int cmd,
160				      unsigned long arg);
161#endif
162	int		(*gettstamp) (struct socket *sock, void __user *userstamp,
163				      bool timeval, bool time32);
164	int		(*listen)    (struct socket *sock, int len);
165	int		(*shutdown)  (struct socket *sock, int flags);
166	int		(*setsockopt)(struct socket *sock, int level,
167				      int optname, sockptr_t optval,
168				      unsigned int optlen);
169	int		(*getsockopt)(struct socket *sock, int level,
170				      int optname, char __user *optval, int __user *optlen);
171	void		(*show_fdinfo)(struct seq_file *m, struct socket *sock);
172	int		(*sendmsg)   (struct socket *sock, struct msghdr *m,
173				      size_t total_len);
174	/* Notes for implementing recvmsg:
175	 * ===============================
176	 * msg->msg_namelen should get updated by the recvmsg handlers
177	 * iff msg_name != NULL. It is by default 0 to prevent
178	 * returning uninitialized memory to user space.  The recvfrom
179	 * handlers can assume that msg.msg_name is either NULL or has
180	 * a minimum size of sizeof(struct sockaddr_storage).
181	 */
182	int		(*recvmsg)   (struct socket *sock, struct msghdr *m,
183				      size_t total_len, int flags);
184	int		(*mmap)	     (struct file *file, struct socket *sock,
185				      struct vm_area_struct * vma);
186	ssize_t		(*sendpage)  (struct socket *sock, struct page *page,
187				      int offset, size_t size, int flags);
188	ssize_t 	(*splice_read)(struct socket *sock,  loff_t *ppos,
189				       struct pipe_inode_info *pipe, size_t len, unsigned int flags);
190	int		(*set_peek_off)(struct sock *sk, int val);
191	int		(*peek_len)(struct socket *sock);
192
193	/* The following functions are called internally by kernel with
194	 * sock lock already held.
195	 */
196	int		(*read_sock)(struct sock *sk, read_descriptor_t *desc,
197				     sk_read_actor_t recv_actor);
198	int		(*sendpage_locked)(struct sock *sk, struct page *page,
199					   int offset, size_t size, int flags);
200	int		(*sendmsg_locked)(struct sock *sk, struct msghdr *msg,
201					  size_t size);
202	int		(*set_rcvlowat)(struct sock *sk, int val);
203};
204
205#define DECLARE_SOCKADDR(type, dst, src)	\
206	type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; })
207
208struct net_proto_family {
209	int		family;
210	int		(*create)(struct net *net, struct socket *sock,
211				  int protocol, int kern);
212	struct module	*owner;
213};
214
215struct iovec;
216struct kvec;
217
218enum {
219	SOCK_WAKE_IO,
220	SOCK_WAKE_WAITD,
221	SOCK_WAKE_SPACE,
222	SOCK_WAKE_URG,
223};
224
225int sock_wake_async(struct socket_wq *sk_wq, int how, int band);
226int sock_register(const struct net_proto_family *fam);
227void sock_unregister(int family);
228bool sock_is_registered(int family);
229int __sock_create(struct net *net, int family, int type, int proto,
230		  struct socket **res, int kern);
231int sock_create(int family, int type, int proto, struct socket **res);
232int sock_create_kern(struct net *net, int family, int type, int proto, struct socket **res);
233int sock_create_lite(int family, int type, int proto, struct socket **res);
234struct socket *sock_alloc(void);
235void sock_release(struct socket *sock);
236int sock_sendmsg(struct socket *sock, struct msghdr *msg);
237int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
238struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname);
239struct socket *sockfd_lookup(int fd, int *err);
240struct socket *sock_from_file(struct file *file, int *err);
 
 
241#define		     sockfd_put(sock) fput(sock->file)
242int net_ratelimit(void);
243
244#define net_ratelimited_function(function, ...)			\
245do {								\
246	if (net_ratelimit())					\
247		function(__VA_ARGS__);				\
248} while (0)
249
250#define net_emerg_ratelimited(fmt, ...)				\
251	net_ratelimited_function(pr_emerg, fmt, ##__VA_ARGS__)
252#define net_alert_ratelimited(fmt, ...)				\
253	net_ratelimited_function(pr_alert, fmt, ##__VA_ARGS__)
254#define net_crit_ratelimited(fmt, ...)				\
255	net_ratelimited_function(pr_crit, fmt, ##__VA_ARGS__)
256#define net_err_ratelimited(fmt, ...)				\
257	net_ratelimited_function(pr_err, fmt, ##__VA_ARGS__)
258#define net_notice_ratelimited(fmt, ...)			\
259	net_ratelimited_function(pr_notice, fmt, ##__VA_ARGS__)
260#define net_warn_ratelimited(fmt, ...)				\
261	net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
262#define net_info_ratelimited(fmt, ...)				\
263	net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
264#if defined(CONFIG_DYNAMIC_DEBUG) || \
265	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
266#define net_dbg_ratelimited(fmt, ...)					\
267do {									\
268	DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);			\
269	if (DYNAMIC_DEBUG_BRANCH(descriptor) &&				\
270	    net_ratelimit())						\
271		__dynamic_pr_debug(&descriptor, pr_fmt(fmt),		\
272		                   ##__VA_ARGS__);			\
273} while (0)
274#elif defined(DEBUG)
275#define net_dbg_ratelimited(fmt, ...)				\
276	net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
277#else
278#define net_dbg_ratelimited(fmt, ...)				\
279	do {							\
280		if (0)						\
281			no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); \
282	} while (0)
283#endif
284
285#define net_get_random_once(buf, nbytes)			\
286	get_random_once((buf), (nbytes))
287#define net_get_random_once_wait(buf, nbytes)			\
288	get_random_once_wait((buf), (nbytes))
289
290/*
291 * E.g. XFS meta- & log-data is in slab pages, or bcache meta
292 * data pages, or other high order pages allocated by
293 * __get_free_pages() without __GFP_COMP, which have a page_count
294 * of 0 and/or have PageSlab() set. We cannot use send_page for
295 * those, as that does get_page(); put_page(); and would cause
296 * either a VM_BUG directly, or __page_cache_release a page that
297 * would actually still be referenced by someone, leading to some
298 * obscure delayed Oops somewhere else.
299 */
300static inline bool sendpage_ok(struct page *page)
301{
302	return !PageSlab(page) && page_count(page) >= 1;
303}
304
305int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
306		   size_t num, size_t len);
307int kernel_sendmsg_locked(struct sock *sk, struct msghdr *msg,
308			  struct kvec *vec, size_t num, size_t len);
309int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
310		   size_t num, size_t len, int flags);
311
312int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen);
313int kernel_listen(struct socket *sock, int backlog);
314int kernel_accept(struct socket *sock, struct socket **newsock, int flags);
315int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
316		   int flags);
317int kernel_getsockname(struct socket *sock, struct sockaddr *addr);
318int kernel_getpeername(struct socket *sock, struct sockaddr *addr);
319int kernel_sendpage(struct socket *sock, struct page *page, int offset,
320		    size_t size, int flags);
321int kernel_sendpage_locked(struct sock *sk, struct page *page, int offset,
322			   size_t size, int flags);
323int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how);
324
325/* Routine returns the IP overhead imposed by a (caller-protected) socket. */
326u32 kernel_sock_ip_overhead(struct sock *sk);
327
328#define MODULE_ALIAS_NETPROTO(proto) \
329	MODULE_ALIAS("net-pf-" __stringify(proto))
330
331#define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \
332	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto))
333
334#define MODULE_ALIAS_NET_PF_PROTO_TYPE(pf, proto, type) \
335	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
336		     "-type-" __stringify(type))
337
338#define MODULE_ALIAS_NET_PF_PROTO_NAME(pf, proto, name) \
339	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
340		     name)
 
341#endif	/* _LINUX_NET_H */
v3.5.6
 
  1/*
  2 * NET		An implementation of the SOCKET network access protocol.
  3 *		This is the master header file for the Linux NET layer,
  4 *		or, in plain English: the networking handling part of the
  5 *		kernel.
  6 *
  7 * Version:	@(#)net.h	1.0.3	05/25/93
  8 *
  9 * Authors:	Orest Zborowski, <obz@Kodak.COM>
 10 *		Ross Biro
 11 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 12 *
 13 *		This program is free software; you can redistribute it and/or
 14 *		modify it under the terms of the GNU General Public License
 15 *		as published by the Free Software Foundation; either version
 16 *		2 of the License, or (at your option) any later version.
 17 */
 18#ifndef _LINUX_NET_H
 19#define _LINUX_NET_H
 20
 21#include <linux/socket.h>
 22#include <asm/socket.h>
 23
 24#define NPROTO		AF_MAX
 25
 26#define SYS_SOCKET	1		/* sys_socket(2)		*/
 27#define SYS_BIND	2		/* sys_bind(2)			*/
 28#define SYS_CONNECT	3		/* sys_connect(2)		*/
 29#define SYS_LISTEN	4		/* sys_listen(2)		*/
 30#define SYS_ACCEPT	5		/* sys_accept(2)		*/
 31#define SYS_GETSOCKNAME	6		/* sys_getsockname(2)		*/
 32#define SYS_GETPEERNAME	7		/* sys_getpeername(2)		*/
 33#define SYS_SOCKETPAIR	8		/* sys_socketpair(2)		*/
 34#define SYS_SEND	9		/* sys_send(2)			*/
 35#define SYS_RECV	10		/* sys_recv(2)			*/
 36#define SYS_SENDTO	11		/* sys_sendto(2)		*/
 37#define SYS_RECVFROM	12		/* sys_recvfrom(2)		*/
 38#define SYS_SHUTDOWN	13		/* sys_shutdown(2)		*/
 39#define SYS_SETSOCKOPT	14		/* sys_setsockopt(2)		*/
 40#define SYS_GETSOCKOPT	15		/* sys_getsockopt(2)		*/
 41#define SYS_SENDMSG	16		/* sys_sendmsg(2)		*/
 42#define SYS_RECVMSG	17		/* sys_recvmsg(2)		*/
 43#define SYS_ACCEPT4	18		/* sys_accept4(2)		*/
 44#define SYS_RECVMMSG	19		/* sys_recvmmsg(2)		*/
 45#define SYS_SENDMMSG	20		/* sys_sendmmsg(2)		*/
 46
 47typedef enum {
 48	SS_FREE = 0,			/* not allocated		*/
 49	SS_UNCONNECTED,			/* unconnected to any socket	*/
 50	SS_CONNECTING,			/* in process of connecting	*/
 51	SS_CONNECTED,			/* connected to socket		*/
 52	SS_DISCONNECTING		/* in process of disconnecting	*/
 53} socket_state;
 54
 55#define __SO_ACCEPTCON	(1 << 16)	/* performed a listen		*/
 56
 57#ifdef __KERNEL__
 58#include <linux/stringify.h>
 59#include <linux/random.h>
 60#include <linux/wait.h>
 61#include <linux/fcntl.h>	/* For O_CLOEXEC and O_NONBLOCK */
 62#include <linux/kmemcheck.h>
 63#include <linux/rcupdate.h>
 
 
 
 
 
 
 64
 65struct poll_table_struct;
 66struct pipe_inode_info;
 67struct inode;
 
 68struct net;
 69
 70#define SOCK_ASYNC_NOSPACE	0
 71#define SOCK_ASYNC_WAITDATA	1
 
 
 
 
 72#define SOCK_NOSPACE		2
 73#define SOCK_PASSCRED		3
 74#define SOCK_PASSSEC		4
 75#define SOCK_EXTERNALLY_ALLOCATED 5
 76
 77#ifndef ARCH_HAS_SOCKET_TYPES
 78/**
 79 * enum sock_type - Socket types
 80 * @SOCK_STREAM: stream (connection) socket
 81 * @SOCK_DGRAM: datagram (conn.less) socket
 82 * @SOCK_RAW: raw socket
 83 * @SOCK_RDM: reliably-delivered message
 84 * @SOCK_SEQPACKET: sequential packet socket
 85 * @SOCK_DCCP: Datagram Congestion Control Protocol socket
 86 * @SOCK_PACKET: linux specific way of getting packets at the dev level.
 87 *		  For writing rarp and other similar things on the user level.
 88 *
 89 * When adding some new socket type please
 90 * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
 91 * overrides this enum for binary compat reasons.
 92 */
 93enum sock_type {
 94	SOCK_STREAM	= 1,
 95	SOCK_DGRAM	= 2,
 96	SOCK_RAW	= 3,
 97	SOCK_RDM	= 4,
 98	SOCK_SEQPACKET	= 5,
 99	SOCK_DCCP	= 6,
100	SOCK_PACKET	= 10,
101};
102
103#define SOCK_MAX (SOCK_PACKET + 1)
104/* Mask which covers at least up to SOCK_MASK-1.  The
105 * remaining bits are used as flags. */
106#define SOCK_TYPE_MASK 0xf
107
108/* Flags for socket, socketpair, accept4 */
109#define SOCK_CLOEXEC	O_CLOEXEC
110#ifndef SOCK_NONBLOCK
111#define SOCK_NONBLOCK	O_NONBLOCK
112#endif
113
114#endif /* ARCH_HAS_SOCKET_TYPES */
115
 
 
 
 
 
 
116enum sock_shutdown_cmd {
117	SHUT_RD		= 0,
118	SHUT_WR		= 1,
119	SHUT_RDWR	= 2,
120};
121
122struct socket_wq {
123	/* Note: wait MUST be first field of socket_wq */
124	wait_queue_head_t	wait;
125	struct fasync_struct	*fasync_list;
 
126	struct rcu_head		rcu;
127} ____cacheline_aligned_in_smp;
128
129/**
130 *  struct socket - general BSD socket
131 *  @state: socket state (%SS_CONNECTED, etc)
132 *  @type: socket type (%SOCK_STREAM, etc)
133 *  @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc)
134 *  @ops: protocol specific socket operations
135 *  @file: File back pointer for gc
136 *  @sk: internal networking protocol agnostic socket representation
137 *  @wq: wait queue for several uses
138 */
139struct socket {
140	socket_state		state;
141
142	kmemcheck_bitfield_begin(type);
143	short			type;
144	kmemcheck_bitfield_end(type);
145
146	unsigned long		flags;
147
148	struct socket_wq __rcu	*wq;
149
150	struct file		*file;
151	struct sock		*sk;
152	const struct proto_ops	*ops;
 
 
153};
154
155struct vm_area_struct;
156struct page;
157struct kiocb;
158struct sockaddr;
159struct msghdr;
160struct module;
 
 
 
161
162struct proto_ops {
163	int		family;
164	struct module	*owner;
165	int		(*release)   (struct socket *sock);
166	int		(*bind)	     (struct socket *sock,
167				      struct sockaddr *myaddr,
168				      int sockaddr_len);
169	int		(*connect)   (struct socket *sock,
170				      struct sockaddr *vaddr,
171				      int sockaddr_len, int flags);
172	int		(*socketpair)(struct socket *sock1,
173				      struct socket *sock2);
174	int		(*accept)    (struct socket *sock,
175				      struct socket *newsock, int flags);
176	int		(*getname)   (struct socket *sock,
177				      struct sockaddr *addr,
178				      int *sockaddr_len, int peer);
179	unsigned int	(*poll)	     (struct file *file, struct socket *sock,
180				      struct poll_table_struct *wait);
181	int		(*ioctl)     (struct socket *sock, unsigned int cmd,
182				      unsigned long arg);
183#ifdef CONFIG_COMPAT
184	int	 	(*compat_ioctl) (struct socket *sock, unsigned int cmd,
185				      unsigned long arg);
186#endif
 
 
187	int		(*listen)    (struct socket *sock, int len);
188	int		(*shutdown)  (struct socket *sock, int flags);
189	int		(*setsockopt)(struct socket *sock, int level,
190				      int optname, char __user *optval, unsigned int optlen);
 
191	int		(*getsockopt)(struct socket *sock, int level,
192				      int optname, char __user *optval, int __user *optlen);
193#ifdef CONFIG_COMPAT
194	int		(*compat_setsockopt)(struct socket *sock, int level,
195				      int optname, char __user *optval, unsigned int optlen);
196	int		(*compat_getsockopt)(struct socket *sock, int level,
197				      int optname, char __user *optval, int __user *optlen);
198#endif
199	int		(*sendmsg)   (struct kiocb *iocb, struct socket *sock,
200				      struct msghdr *m, size_t total_len);
201	int		(*recvmsg)   (struct kiocb *iocb, struct socket *sock,
202				      struct msghdr *m, size_t total_len,
203				      int flags);
 
 
204	int		(*mmap)	     (struct file *file, struct socket *sock,
205				      struct vm_area_struct * vma);
206	ssize_t		(*sendpage)  (struct socket *sock, struct page *page,
207				      int offset, size_t size, int flags);
208	ssize_t 	(*splice_read)(struct socket *sock,  loff_t *ppos,
209				       struct pipe_inode_info *pipe, size_t len, unsigned int flags);
210	void		(*set_peek_off)(struct sock *sk, int val);
 
 
 
 
 
 
 
 
 
 
 
 
211};
212
213#define DECLARE_SOCKADDR(type, dst, src)	\
214	type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; })
215
216struct net_proto_family {
217	int		family;
218	int		(*create)(struct net *net, struct socket *sock,
219				  int protocol, int kern);
220	struct module	*owner;
221};
222
223struct iovec;
224struct kvec;
225
226enum {
227	SOCK_WAKE_IO,
228	SOCK_WAKE_WAITD,
229	SOCK_WAKE_SPACE,
230	SOCK_WAKE_URG,
231};
232
233extern int	     sock_wake_async(struct socket *sk, int how, int band);
234extern int	     sock_register(const struct net_proto_family *fam);
235extern void	     sock_unregister(int family);
236extern int	     __sock_create(struct net *net, int family, int type, int proto,
237				 struct socket **res, int kern);
238extern int	     sock_create(int family, int type, int proto,
239				 struct socket **res);
240extern int	     sock_create_kern(int family, int type, int proto,
241				      struct socket **res);
242extern int	     sock_create_lite(int family, int type, int proto,
243				      struct socket **res); 
244extern void	     sock_release(struct socket *sock);
245extern int   	     sock_sendmsg(struct socket *sock, struct msghdr *msg,
246				  size_t len);
247extern int	     sock_recvmsg(struct socket *sock, struct msghdr *msg,
248				  size_t size, int flags);
249extern int 	     sock_map_fd(struct socket *sock, int flags);
250extern struct socket *sockfd_lookup(int fd, int *err);
251#define		     sockfd_put(sock) fput(sock->file)
252extern int	     net_ratelimit(void);
253
254#define net_ratelimited_function(function, ...)			\
255do {								\
256	if (net_ratelimit())					\
257		function(__VA_ARGS__);				\
258} while (0)
259
260#define net_emerg_ratelimited(fmt, ...)				\
261	net_ratelimited_function(pr_emerg, fmt, ##__VA_ARGS__)
262#define net_alert_ratelimited(fmt, ...)				\
263	net_ratelimited_function(pr_alert, fmt, ##__VA_ARGS__)
264#define net_crit_ratelimited(fmt, ...)				\
265	net_ratelimited_function(pr_crit, fmt, ##__VA_ARGS__)
266#define net_err_ratelimited(fmt, ...)				\
267	net_ratelimited_function(pr_err, fmt, ##__VA_ARGS__)
268#define net_notice_ratelimited(fmt, ...)			\
269	net_ratelimited_function(pr_notice, fmt, ##__VA_ARGS__)
270#define net_warn_ratelimited(fmt, ...)				\
271	net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
272#define net_info_ratelimited(fmt, ...)				\
273	net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
 
 
 
 
 
 
 
 
 
 
 
274#define net_dbg_ratelimited(fmt, ...)				\
275	net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
 
 
 
 
 
 
 
276
277#define net_random()		random32()
278#define net_srandom(seed)	srandom32((__force u32)seed)
 
 
279
280extern int   	     kernel_sendmsg(struct socket *sock, struct msghdr *msg,
281				    struct kvec *vec, size_t num, size_t len);
282extern int   	     kernel_recvmsg(struct socket *sock, struct msghdr *msg,
283				    struct kvec *vec, size_t num,
284				    size_t len, int flags);
285
286extern int kernel_bind(struct socket *sock, struct sockaddr *addr,
287		       int addrlen);
288extern int kernel_listen(struct socket *sock, int backlog);
289extern int kernel_accept(struct socket *sock, struct socket **newsock,
290			 int flags);
291extern int kernel_connect(struct socket *sock, struct sockaddr *addr,
292			  int addrlen, int flags);
293extern int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
294			      int *addrlen);
295extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
296			      int *addrlen);
297extern int kernel_getsockopt(struct socket *sock, int level, int optname,
298			     char *optval, int *optlen);
299extern int kernel_setsockopt(struct socket *sock, int level, int optname,
300			     char *optval, unsigned int optlen);
301extern int kernel_sendpage(struct socket *sock, struct page *page, int offset,
 
 
 
 
 
 
 
 
 
 
302			   size_t size, int flags);
303extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
304extern int kernel_sock_shutdown(struct socket *sock,
305				enum sock_shutdown_cmd how);
 
306
307#define MODULE_ALIAS_NETPROTO(proto) \
308	MODULE_ALIAS("net-pf-" __stringify(proto))
309
310#define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \
311	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto))
312
313#define MODULE_ALIAS_NET_PF_PROTO_TYPE(pf, proto, type) \
314	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
315		     "-type-" __stringify(type))
316
317#define MODULE_ALIAS_NET_PF_PROTO_NAME(pf, proto, name) \
318	MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \
319		     name)
320#endif /* __KERNEL__ */
321#endif	/* _LINUX_NET_H */