root/fs/nfsd/xdr3.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */