| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * linux/include/linux/sunrpc/svcsock.h | 
|  | 3 | * | 
|  | 4 | * RPC server socket I/O. | 
|  | 5 | * | 
|  | 6 | * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> | 
|  | 7 | */ | 
|  | 8 |  | 
|  | 9 | #ifndef SUNRPC_SVCSOCK_H | 
|  | 10 | #define SUNRPC_SVCSOCK_H | 
|  | 11 |  | 
|  | 12 | #include <linux/sunrpc/svc.h> | 
|  | 13 |  | 
|  | 14 | /* | 
|  | 15 | * RPC server socket. | 
|  | 16 | */ | 
|  | 17 | struct svc_sock { | 
|  | 18 | struct list_head	sk_ready;	/* list of ready sockets */ | 
|  | 19 | struct list_head	sk_list;	/* list of all sockets */ | 
|  | 20 | struct socket *		sk_sock;	/* berkeley socket layer */ | 
|  | 21 | struct sock *		sk_sk;		/* INET layer */ | 
|  | 22 |  | 
| Greg Banks | 3262c81 | 2006-10-02 02:17:58 -0700 | [diff] [blame] | 23 | struct svc_pool *	sk_pool;	/* current pool iff queued */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 24 | struct svc_serv *	sk_server;	/* service for this socket */ | 
| Greg Banks | c45c357 | 2006-10-02 02:17:54 -0700 | [diff] [blame] | 25 | atomic_t		sk_inuse;	/* use count */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 26 | unsigned long		sk_flags; | 
|  | 27 | #define	SK_BUSY		0			/* enqueued/receiving */ | 
|  | 28 | #define	SK_CONN		1			/* conn pending */ | 
|  | 29 | #define	SK_CLOSE	2			/* dead or dying */ | 
|  | 30 | #define	SK_DATA		3			/* data pending */ | 
|  | 31 | #define	SK_TEMP		4			/* temp (TCP) socket */ | 
|  | 32 | #define	SK_DEAD		6			/* socket closed */ | 
|  | 33 | #define	SK_CHNGBUF	7			/* need to change snd/rcv buffer sizes */ | 
|  | 34 | #define	SK_DEFERRED	8			/* request on sk_deferred */ | 
| Greg Banks | 36bdfc8 | 2006-10-02 02:17:54 -0700 | [diff] [blame] | 35 | #define	SK_OLD		9			/* used for temp socket aging mark+sweep */ | 
|  | 36 | #define	SK_DETACHED	10			/* detached from tempsocks list */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 |  | 
| Greg Banks | 5685f0f | 2006-10-02 02:17:56 -0700 | [diff] [blame] | 38 | atomic_t    	    	sk_reserved;	/* space on outq that is reserved */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 39 |  | 
| Greg Banks | 1a68d95 | 2006-10-02 02:17:55 -0700 | [diff] [blame] | 40 | spinlock_t		sk_defer_lock;	/* protects sk_deferred */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 41 | struct list_head	sk_deferred;	/* deferred requests that need to | 
|  | 42 | * be revisted */ | 
| Ingo Molnar | 57b47a5 | 2006-03-20 22:35:41 -0800 | [diff] [blame] | 43 | struct mutex		sk_mutex;	/* to serialize sending data */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 44 |  | 
|  | 45 | int			(*sk_recvfrom)(struct svc_rqst *rqstp); | 
|  | 46 | int			(*sk_sendto)(struct svc_rqst *rqstp); | 
|  | 47 |  | 
|  | 48 | /* We keep the old state_change and data_ready CB's here */ | 
|  | 49 | void			(*sk_ostate)(struct sock *); | 
|  | 50 | void			(*sk_odata)(struct sock *, int bytes); | 
|  | 51 | void			(*sk_owspace)(struct sock *); | 
|  | 52 |  | 
|  | 53 | /* private TCP part */ | 
|  | 54 | int			sk_reclen;	/* length of record */ | 
|  | 55 | int			sk_tcplen;	/* current read length */ | 
|  | 56 | time_t			sk_lastrecv;	/* time of last received request */ | 
| Greg Banks | 7b2b1fe | 2006-10-04 02:15:50 -0700 | [diff] [blame] | 57 |  | 
|  | 58 | /* cache of various info for TCP sockets */ | 
|  | 59 | void			*sk_info_authunix; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 60 | }; | 
|  | 61 |  | 
|  | 62 | /* | 
|  | 63 | * Function prototypes. | 
|  | 64 | */ | 
|  | 65 | int		svc_makesock(struct svc_serv *, int, unsigned short); | 
|  | 66 | void		svc_delete_socket(struct svc_sock *); | 
| NeilBrown | 6fb2b47 | 2006-10-02 02:17:50 -0700 | [diff] [blame] | 67 | int		svc_recv(struct svc_rqst *, long); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 68 | int		svc_send(struct svc_rqst *); | 
|  | 69 | void		svc_drop(struct svc_rqst *); | 
|  | 70 | void		svc_sock_update_bufs(struct svc_serv *serv); | 
| NeilBrown | b41b66d | 2006-10-02 02:17:48 -0700 | [diff] [blame] | 71 | int		svc_sock_names(char *buf, struct svc_serv *serv, char *toclose); | 
|  | 72 | int		svc_addsock(struct svc_serv *serv, | 
|  | 73 | int fd, | 
|  | 74 | char *name_return, | 
|  | 75 | int *proto); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 76 |  | 
|  | 77 | #endif /* SUNRPC_SVCSOCK_H */ |