| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * linux/include/linux/lockd/xdr.h | 
 | 3 |  * | 
 | 4 |  * XDR types for the NLM protocol | 
 | 5 |  * | 
 | 6 |  * Copyright (C) 1996 Olaf Kirch <okir@monad.swb.de> | 
 | 7 |  */ | 
 | 8 |  | 
 | 9 | #ifndef LOCKD_XDR_H | 
 | 10 | #define LOCKD_XDR_H | 
 | 11 |  | 
 | 12 | #include <linux/fs.h> | 
 | 13 | #include <linux/nfs.h> | 
 | 14 | #include <linux/sunrpc/xdr.h> | 
 | 15 |  | 
| Chuck Lever | e6765b8 | 2008-12-11 17:56:14 -0500 | [diff] [blame] | 16 | #define SM_MAXSTRLEN		1024 | 
| Chuck Lever | 7e44d3b | 2008-12-05 19:03:16 -0500 | [diff] [blame] | 17 | #define SM_PRIV_SIZE		16 | 
 | 18 |  | 
 | 19 | struct nsm_private { | 
 | 20 | 	unsigned char		data[SM_PRIV_SIZE]; | 
 | 21 | }; | 
 | 22 |  | 
| NeilBrown | d343fce | 2006-10-17 00:10:18 -0700 | [diff] [blame] | 23 | struct svc_rqst; | 
 | 24 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | #define NLM_MAXCOOKIELEN    	32 | 
 | 26 | #define NLM_MAXSTRLEN		1024 | 
 | 27 |  | 
| Harvey Harrison | 77f18f5 | 2009-02-11 17:16:58 -0800 | [diff] [blame] | 28 | #define	nlm_granted		cpu_to_be32(NLM_LCK_GRANTED) | 
 | 29 | #define	nlm_lck_denied		cpu_to_be32(NLM_LCK_DENIED) | 
 | 30 | #define	nlm_lck_denied_nolocks	cpu_to_be32(NLM_LCK_DENIED_NOLOCKS) | 
 | 31 | #define	nlm_lck_blocked		cpu_to_be32(NLM_LCK_BLOCKED) | 
 | 32 | #define	nlm_lck_denied_grace_period	cpu_to_be32(NLM_LCK_DENIED_GRACE_PERIOD) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 33 |  | 
| Harvey Harrison | 77f18f5 | 2009-02-11 17:16:58 -0800 | [diff] [blame] | 34 | #define nlm_drop_reply		cpu_to_be32(30000) | 
| NeilBrown | d343fce | 2006-10-17 00:10:18 -0700 | [diff] [blame] | 35 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | /* Lock info passed via NLM */ | 
 | 37 | struct nlm_lock { | 
 | 38 | 	char *			caller; | 
| Chuck Lever | 48df020 | 2007-11-01 16:56:53 -0400 | [diff] [blame] | 39 | 	unsigned int		len; 	/* length of "caller" */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | 	struct nfs_fh		fh; | 
 | 41 | 	struct xdr_netobj	oh; | 
| Trond Myklebust | 7bab377 | 2006-03-20 13:44:06 -0500 | [diff] [blame] | 42 | 	u32			svid; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 43 | 	struct file_lock	fl; | 
 | 44 | }; | 
 | 45 |  | 
 | 46 | /* | 
 | 47 |  *	NLM cookies. Technically they can be 1K, but Linux only uses 8 bytes. | 
 | 48 |  *	FreeBSD uses 16, Apple Mac OS X 10.3 uses 20. Therefore we set it to | 
 | 49 |  *	32 bytes. | 
 | 50 |  */ | 
 | 51 |   | 
 | 52 | struct nlm_cookie | 
 | 53 | { | 
 | 54 | 	unsigned char data[NLM_MAXCOOKIELEN]; | 
 | 55 | 	unsigned int len; | 
 | 56 | }; | 
 | 57 |  | 
 | 58 | /* | 
 | 59 |  * Generic lockd arguments for all but sm_notify | 
 | 60 |  */ | 
 | 61 | struct nlm_args { | 
 | 62 | 	struct nlm_cookie	cookie; | 
 | 63 | 	struct nlm_lock		lock; | 
 | 64 | 	u32			block; | 
 | 65 | 	u32			reclaim; | 
 | 66 | 	u32			state; | 
 | 67 | 	u32			monitor; | 
 | 68 | 	u32			fsm_access; | 
 | 69 | 	u32			fsm_mode; | 
 | 70 | }; | 
 | 71 |  | 
 | 72 | typedef struct nlm_args nlm_args; | 
 | 73 |  | 
 | 74 | /* | 
 | 75 |  * Generic lockd result | 
 | 76 |  */ | 
 | 77 | struct nlm_res { | 
 | 78 | 	struct nlm_cookie	cookie; | 
| Al Viro | e8c5c04 | 2006-12-13 00:35:03 -0800 | [diff] [blame] | 79 | 	__be32			status; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 80 | 	struct nlm_lock		lock; | 
 | 81 | }; | 
 | 82 |  | 
 | 83 | /* | 
 | 84 |  * statd callback when client has rebooted | 
 | 85 |  */ | 
 | 86 | struct nlm_reboot { | 
| Chuck Lever | 576df46 | 2008-12-05 19:03:39 -0500 | [diff] [blame] | 87 | 	char			*mon; | 
 | 88 | 	unsigned int		len; | 
 | 89 | 	u32			state; | 
 | 90 | 	struct nsm_private	priv; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 91 | }; | 
 | 92 |  | 
 | 93 | /* | 
 | 94 |  * Contents of statd callback when monitored host rebooted | 
 | 95 |  */ | 
 | 96 | #define NLMSVC_XDRSIZE		sizeof(struct nlm_args) | 
 | 97 |  | 
| Al Viro | 52921e0 | 2006-10-19 23:28:46 -0700 | [diff] [blame] | 98 | int	nlmsvc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 99 | int	nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); | 
 | 100 | int	nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 101 | int	nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 102 | int	nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 103 | int	nlmsvc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); | 
 | 104 | int	nlmsvc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); | 
 | 105 | int	nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *); | 
 | 106 | int	nlmsvc_decode_void(struct svc_rqst *, __be32 *, void *); | 
 | 107 | int	nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 108 | int	nlmsvc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); | 
 | 109 | int	nlmsvc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); | 
 | 110 | int	nlmsvc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 111 | /* | 
 | 112 | int	nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 
 | 113 | int	nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 
 | 114 | int	nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 
 | 115 | int	nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *); | 
 | 116 |  */ | 
 | 117 |  | 
 | 118 | #endif /* LOCKD_XDR_H */ |