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