linux/fs/nfsd/xdr.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* XDR types for nfsd. This is mainly a typing exercise. */
   3
   4#ifndef LINUX_NFSD_H
   5#define LINUX_NFSD_H
   6
   7#include <linux/vfs.h>
   8#include "nfsd.h"
   9#include "nfsfh.h"
  10
  11struct nfsd_fhandle {
  12        struct svc_fh           fh;
  13};
  14
  15struct nfsd_sattrargs {
  16        struct svc_fh           fh;
  17        struct iattr            attrs;
  18};
  19
  20struct nfsd_diropargs {
  21        struct svc_fh           fh;
  22        char *                  name;
  23        unsigned int            len;
  24};
  25
  26struct nfsd_readargs {
  27        struct svc_fh           fh;
  28        __u32                   offset;
  29        __u32                   count;
  30        int                     vlen;
  31};
  32
  33struct nfsd_writeargs {
  34        svc_fh                  fh;
  35        __u32                   offset;
  36        int                     len;
  37        struct kvec             first;
  38};
  39
  40struct nfsd_createargs {
  41        struct svc_fh           fh;
  42        char *                  name;
  43        unsigned int            len;
  44        struct iattr            attrs;
  45};
  46
  47struct nfsd_renameargs {
  48        struct svc_fh           ffh;
  49        char *                  fname;
  50        unsigned int            flen;
  51        struct svc_fh           tfh;
  52        char *                  tname;
  53        unsigned int            tlen;
  54};
  55
  56struct nfsd_readlinkargs {
  57        struct svc_fh           fh;
  58        char *                  buffer;
  59};
  60        
  61struct nfsd_linkargs {
  62        struct svc_fh           ffh;
  63        struct svc_fh           tfh;
  64        char *                  tname;
  65        unsigned int            tlen;
  66};
  67
  68struct nfsd_symlinkargs {
  69        struct svc_fh           ffh;
  70        char *                  fname;
  71        unsigned int            flen;
  72        char *                  tname;
  73        unsigned int            tlen;
  74        struct iattr            attrs;
  75        struct kvec             first;
  76};
  77
  78struct nfsd_readdirargs {
  79        struct svc_fh           fh;
  80        __u32                   cookie;
  81        __u32                   count;
  82        __be32 *                buffer;
  83};
  84
  85struct nfsd_attrstat {
  86        struct svc_fh           fh;
  87        struct kstat            stat;
  88};
  89
  90struct nfsd_diropres  {
  91        struct svc_fh           fh;
  92        struct kstat            stat;
  93};
  94
  95struct nfsd_readlinkres {
  96        int                     len;
  97};
  98
  99struct nfsd_readres {
 100        struct svc_fh           fh;
 101        unsigned long           count;
 102        struct kstat            stat;
 103};
 104
 105struct nfsd_readdirres {
 106        int                     count;
 107
 108        struct readdir_cd       common;
 109        __be32 *                buffer;
 110        int                     buflen;
 111        __be32 *                offset;
 112};
 113
 114struct nfsd_statfsres {
 115        struct kstatfs          stats;
 116};
 117
 118/*
 119 * Storage requirements for XDR arguments and results.
 120 */
 121union nfsd_xdrstore {
 122        struct nfsd_sattrargs   sattr;
 123        struct nfsd_diropargs   dirop;
 124        struct nfsd_readargs    read;
 125        struct nfsd_writeargs   write;
 126        struct nfsd_createargs  create;
 127        struct nfsd_renameargs  rename;
 128        struct nfsd_linkargs    link;
 129        struct nfsd_symlinkargs symlink;
 130        struct nfsd_readdirargs readdir;
 131};
 132
 133#define NFS2_SVC_XDRSIZE        sizeof(union nfsd_xdrstore)
 134
 135
 136int nfssvc_decode_void(struct svc_rqst *, __be32 *);
 137int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *);
 138int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *);
 139int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *);
 140int nfssvc_decode_readargs(struct svc_rqst *, __be32 *);
 141int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *);
 142int nfssvc_decode_createargs(struct svc_rqst *, __be32 *);
 143int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *);
 144int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *);
 145int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *);
 146int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *);
 147int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *);
 148int nfssvc_encode_void(struct svc_rqst *, __be32 *);
 149int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *);
 150int nfssvc_encode_diropres(struct svc_rqst *, __be32 *);
 151int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *);
 152int nfssvc_encode_readres(struct svc_rqst *, __be32 *);
 153int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *);
 154int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *);
 155
 156int nfssvc_encode_entry(void *, const char *name,
 157                        int namlen, loff_t offset, u64 ino, unsigned int);
 158
 159void nfssvc_release_fhandle(struct svc_rqst *);
 160
 161/* Helper functions for NFSv2 ACL code */
 162__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat);
 163__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp);
 164
 165#endif /* LINUX_NFSD_H */
 166