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