~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/rpcsock.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  rpcsock.h   Declarations for the RPC call interface.
  3  *
  4  *  Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  5  */
  6 
  7 
  8 #ifndef _LINUX_RPCSOCK_H
  9 #define _LINUX_RPCSOCK_H
 10 
 11 /*
 12  * The rpcsock code maintains an estimate on the maximum number of out-
 13  * standing RPC requests, using the congestion avoidance implemented in
 14  * 44BSD. This is basically the Van Jacobson slow start algorithm: If a
 15  * retransmit occurs, the congestion window is halved; otherwise, it is
 16  * incremented by 1/cwnd when a reply is received and a full number of
 17  * requests are outstanding.
 18  *
 19  * Upper procedures may check whether a request would block waiting for
 20  * a free RPC slot by using the RPC_CONGESTED() macro.
 21  *
 22  * Note: on machines with low memory we should probably use a smaller
 23  * MAXREQS value: At 32 outstanding reqs with 8 megs of RAM, fragment
 24  * reassembly will frequently run out of memory.
 25  */
 26 #define RPC_MAXREQS             32
 27 #define RPC_CWNDSCALE           256
 28 #define RPC_MAXCWND             (RPC_MAXREQS * RPC_CWNDSCALE)
 29 /* #define RPC_INITCWND         (RPC_MAXCWND / 2) */
 30 #define RPC_INITCWND            RPC_CWNDSCALE
 31 #define RPC_CONGESTED(rsock)    ((rsock)->cong >= (rsock)->cwnd)
 32 
 33 /* RPC reply header size: xid, direction, status, accept_status (verifier
 34  * size computed separately)
 35  */
 36 #define RPC_HDRSIZE             (4 * 4)
 37 
 38 /*
 39  * This describes a timeout strategy
 40  */
 41 struct rpc_timeout {
 42         unsigned long           to_initval,
 43                                 to_maxval,
 44                                 to_increment;
 45         int                     to_retries;
 46         char                    to_exponential;
 47 };
 48 
 49 /*
 50  * This describes a complete RPC request
 51  */
 52 struct rpc_ioreq {
 53         struct rpc_wait *       rq_slot;
 54         struct sockaddr *       rq_addr;
 55         int                     rq_alen;
 56         struct iovec            rq_svec[UIO_FASTIOV];
 57         unsigned int            rq_snr;
 58         unsigned long           rq_slen;
 59         struct iovec            rq_rvec[UIO_FASTIOV];
 60         unsigned int            rq_rnr;
 61         unsigned long           rq_rlen;
 62 };
 63 
 64 /*
 65  * This is the callback handler for async RPC.
 66  */
 67 struct rpc_wait;
 68 typedef void    (*rpc_callback_fn_t)(int, struct rpc_wait *, void *);
 69 
 70 /*
 71  * Wait information. This struct defines all the state of an RPC
 72  * request currently in flight.
 73  */
 74 struct rpc_wait {
 75         struct rpc_sock *       w_sock;
 76         struct rpc_wait *       w_prev;
 77         struct rpc_wait *       w_next;
 78         struct rpc_ioreq *      w_req;
 79         int                     w_result;
 80         wait_queue_head_t       w_wait;
 81         rpc_callback_fn_t       w_handler;
 82         void *                  w_cdata;
 83         char                    w_queued;
 84         char                    w_gotit;
 85         __u32                   w_xid;
 86 };
 87 
 88 struct rpc_sock {
 89         struct file *           file;
 90         struct socket *         sock;
 91         struct sock *           inet;
 92         struct rpc_wait         waiting[RPC_MAXREQS];
 93         unsigned long           cong;
 94         unsigned long           cwnd;
 95         struct rpc_wait *       pending;
 96         struct rpc_wait *       free;
 97         wait_queue_head_t       backlog;
 98         wait_queue_head_t       shutwait;
 99         int                     shutdown;
100 };
101 
102 #ifdef __KERNEL__
103 
104 /* rpc_call: Call synchronously */
105 int                     rpc_call(struct rpc_sock *, struct rpc_ioreq *,
106                                          struct rpc_timeout *);
107 /* These implement asynch calls for nfsiod: Process calls rpc_reserve and
108  * rpc_transmits, then passes the request to nfsiod, which collects the
109  * results via rpc_doio
110  */
111 int                     rpc_reserve(struct rpc_sock *, struct rpc_ioreq *, int);
112 void                    rpc_release(struct rpc_sock *, struct rpc_ioreq *);
113 int                     rpc_transmit(struct rpc_sock *, struct rpc_ioreq *);
114 int                     rpc_doio(struct rpc_sock *, struct rpc_ioreq *,
115                                          struct rpc_timeout *, int);
116 struct rpc_sock *       rpc_makesock(struct file *);
117 int                     rpc_closesock(struct rpc_sock *);
118 
119 #endif /* __KERNEL__*/
120 
121 #endif /* _LINUX_RPCSOCK_H */
122 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.