diff options
Diffstat (limited to 'include/linux/sunrpc/clnt.h')
-rw-r--r-- | include/linux/sunrpc/clnt.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h new file mode 100644 index 000000000000..2709caf4d128 --- /dev/null +++ b/include/linux/sunrpc/clnt.h | |||
@@ -0,0 +1,153 @@ | |||
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; /* statistics */ | ||
49 | |||
50 | unsigned int cl_softrtry : 1,/* soft timeouts */ | ||
51 | cl_intr : 1,/* interruptible */ | ||
52 | cl_chatty : 1,/* be verbose */ | ||
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 dentry * cl_dentry; /* inode */ | ||
64 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ | ||
65 | struct rpc_rtt cl_rtt_default; | ||
66 | struct rpc_portmap cl_pmap_default; | ||
67 | char cl_inline_name[32]; | ||
68 | }; | ||
69 | #define cl_timeout cl_xprt->timeout | ||
70 | #define cl_prog cl_pmap->pm_prog | ||
71 | #define cl_vers cl_pmap->pm_vers | ||
72 | #define cl_port cl_pmap->pm_port | ||
73 | #define cl_prot cl_pmap->pm_prot | ||
74 | |||
75 | /* | ||
76 | * General RPC program info | ||
77 | */ | ||
78 | #define RPC_MAXVERSION 4 | ||
79 | struct rpc_program { | ||
80 | char * name; /* protocol name */ | ||
81 | u32 number; /* program number */ | ||
82 | unsigned int nrvers; /* number of versions */ | ||
83 | struct rpc_version ** version; /* version array */ | ||
84 | struct rpc_stat * stats; /* statistics */ | ||
85 | char * pipe_dir_name; /* path to rpc_pipefs dir */ | ||
86 | }; | ||
87 | |||
88 | struct rpc_version { | ||
89 | u32 number; /* version number */ | ||
90 | unsigned int nrprocs; /* number of procs */ | ||
91 | struct rpc_procinfo * procs; /* procedure array */ | ||
92 | }; | ||
93 | |||
94 | /* | ||
95 | * Procedure information | ||
96 | */ | ||
97 | struct rpc_procinfo { | ||
98 | u32 p_proc; /* RPC procedure number */ | ||
99 | kxdrproc_t p_encode; /* XDR encode function */ | ||
100 | kxdrproc_t p_decode; /* XDR decode function */ | ||
101 | unsigned int p_bufsiz; /* req. buffer size */ | ||
102 | unsigned int p_count; /* call count */ | ||
103 | unsigned int p_timer; /* Which RTT timer to use */ | ||
104 | }; | ||
105 | |||
106 | #define RPC_CONGESTED(clnt) (RPCXPRT_CONGESTED((clnt)->cl_xprt)) | ||
107 | #define RPC_PEERADDR(clnt) (&(clnt)->cl_xprt->addr) | ||
108 | |||
109 | #ifdef __KERNEL__ | ||
110 | |||
111 | struct rpc_clnt *rpc_create_client(struct rpc_xprt *xprt, char *servname, | ||
112 | struct rpc_program *info, | ||
113 | u32 version, rpc_authflavor_t authflavor); | ||
114 | struct rpc_clnt *rpc_clone_client(struct rpc_clnt *); | ||
115 | int rpc_shutdown_client(struct rpc_clnt *); | ||
116 | int rpc_destroy_client(struct rpc_clnt *); | ||
117 | void rpc_release_client(struct rpc_clnt *); | ||
118 | void rpc_getport(struct rpc_task *, struct rpc_clnt *); | ||
119 | int rpc_register(u32, u32, int, unsigned short, int *); | ||
120 | |||
121 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); | ||
122 | |||
123 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, | ||
124 | int flags, rpc_action callback, void *clntdata); | ||
125 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, | ||
126 | int flags); | ||
127 | void rpc_restart_call(struct rpc_task *); | ||
128 | void rpc_clnt_sigmask(struct rpc_clnt *clnt, sigset_t *oldset); | ||
129 | void rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset); | ||
130 | void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int); | ||
131 | size_t rpc_max_payload(struct rpc_clnt *); | ||
132 | |||
133 | static __inline__ | ||
134 | int rpc_call(struct rpc_clnt *clnt, u32 proc, void *argp, void *resp, int flags) | ||
135 | { | ||
136 | struct rpc_message msg = { | ||
137 | .rpc_proc = &clnt->cl_procinfo[proc], | ||
138 | .rpc_argp = argp, | ||
139 | .rpc_resp = resp, | ||
140 | .rpc_cred = NULL | ||
141 | }; | ||
142 | return rpc_call_sync(clnt, &msg, flags); | ||
143 | } | ||
144 | |||
145 | extern void rpciod_wake_up(void); | ||
146 | |||
147 | /* | ||
148 | * Helper function for NFSroot support | ||
149 | */ | ||
150 | int rpc_getport_external(struct sockaddr_in *, __u32, __u32, int); | ||
151 | |||
152 | #endif /* __KERNEL__ */ | ||
153 | #endif /* _LINUX_SUNRPC_CLNT_H */ | ||