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        __u32                   access;
  29};
  30
  31struct nfsd3_readargs {
  32        struct svc_fh           fh;
  33        __u64                   offset;
  34        __u32                   count;
  35};
  36
  37struct nfsd3_writeargs {
  38        svc_fh                  fh;
  39        __u64                   offset;
  40        __u32                   count;
  41        int                     stable;
  42        __u32                   len;
  43        struct kvec             first;
  44};
  45
  46struct 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
  55struct 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
  64struct 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
  73struct nfsd3_linkargs {
  74        struct svc_fh           ffh;
  75        struct svc_fh           tfh;
  76        char *                  tname;
  77        unsigned int            tlen;
  78};
  79
  80struct nfsd3_symlinkargs {
  81        struct svc_fh           ffh;
  82        char *                  fname;
  83        unsigned int            flen;
  84        char *                  tname;
  85        unsigned int            tlen;
  86        struct iattr            attrs;
  87        struct kvec             first;
  88};
  89
  90struct nfsd3_readdirargs {
  91        struct svc_fh           fh;
  92        __u64                   cookie;
  93        __u32                   count;
  94        __be32 *                verf;
  95};
  96
  97struct nfsd3_commitargs {
  98        struct svc_fh           fh;
  99        __u64                   offset;
 100        __u32                   count;
 101};
 102
 103struct nfsd3_getaclargs {
 104        struct svc_fh           fh;
 105        __u32                   mask;
 106};
 107
 108struct posix_acl;
 109struct nfsd3_setaclargs {
 110        struct svc_fh           fh;
 111        __u32                   mask;
 112        struct posix_acl        *acl_access;
 113        struct posix_acl        *acl_default;
 114};
 115
 116struct nfsd3_attrstat {
 117        __be32                  status;
 118        struct svc_fh           fh;
 119        struct kstat            stat;
 120};
 121
 122/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
 123struct nfsd3_diropres  {
 124        __be32                  status;
 125        struct svc_fh           dirfh;
 126        struct svc_fh           fh;
 127};
 128
 129struct nfsd3_accessres {
 130        __be32                  status;
 131        struct svc_fh           fh;
 132        __u32                   access;
 133        struct kstat            stat;
 134};
 135
 136struct nfsd3_readlinkres {
 137        __be32                  status;
 138        struct svc_fh           fh;
 139        __u32                   len;
 140        struct page             **pages;
 141};
 142
 143struct nfsd3_readres {
 144        __be32                  status;
 145        struct svc_fh           fh;
 146        unsigned long           count;
 147        __u32                   eof;
 148        struct page             **pages;
 149};
 150
 151struct nfsd3_writeres {
 152        __be32                  status;
 153        struct svc_fh           fh;
 154        unsigned long           count;
 155        int                     committed;
 156        __be32                  verf[2];
 157};
 158
 159struct nfsd3_renameres {
 160        __be32                  status;
 161        struct svc_fh           ffh;
 162        struct svc_fh           tfh;
 163};
 164
 165struct nfsd3_linkres {
 166        __be32                  status;
 167        struct svc_fh           tfh;
 168        struct svc_fh           fh;
 169};
 170
 171struct nfsd3_readdirres {
 172        /* Components of the reply */
 173        __be32                  status;
 174        struct svc_fh           fh;
 175        __be32                  verf[2];
 176
 177        /* Used to encode the reply's entry list */
 178        struct xdr_stream       xdr;
 179        struct xdr_buf          dirlist;
 180        struct svc_fh           scratch;
 181        struct readdir_cd       common;
 182        unsigned int            cookie_offset;
 183        struct svc_rqst *       rqstp;
 184
 185};
 186
 187struct nfsd3_fsstatres {
 188        __be32                  status;
 189        struct kstatfs          stats;
 190        __u32                   invarsec;
 191};
 192
 193struct nfsd3_fsinfores {
 194        __be32                  status;
 195        __u32                   f_rtmax;
 196        __u32                   f_rtpref;
 197        __u32                   f_rtmult;
 198        __u32                   f_wtmax;
 199        __u32                   f_wtpref;
 200        __u32                   f_wtmult;
 201        __u32                   f_dtpref;
 202        __u64                   f_maxfilesize;
 203        __u32                   f_properties;
 204};
 205
 206struct nfsd3_pathconfres {
 207        __be32                  status;
 208        __u32                   p_link_max;
 209        __u32                   p_name_max;
 210        __u32                   p_no_trunc;
 211        __u32                   p_chown_restricted;
 212        __u32                   p_case_insensitive;
 213        __u32                   p_case_preserving;
 214};
 215
 216struct nfsd3_commitres {
 217        __be32                  status;
 218        struct svc_fh           fh;
 219        __be32                  verf[2];
 220};
 221
 222struct 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        struct kstat            stat;
 229};
 230
 231/* dummy type for release */
 232struct nfsd3_fhandle_pair {
 233        __u32                   dummy;
 234        struct svc_fh           fh1;
 235        struct svc_fh           fh2;
 236};
 237
 238/*
 239 * Storage requirements for XDR arguments and results.
 240 */
 241union nfsd3_xdrstore {
 242        struct nfsd3_sattrargs          sattrargs;
 243        struct nfsd3_diropargs          diropargs;
 244        struct nfsd3_readargs           readargs;
 245        struct nfsd3_writeargs          writeargs;
 246        struct nfsd3_createargs         createargs;
 247        struct nfsd3_renameargs         renameargs;
 248        struct nfsd3_linkargs           linkargs;
 249        struct nfsd3_symlinkargs        symlinkargs;
 250        struct nfsd3_readdirargs        readdirargs;
 251        struct nfsd3_diropres           diropres;
 252        struct nfsd3_accessres          accessres;
 253        struct nfsd3_readlinkres        readlinkres;
 254        struct nfsd3_readres            readres;
 255        struct nfsd3_writeres           writeres;
 256        struct nfsd3_renameres          renameres;
 257        struct nfsd3_linkres            linkres;
 258        struct nfsd3_readdirres         readdirres;
 259        struct nfsd3_fsstatres          fsstatres;
 260        struct nfsd3_fsinfores          fsinfores;
 261        struct nfsd3_pathconfres        pathconfres;
 262        struct nfsd3_commitres          commitres;
 263        struct nfsd3_getaclres          getaclres;
 264};
 265
 266#define NFS3_SVC_XDRSIZE                sizeof(union nfsd3_xdrstore)
 267
 268int nfs3svc_decode_fhandleargs(struct svc_rqst *, __be32 *);
 269int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *);
 270int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *);
 271int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *);
 272int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *);
 273int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *);
 274int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *);
 275int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *);
 276int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *);
 277int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *);
 278int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *);
 279int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *);
 280int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *);
 281int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *);
 282int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *);
 283int nfs3svc_encode_getattrres(struct svc_rqst *, __be32 *);
 284int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *);
 285int nfs3svc_encode_lookupres(struct svc_rqst *, __be32 *);
 286int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *);
 287int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *);
 288int nfs3svc_encode_readres(struct svc_rqst *, __be32 *);
 289int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *);
 290int nfs3svc_encode_createres(struct svc_rqst *, __be32 *);
 291int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *);
 292int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *);
 293int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *);
 294int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *);
 295int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *);
 296int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *);
 297int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *);
 298
 299void nfs3svc_release_fhandle(struct svc_rqst *);
 300void nfs3svc_release_fhandle2(struct svc_rqst *);
 301
 302void nfs3svc_encode_cookie3(struct nfsd3_readdirres *resp, u64 offset);
 303int nfs3svc_encode_entry3(void *data, const char *name, int namlen,
 304                          loff_t offset, u64 ino, unsigned int d_type);
 305int nfs3svc_encode_entryplus3(void *data, const char *name, int namlen,
 306                              loff_t offset, u64 ino, unsigned int d_type);
 307/* Helper functions for NFSv3 ACL code */
 308bool svcxdr_decode_nfs_fh3(struct xdr_stream *xdr, struct svc_fh *fhp);
 309bool svcxdr_encode_nfsstat3(struct xdr_stream *xdr, __be32 status);
 310bool svcxdr_encode_post_op_attr(struct svc_rqst *rqstp, struct xdr_stream *xdr,
 311                                const struct svc_fh *fhp);
 312
 313#endif /* _LINUX_NFSD_XDR3_H */
 314