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}; 37 38struct nfsd3_writeargs { 39 svc_fh fh; 40 __u64 offset; 41 __u32 count; 42 int stable; 43 __u8 * data; 44 int len; 45}; 46 47struct nfsd3_createargs { 48 struct svc_fh fh; 49 char * name; 50 int len; 51 int createmode; 52 struct iattr attrs; 53 __u32 * verf; 54}; 55 56struct nfsd3_mknodargs { 57 struct svc_fh fh; 58 char * name; 59 int len; 60 __u32 ftype; 61 __u32 major, minor; 62 struct iattr attrs; 63}; 64 65struct nfsd3_renameargs { 66 struct svc_fh ffh; 67 char * fname; 68 int flen; 69 struct svc_fh tfh; 70 char * tname; 71 int tlen; 72}; 73 74struct nfsd3_linkargs { 75 struct svc_fh ffh; 76 struct svc_fh tfh; 77 char * tname; 78 int tlen; 79}; 80 81struct nfsd3_symlinkargs { 82 struct svc_fh ffh; 83 char * fname; 84 int flen; 85 char * tname; 86 int tlen; 87 struct iattr attrs; 88}; 89 90struct nfsd3_readdirargs { 91 struct svc_fh fh; 92 __u64 cookie; 93 __u32 dircount; 94 __u32 count; 95 __u32 * verf; 96}; 97 98struct nfsd3_commitargs { 99 struct svc_fh fh; 100 __u64 offset; 101 __u32 count; 102}; 103 104struct nfsd3_attrstat { 105 __u32 status; 106 struct svc_fh fh; 107}; 108 109/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ 110struct nfsd3_diropres { 111 __u32 status; 112 struct svc_fh dirfh; 113 struct svc_fh fh; 114}; 115 116struct nfsd3_accessres { 117 __u32 status; 118 struct svc_fh fh; 119 __u32 access; 120}; 121 122struct nfsd3_readlinkres { 123 __u32 status; 124 struct svc_fh fh; 125 __u32 len; 126}; 127 128struct nfsd3_readres { 129 __u32 status; 130 struct svc_fh fh; 131 unsigned long count; 132 int eof; 133}; 134 135struct nfsd3_writeres { 136 __u32 status; 137 struct svc_fh fh; 138 unsigned long count; 139 int committed; 140}; 141 142struct nfsd3_renameres { 143 __u32 status; 144 struct svc_fh ffh; 145 struct svc_fh tfh; 146}; 147 148struct nfsd3_linkres { 149 __u32 status; 150 struct svc_fh tfh; 151 struct svc_fh fh; 152}; 153 154struct nfsd3_readdirres { 155 __u32 status; 156 struct svc_fh fh; 157 int count; 158 __u32 verf[2]; 159}; 160 161struct nfsd3_fsstatres { 162 __u32 status; 163 struct statfs stats; 164 __u32 invarsec; 165}; 166 167struct nfsd3_fsinfores { 168 __u32 status; 169 __u32 f_rtmax; 170 __u32 f_rtpref; 171 __u32 f_rtmult; 172 __u32 f_wtmax; 173 __u32 f_wtpref; 174 __u32 f_wtmult; 175 __u32 f_dtpref; 176 __u64 f_maxfilesize; 177 __u32 f_properties; 178}; 179 180struct nfsd3_pathconfres { 181 __u32 status; 182 __u32 p_link_max; 183 __u32 p_name_max; 184 __u32 p_no_trunc; 185 __u32 p_chown_restricted; 186 __u32 p_case_insensitive; 187 __u32 p_case_preserving; 188}; 189 190struct nfsd3_commitres { 191 __u32 status; 192 struct svc_fh fh; 193}; 194 195/* dummy type for release */ 196struct nfsd3_fhandle_pair { 197 __u32 dummy; 198 struct svc_fh fh1; 199 struct svc_fh fh2; 200}; 201 202/* 203 * Storage requirements for XDR arguments and results. 204 */ 205union nfsd3_xdrstore { 206 struct nfsd3_sattrargs sattrargs; 207 struct nfsd3_diropargs diropargs; 208 struct nfsd3_readargs readargs; 209 struct nfsd3_writeargs writeargs; 210 struct nfsd3_createargs createargs; 211 struct nfsd3_renameargs renameargs; 212 struct nfsd3_linkargs linkargs; 213 struct nfsd3_symlinkargs symlinkargs; 214 struct nfsd3_readdirargs readdirargs; 215 struct nfsd3_diropres diropres; 216 struct nfsd3_accessres accessres; 217 struct nfsd3_readlinkres readlinkres; 218 struct nfsd3_readres readres; 219 struct nfsd3_writeres writeres; 220 struct nfsd3_renameres renameres; 221 struct nfsd3_linkres linkres; 222 struct nfsd3_readdirres readdirres; 223 struct nfsd3_fsstatres fsstatres; 224 struct nfsd3_fsinfores fsinfores; 225 struct nfsd3_pathconfres pathconfres; 226 struct nfsd3_commitres commitres; 227}; 228 229#define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) 230 231int nfs3svc_decode_fhandle(struct svc_rqst *, u32 *, struct svc_fh *); 232int nfs3svc_decode_sattrargs(struct svc_rqst *, u32 *, 233 struct nfsd3_sattrargs *); 234int nfs3svc_decode_diropargs(struct svc_rqst *, u32 *, 235 struct nfsd3_diropargs *); 236int nfs3svc_decode_accessargs(struct svc_rqst *, u32 *, 237 struct nfsd3_accessargs *); 238int nfs3svc_decode_readargs(struct svc_rqst *, u32 *, 239 struct nfsd3_readargs *); 240int nfs3svc_decode_writeargs(struct svc_rqst *, u32 *, 241 struct nfsd3_writeargs *); 242int nfs3svc_decode_createargs(struct svc_rqst *, u32 *, 243 struct nfsd3_createargs *); 244int nfs3svc_decode_mkdirargs(struct svc_rqst *, u32 *, 245 struct nfsd3_createargs *); 246int nfs3svc_decode_mknodargs(struct svc_rqst *, u32 *, 247 struct nfsd3_mknodargs *); 248int nfs3svc_decode_renameargs(struct svc_rqst *, u32 *, 249 struct nfsd3_renameargs *); 250int nfs3svc_decode_linkargs(struct svc_rqst *, u32 *, 251 struct nfsd3_linkargs *); 252int nfs3svc_decode_symlinkargs(struct svc_rqst *, u32 *, 253 struct nfsd3_symlinkargs *); 254int nfs3svc_decode_readdirargs(struct svc_rqst *, u32 *, 255 struct nfsd3_readdirargs *); 256int nfs3svc_decode_readdirplusargs(struct svc_rqst *, u32 *, 257 struct nfsd3_readdirargs *); 258int nfs3svc_decode_commitargs(struct svc_rqst *, u32 *, 259 struct nfsd3_commitargs *); 260int nfs3svc_encode_voidres(struct svc_rqst *, u32 *, void *); 261int nfs3svc_encode_attrstat(struct svc_rqst *, u32 *, 262 struct nfsd3_attrstat *); 263int nfs3svc_encode_wccstat(struct svc_rqst *, u32 *, 264 struct nfsd3_attrstat *); 265int nfs3svc_encode_diropres(struct svc_rqst *, u32 *, 266 struct nfsd3_diropres *); 267int nfs3svc_encode_accessres(struct svc_rqst *, u32 *, 268 struct nfsd3_accessres *); 269int nfs3svc_encode_readlinkres(struct svc_rqst *, u32 *, 270 struct nfsd3_readlinkres *); 271int nfs3svc_encode_readres(struct svc_rqst *, u32 *, struct nfsd3_readres *); 272int nfs3svc_encode_writeres(struct svc_rqst *, u32 *, struct nfsd3_writeres *); 273int nfs3svc_encode_createres(struct svc_rqst *, u32 *, 274 struct nfsd3_diropres *); 275int nfs3svc_encode_renameres(struct svc_rqst *, u32 *, 276 struct nfsd3_renameres *); 277int nfs3svc_encode_linkres(struct svc_rqst *, u32 *, 278 struct nfsd3_linkres *); 279int nfs3svc_encode_readdirres(struct svc_rqst *, u32 *, 280 struct nfsd3_readdirres *); 281int nfs3svc_encode_fsstatres(struct svc_rqst *, u32 *, 282 struct nfsd3_fsstatres *); 283int nfs3svc_encode_fsinfores(struct svc_rqst *, u32 *, 284 struct nfsd3_fsinfores *); 285int nfs3svc_encode_pathconfres(struct svc_rqst *, u32 *, 286 struct nfsd3_pathconfres *); 287int nfs3svc_encode_commitres(struct svc_rqst *, u32 *, 288 struct nfsd3_commitres *); 289 290int nfs3svc_release_fhandle(struct svc_rqst *, u32 *, 291 struct nfsd3_attrstat *); 292int nfs3svc_release_fhandle2(struct svc_rqst *, u32 *, 293 struct nfsd3_fhandle_pair *); 294int nfs3svc_encode_entry(struct readdir_cd *, const char *name, 295 int namlen, loff_t offset, ino_t ino, 296 unsigned int); 297int nfs3svc_encode_entry_plus(struct readdir_cd *, const char *name, 298 int namlen, loff_t offset, ino_t ino, 299 unsigned int); 300 301 302#endif /* _LINUX_NFSD_XDR3_H */ 303