2005-04-17 02:20:36 +04:00
/*
* XDR types for NFSv3 in nfsd .
*
* Copyright ( C ) 1996 - 1998 , Olaf Kirch < okir @ monad . swb . de >
*/
# ifndef _LINUX_NFSD_XDR3_H
# define _LINUX_NFSD_XDR3_H
2009-12-03 21:30:56 +03:00
# include "xdr.h"
2005-04-17 02:20:36 +04:00
struct nfsd3_sattrargs {
struct svc_fh fh ;
struct iattr attrs ;
int check_guard ;
time_t guardtime ;
} ;
struct nfsd3_diropargs {
struct svc_fh fh ;
char * name ;
2007-11-01 23:57:04 +03:00
unsigned int len ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_accessargs {
struct svc_fh fh ;
unsigned int access ;
} ;
struct nfsd3_readargs {
struct svc_fh fh ;
__u64 offset ;
__u32 count ;
int vlen ;
} ;
struct nfsd3_writeargs {
svc_fh fh ;
__u64 offset ;
__u32 count ;
int stable ;
2005-11-07 12:00:26 +03:00
__u32 len ;
2005-04-17 02:20:36 +04:00
int vlen ;
} ;
struct nfsd3_createargs {
struct svc_fh fh ;
char * name ;
2007-11-01 23:57:04 +03:00
unsigned int len ;
2005-04-17 02:20:36 +04:00
int createmode ;
struct iattr attrs ;
2006-10-20 10:28:57 +04:00
__be32 * verf ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_mknodargs {
struct svc_fh fh ;
char * name ;
2007-11-01 23:57:04 +03:00
unsigned int len ;
2005-04-17 02:20:36 +04:00
__u32 ftype ;
__u32 major , minor ;
struct iattr attrs ;
} ;
struct nfsd3_renameargs {
struct svc_fh ffh ;
char * fname ;
2007-11-01 23:57:04 +03:00
unsigned int flen ;
2005-04-17 02:20:36 +04:00
struct svc_fh tfh ;
char * tname ;
2007-11-01 23:57:04 +03:00
unsigned int tlen ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_readlinkargs {
struct svc_fh fh ;
char * buffer ;
} ;
struct nfsd3_linkargs {
struct svc_fh ffh ;
struct svc_fh tfh ;
char * tname ;
2007-11-01 23:57:04 +03:00
unsigned int tlen ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_symlinkargs {
struct svc_fh ffh ;
char * fname ;
2007-11-01 23:57:04 +03:00
unsigned int flen ;
2005-04-17 02:20:36 +04:00
char * tname ;
2007-11-01 23:57:25 +03:00
unsigned int tlen ;
2005-04-17 02:20:36 +04:00
struct iattr attrs ;
} ;
struct nfsd3_readdirargs {
struct svc_fh fh ;
__u64 cookie ;
__u32 dircount ;
__u32 count ;
2006-10-20 10:28:57 +04:00
__be32 * verf ;
__be32 * buffer ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_commitargs {
struct svc_fh fh ;
__u64 offset ;
__u32 count ;
} ;
2005-06-22 21:16:26 +04:00
struct nfsd3_getaclargs {
struct svc_fh fh ;
int mask ;
} ;
struct posix_acl ;
struct nfsd3_setaclargs {
struct svc_fh fh ;
int mask ;
struct posix_acl * acl_access ;
struct posix_acl * acl_default ;
} ;
2005-04-17 02:20:36 +04:00
struct nfsd3_attrstat {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
2006-01-06 11:19:58 +03:00
struct kstat stat ;
2005-04-17 02:20:36 +04:00
} ;
/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
struct nfsd3_diropres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh dirfh ;
struct svc_fh fh ;
} ;
struct nfsd3_accessres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
__u32 access ;
2013-02-02 00:13:04 +04:00
struct kstat stat ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd3_readlinkres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
__u32 len ;
} ;
struct nfsd3_readres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
unsigned long count ;
int eof ;
} ;
struct nfsd3_writeres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
unsigned long count ;
int committed ;
} ;
struct nfsd3_renameres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh ffh ;
struct svc_fh tfh ;
} ;
struct nfsd3_linkres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh tfh ;
struct svc_fh fh ;
} ;
struct nfsd3_readdirres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
2014-01-10 01:24:35 +04:00
/* Just to save kmalloc on every readdirplus entry (svc_fh is a
* little large for the stack ) : */
struct svc_fh scratch ;
2005-04-17 02:20:36 +04:00
int count ;
2006-10-20 10:28:57 +04:00
__be32 verf [ 2 ] ;
2005-04-17 02:20:36 +04:00
struct readdir_cd common ;
2006-10-20 10:28:57 +04:00
__be32 * buffer ;
2005-04-17 02:20:36 +04:00
int buflen ;
2006-10-20 10:28:57 +04:00
__be32 * offset ;
__be32 * offset1 ;
2005-04-17 02:20:36 +04:00
struct svc_rqst * rqstp ;
} ;
struct nfsd3_fsstatres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct kstatfs stats ;
__u32 invarsec ;
} ;
struct nfsd3_fsinfores {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
__u32 f_rtmax ;
__u32 f_rtpref ;
__u32 f_rtmult ;
__u32 f_wtmax ;
__u32 f_wtpref ;
__u32 f_wtmult ;
__u32 f_dtpref ;
__u64 f_maxfilesize ;
__u32 f_properties ;
} ;
struct nfsd3_pathconfres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
__u32 p_link_max ;
__u32 p_name_max ;
__u32 p_no_trunc ;
__u32 p_chown_restricted ;
__u32 p_case_insensitive ;
__u32 p_case_preserving ;
} ;
struct nfsd3_commitres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
struct svc_fh fh ;
} ;
2005-06-22 21:16:26 +04:00
struct nfsd3_getaclres {
2006-10-20 10:28:57 +04:00
__be32 status ;
2005-06-22 21:16:26 +04:00
struct svc_fh fh ;
int mask ;
struct posix_acl * acl_access ;
struct posix_acl * acl_default ;
2013-02-02 00:13:04 +04:00
struct kstat stat ;
2005-06-22 21:16:26 +04:00
} ;
2005-04-17 02:20:36 +04:00
/* dummy type for release */
struct nfsd3_fhandle_pair {
__u32 dummy ;
struct svc_fh fh1 ;
struct svc_fh fh2 ;
} ;
/*
* Storage requirements for XDR arguments and results .
*/
union nfsd3_xdrstore {
struct nfsd3_sattrargs sattrargs ;
struct nfsd3_diropargs diropargs ;
struct nfsd3_readargs readargs ;
struct nfsd3_writeargs writeargs ;
struct nfsd3_createargs createargs ;
struct nfsd3_renameargs renameargs ;
struct nfsd3_linkargs linkargs ;
struct nfsd3_symlinkargs symlinkargs ;
struct nfsd3_readdirargs readdirargs ;
struct nfsd3_diropres diropres ;
struct nfsd3_accessres accessres ;
struct nfsd3_readlinkres readlinkres ;
struct nfsd3_readres readres ;
struct nfsd3_writeres writeres ;
struct nfsd3_renameres renameres ;
struct nfsd3_linkres linkres ;
struct nfsd3_readdirres readdirres ;
struct nfsd3_fsstatres fsstatres ;
struct nfsd3_fsinfores fsinfores ;
struct nfsd3_pathconfres pathconfres ;
struct nfsd3_commitres commitres ;
2005-06-22 21:16:26 +04:00
struct nfsd3_getaclres getaclres ;
2005-04-17 02:20:36 +04:00
} ;
# define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore)
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_fhandle ( struct svc_rqst * , __be32 * , struct nfsd_fhandle * ) ;
int nfs3svc_decode_sattrargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_sattrargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_diropargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_diropargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_accessargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_accessargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_readargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_writeargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_writeargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_createargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_createargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_mkdirargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_createargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_mknodargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_mknodargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_renameargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_renameargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_readlinkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readlinkargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_linkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_linkargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_symlinkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_symlinkargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_readdirargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readdirargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_readdirplusargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readdirargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_decode_commitargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_commitargs * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_voidres ( struct svc_rqst * , __be32 * , void * ) ;
int nfs3svc_encode_attrstat ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_attrstat * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_wccstat ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_attrstat * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_diropres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_diropres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_accessres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_accessres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_readlinkres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readlinkres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_readres ( struct svc_rqst * , __be32 * , struct nfsd3_readres * ) ;
int nfs3svc_encode_writeres ( struct svc_rqst * , __be32 * , struct nfsd3_writeres * ) ;
int nfs3svc_encode_createres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_diropres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_renameres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_renameres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_linkres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_linkres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_readdirres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_readdirres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_fsstatres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_fsstatres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_fsinfores ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_fsinfores * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_pathconfres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_pathconfres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_encode_commitres ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_commitres * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_release_fhandle ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_attrstat * ) ;
2006-10-20 10:28:57 +04:00
int nfs3svc_release_fhandle2 ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd3_fhandle_pair * ) ;
2007-01-26 11:57:10 +03:00
int nfs3svc_encode_entry ( void * , const char * name ,
int namlen , loff_t offset , u64 ino ,
2005-04-17 02:20:36 +04:00
unsigned int ) ;
2007-01-26 11:57:10 +03:00
int nfs3svc_encode_entry_plus ( void * , const char * name ,
int namlen , loff_t offset , u64 ino ,
2005-04-17 02:20:36 +04:00
unsigned int ) ;
2005-06-22 21:16:26 +04:00
/* Helper functions for NFSv3 ACL code */
2006-10-20 10:28:57 +04:00
__be32 * nfs3svc_encode_post_op_attr ( struct svc_rqst * rqstp , __be32 * p ,
2005-06-22 21:16:26 +04:00
struct svc_fh * fhp ) ;
2006-10-20 10:28:57 +04:00
__be32 * nfs3svc_decode_fh ( __be32 * p , struct svc_fh * fhp ) ;
2005-04-17 02:20:36 +04:00
# endif /* _LINUX_NFSD_XDR3_H */