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); |
NeilBrown | aaf68cf | 2007-02-08 14:20:30 -0800 | [diff] [blame] | 66 | void svc_close_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 */ |