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