cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xdr.h (4379B)


      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};
     31
     32struct nfsd_writeargs {
     33	svc_fh			fh;
     34	__u32			offset;
     35	__u32			len;
     36	struct xdr_buf		payload;
     37};
     38
     39struct nfsd_createargs {
     40	struct svc_fh		fh;
     41	char *			name;
     42	unsigned int		len;
     43	struct iattr		attrs;
     44};
     45
     46struct nfsd_renameargs {
     47	struct svc_fh		ffh;
     48	char *			fname;
     49	unsigned int		flen;
     50	struct svc_fh		tfh;
     51	char *			tname;
     52	unsigned int		tlen;
     53};
     54
     55struct nfsd_linkargs {
     56	struct svc_fh		ffh;
     57	struct svc_fh		tfh;
     58	char *			tname;
     59	unsigned int		tlen;
     60};
     61
     62struct nfsd_symlinkargs {
     63	struct svc_fh		ffh;
     64	char *			fname;
     65	unsigned int		flen;
     66	char *			tname;
     67	unsigned int		tlen;
     68	struct iattr		attrs;
     69	struct kvec		first;
     70};
     71
     72struct nfsd_readdirargs {
     73	struct svc_fh		fh;
     74	__u32			cookie;
     75	__u32			count;
     76};
     77
     78struct nfsd_stat {
     79	__be32			status;
     80};
     81
     82struct nfsd_attrstat {
     83	__be32			status;
     84	struct svc_fh		fh;
     85	struct kstat		stat;
     86};
     87
     88struct nfsd_diropres  {
     89	__be32			status;
     90	struct svc_fh		fh;
     91	struct kstat		stat;
     92};
     93
     94struct nfsd_readlinkres {
     95	__be32			status;
     96	int			len;
     97	struct page		*page;
     98};
     99
    100struct nfsd_readres {
    101	__be32			status;
    102	struct svc_fh		fh;
    103	unsigned long		count;
    104	struct kstat		stat;
    105	struct page		**pages;
    106};
    107
    108struct nfsd_readdirres {
    109	/* Components of the reply */
    110	__be32			status;
    111
    112	int			count;
    113
    114	/* Used to encode the reply's entry list */
    115	struct xdr_stream	xdr;
    116	struct xdr_buf		dirlist;
    117	struct readdir_cd	common;
    118	unsigned int		cookie_offset;
    119};
    120
    121struct nfsd_statfsres {
    122	__be32			status;
    123	struct kstatfs		stats;
    124};
    125
    126/*
    127 * Storage requirements for XDR arguments and results.
    128 */
    129union nfsd_xdrstore {
    130	struct nfsd_sattrargs	sattr;
    131	struct nfsd_diropargs	dirop;
    132	struct nfsd_readargs	read;
    133	struct nfsd_writeargs	write;
    134	struct nfsd_createargs	create;
    135	struct nfsd_renameargs	rename;
    136	struct nfsd_linkargs	link;
    137	struct nfsd_symlinkargs	symlink;
    138	struct nfsd_readdirargs	readdir;
    139};
    140
    141#define NFS2_SVC_XDRSIZE	sizeof(union nfsd_xdrstore)
    142
    143
    144bool nfssvc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    145bool nfssvc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    146bool nfssvc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    147bool nfssvc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    148bool nfssvc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    149bool nfssvc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    150bool nfssvc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    151bool nfssvc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    152bool nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    153bool nfssvc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    154
    155bool nfssvc_encode_statres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    156bool nfssvc_encode_attrstatres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    157bool nfssvc_encode_diropres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    158bool nfssvc_encode_readlinkres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    159bool nfssvc_encode_readres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    160bool nfssvc_encode_statfsres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    161bool nfssvc_encode_readdirres(struct svc_rqst *rqstp, struct xdr_stream *xdr);
    162
    163void nfssvc_encode_nfscookie(struct nfsd_readdirres *resp, u32 offset);
    164int nfssvc_encode_entry(void *data, const char *name, int namlen,
    165			loff_t offset, u64 ino, unsigned int d_type);
    166
    167void nfssvc_release_attrstat(struct svc_rqst *rqstp);
    168void nfssvc_release_diropres(struct svc_rqst *rqstp);
    169void nfssvc_release_readres(struct svc_rqst *rqstp);
    170
    171/* Helper functions for NFSv2 ACL code */
    172bool svcxdr_decode_fhandle(struct xdr_stream *xdr, struct svc_fh *fhp);
    173bool svcxdr_encode_stat(struct xdr_stream *xdr, __be32 status);
    174bool svcxdr_encode_fattr(struct svc_rqst *rqstp, struct xdr_stream *xdr,
    175			 const struct svc_fh *fhp, const struct kstat *stat);
    176
    177#endif /* LINUX_NFSD_H */