1/* XDR types for nfsd. This is mainly a typing exercise. */ 2 3#ifndef LINUX_NFSD_H 4#define LINUX_NFSD_H 5 6#include <linux/vfs.h> 7#include "nfsd.h" 8#include "nfsfh.h" 9 10struct nfsd_fhandle { 11 struct svc_fh fh; 12}; 13 14struct nfsd_sattrargs { 15 struct svc_fh fh; 16 struct iattr attrs; 17}; 18 19struct nfsd_diropargs { 20 struct svc_fh fh; 21 char * name; 22 unsigned int len; 23}; 24 25struct nfsd_readargs { 26 struct svc_fh fh; 27 __u32 offset; 28 __u32 count; 29 int vlen; 30}; 31 32struct nfsd_writeargs { 33 svc_fh fh; 34 __u32 offset; 35 int len; 36 int vlen; 37}; 38 39struct nfsd_createargs { 40 struct svc_fh fh; 41 char * name; 42 unsigned int len; 43 struct iattr attrs; 44}; 45 46struct nfsd_renameargs { 47 struct svc_fh ffh; 48 char * fname; 49 unsigned int flen; 50 struct svc_fh tfh; 51 char * tname; 52 unsigned int tlen; 53}; 54 55struct nfsd_readlinkargs { 56 struct svc_fh fh; 57 char * buffer; 58}; 59 60struct nfsd_linkargs { 61 struct svc_fh ffh; 62 struct svc_fh tfh; 63 char * tname; 64 unsigned int tlen; 65}; 66 67struct nfsd_symlinkargs { 68 struct svc_fh ffh; 69 char * fname; 70 unsigned int flen; 71 char * tname; 72 unsigned int tlen; 73 struct iattr attrs; 74}; 75 76struct nfsd_readdirargs { 77 struct svc_fh fh; 78 __u32 cookie; 79 __u32 count; 80 __be32 * buffer; 81}; 82 83struct nfsd_attrstat { 84 struct svc_fh fh; 85 struct kstat stat; 86}; 87 88struct nfsd_diropres { 89 struct svc_fh fh; 90 struct kstat stat; 91}; 92 93struct nfsd_readlinkres { 94 int len; 95}; 96 97struct nfsd_readres { 98 struct svc_fh fh; 99 unsigned long count; 100 struct kstat stat; 101}; 102 103struct nfsd_readdirres { 104 int count; 105 106 struct readdir_cd common; 107 __be32 * buffer; 108 int buflen; 109 __be32 * offset; 110}; 111 112struct nfsd_statfsres { 113 struct kstatfs stats; 114}; 115 116/* 117 * Storage requirements for XDR arguments and results. 118 */ 119union nfsd_xdrstore { 120 struct nfsd_sattrargs sattr; 121 struct nfsd_diropargs dirop; 122 struct nfsd_readargs read; 123 struct nfsd_writeargs write; 124 struct nfsd_createargs create; 125 struct nfsd_renameargs rename; 126 struct nfsd_linkargs link; 127 struct nfsd_symlinkargs symlink; 128 struct nfsd_readdirargs readdir; 129}; 130 131#define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) 132 133 134int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); 135int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 136int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, 137 struct nfsd_sattrargs *); 138int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, 139 struct nfsd_diropargs *); 140int nfssvc_decode_readargs(struct svc_rqst *, __be32 *, 141 struct nfsd_readargs *); 142int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, 143 struct nfsd_writeargs *); 144int nfssvc_decode_createargs(struct svc_rqst *, __be32 *, 145 struct nfsd_createargs *); 146int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, 147 struct nfsd_renameargs *); 148int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, 149 struct nfsd_readlinkargs *); 150int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, 151 struct nfsd_linkargs *); 152int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, 153 struct nfsd_symlinkargs *); 154int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, 155 struct nfsd_readdirargs *); 156int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); 157int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); 158int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); 159int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); 160int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); 161int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); 162int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); 163 164int nfssvc_encode_entry(void *, const char *name, 165 int namlen, loff_t offset, u64 ino, unsigned int); 166 167int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 168 169/* Helper functions for NFSv2 ACL code */ 170__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp); 171__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp); 172 173#endif /* LINUX_NFSD_H */ 174