1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 /*
3  * Copyright 2008 Red Hat, Inc. All rights reserved.
4  * Copyright 2008 Ian Kent <raven@themaw.net>
5  *
6  * This file is part of the Linux kernel and is made available under
7  * the terms of the GNU General Public License, version 2, or at your
8  * option, any later version, incorporated herein by reference.
9  */
10 
11 #ifndef _LINUX_AUTO_DEV_IOCTL_H
12 #define _LINUX_AUTO_DEV_IOCTL_H
13 
14 #include <linux/auto_fs.h>
15 #include <linux/string.h>
16 
17 #define AUTOFS_DEVICE_NAME		"autofs"
18 
19 #define AUTOFS_DEV_IOCTL_VERSION_MAJOR	1
20 #define AUTOFS_DEV_IOCTL_VERSION_MINOR	1
21 
22 #define AUTOFS_DEV_IOCTL_SIZE		sizeof(struct autofs_dev_ioctl)
23 
24 /*
25  * An ioctl interface for autofs mount point control.
26  */
27 
28 struct args_protover {
29 	__u32	version;
30 };
31 
32 struct args_protosubver {
33 	__u32	sub_version;
34 };
35 
36 struct args_openmount {
37 	__u32	devid;
38 };
39 
40 struct args_ready {
41 	__u32	token;
42 };
43 
44 struct args_fail {
45 	__u32	token;
46 	__s32	status;
47 };
48 
49 struct args_setpipefd {
50 	__s32	pipefd;
51 };
52 
53 struct args_timeout {
54 	__u64	timeout;
55 };
56 
57 struct args_requester {
58 	__u32	uid;
59 	__u32	gid;
60 };
61 
62 struct args_expire {
63 	__u32	how;
64 };
65 
66 struct args_askumount {
67 	__u32	may_umount;
68 };
69 
70 struct args_ismountpoint {
71 	union {
72 		struct args_in {
73 			__u32	type;
74 		} in;
75 		struct args_out {
76 			__u32	devid;
77 			__u32	magic;
78 		} out;
79 	};
80 };
81 
82 /*
83  * All the ioctls use this structure.
84  * When sending a path size must account for the total length
85  * of the chunk of memory otherwise it is the size of the
86  * structure.
87  */
88 
89 struct autofs_dev_ioctl {
90 	__u32 ver_major;
91 	__u32 ver_minor;
92 	__u32 size;		/* total size of data passed in
93 				 * including this struct */
94 	__s32 ioctlfd;		/* automount command fd */
95 
96 	/* Command parameters */
97 
98 	union {
99 		struct args_protover		protover;
100 		struct args_protosubver		protosubver;
101 		struct args_openmount		openmount;
102 		struct args_ready		ready;
103 		struct args_fail		fail;
104 		struct args_setpipefd		setpipefd;
105 		struct args_timeout		timeout;
106 		struct args_requester		requester;
107 		struct args_expire		expire;
108 		struct args_askumount		askumount;
109 		struct args_ismountpoint	ismountpoint;
110 	};
111 
112 	char path[0];
113 };
114 
init_autofs_dev_ioctl(struct autofs_dev_ioctl * in)115 static __inline__ void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
116 {
117 	memset(in, 0, AUTOFS_DEV_IOCTL_SIZE);
118 	in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
119 	in->ver_minor = AUTOFS_DEV_IOCTL_VERSION_MINOR;
120 	in->size = AUTOFS_DEV_IOCTL_SIZE;
121 	in->ioctlfd = -1;
122 }
123 
124 enum {
125 	/* Get various version info */
126 	AUTOFS_DEV_IOCTL_VERSION_CMD = 0x71,
127 	AUTOFS_DEV_IOCTL_PROTOVER_CMD,
128 	AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD,
129 
130 	/* Open mount ioctl fd */
131 	AUTOFS_DEV_IOCTL_OPENMOUNT_CMD,
132 
133 	/* Close mount ioctl fd */
134 	AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD,
135 
136 	/* Mount/expire status returns */
137 	AUTOFS_DEV_IOCTL_READY_CMD,
138 	AUTOFS_DEV_IOCTL_FAIL_CMD,
139 
140 	/* Activate/deactivate autofs mount */
141 	AUTOFS_DEV_IOCTL_SETPIPEFD_CMD,
142 	AUTOFS_DEV_IOCTL_CATATONIC_CMD,
143 
144 	/* Expiry timeout */
145 	AUTOFS_DEV_IOCTL_TIMEOUT_CMD,
146 
147 	/* Get mount last requesting uid and gid */
148 	AUTOFS_DEV_IOCTL_REQUESTER_CMD,
149 
150 	/* Check for eligible expire candidates */
151 	AUTOFS_DEV_IOCTL_EXPIRE_CMD,
152 
153 	/* Request busy status */
154 	AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD,
155 
156 	/* Check if path is a mountpoint */
157 	AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD,
158 };
159 
160 #define AUTOFS_DEV_IOCTL_VERSION \
161 	_IOWR(AUTOFS_IOCTL, \
162 	      AUTOFS_DEV_IOCTL_VERSION_CMD, struct autofs_dev_ioctl)
163 
164 #define AUTOFS_DEV_IOCTL_PROTOVER \
165 	_IOWR(AUTOFS_IOCTL, \
166 	      AUTOFS_DEV_IOCTL_PROTOVER_CMD, struct autofs_dev_ioctl)
167 
168 #define AUTOFS_DEV_IOCTL_PROTOSUBVER \
169 	_IOWR(AUTOFS_IOCTL, \
170 	      AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD, struct autofs_dev_ioctl)
171 
172 #define AUTOFS_DEV_IOCTL_OPENMOUNT \
173 	_IOWR(AUTOFS_IOCTL, \
174 	      AUTOFS_DEV_IOCTL_OPENMOUNT_CMD, struct autofs_dev_ioctl)
175 
176 #define AUTOFS_DEV_IOCTL_CLOSEMOUNT \
177 	_IOWR(AUTOFS_IOCTL, \
178 	      AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD, struct autofs_dev_ioctl)
179 
180 #define AUTOFS_DEV_IOCTL_READY \
181 	_IOWR(AUTOFS_IOCTL, \
182 	      AUTOFS_DEV_IOCTL_READY_CMD, struct autofs_dev_ioctl)
183 
184 #define AUTOFS_DEV_IOCTL_FAIL \
185 	_IOWR(AUTOFS_IOCTL, \
186 	      AUTOFS_DEV_IOCTL_FAIL_CMD, struct autofs_dev_ioctl)
187 
188 #define AUTOFS_DEV_IOCTL_SETPIPEFD \
189 	_IOWR(AUTOFS_IOCTL, \
190 	      AUTOFS_DEV_IOCTL_SETPIPEFD_CMD, struct autofs_dev_ioctl)
191 
192 #define AUTOFS_DEV_IOCTL_CATATONIC \
193 	_IOWR(AUTOFS_IOCTL, \
194 	      AUTOFS_DEV_IOCTL_CATATONIC_CMD, struct autofs_dev_ioctl)
195 
196 #define AUTOFS_DEV_IOCTL_TIMEOUT \
197 	_IOWR(AUTOFS_IOCTL, \
198 	      AUTOFS_DEV_IOCTL_TIMEOUT_CMD, struct autofs_dev_ioctl)
199 
200 #define AUTOFS_DEV_IOCTL_REQUESTER \
201 	_IOWR(AUTOFS_IOCTL, \
202 	      AUTOFS_DEV_IOCTL_REQUESTER_CMD, struct autofs_dev_ioctl)
203 
204 #define AUTOFS_DEV_IOCTL_EXPIRE \
205 	_IOWR(AUTOFS_IOCTL, \
206 	      AUTOFS_DEV_IOCTL_EXPIRE_CMD, struct autofs_dev_ioctl)
207 
208 #define AUTOFS_DEV_IOCTL_ASKUMOUNT \
209 	_IOWR(AUTOFS_IOCTL, \
210 	      AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD, struct autofs_dev_ioctl)
211 
212 #define AUTOFS_DEV_IOCTL_ISMOUNTPOINT \
213 	_IOWR(AUTOFS_IOCTL, \
214 	      AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
215 
216 #endif	/* _LINUX_AUTO_DEV_IOCTL_H */