| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  linux/include/linux/sunrpc/clnt.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Declarations for the high-level RPC client interface | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Copyright (C) 1995, 1996, Olaf Kirch <okir@monad.swb.de> | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _LINUX_SUNRPC_CLNT_H
 | 
					
						
							|  |  |  | #define _LINUX_SUNRPC_CLNT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-17 16:08:10 -07:00
										 |  |  | #include <linux/types.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-09 15:09:34 -04:00
										 |  |  | #include <linux/socket.h>
 | 
					
						
							|  |  |  | #include <linux/in.h>
 | 
					
						
							|  |  |  | #include <linux/in6.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/sunrpc/msg_prot.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/sched.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/xprt.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/auth.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/stats.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/xdr.h>
 | 
					
						
							|  |  |  | #include <linux/sunrpc/timer.h>
 | 
					
						
							| 
									
										
										
										
											2013-08-26 15:38:11 -04:00
										 |  |  | #include <linux/sunrpc/rpc_pipe_fs.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <asm/signal.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-09 15:14:24 -04:00
										 |  |  | #include <linux/path.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-14 12:57:54 -04:00
										 |  |  | #include <net/ipv6.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct rpc_inode; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The high-level client handle | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct rpc_clnt { | 
					
						
							| 
									
										
										
										
											2010-09-12 19:55:25 -04:00
										 |  |  | 	atomic_t		cl_count;	/* Number of references */ | 
					
						
							| 
									
										
										
										
											2013-09-04 21:51:44 -04:00
										 |  |  | 	unsigned int		cl_clid;	/* client id */ | 
					
						
							| 
									
										
										
										
											2007-06-14 16:40:14 -04:00
										 |  |  | 	struct list_head	cl_clients;	/* Global list of clients */ | 
					
						
							|  |  |  | 	struct list_head	cl_tasks;	/* List of tasks */ | 
					
						
							| 
									
										
										
										
											2007-06-16 14:17:01 -04:00
										 |  |  | 	spinlock_t		cl_lock;	/* spinlock */ | 
					
						
							| 
									
										
										
										
											2012-03-01 17:00:56 -05:00
										 |  |  | 	struct rpc_xprt __rcu *	cl_xprt;	/* transport */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct rpc_procinfo *	cl_procinfo;	/* procedure info */ | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:15 -04:00
										 |  |  | 	u32			cl_prog,	/* RPC program number */ | 
					
						
							|  |  |  | 				cl_vers,	/* RPC version number */ | 
					
						
							|  |  |  | 				cl_maxproc;	/* max procedure number */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct rpc_auth *	cl_auth;	/* authenticator */ | 
					
						
							| 
									
										
										
										
											2006-03-20 13:44:22 -05:00
										 |  |  | 	struct rpc_stat *	cl_stats;	/* per-program statistics */ | 
					
						
							|  |  |  | 	struct rpc_iostats *	cl_metrics;	/* per-client statistics */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	unsigned int		cl_softrtry : 1,/* soft timeouts */ | 
					
						
							| 
									
										
										
										
											2007-02-06 18:26:11 -05:00
										 |  |  | 				cl_discrtry : 1,/* disconnect before retry */ | 
					
						
							| 
									
										
										
										
											2013-09-24 12:00:27 -04:00
										 |  |  | 				cl_noretranstimeo: 1,/* No retransmit timeouts */ | 
					
						
							| 
									
										
										
										
											2008-06-09 16:51:31 -04:00
										 |  |  | 				cl_autobind : 1,/* use getport() */ | 
					
						
							|  |  |  | 				cl_chatty   : 1;/* be verbose */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct rpc_rtt *	cl_rtt;		/* RTO estimator data */ | 
					
						
							| 
									
										
										
										
											2007-12-20 16:03:55 -05:00
										 |  |  | 	const struct rpc_timeout *cl_timeout;	/* Timeout strategy */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	int			cl_nodelen;	/* nodename length */ | 
					
						
							|  |  |  | 	char 			cl_nodename[UNX_MAXNODENAME]; | 
					
						
							| 
									
										
										
										
											2013-08-26 15:38:11 -04:00
										 |  |  | 	struct rpc_pipe_dir_head cl_pipedir_objects; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct rpc_clnt *	cl_parent;	/* Points to parent of clones */ | 
					
						
							|  |  |  | 	struct rpc_rtt		cl_rtt_default; | 
					
						
							| 
									
										
										
										
											2007-12-20 16:03:55 -05:00
										 |  |  | 	struct rpc_timeout	cl_timeout_default; | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 	const struct rpc_program *cl_program; | 
					
						
							| 
									
										
										
										
											2014-11-26 14:44:43 -05:00
										 |  |  | #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
 | 
					
						
							|  |  |  | 	struct dentry		*cl_debugfs;	/* debugfs directory */ | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * General RPC program info | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define RPC_MAXVERSION		4
 | 
					
						
							|  |  |  | struct rpc_program { | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 	const char *		name;		/* protocol name */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	u32			number;		/* program number */ | 
					
						
							|  |  |  | 	unsigned int		nrvers;		/* number of versions */ | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 	const struct rpc_version **	version;	/* version array */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	struct rpc_stat *	stats;		/* statistics */ | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 	const char *		pipe_dir_name;	/* path to rpc_pipefs dir */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct rpc_version { | 
					
						
							|  |  |  | 	u32			number;		/* version number */ | 
					
						
							|  |  |  | 	unsigned int		nrprocs;	/* number of procs */ | 
					
						
							|  |  |  | 	struct rpc_procinfo *	procs;		/* procedure array */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Procedure information | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct rpc_procinfo { | 
					
						
							|  |  |  | 	u32			p_proc;		/* RPC procedure number */ | 
					
						
							| 
									
										
										
										
											2010-12-14 14:59:18 +00:00
										 |  |  | 	kxdreproc_t		p_encode;	/* XDR encode function */ | 
					
						
							| 
									
										
										
										
											2010-12-14 14:59:29 +00:00
										 |  |  | 	kxdrdproc_t		p_decode;	/* XDR decode function */ | 
					
						
							| 
									
										
										
										
											2007-03-29 16:47:53 -04:00
										 |  |  | 	unsigned int		p_arglen;	/* argument hdr length (u32) */ | 
					
						
							|  |  |  | 	unsigned int		p_replen;	/* reply hdr length (u32) */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	unsigned int		p_count;	/* call count */ | 
					
						
							|  |  |  | 	unsigned int		p_timer;	/* Which RTT timer to use */ | 
					
						
							| 
									
										
										
										
											2006-03-20 13:44:22 -05:00
										 |  |  | 	u32			p_statidx;	/* Which procedure to account */ | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:37 -05:00
										 |  |  | 	const char *		p_name;		/* name of procedure */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __KERNEL__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:20 -04:00
										 |  |  | struct rpc_create_args { | 
					
						
							| 
									
										
										
										
											2010-09-29 16:04:45 +04:00
										 |  |  | 	struct net		*net; | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:20 -04:00
										 |  |  | 	int			protocol; | 
					
						
							|  |  |  | 	struct sockaddr		*address; | 
					
						
							|  |  |  | 	size_t			addrsize; | 
					
						
							| 
									
										
										
										
											2007-07-09 22:23:35 +02:00
										 |  |  | 	struct sockaddr		*saddress; | 
					
						
							| 
									
										
										
										
											2007-12-20 16:03:55 -05:00
										 |  |  | 	const struct rpc_timeout *timeout; | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:37 -05:00
										 |  |  | 	const char		*servername; | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 	const struct rpc_program *program; | 
					
						
							| 
									
										
										
										
											2008-09-28 09:21:26 +03:00
										 |  |  | 	u32			prognumber;	/* overrides program->number */ | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:20 -04:00
										 |  |  | 	u32			version; | 
					
						
							|  |  |  | 	rpc_authflavor_t	authflavor; | 
					
						
							|  |  |  | 	unsigned long		flags; | 
					
						
							| 
									
										
										
										
											2008-12-23 16:17:40 -05:00
										 |  |  | 	char			*client_name; | 
					
						
							| 
									
										
										
										
											2009-09-10 17:33:30 +03:00
										 |  |  | 	struct svc_xprt		*bc_xprt;	/* NFSv4.1 backchannel */ | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:20 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Values for "flags" field */ | 
					
						
							|  |  |  | #define RPC_CLNT_CREATE_HARDRTRY	(1UL << 0)
 | 
					
						
							|  |  |  | #define RPC_CLNT_CREATE_AUTOBIND	(1UL << 2)
 | 
					
						
							| 
									
										
										
										
											2007-06-09 19:49:36 -04:00
										 |  |  | #define RPC_CLNT_CREATE_NONPRIVPORT	(1UL << 3)
 | 
					
						
							|  |  |  | #define RPC_CLNT_CREATE_NOPING		(1UL << 4)
 | 
					
						
							|  |  |  | #define RPC_CLNT_CREATE_DISCRTRY	(1UL << 5)
 | 
					
						
							| 
									
										
										
										
											2008-06-09 16:51:31 -04:00
										 |  |  | #define RPC_CLNT_CREATE_QUIET		(1UL << 6)
 | 
					
						
							| 
									
										
										
										
											2013-04-14 11:42:00 -04:00
										 |  |  | #define RPC_CLNT_CREATE_INFINITE_SLOTS	(1UL << 7)
 | 
					
						
							| 
									
										
										
										
											2013-04-11 15:06:36 -04:00
										 |  |  | #define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT	(1UL << 8)
 | 
					
						
							| 
									
										
										
										
											2013-09-24 12:00:27 -04:00
										 |  |  | #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT	(1UL << 9)
 | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct rpc_clnt *rpc_create(struct rpc_create_args *args); | 
					
						
							| 
									
										
										
										
											2014-03-24 11:58:59 +08:00
										 |  |  | struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args, | 
					
						
							|  |  |  | 					struct rpc_xprt *xprt); | 
					
						
							| 
									
										
										
										
											2005-06-22 17:16:23 +00:00
										 |  |  | struct rpc_clnt	*rpc_bind_new_program(struct rpc_clnt *, | 
					
						
							| 
									
										
										
										
											2012-01-20 13:53:56 -05:00
										 |  |  | 				const struct rpc_program *, u32); | 
					
						
							| 
									
										
										
										
											2011-03-01 01:34:20 +00:00
										 |  |  | void rpc_task_reset_client(struct rpc_task *task, struct rpc_clnt *clnt); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | struct rpc_clnt *rpc_clone_client(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2012-09-14 17:24:02 -04:00
										 |  |  | struct rpc_clnt *rpc_clone_client_set_auth(struct rpc_clnt *, | 
					
						
							|  |  |  | 				rpc_authflavor_t); | 
					
						
							| 
									
										
										
										
											2013-10-17 14:12:23 -04:00
										 |  |  | int		rpc_switch_client_transport(struct rpc_clnt *, | 
					
						
							|  |  |  | 				struct xprt_create *, | 
					
						
							|  |  |  | 				const struct rpc_timeout *); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-14 16:40:32 -04:00
										 |  |  | void		rpc_shutdown_client(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | void		rpc_release_client(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2010-07-31 14:29:08 -04:00
										 |  |  | void		rpc_task_release_client(struct rpc_task *); | 
					
						
							| 
									
										
										
										
											2007-07-01 12:13:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-13 12:52:51 +04:00
										 |  |  | int		rpcb_create_local(struct net *); | 
					
						
							|  |  |  | void		rpcb_put_local(struct net *); | 
					
						
							| 
									
										
										
										
											2012-01-13 12:52:43 +04:00
										 |  |  | int		rpcb_register(struct net *, u32, u32, int, unsigned short); | 
					
						
							|  |  |  | int		rpcb_v4_register(struct net *net, const u32 program, | 
					
						
							|  |  |  | 				 const u32 version, | 
					
						
							| 
									
										
										
										
											2008-07-14 16:03:30 -04:00
										 |  |  | 				 const struct sockaddr *address, | 
					
						
							| 
									
										
										
										
											2008-08-18 19:34:00 -04:00
										 |  |  | 				 const char *netid); | 
					
						
							| 
									
										
										
										
											2007-07-01 12:13:17 -04:00
										 |  |  | void		rpcb_getport_async(struct rpc_task *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-25 18:40:21 -04:00
										 |  |  | void		rpc_call_start(struct rpc_task *); | 
					
						
							| 
									
										
										
										
											2008-02-14 11:11:30 -05:00
										 |  |  | int		rpc_call_async(struct rpc_clnt *clnt, | 
					
						
							|  |  |  | 			       const struct rpc_message *msg, int flags, | 
					
						
							|  |  |  | 			       const struct rpc_call_ops *tk_ops, | 
					
						
							| 
									
										
										
										
											2006-01-03 09:55:04 +01:00
										 |  |  | 			       void *calldata); | 
					
						
							| 
									
										
										
										
											2008-02-14 11:11:30 -05:00
										 |  |  | int		rpc_call_sync(struct rpc_clnt *clnt, | 
					
						
							|  |  |  | 			      const struct rpc_message *msg, int flags); | 
					
						
							| 
									
										
										
										
											2007-06-23 10:17:16 -04:00
										 |  |  | struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, | 
					
						
							|  |  |  | 			       int flags); | 
					
						
							| 
									
										
										
										
											2010-07-31 14:29:07 -04:00
										 |  |  | int		rpc_restart_call_prepare(struct rpc_task *); | 
					
						
							|  |  |  | int		rpc_restart_call(struct rpc_task *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | void		rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int); | 
					
						
							| 
									
										
										
										
											2012-03-01 17:00:56 -05:00
										 |  |  | int		rpc_protocol(struct rpc_clnt *); | 
					
						
							|  |  |  | struct net *	rpc_net_ns(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | size_t		rpc_max_payload(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2013-02-28 20:30:09 -05:00
										 |  |  | unsigned long	rpc_get_timeout(struct rpc_clnt *clnt); | 
					
						
							| 
									
										
										
										
											2006-01-03 09:55:50 +01:00
										 |  |  | void		rpc_force_rebind(struct rpc_clnt *); | 
					
						
							| 
									
										
										
										
											2006-08-22 20:06:17 -04:00
										 |  |  | size_t		rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); | 
					
						
							| 
									
										
										
										
											2008-01-07 18:34:48 -05:00
										 |  |  | const char	*rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); | 
					
						
							| 
									
										
										
										
											2012-03-01 17:01:14 -05:00
										 |  |  | int		rpc_localaddr(struct rpc_clnt *, struct sockaddr *, size_t); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-26 14:44:43 -05:00
										 |  |  | const char *rpc_proc_name(const struct rpc_task *task); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #endif /* __KERNEL__ */
 | 
					
						
							|  |  |  | #endif /* _LINUX_SUNRPC_CLNT_H */
 |