2005-04-17 02:20:36 +04:00
/*
2006-10-04 01:01:26 +04:00
* linux / include / linux / nfsd / xdr . h
2005-04-17 02:20:36 +04:00
*
* XDR types for nfsd . This is mainly a typing exercise .
*/
# ifndef LINUX_NFSD_H
# define LINUX_NFSD_H
# include <linux/vfs.h>
2009-12-03 21:30:56 +03:00
# include "nfsd.h"
2005-04-17 02:20:36 +04:00
struct nfsd_fhandle {
struct svc_fh fh ;
} ;
struct nfsd_sattrargs {
struct svc_fh fh ;
struct iattr attrs ;
} ;
struct nfsd_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 nfsd_readargs {
struct svc_fh fh ;
__u32 offset ;
__u32 count ;
int vlen ;
} ;
struct nfsd_writeargs {
svc_fh fh ;
__u32 offset ;
int len ;
int vlen ;
} ;
struct nfsd_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
struct iattr attrs ;
} ;
struct nfsd_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 nfsd_readlinkargs {
struct svc_fh fh ;
char * buffer ;
} ;
struct nfsd_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 nfsd_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 nfsd_readdirargs {
struct svc_fh fh ;
__u32 cookie ;
__u32 count ;
2006-10-20 10:28:56 +04:00
__be32 * buffer ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd_attrstat {
struct svc_fh fh ;
2006-01-06 11:19:58 +03:00
struct kstat stat ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd_diropres {
struct svc_fh fh ;
2006-01-06 11:19:58 +03:00
struct kstat stat ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd_readlinkres {
int len ;
} ;
struct nfsd_readres {
struct svc_fh fh ;
unsigned long count ;
2006-01-06 11:19:58 +03:00
struct kstat stat ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd_readdirres {
int count ;
struct readdir_cd common ;
2006-10-20 10:28:56 +04:00
__be32 * buffer ;
2005-04-17 02:20:36 +04:00
int buflen ;
2006-10-20 10:28:56 +04:00
__be32 * offset ;
2005-04-17 02:20:36 +04:00
} ;
struct nfsd_statfsres {
struct kstatfs stats ;
} ;
/*
* Storage requirements for XDR arguments and results .
*/
union nfsd_xdrstore {
struct nfsd_sattrargs sattr ;
struct nfsd_diropargs dirop ;
struct nfsd_readargs read ;
struct nfsd_writeargs write ;
struct nfsd_createargs create ;
struct nfsd_renameargs rename ;
struct nfsd_linkargs link ;
struct nfsd_symlinkargs symlink ;
struct nfsd_readdirargs readdir ;
} ;
# define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore)
2006-10-20 10:28:56 +04:00
int nfssvc_decode_void ( struct svc_rqst * , __be32 * , void * ) ;
int nfssvc_decode_fhandle ( struct svc_rqst * , __be32 * , struct nfsd_fhandle * ) ;
int nfssvc_decode_sattrargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_sattrargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_diropargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_diropargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_readargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_readargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_writeargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_writeargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_createargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_createargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_renameargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_renameargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_readlinkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_readlinkargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_linkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_linkargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_symlinkargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_symlinkargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_decode_readdirargs ( struct svc_rqst * , __be32 * ,
2005-04-17 02:20:36 +04:00
struct nfsd_readdirargs * ) ;
2006-10-20 10:28:56 +04:00
int nfssvc_encode_void ( struct svc_rqst * , __be32 * , void * ) ;
int nfssvc_encode_attrstat ( struct svc_rqst * , __be32 * , struct nfsd_attrstat * ) ;
int nfssvc_encode_diropres ( struct svc_rqst * , __be32 * , struct nfsd_diropres * ) ;
int nfssvc_encode_readlinkres ( struct svc_rqst * , __be32 * , struct nfsd_readlinkres * ) ;
int nfssvc_encode_readres ( struct svc_rqst * , __be32 * , struct nfsd_readres * ) ;
int nfssvc_encode_statfsres ( struct svc_rqst * , __be32 * , struct nfsd_statfsres * ) ;
int nfssvc_encode_readdirres ( struct svc_rqst * , __be32 * , struct nfsd_readdirres * ) ;
2005-04-17 02:20:36 +04:00
2007-01-26 11:57:10 +03:00
int nfssvc_encode_entry ( void * , const char * name ,
int namlen , loff_t offset , u64 ino , unsigned int ) ;
2005-04-17 02:20:36 +04:00
2006-10-20 10:28:56 +04:00
int nfssvc_release_fhandle ( struct svc_rqst * , __be32 * , struct nfsd_fhandle * ) ;
2005-04-17 02:20:36 +04:00
2005-06-22 21:16:26 +04:00
/* Helper functions for NFSv2 ACL code */
2006-10-20 10:28:56 +04:00
__be32 * nfs2svc_encode_fattr ( struct svc_rqst * rqstp , __be32 * p , struct svc_fh * fhp ) ;
__be32 * nfs2svc_decode_fh ( __be32 * p , struct svc_fh * fhp ) ;
2005-06-22 21:16:26 +04:00
2005-04-17 02:20:36 +04:00
# endif /* LINUX_NFSD_H */