• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
3  *
4  * This file is part of the Linux kernel and is made available under
5  * the terms of the GNU General Public License, version 2, or at your
6  * option, any later version, incorporated herein by reference.
7  */
8 
9 #ifndef _LINUX_AUTO_FS4_H
10 #define _LINUX_AUTO_FS4_H
11 
12 /* Include common v3 definitions */
13 #include <linux/types.h>
14 #include <linux/auto_fs.h>
15 
16 /* autofs v4 definitions */
17 #undef AUTOFS_PROTO_VERSION
18 #undef AUTOFS_MIN_PROTO_VERSION
19 #undef AUTOFS_MAX_PROTO_VERSION
20 
21 #define AUTOFS_PROTO_VERSION		5
22 #define AUTOFS_MIN_PROTO_VERSION	3
23 #define AUTOFS_MAX_PROTO_VERSION	5
24 
25 #define AUTOFS_PROTO_SUBVERSION		2
26 
27 /* Mask for expire behaviour */
28 #define AUTOFS_EXP_IMMEDIATE		1
29 #define AUTOFS_EXP_LEAVES		2
30 
31 #define AUTOFS_TYPE_ANY			0U
32 #define AUTOFS_TYPE_INDIRECT		1U
33 #define AUTOFS_TYPE_DIRECT		2U
34 #define AUTOFS_TYPE_OFFSET		4U
35 
set_autofs_type_indirect(unsigned int * type)36 static inline void set_autofs_type_indirect(unsigned int *type)
37 {
38 	*type = AUTOFS_TYPE_INDIRECT;
39 }
40 
autofs_type_indirect(unsigned int type)41 static inline unsigned int autofs_type_indirect(unsigned int type)
42 {
43 	return (type == AUTOFS_TYPE_INDIRECT);
44 }
45 
set_autofs_type_direct(unsigned int * type)46 static inline void set_autofs_type_direct(unsigned int *type)
47 {
48 	*type = AUTOFS_TYPE_DIRECT;
49 }
50 
autofs_type_direct(unsigned int type)51 static inline unsigned int autofs_type_direct(unsigned int type)
52 {
53 	return (type == AUTOFS_TYPE_DIRECT);
54 }
55 
set_autofs_type_offset(unsigned int * type)56 static inline void set_autofs_type_offset(unsigned int *type)
57 {
58 	*type = AUTOFS_TYPE_OFFSET;
59 }
60 
autofs_type_offset(unsigned int type)61 static inline unsigned int autofs_type_offset(unsigned int type)
62 {
63 	return (type == AUTOFS_TYPE_OFFSET);
64 }
65 
autofs_type_trigger(unsigned int type)66 static inline unsigned int autofs_type_trigger(unsigned int type)
67 {
68 	return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
69 }
70 
71 /*
72  * This isn't really a type as we use it to say "no type set" to
73  * indicate we want to search for "any" mount in the
74  * autofs_dev_ioctl_ismountpoint() device ioctl function.
75  */
set_autofs_type_any(unsigned int * type)76 static inline void set_autofs_type_any(unsigned int *type)
77 {
78 	*type = AUTOFS_TYPE_ANY;
79 }
80 
autofs_type_any(unsigned int type)81 static inline unsigned int autofs_type_any(unsigned int type)
82 {
83 	return (type == AUTOFS_TYPE_ANY);
84 }
85 
86 /* Daemon notification packet types */
87 enum autofs_notify {
88 	NFY_NONE,
89 	NFY_MOUNT,
90 	NFY_EXPIRE
91 };
92 
93 /* Kernel protocol version 4 packet types */
94 
95 /* Expire entry (umount request) */
96 #define autofs_ptype_expire_multi	2
97 
98 /* Kernel protocol version 5 packet types */
99 
100 /* Indirect mount missing and expire requests. */
101 #define autofs_ptype_missing_indirect	3
102 #define autofs_ptype_expire_indirect	4
103 
104 /* Direct mount missing and expire requests */
105 #define autofs_ptype_missing_direct	5
106 #define autofs_ptype_expire_direct	6
107 
108 /* v4 multi expire (via pipe) */
109 struct autofs_packet_expire_multi {
110 	struct autofs_packet_hdr hdr;
111 	autofs_wqt_t wait_queue_token;
112 	int len;
113 	char name[NAME_MAX+1];
114 };
115 
116 union autofs_packet_union {
117 	struct autofs_packet_hdr hdr;
118 	struct autofs_packet_missing missing;
119 	struct autofs_packet_expire expire;
120 	struct autofs_packet_expire_multi expire_multi;
121 };
122 
123 /* autofs v5 common packet struct */
124 struct autofs_v5_packet {
125 	struct autofs_packet_hdr hdr;
126 	autofs_wqt_t wait_queue_token;
127 	__u32 dev;
128 	__u64 ino;
129 	__u32 uid;
130 	__u32 gid;
131 	__u32 pid;
132 	__u32 tgid;
133 	__u32 len;
134 	char name[NAME_MAX+1];
135 };
136 
137 typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
138 typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
139 typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
140 typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
141 
142 union autofs_v5_packet_union {
143 	struct autofs_packet_hdr hdr;
144 	struct autofs_v5_packet v5_packet;
145 	autofs_packet_missing_indirect_t missing_indirect;
146 	autofs_packet_expire_indirect_t expire_indirect;
147 	autofs_packet_missing_direct_t missing_direct;
148 	autofs_packet_expire_direct_t expire_direct;
149 };
150 
151 #define AUTOFS_IOC_EXPIRE_MULTI		_IOW(0x93, 0x66, int)
152 #define AUTOFS_IOC_EXPIRE_INDIRECT	AUTOFS_IOC_EXPIRE_MULTI
153 #define AUTOFS_IOC_EXPIRE_DIRECT	AUTOFS_IOC_EXPIRE_MULTI
154 #define AUTOFS_IOC_PROTOSUBVER		_IOR(0x93, 0x67, int)
155 #define AUTOFS_IOC_ASKUMOUNT		_IOR(0x93, 0x70, int)
156 
157 #endif /* _LINUX_AUTO_FS4_H */
158