home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / sunrpc / clnt.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.7 KB  |  151 lines

  1. /*
  2.  *  linux/include/linux/sunrpc/clnt.h
  3.  *
  4.  *  Declarations for the high-level RPC client interface
  5.  *
  6.  *  Copyright (C) 1995, 1996, Olaf Kirch <okir@monad.swb.de>
  7.  */
  8.  
  9. #ifndef _LINUX_SUNRPC_CLNT_H
  10. #define _LINUX_SUNRPC_CLNT_H
  11.  
  12. #include <linux/sunrpc/msg_prot.h>
  13. #include <linux/sunrpc/sched.h>
  14. #include <linux/sunrpc/xprt.h>
  15. #include <linux/sunrpc/auth.h>
  16. #include <linux/sunrpc/stats.h>
  17. #include <linux/sunrpc/xdr.h>
  18. #include <linux/sunrpc/timer.h>
  19. #include <asm/signal.h>
  20.  
  21. /*
  22.  * This defines an RPC port mapping
  23.  */
  24. struct rpc_portmap {
  25.     __u32            pm_prog;
  26.     __u32            pm_vers;
  27.     __u32            pm_prot;
  28.     __u16            pm_port;
  29.     unsigned char        pm_binding : 1;    /* doing a getport() */
  30.     struct rpc_wait_queue    pm_bindwait;    /* waiting on getport() */
  31. };
  32.  
  33. struct rpc_inode;
  34.  
  35. /*
  36.  * The high-level client handle
  37.  */
  38. struct rpc_clnt {
  39.     atomic_t        cl_count;    /* Number of clones */
  40.     atomic_t        cl_users;    /* number of references */
  41.     struct rpc_xprt *    cl_xprt;    /* transport */
  42.     struct rpc_procinfo *    cl_procinfo;    /* procedure info */
  43.     u32            cl_maxproc;    /* max procedure number */
  44.  
  45.     char *            cl_server;    /* server machine name */
  46.     char *            cl_protname;    /* protocol name */
  47.     struct rpc_auth *    cl_auth;    /* authenticator */
  48.     struct rpc_stat *    cl_stats;    /* per-program statistics */
  49.     struct rpc_iostats *    cl_metrics;    /* per-client statistics */
  50.  
  51.     unsigned int        cl_softrtry : 1,/* soft timeouts */
  52.                 cl_intr     : 1,/* interruptible */
  53.                 cl_autobind : 1,/* use getport() */
  54.                 cl_oneshot  : 1,/* dispose after use */
  55.                 cl_dead     : 1;/* abandoned */
  56.  
  57.     struct rpc_rtt *    cl_rtt;        /* RTO estimator data */
  58.     struct rpc_portmap *    cl_pmap;    /* port mapping */
  59.  
  60.     int            cl_nodelen;    /* nodename length */
  61.     char             cl_nodename[UNX_MAXNODENAME];
  62.     char            cl_pathname[30];/* Path in rpc_pipe_fs */
  63.     struct vfsmount *    cl_vfsmnt;
  64.     struct dentry *        cl_dentry;    /* inode */
  65.     struct rpc_clnt *    cl_parent;    /* Points to parent of clones */
  66.     struct rpc_rtt        cl_rtt_default;
  67.     struct rpc_portmap    cl_pmap_default;
  68.     char            cl_inline_name[32];
  69. };
  70. #define cl_timeout        cl_xprt->timeout
  71. #define cl_prog            cl_pmap->pm_prog
  72. #define cl_vers            cl_pmap->pm_vers
  73. #define cl_port            cl_pmap->pm_port
  74. #define cl_prot            cl_pmap->pm_prot
  75.  
  76. /*
  77.  * General RPC program info
  78.  */
  79. #define RPC_MAXVERSION        4
  80. struct rpc_program {
  81.     char *            name;        /* protocol name */
  82.     u32            number;        /* program number */
  83.     unsigned int        nrvers;        /* number of versions */
  84.     struct rpc_version **    version;    /* version array */
  85.     struct rpc_stat *    stats;        /* statistics */
  86.     char *            pipe_dir_name;    /* path to rpc_pipefs dir */
  87. };
  88.  
  89. struct rpc_version {
  90.     u32            number;        /* version number */
  91.     unsigned int        nrprocs;    /* number of procs */
  92.     struct rpc_procinfo *    procs;        /* procedure array */
  93. };
  94.  
  95. /*
  96.  * Procedure information
  97.  */
  98. struct rpc_procinfo {
  99.     u32            p_proc;        /* RPC procedure number */
  100.     kxdrproc_t        p_encode;    /* XDR encode function */
  101.     kxdrproc_t        p_decode;    /* XDR decode function */
  102.     unsigned int        p_bufsiz;    /* req. buffer size */
  103.     unsigned int        p_count;    /* call count */
  104.     unsigned int        p_timer;    /* Which RTT timer to use */
  105.     u32            p_statidx;    /* Which procedure to account */
  106.     char *            p_name;        /* name of procedure */
  107. };
  108.  
  109. #define RPC_CONGESTED(clnt)    (RPCXPRT_CONGESTED((clnt)->cl_xprt))
  110. #define RPC_PEERADDR(clnt)    (&(clnt)->cl_xprt->addr)
  111.  
  112. #ifdef __KERNEL__
  113.  
  114. struct rpc_clnt *rpc_create_client(struct rpc_xprt *xprt, char *servname,
  115.                 struct rpc_program *info,
  116.                 u32 version, rpc_authflavor_t authflavor);
  117. struct rpc_clnt *rpc_new_client(struct rpc_xprt *xprt, char *servname,
  118.                 struct rpc_program *info,
  119.                 u32 version, rpc_authflavor_t authflavor);
  120. struct rpc_clnt    *rpc_bind_new_program(struct rpc_clnt *,
  121.                 struct rpc_program *, int);
  122. struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
  123. int        rpc_shutdown_client(struct rpc_clnt *);
  124. int        rpc_destroy_client(struct rpc_clnt *);
  125. void        rpc_release_client(struct rpc_clnt *);
  126. void        rpc_getport(struct rpc_task *, struct rpc_clnt *);
  127. int        rpc_register(u32, u32, int, unsigned short, int *);
  128.  
  129. void        rpc_call_setup(struct rpc_task *, struct rpc_message *, int);
  130.  
  131. int        rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg,
  132.                    int flags, const struct rpc_call_ops *tk_ops,
  133.                    void *calldata);
  134. int        rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg,
  135.                   int flags);
  136. void        rpc_restart_call(struct rpc_task *);
  137. void        rpc_clnt_sigmask(struct rpc_clnt *clnt, sigset_t *oldset);
  138. void        rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset);
  139. void        rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
  140. size_t        rpc_max_payload(struct rpc_clnt *);
  141. void        rpc_force_rebind(struct rpc_clnt *);
  142. int        rpc_ping(struct rpc_clnt *clnt, int flags);
  143.  
  144. /*
  145.  * Helper function for NFSroot support
  146.  */
  147. int        rpc_getport_external(struct sockaddr_in *, __u32, __u32, int);
  148.  
  149. #endif /* __KERNEL__ */
  150. #endif /* _LINUX_SUNRPC_CLNT_H */
  151.