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 | |
| 23 | struct svc_serv * sk_server; /* service for this socket */ |
| 24 | unsigned int sk_inuse; /* use count */ |
| 25 | unsigned long sk_flags; |
| 26 | #define SK_BUSY 0 /* enqueued/receiving */ |
| 27 | #define SK_CONN 1 /* conn pending */ |
| 28 | #define SK_CLOSE 2 /* dead or dying */ |
| 29 | #define SK_DATA 3 /* data pending */ |
| 30 | #define SK_TEMP 4 /* temp (TCP) socket */ |
| 31 | #define SK_DEAD 6 /* socket closed */ |
| 32 | #define SK_CHNGBUF 7 /* need to change snd/rcv buffer sizes */ |
| 33 | #define SK_DEFERRED 8 /* request on sk_deferred */ |
| 34 | |
| 35 | int sk_reserved; /* space on outq that is reserved */ |
| 36 | |
| 37 | struct list_head sk_deferred; /* deferred requests that need to |
| 38 | * be revisted */ |
Ingo Molnar | 57b47a5 | 2006-03-20 22:35:41 -0800 | [diff] [blame] | 39 | struct mutex sk_mutex; /* to serialize sending data */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | |
| 41 | int (*sk_recvfrom)(struct svc_rqst *rqstp); |
| 42 | int (*sk_sendto)(struct svc_rqst *rqstp); |
| 43 | |
| 44 | /* We keep the old state_change and data_ready CB's here */ |
| 45 | void (*sk_ostate)(struct sock *); |
| 46 | void (*sk_odata)(struct sock *, int bytes); |
| 47 | void (*sk_owspace)(struct sock *); |
| 48 | |
| 49 | /* private TCP part */ |
| 50 | int sk_reclen; /* length of record */ |
| 51 | int sk_tcplen; /* current read length */ |
| 52 | time_t sk_lastrecv; /* time of last received request */ |
| 53 | }; |
| 54 | |
| 55 | /* |
| 56 | * Function prototypes. |
| 57 | */ |
| 58 | int svc_makesock(struct svc_serv *, int, unsigned short); |
| 59 | void svc_delete_socket(struct svc_sock *); |
NeilBrown | 6fb2b47 | 2006-10-02 02:17:50 -0700 | [diff] [blame^] | 60 | int svc_recv(struct svc_rqst *, long); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 61 | int svc_send(struct svc_rqst *); |
| 62 | void svc_drop(struct svc_rqst *); |
| 63 | void svc_sock_update_bufs(struct svc_serv *serv); |
NeilBrown | b41b66d | 2006-10-02 02:17:48 -0700 | [diff] [blame] | 64 | int svc_sock_names(char *buf, struct svc_serv *serv, char *toclose); |
| 65 | int svc_addsock(struct svc_serv *serv, |
| 66 | int fd, |
| 67 | char *name_return, |
| 68 | int *proto); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 69 | |
| 70 | #endif /* SUNRPC_SVCSOCK_H */ |