1/* 2 * XDR types for NFSv3 in nfsd. 3 * 4 * Copyright (C) 1996-1998, Olaf Kirch <okir@monad.swb.de> 5 */ 6 7#ifndef _LINUX_NFSD_XDR3_H 8#define _LINUX_NFSD_XDR3_H 9 10#include "xdr.h" 11 12struct nfsd3_sattrargs { 13 struct svc_fh fh; 14 struct iattr attrs; 15 int check_guard; 16 time_t guardtime; 17}; 18 19struct nfsd3_diropargs { 20 struct svc_fh fh; 21 char * name; 22 unsigned int len; 23}; 24 25struct nfsd3_accessargs { 26 struct svc_fh fh; 27 unsigned int access; 28}; 29 30struct nfsd3_readargs { 31 struct svc_fh fh; 32 __u64 offset; 33 __u32 count; 34 int vlen; 35}; 36 37struct nfsd3_writeargs { 38 svc_fh fh; 39 __u64 offset; 40 __u32 count; 41 int stable; 42 __u32 len; 43 int vlen; 44}; 45 46struct nfsd3_createargs { 47 struct svc_fh fh; 48 char * name; 49 unsigned int len; 50 int createmode; 51 struct iattr attrs; 52 __be32 * verf; 53}; 54 55struct nfsd3_mknodargs { 56 struct svc_fh fh; 57 char * name; 58 unsigned int len; 59 __u32 ftype; 60 __u32 major, minor; 61 struct iattr attrs; 62}; 63 64struct nfsd3_renameargs { 65 struct svc_fh ffh; 66 char * fname; 67 unsigned int flen; 68 struct svc_fh tfh; 69 char * tname; 70 unsigned int tlen; 71}; 72 73struct nfsd3_readlinkargs { 74 struct svc_fh fh; 75 char * buffer; 76}; 77 78struct nfsd3_linkargs { 79 struct svc_fh ffh; 80 struct svc_fh tfh; 81 char * tname; 82 unsigned int tlen; 83}; 84 85struct nfsd3_symlinkargs { 86 struct svc_fh ffh; 87 char * fname; 88 unsigned int flen; 89 char * tname; 90 unsigned int tlen; 91 struct iattr attrs; 92}; 93 94struct nfsd3_readdirargs { 95 struct svc_fh fh; 96 __u64 cookie; 97 __u32 dircount; 98 __u32 count; 99 __be32 * verf; 100 __be32 * buffer; 101}; 102 103struct nfsd3_commitargs { 104 struct svc_fh fh; 105 __u64 offset; 106 __u32 count; 107}; 108 109struct nfsd3_getaclargs { 110 struct svc_fh fh; 111 int mask; 112}; 113 114struct posix_acl; 115struct nfsd3_setaclargs { 116 struct svc_fh fh; 117 int mask; 118 struct posix_acl *acl_access; 119 struct posix_acl *acl_default; 120}; 121 122struct nfsd3_attrstat { 123 __be32 status; 124 struct svc_fh fh; 125 struct kstat stat; 126}; 127 128/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ 129struct nfsd3_diropres { 130 __be32 status; 131 struct svc_fh dirfh; 132 struct svc_fh fh; 133}; 134 135struct nfsd3_accessres { 136 __be32 status; 137 struct svc_fh fh; 138 __u32 access; 139 struct kstat stat; 140}; 141 142struct nfsd3_readlinkres { 143 __be32 status; 144 struct svc_fh fh; 145 __u32 len; 146}; 147 148struct nfsd3_readres { 149 __be32 status; 150 struct svc_fh fh; 151 unsigned long count; 152 int eof; 153}; 154 155struct nfsd3_writeres { 156 __be32 status; 157 struct svc_fh fh; 158 unsigned long count; 159 int committed; 160}; 161 162struct nfsd3_renameres { 163 __be32 status; 164 struct svc_fh ffh; 165 struct svc_fh tfh; 166}; 167 168struct nfsd3_linkres { 169 __be32 status; 170 struct svc_fh tfh; 171 struct svc_fh fh; 172}; 173 174struct nfsd3_readdirres { 175 __be32 status; 176 struct svc_fh fh; 177 /* Just to save kmalloc on every readdirplus entry (svc_fh is a 178 * little large for the stack): */ 179 struct svc_fh scratch; 180 int count; 181 __be32 verf[2]; 182 183 struct readdir_cd common; 184 __be32 * buffer; 185 int buflen; 186 __be32 * offset; 187 __be32 * offset1; 188 struct svc_rqst * rqstp; 189 190}; 191 192struct nfsd3_fsstatres { 193 __be32 status; 194 struct kstatfs stats; 195 __u32 invarsec; 196}; 197 198struct nfsd3_fsinfores { 199 __be32 status; 200 __u32 f_rtmax; 201 __u32 f_rtpref; 202 __u32 f_rtmult; 203 __u32 f_wtmax; 204 __u32 f_wtpref; 205 __u32 f_wtmult; 206 __u32 f_dtpref; 207 __u64 f_maxfilesize; 208 __u32 f_properties; 209}; 210 211struct nfsd3_pathconfres { 212 __be32 status; 213 __u32 p_link_max; 214 __u32 p_name_max; 215 __u32 p_no_trunc; 216 __u32 p_chown_restricted; 217 __u32 p_case_insensitive; 218 __u32 p_case_preserving; 219}; 220 221struct nfsd3_commitres { 222 __be32 status; 223 struct svc_fh fh; 224}; 225 226struct nfsd3_getaclres { 227 __be32 status; 228 struct svc_fh fh; 229 int mask; 230 struct posix_acl *acl_access; 231 struct posix_acl *acl_default; 232 struct kstat stat; 233}; 234 235/* dummy type for release */ 236struct nfsd3_fhandle_pair { 237 __u32 dummy; 238 struct svc_fh fh1; 239 struct svc_fh fh2; 240}; 241 242/* 243 * Storage requirements for XDR arguments and results. 244 */ 245union nfsd3_xdrstore { 246 struct nfsd3_sattrargs sattrargs; 247 struct nfsd3_diropargs diropargs; 248 struct nfsd3_readargs readargs; 249 struct nfsd3_writeargs writeargs; 250 struct nfsd3_createargs createargs; 251 struct nfsd3_renameargs renameargs; 252 struct nfsd3_linkargs linkargs; 253 struct nfsd3_symlinkargs symlinkargs; 254 struct nfsd3_readdirargs readdirargs; 255 struct nfsd3_diropres diropres; 256 struct nfsd3_accessres accessres; 257 struct nfsd3_readlinkres readlinkres; 258 struct nfsd3_readres readres; 259 struct nfsd3_writeres writeres; 260 struct nfsd3_renameres renameres; 261 struct nfsd3_linkres linkres; 262 struct nfsd3_readdirres readdirres; 263 struct nfsd3_fsstatres fsstatres; 264 struct nfsd3_fsinfores fsinfores; 265 struct nfsd3_pathconfres pathconfres; 266 struct nfsd3_commitres commitres; 267 struct nfsd3_getaclres getaclres; 268}; 269 270#define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) 271 272int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 273int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *, 274 struct nfsd3_sattrargs *); 275int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *, 276 struct nfsd3_diropargs *); 277int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *, 278 struct nfsd3_accessargs *); 279int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *, 280 struct nfsd3_readargs *); 281int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *, 282 struct nfsd3_writeargs *); 283int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *, 284 struct nfsd3_createargs *); 285int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *, 286 struct nfsd3_createargs *); 287int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *, 288 struct nfsd3_mknodargs *); 289int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *, 290 struct nfsd3_renameargs *); 291int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *, 292 struct nfsd3_readlinkargs *); 293int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *, 294 struct nfsd3_linkargs *); 295int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *, 296 struct nfsd3_symlinkargs *); 297int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *, 298 struct nfsd3_readdirargs *); 299int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *, 300 struct nfsd3_readdirargs *); 301int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *, 302 struct nfsd3_commitargs *); 303int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *); 304int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *, 305 struct nfsd3_attrstat *); 306int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *, 307 struct nfsd3_attrstat *); 308int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *, 309 struct nfsd3_diropres *); 310int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *, 311 struct nfsd3_accessres *); 312int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *, 313 struct nfsd3_readlinkres *); 314int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *); 315int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *); 316int nfs3svc_encode_createres(struct svc_rqst *, __be32 *, 317 struct nfsd3_diropres *); 318int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *, 319 struct nfsd3_renameres *); 320int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *, 321 struct nfsd3_linkres *); 322int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *, 323 struct nfsd3_readdirres *); 324int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *, 325 struct nfsd3_fsstatres *); 326int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *, 327 struct nfsd3_fsinfores *); 328int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *, 329 struct nfsd3_pathconfres *); 330int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *, 331 struct nfsd3_commitres *); 332 333int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *, 334 struct nfsd3_attrstat *); 335int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *, 336 struct nfsd3_fhandle_pair *); 337int nfs3svc_encode_entry(void *, const char *name, 338 int namlen, loff_t offset, u64 ino, 339 unsigned int); 340int nfs3svc_encode_entry_plus(void *, const char *name, 341 int namlen, loff_t offset, u64 ino, 342 unsigned int); 343/* Helper functions for NFSv3 ACL code */ 344__be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p, 345 struct svc_fh *fhp); 346__be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp); 347 348 349#endif /* _LINUX_NFSD_XDR3_H */ 350