17663dacd926584093dfc350892792054692b6cb3J. Bruce Fields/* XDR types for nfsd. This is mainly a typing exercise. */
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef LINUX_NFSD_H
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LINUX_NFSD_H
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/vfs.h>
79a74af21330c8d46efa977d088a62cc1bfa954e9Boaz Harrosh#include "nfsd.h"
81557aca7904ed6fadd22cdc3364754070bb3d3c3J. Bruce Fields#include "nfsfh.h"
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_fhandle {
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_sattrargs {
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct iattr		attrs;
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_diropargs {
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			name;
2229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		len;
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readargs {
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32			offset;
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32			count;
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			vlen;
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_writeargs {
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	svc_fh			fh;
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32			offset;
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			len;
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			vlen;
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_createargs {
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			name;
4229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		len;
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct iattr		attrs;
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_renameargs {
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		ffh;
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			fname;
4929d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		flen;
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		tfh;
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			tname;
5229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		tlen;
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readlinkargs {
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			buffer;
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_linkargs {
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		ffh;
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		tfh;
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			tname;
6429d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		tlen;
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_symlinkargs {
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		ffh;
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			fname;
7029d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever	unsigned int		flen;
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *			tname;
7248b4ba3fdd7af319e90ade395162430934ee7b87Chuck Lever	unsigned int		tlen;
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct iattr		attrs;
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readdirargs {
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32			cookie;
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32			count;
80131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro	__be32 *		buffer;
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_attrstat {
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
85a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw	struct kstat		stat;
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_diropres  {
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
90a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw	struct kstat		stat;
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readlinkres {
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			len;
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readres {
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct svc_fh		fh;
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long		count;
100a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw	struct kstat		stat;
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readdirres {
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			count;
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct readdir_cd	common;
107131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro	__be32 *		buffer;
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int			buflen;
109131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro	__be32 *		offset;
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_statfsres {
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct kstatfs		stats;
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Storage requirements for XDR arguments and results.
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsunion nfsd_xdrstore {
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_sattrargs	sattr;
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_diropargs	dirop;
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_readargs	read;
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_writeargs	write;
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_createargs	create;
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_renameargs	rename;
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_linkargs	link;
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_symlinkargs	symlink;
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nfsd_readdirargs	readdir;
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NFS2_SVC_XDRSIZE	sizeof(union nfsd_xdrstore)
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
134131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_void(struct svc_rqst *, __be32 *, void *);
135131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
136131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *,
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_sattrargs *);
138131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_diropargs(struct svc_rqst *, __be32 *,
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_diropargs *);
140131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readargs(struct svc_rqst *, __be32 *,
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_readargs *);
142131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_writeargs(struct svc_rqst *, __be32 *,
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_writeargs *);
144131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_createargs(struct svc_rqst *, __be32 *,
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_createargs *);
146131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_renameargs(struct svc_rqst *, __be32 *,
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_renameargs *);
148131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *,
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_readlinkargs *);
150131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_linkargs(struct svc_rqst *, __be32 *,
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_linkargs *);
152131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *,
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_symlinkargs *);
154131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *,
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct nfsd_readdirargs *);
156131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_void(struct svc_rqst *, __be32 *, void *);
157131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
158131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
159131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
160131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
161131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
162131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
164a0ad13ef643a5829d63c456ab6143bbda60b44a9NeilBrownint nfssvc_encode_entry(void *, const char *name,
165a0ad13ef643a5829d63c456ab6143bbda60b44a9NeilBrown			int namlen, loff_t offset, u64 ino, unsigned int);
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
167131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
169a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* Helper functions for NFSv2 ACL code */
1704f4a4faddea0fe45bf508e723c3a810c5190ed62J. Bruce Fields__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat);
171131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp);
172a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* LINUX_NFSD_H */
174