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