1/*
2 * linux/include/linux/nfsd/xdr3.h
3 *
4 * XDR types for NFSv3 in nfsd.
5 *
6 * Copyright (C) 1996-1998, Olaf Kirch <okir@monad.swb.de>
7 */
8
9#ifndef _LINUX_NFSD_XDR3_H
10#define _LINUX_NFSD_XDR3_H
11
12#include <linux/nfsd/xdr.h>
13
14struct nfsd3_sattrargs {
15	struct svc_fh		fh;
16	struct iattr		attrs;
17	int			check_guard;
18	time_t			guardtime;
19};
20
21struct nfsd3_diropargs {
22	struct svc_fh		fh;
23	char *			name;
24	int			len;
25};
26
27struct nfsd3_accessargs {
28	struct svc_fh		fh;
29	unsigned int		access;
30};
31
32struct nfsd3_readargs {
33	struct svc_fh		fh;
34	__u64			offset;
35	__u32			count;
36};
37
38struct nfsd3_writeargs {
39	svc_fh			fh;
40	__u64			offset;
41	__u32			count;
42	int			stable;
43	__u8 *			data;
44	int			len;
45};
46
47struct nfsd3_createargs {
48	struct svc_fh		fh;
49	char *			name;
50	int			len;
51	int			createmode;
52	struct iattr		attrs;
53	__u32 *			verf;
54};
55
56struct nfsd3_mknodargs {
57	struct svc_fh		fh;
58	char *			name;
59	int			len;
60	__u32			ftype;
61	__u32			major, minor;
62	struct iattr		attrs;
63};
64
65struct nfsd3_renameargs {
66	struct svc_fh		ffh;
67	char *			fname;
68	int			flen;
69	struct svc_fh		tfh;
70	char *			tname;
71	int			tlen;
72};
73
74struct nfsd3_linkargs {
75	struct svc_fh		ffh;
76	struct svc_fh		tfh;
77	char *			tname;
78	int			tlen;
79};
80
81struct nfsd3_symlinkargs {
82	struct svc_fh		ffh;
83	char *			fname;
84	int			flen;
85	char *			tname;
86	int			tlen;
87	struct iattr		attrs;
88};
89
90struct nfsd3_readdirargs {
91	struct svc_fh		fh;
92	__u64			cookie;
93	__u32			dircount;
94	__u32			count;
95	__u32 *			verf;
96};
97
98struct nfsd3_commitargs {
99	struct svc_fh		fh;
100	__u64			offset;
101	__u32			count;
102};
103
104struct nfsd3_attrstat {
105	__u32			status;
106	struct svc_fh		fh;
107};
108
109/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
110struct nfsd3_diropres  {
111	__u32			status;
112	struct svc_fh		dirfh;
113	struct svc_fh		fh;
114};
115
116struct nfsd3_accessres {
117	__u32			status;
118	struct svc_fh		fh;
119	__u32			access;
120};
121
122struct nfsd3_readlinkres {
123	__u32			status;
124	struct svc_fh		fh;
125	__u32			len;
126};
127
128struct nfsd3_readres {
129	__u32			status;
130	struct svc_fh		fh;
131	unsigned long		count;
132	int			eof;
133};
134
135struct nfsd3_writeres {
136	__u32			status;
137	struct svc_fh		fh;
138	unsigned long		count;
139	int			committed;
140};
141
142struct nfsd3_renameres {
143	__u32			status;
144	struct svc_fh		ffh;
145	struct svc_fh		tfh;
146};
147
148struct nfsd3_linkres {
149	__u32			status;
150	struct svc_fh		tfh;
151	struct svc_fh		fh;
152};
153
154struct nfsd3_readdirres {
155	__u32			status;
156	struct svc_fh		fh;
157	int			count;
158	__u32			verf[2];
159};
160
161struct nfsd3_fsstatres {
162	__u32			status;
163	struct statfs		stats;
164	__u32			invarsec;
165};
166
167struct nfsd3_fsinfores {
168	__u32			status;
169	__u32			f_rtmax;
170	__u32			f_rtpref;
171	__u32			f_rtmult;
172	__u32			f_wtmax;
173	__u32			f_wtpref;
174	__u32			f_wtmult;
175	__u32			f_dtpref;
176	__u64			f_maxfilesize;
177	__u32			f_properties;
178};
179
180struct nfsd3_pathconfres {
181	__u32			status;
182	__u32			p_link_max;
183	__u32			p_name_max;
184	__u32			p_no_trunc;
185	__u32			p_chown_restricted;
186	__u32			p_case_insensitive;
187	__u32			p_case_preserving;
188};
189
190struct nfsd3_commitres {
191	__u32			status;
192	struct svc_fh		fh;
193};
194
195/* dummy type for release */
196struct nfsd3_fhandle_pair {
197	__u32			dummy;
198	struct svc_fh		fh1;
199	struct svc_fh		fh2;
200};
201
202/*
203 * Storage requirements for XDR arguments and results.
204 */
205union nfsd3_xdrstore {
206	struct nfsd3_sattrargs		sattrargs;
207	struct nfsd3_diropargs		diropargs;
208	struct nfsd3_readargs		readargs;
209	struct nfsd3_writeargs		writeargs;
210	struct nfsd3_createargs		createargs;
211	struct nfsd3_renameargs		renameargs;
212	struct nfsd3_linkargs		linkargs;
213	struct nfsd3_symlinkargs	symlinkargs;
214	struct nfsd3_readdirargs	readdirargs;
215	struct nfsd3_diropres 		diropres;
216	struct nfsd3_accessres		accessres;
217	struct nfsd3_readlinkres	readlinkres;
218	struct nfsd3_readres		readres;
219	struct nfsd3_writeres		writeres;
220	struct nfsd3_renameres		renameres;
221	struct nfsd3_linkres		linkres;
222	struct nfsd3_readdirres		readdirres;
223	struct nfsd3_fsstatres		fsstatres;
224	struct nfsd3_fsinfores		fsinfores;
225	struct nfsd3_pathconfres	pathconfres;
226	struct nfsd3_commitres		commitres;
227};
228
229#define NFS3_SVC_XDRSIZE		sizeof(union nfsd3_xdrstore)
230
231int nfs3svc_decode_fhandle(struct svc_rqst *, u32 *, struct svc_fh *);
232int nfs3svc_decode_sattrargs(struct svc_rqst *, u32 *,
233				struct nfsd3_sattrargs *);
234int nfs3svc_decode_diropargs(struct svc_rqst *, u32 *,
235				struct nfsd3_diropargs *);
236int nfs3svc_decode_accessargs(struct svc_rqst *, u32 *,
237				struct nfsd3_accessargs *);
238int nfs3svc_decode_readargs(struct svc_rqst *, u32 *,
239				struct nfsd3_readargs *);
240int nfs3svc_decode_writeargs(struct svc_rqst *, u32 *,
241				struct nfsd3_writeargs *);
242int nfs3svc_decode_createargs(struct svc_rqst *, u32 *,
243				struct nfsd3_createargs *);
244int nfs3svc_decode_mkdirargs(struct svc_rqst *, u32 *,
245				struct nfsd3_createargs *);
246int nfs3svc_decode_mknodargs(struct svc_rqst *, u32 *,
247				struct nfsd3_mknodargs *);
248int nfs3svc_decode_renameargs(struct svc_rqst *, u32 *,
249				struct nfsd3_renameargs *);
250int nfs3svc_decode_linkargs(struct svc_rqst *, u32 *,
251				struct nfsd3_linkargs *);
252int nfs3svc_decode_symlinkargs(struct svc_rqst *, u32 *,
253				struct nfsd3_symlinkargs *);
254int nfs3svc_decode_readdirargs(struct svc_rqst *, u32 *,
255				struct nfsd3_readdirargs *);
256int nfs3svc_decode_readdirplusargs(struct svc_rqst *, u32 *,
257				struct nfsd3_readdirargs *);
258int nfs3svc_decode_commitargs(struct svc_rqst *, u32 *,
259				struct nfsd3_commitargs *);
260int nfs3svc_encode_voidres(struct svc_rqst *, u32 *, void *);
261int nfs3svc_encode_attrstat(struct svc_rqst *, u32 *,
262				struct nfsd3_attrstat *);
263int nfs3svc_encode_wccstat(struct svc_rqst *, u32 *,
264				struct nfsd3_attrstat *);
265int nfs3svc_encode_diropres(struct svc_rqst *, u32 *,
266				struct nfsd3_diropres *);
267int nfs3svc_encode_accessres(struct svc_rqst *, u32 *,
268				struct nfsd3_accessres *);
269int nfs3svc_encode_readlinkres(struct svc_rqst *, u32 *,
270				struct nfsd3_readlinkres *);
271int nfs3svc_encode_readres(struct svc_rqst *, u32 *, struct nfsd3_readres *);
272int nfs3svc_encode_writeres(struct svc_rqst *, u32 *, struct nfsd3_writeres *);
273int nfs3svc_encode_createres(struct svc_rqst *, u32 *,
274				struct nfsd3_diropres *);
275int nfs3svc_encode_renameres(struct svc_rqst *, u32 *,
276				struct nfsd3_renameres *);
277int nfs3svc_encode_linkres(struct svc_rqst *, u32 *,
278				struct nfsd3_linkres *);
279int nfs3svc_encode_readdirres(struct svc_rqst *, u32 *,
280				struct nfsd3_readdirres *);
281int nfs3svc_encode_fsstatres(struct svc_rqst *, u32 *,
282				struct nfsd3_fsstatres *);
283int nfs3svc_encode_fsinfores(struct svc_rqst *, u32 *,
284				struct nfsd3_fsinfores *);
285int nfs3svc_encode_pathconfres(struct svc_rqst *, u32 *,
286				struct nfsd3_pathconfres *);
287int nfs3svc_encode_commitres(struct svc_rqst *, u32 *,
288				struct nfsd3_commitres *);
289
290int nfs3svc_release_fhandle(struct svc_rqst *, u32 *,
291				struct nfsd3_attrstat *);
292int nfs3svc_release_fhandle2(struct svc_rqst *, u32 *,
293				struct nfsd3_fhandle_pair *);
294int nfs3svc_encode_entry(struct readdir_cd *, const char *name,
295				int namlen, loff_t offset, ino_t ino,
296				unsigned int);
297int nfs3svc_encode_entry_plus(struct readdir_cd *, const char *name,
298				int namlen, loff_t offset, ino_t ino,
299				unsigned int);
300
301
302#endif /* _LINUX_NFSD_XDR3_H */
303