1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * include/linux/nfsd/nfsfh.h 3*53ee8cc1Swenshuai.xi * 4*53ee8cc1Swenshuai.xi * This file describes the layout of the file handles as passed 5*53ee8cc1Swenshuai.xi * over the wire. 6*53ee8cc1Swenshuai.xi * 7*53ee8cc1Swenshuai.xi * Earlier versions of knfsd used to sign file handles using keyed MD5 8*53ee8cc1Swenshuai.xi * or SHA. I've removed this code, because it doesn't give you more 9*53ee8cc1Swenshuai.xi * security than blocking external access to port 2049 on your firewall. 10*53ee8cc1Swenshuai.xi * 11*53ee8cc1Swenshuai.xi * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de> 12*53ee8cc1Swenshuai.xi */ 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi #ifndef _LINUX_NFSD_FH_H 15*53ee8cc1Swenshuai.xi #define _LINUX_NFSD_FH_H 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xi #include <asm/types.h> 18*53ee8cc1Swenshuai.xi #include <linux/nfsd/const.h> 19*53ee8cc1Swenshuai.xi #include <linux/nfsd/debug.h> 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi /* 22*53ee8cc1Swenshuai.xi * This is the old "dentry style" Linux NFSv2 file handle. 23*53ee8cc1Swenshuai.xi * 24*53ee8cc1Swenshuai.xi * The xino and xdev fields are currently used to transport the 25*53ee8cc1Swenshuai.xi * ino/dev of the exported inode. 26*53ee8cc1Swenshuai.xi */ 27*53ee8cc1Swenshuai.xi struct nfs_fhbase_old { 28*53ee8cc1Swenshuai.xi __u32 fb_dcookie; /* dentry cookie - always 0xfeebbaca */ 29*53ee8cc1Swenshuai.xi __u32 fb_ino; /* our inode number */ 30*53ee8cc1Swenshuai.xi __u32 fb_dirino; /* dir inode number, 0 for directories */ 31*53ee8cc1Swenshuai.xi __u32 fb_dev; /* our device */ 32*53ee8cc1Swenshuai.xi __u32 fb_xdev; 33*53ee8cc1Swenshuai.xi __u32 fb_xino; 34*53ee8cc1Swenshuai.xi __u32 fb_generation; 35*53ee8cc1Swenshuai.xi }; 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi /* 38*53ee8cc1Swenshuai.xi * This is the new flexible, extensible style NFSv2/v3 file handle. 39*53ee8cc1Swenshuai.xi * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000 40*53ee8cc1Swenshuai.xi * 41*53ee8cc1Swenshuai.xi * The file handle is seens as a list of 4byte words. 42*53ee8cc1Swenshuai.xi * The first word contains a version number (1) and four descriptor bytes 43*53ee8cc1Swenshuai.xi * that tell how the remaining 3 variable length fields should be handled. 44*53ee8cc1Swenshuai.xi * These three bytes are auth_type, fsid_type and fileid_type. 45*53ee8cc1Swenshuai.xi * 46*53ee8cc1Swenshuai.xi * All 4byte values are in host-byte-order. 47*53ee8cc1Swenshuai.xi * 48*53ee8cc1Swenshuai.xi * The auth_type field specifies how the filehandle can be authenticated 49*53ee8cc1Swenshuai.xi * This might allow a file to be confirmed to be in a writable part of a 50*53ee8cc1Swenshuai.xi * filetree without checking the path from it upto the root. 51*53ee8cc1Swenshuai.xi * Current values: 52*53ee8cc1Swenshuai.xi * 0 - No authentication. fb_auth is 0 bytes long 53*53ee8cc1Swenshuai.xi * Possible future values: 54*53ee8cc1Swenshuai.xi * 1 - 4 bytes taken from MD5 hash of the remainer of the file handle 55*53ee8cc1Swenshuai.xi * prefixed by a secret and with the important export flags. 56*53ee8cc1Swenshuai.xi * 57*53ee8cc1Swenshuai.xi * The fsid_type identifies how the filesystem (or export point) is 58*53ee8cc1Swenshuai.xi * encoded. 59*53ee8cc1Swenshuai.xi * Current values: 60*53ee8cc1Swenshuai.xi * 0 - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number 61*53ee8cc1Swenshuai.xi * NOTE: we cannot use the kdev_t device id value, because kdev_t.h 62*53ee8cc1Swenshuai.xi * says we mustn't. We must break it up and reassemble. 63*53ee8cc1Swenshuai.xi * 1 - 4 byte user specified identifier 64*53ee8cc1Swenshuai.xi * 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED 65*53ee8cc1Swenshuai.xi * 3 - 4 byte device id, encoded for user-space, 4 byte inode number 66*53ee8cc1Swenshuai.xi * 67*53ee8cc1Swenshuai.xi * The fileid_type identified how the file within the filesystem is encoded. 68*53ee8cc1Swenshuai.xi * This is (will be) passed to, and set by, the underlying filesystem if it supports 69*53ee8cc1Swenshuai.xi * filehandle operations. The filesystem must not use the value '0' or '0xff' and may 70*53ee8cc1Swenshuai.xi * only use the values 1 and 2 as defined below: 71*53ee8cc1Swenshuai.xi * Current values: 72*53ee8cc1Swenshuai.xi * 0 - The root, or export point, of the filesystem. fb_fileid is 0 bytes. 73*53ee8cc1Swenshuai.xi * 1 - 32bit inode number, 32 bit generation number. 74*53ee8cc1Swenshuai.xi * 2 - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number. 75*53ee8cc1Swenshuai.xi * 76*53ee8cc1Swenshuai.xi */ 77*53ee8cc1Swenshuai.xi struct nfs_fhbase_new { 78*53ee8cc1Swenshuai.xi __u8 fb_version; /* == 1, even => nfs_fhbase_old */ 79*53ee8cc1Swenshuai.xi __u8 fb_auth_type; 80*53ee8cc1Swenshuai.xi __u8 fb_fsid_type; 81*53ee8cc1Swenshuai.xi __u8 fb_fileid_type; 82*53ee8cc1Swenshuai.xi __u32 fb_auth[1]; 83*53ee8cc1Swenshuai.xi /* __u32 fb_fsid[0]; floating */ 84*53ee8cc1Swenshuai.xi /* __u32 fb_fileid[0]; floating */ 85*53ee8cc1Swenshuai.xi }; 86*53ee8cc1Swenshuai.xi 87*53ee8cc1Swenshuai.xi struct knfsd_fh { 88*53ee8cc1Swenshuai.xi unsigned int fh_size; /* significant for NFSv3. 89*53ee8cc1Swenshuai.xi * Points to the current size while building 90*53ee8cc1Swenshuai.xi * a new file handle 91*53ee8cc1Swenshuai.xi */ 92*53ee8cc1Swenshuai.xi union { 93*53ee8cc1Swenshuai.xi struct nfs_fhbase_old fh_old; 94*53ee8cc1Swenshuai.xi __u32 fh_pad[NFS4_FHSIZE/4]; 95*53ee8cc1Swenshuai.xi struct nfs_fhbase_new fh_new; 96*53ee8cc1Swenshuai.xi } fh_base; 97*53ee8cc1Swenshuai.xi }; 98*53ee8cc1Swenshuai.xi 99*53ee8cc1Swenshuai.xi #define ofh_dcookie fh_base.fh_old.fb_dcookie 100*53ee8cc1Swenshuai.xi #define ofh_ino fh_base.fh_old.fb_ino 101*53ee8cc1Swenshuai.xi #define ofh_dirino fh_base.fh_old.fb_dirino 102*53ee8cc1Swenshuai.xi #define ofh_dev fh_base.fh_old.fb_dev 103*53ee8cc1Swenshuai.xi #define ofh_xdev fh_base.fh_old.fb_xdev 104*53ee8cc1Swenshuai.xi #define ofh_xino fh_base.fh_old.fb_xino 105*53ee8cc1Swenshuai.xi #define ofh_generation fh_base.fh_old.fb_generation 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi #define fh_version fh_base.fh_new.fb_version 108*53ee8cc1Swenshuai.xi #define fh_fsid_type fh_base.fh_new.fb_fsid_type 109*53ee8cc1Swenshuai.xi #define fh_auth_type fh_base.fh_new.fb_auth_type 110*53ee8cc1Swenshuai.xi #define fh_fileid_type fh_base.fh_new.fb_fileid_type 111*53ee8cc1Swenshuai.xi #define fh_auth fh_base.fh_new.fb_auth 112*53ee8cc1Swenshuai.xi #define fh_fsid fh_base.fh_new.fb_auth 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi #endif /* _LINUX_NFSD_FH_H */ 117