Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nfsfh.h
Go to the documentation of this file.
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 <[email protected]>
12  */
13 
14 #ifndef _UAPI_LINUX_NFSD_FH_H
15 #define _UAPI_LINUX_NFSD_FH_H
16 
17 #include <linux/types.h>
18 #include <linux/nfs.h>
19 #include <linux/nfs2.h>
20 #include <linux/nfs3.h>
21 #include <linux/nfs4.h>
22 
23 /*
24  * This is the old "dentry style" Linux NFSv2 file handle.
25  *
26  * The xino and xdev fields are currently used to transport the
27  * ino/dev of the exported inode.
28  */
30  __u32 fb_dcookie; /* dentry cookie - always 0xfeebbaca */
31  __u32 fb_ino; /* our inode number */
32  __u32 fb_dirino; /* dir inode number, 0 for directories */
33  __u32 fb_dev; /* our device */
37 };
38 
39 /*
40  * This is the new flexible, extensible style NFSv2/v3 file handle.
41  * by Neil Brown <[email protected]> - March 2000
42  *
43  * The file handle starts with a sequence of four-byte words.
44  * The first word contains a version number (1) and three descriptor bytes
45  * that tell how the remaining 3 variable length fields should be handled.
46  * These three bytes are auth_type, fsid_type and fileid_type.
47  *
48  * All four-byte values are in host-byte-order.
49  *
50  * The auth_type field specifies how the filehandle can be authenticated
51  * This might allow a file to be confirmed to be in a writable part of a
52  * filetree without checking the path from it up to the root.
53  * Current values:
54  * 0 - No authentication. fb_auth is 0 bytes long
55  * Possible future values:
56  * 1 - 4 bytes taken from MD5 hash of the remainer of the file handle
57  * prefixed by a secret and with the important export flags.
58  *
59  * The fsid_type identifies how the filesystem (or export point) is
60  * encoded.
61  * Current values:
62  * 0 - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
63  * NOTE: we cannot use the kdev_t device id value, because kdev_t.h
64  * says we mustn't. We must break it up and reassemble.
65  * 1 - 4 byte user specified identifier
66  * 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
67  * 3 - 4 byte device id, encoded for user-space, 4 byte inode number
68  * 4 - 4 byte inode number and 4 byte uuid
69  * 5 - 8 byte uuid
70  * 6 - 16 byte uuid
71  * 7 - 8 byte inode number and 16 byte uuid
72  *
73  * The fileid_type identified how the file within the filesystem is encoded.
74  * This is (will be) passed to, and set by, the underlying filesystem if it supports
75  * filehandle operations. The filesystem must not use the value '0' or '0xff' and may
76  * only use the values 1 and 2 as defined below:
77  * Current values:
78  * 0 - The root, or export point, of the filesystem. fb_fileid is 0 bytes.
79  * 1 - 32bit inode number, 32 bit generation number.
80  * 2 - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number.
81  *
82  */
84  __u8 fb_version; /* == 1, even => nfs_fhbase_old */
89 /* __u32 fb_fsid[0]; floating */
90 /* __u32 fb_fileid[0]; floating */
91 };
92 
93 struct knfsd_fh {
94  unsigned int fh_size; /* significant for NFSv3.
95  * Points to the current size while building
96  * a new file handle
97  */
98  union {
102  } fh_base;
103 };
104 
105 #define ofh_dcookie fh_base.fh_old.fb_dcookie
106 #define ofh_ino fh_base.fh_old.fb_ino
107 #define ofh_dirino fh_base.fh_old.fb_dirino
108 #define ofh_dev fh_base.fh_old.fb_dev
109 #define ofh_xdev fh_base.fh_old.fb_xdev
110 #define ofh_xino fh_base.fh_old.fb_xino
111 #define ofh_generation fh_base.fh_old.fb_generation
112 
113 #define fh_version fh_base.fh_new.fb_version
114 #define fh_fsid_type fh_base.fh_new.fb_fsid_type
115 #define fh_auth_type fh_base.fh_new.fb_auth_type
116 #define fh_fileid_type fh_base.fh_new.fb_fileid_type
117 #define fh_auth fh_base.fh_new.fb_auth
118 #define fh_fsid fh_base.fh_new.fb_auth
119 
120 
121 
122 #endif /* _UAPI_LINUX_NFSD_FH_H */