linux/fs/nfsd/xdr3.h
<<
>>
Prefs
   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
  13struct nfsd3_sattrargs {
  14        struct svc_fh           fh;
  15        struct iattr            attrs;
  16        int                     check_guard;
  17        time64_t                guardtime;
  18};
  19
  20struct nfsd3_diropargs {
  21        struct svc_fh           fh;
  22        char *                  name;
  23        unsigned int            len;
  24};
  25
  26struct nfsd3_accessargs {
  27        struct svc_fh           fh;
  28        unsigned int            access;
  29};
  30
  31struct nfsd3_readargs {
  32        struct svc_fh           fh;
  33        __u64                   offset;
  34        __u32                   count;
  35        int                     vlen;
  36};
  37
  38struct nfsd3_writeargs {
  39        svc_fh                  fh;
  40        __u64                   offset;
  41        __u32                   count;
  42        int                     stable;
  43        __u32                   len;
  44        struct kvec             first;
  45};
  46
  47struct 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
  56struct 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
  65struct 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
  74struct nfsd3_readlinkargs {
  75        struct svc_fh           fh;
  76        char *                  buffer;
  77};
  78
  79struct nfsd3_linkargs {
  80        struct svc_fh           ffh;
  81        struct svc_fh           tfh;
  82        char *                  tname;
  83        unsigned int            tlen;
  84};
  85
  86struct 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
  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        struct kstat            stat;
 142};
 143
 144struct nfsd3_readlinkres {
 145        __be32                  status;
 146        struct svc_fh           fh;
 147        __u32                   len;
 148};
 149
 150struct nfsd3_readres {
 151        __be32                  status;
 152        struct svc_fh           fh;
 153        unsigned long           count;
 154        __u32                   eof;
 155};
 156
 157struct nfsd3_writeres {
 158        __be32                  status;
 159        struct svc_fh           fh;
 160        unsigned long           count;
 161        int                     committed;
 162};
 163
 164struct nfsd3_renameres {
 165        __be32                  status;
 166        struct svc_fh           ffh;
 167        struct svc_fh           tfh;
 168};
 169
 170struct nfsd3_linkres {
 171        __be32                  status;
 172        struct svc_fh           tfh;
 173        struct svc_fh           fh;
 174};
 175
 176struct 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
 194struct nfsd3_fsstatres {
 195        __be32                  status;
 196        struct kstatfs          stats;
 197        __u32                   invarsec;
 198};
 199
 200struct 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
 213struct 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
 223struct nfsd3_commitres {
 224        __be32                  status;
 225        struct svc_fh           fh;
 226};
 227
 228struct 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 */
 238struct 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 */
 247union 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
 274int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *);
 275int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *);
 276int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *);
 277int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *);
 278int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *);
 279int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *);
 280int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *);
 281int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *);
 282int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *);
 283int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *);
 284int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *);
 285int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *);
 286int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *);
 287int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *);
 288int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *);
 289int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *);
 290int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *);
 291int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *);
 292int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *);
 293int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *);
 294int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *);
 295int nfs3svc_encode_readres(struct svc_rqst *, __be32 *);
 296int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *);
 297int nfs3svc_encode_createres(struct svc_rqst *, __be32 *);
 298int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *);
 299int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *);
 300int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *);
 301int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *);
 302int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *);
 303int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *);
 304int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *);
 305
 306void nfs3svc_release_fhandle(struct svc_rqst *);
 307void nfs3svc_release_fhandle2(struct svc_rqst *);
 308int nfs3svc_encode_entry(void *, const char *name,
 309                                int namlen, loff_t offset, u64 ino,
 310                                unsigned int);
 311int nfs3svc_encode_entry_plus(void *, const char *name,
 312                                int namlen, loff_t offset, u64 ino,
 313                                unsigned int);
 314/* Helper functions for NFSv3 ACL code */
 315__be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p,
 316                                struct svc_fh *fhp);
 317__be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp);
 318
 319
 320#endif /* _LINUX_NFSD_XDR3_H */
 321