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