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