xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/nfsd/nfsfh.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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