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