17663dacd926584093dfc350892792054692b6cb3J. Bruce Fields/* XDR types for nfsd. This is mainly a typing exercise. */ 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef LINUX_NFSD_H 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LINUX_NFSD_H 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/vfs.h> 79a74af21330c8d46efa977d088a62cc1bfa954e9Boaz Harrosh#include "nfsd.h" 81557aca7904ed6fadd22cdc3364754070bb3d3c3J. Bruce Fields#include "nfsfh.h" 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_fhandle { 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_sattrargs { 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct iattr attrs; 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_diropargs { 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * name; 2229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int len; 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readargs { 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 offset; 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 count; 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int vlen; 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_writeargs { 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds svc_fh fh; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 offset; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int len; 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int vlen; 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_createargs { 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * name; 4229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int len; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct iattr attrs; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_renameargs { 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh ffh; 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * fname; 4929d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int flen; 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh tfh; 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * tname; 5229d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int tlen; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readlinkargs { 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * buffer; 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_linkargs { 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh ffh; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh tfh; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * tname; 6429d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int tlen; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_symlinkargs { 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh ffh; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * fname; 7029d5e5553826d05b8ecda51c21787ce85efdef06Chuck Lever unsigned int flen; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * tname; 7248b4ba3fdd7af319e90ade395162430934ee7b87Chuck Lever unsigned int tlen; 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct iattr attrs; 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readdirargs { 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 cookie; 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 count; 80131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro __be32 * buffer; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_attrstat { 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 85a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw struct kstat stat; 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_diropres { 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 90a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw struct kstat stat; 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readlinkres { 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int len; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readres { 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct svc_fh fh; 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long count; 100a334de28665b14f0a33df82699fa9a78cfeedf31David Shaw struct kstat stat; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_readdirres { 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int count; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct readdir_cd common; 107131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro __be32 * buffer; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buflen; 109131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro __be32 * offset; 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nfsd_statfsres { 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct kstatfs stats; 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Storage requirements for XDR arguments and results. 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsunion nfsd_xdrstore { 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_sattrargs sattr; 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_diropargs dirop; 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_readargs read; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_writeargs write; 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_createargs create; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_renameargs rename; 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_linkargs link; 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_symlinkargs symlink; 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_readdirargs readdir; 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 134131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); 135131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 136131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_sattrargs *); 138131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_diropargs *); 140131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readargs(struct svc_rqst *, __be32 *, 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_readargs *); 142131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_writeargs *); 144131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_createargs(struct svc_rqst *, __be32 *, 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_createargs *); 146131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_renameargs *); 148131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_readlinkargs *); 150131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_linkargs *); 152131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_symlinkargs *); 154131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct nfsd_readdirargs *); 156131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); 157131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); 158131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); 159131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); 160131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); 161131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); 162131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 164a0ad13ef643a5829d63c456ab6143bbda60b44a9NeilBrownint nfssvc_encode_entry(void *, const char *name, 165a0ad13ef643a5829d63c456ab6143bbda60b44a9NeilBrown int namlen, loff_t offset, u64 ino, unsigned int); 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 167131a21c2177c267ab259fcd06947c6f593a7de8eAl Viroint nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 169a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher/* Helper functions for NFSv2 ACL code */ 1704f4a4faddea0fe45bf508e723c3a810c5190ed62J. Bruce Fields__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat); 171131a21c2177c267ab259fcd06947c6f593a7de8eAl Viro__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp); 172a257cdd0e2179630d3201c32ba14d7fcb3c3a055Andreas Gruenbacher 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* LINUX_NFSD_H */ 174