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