Line data Source code
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 _UAPI_LINUX_AUTO_DEV_IOCTL_H
12 : #define _UAPI_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 0
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 is 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 :
115 0 : static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
116 : {
117 0 : memset(in, 0, AUTOFS_DEV_IOCTL_SIZE);
118 0 : in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
119 0 : in->ver_minor = AUTOFS_DEV_IOCTL_VERSION_MINOR;
120 0 : in->size = AUTOFS_DEV_IOCTL_SIZE;
121 0 : in->ioctlfd = -1;
122 0 : }
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 : #ifndef AUTOFS_IOCTL
161 : #define AUTOFS_IOCTL 0x93
162 : #endif
163 :
164 : #define AUTOFS_DEV_IOCTL_VERSION \
165 : _IOWR(AUTOFS_IOCTL, \
166 : AUTOFS_DEV_IOCTL_VERSION_CMD, struct autofs_dev_ioctl)
167 :
168 : #define AUTOFS_DEV_IOCTL_PROTOVER \
169 : _IOWR(AUTOFS_IOCTL, \
170 : AUTOFS_DEV_IOCTL_PROTOVER_CMD, struct autofs_dev_ioctl)
171 :
172 : #define AUTOFS_DEV_IOCTL_PROTOSUBVER \
173 : _IOWR(AUTOFS_IOCTL, \
174 : AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD, struct autofs_dev_ioctl)
175 :
176 : #define AUTOFS_DEV_IOCTL_OPENMOUNT \
177 : _IOWR(AUTOFS_IOCTL, \
178 : AUTOFS_DEV_IOCTL_OPENMOUNT_CMD, struct autofs_dev_ioctl)
179 :
180 : #define AUTOFS_DEV_IOCTL_CLOSEMOUNT \
181 : _IOWR(AUTOFS_IOCTL, \
182 : AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD, struct autofs_dev_ioctl)
183 :
184 : #define AUTOFS_DEV_IOCTL_READY \
185 : _IOWR(AUTOFS_IOCTL, \
186 : AUTOFS_DEV_IOCTL_READY_CMD, struct autofs_dev_ioctl)
187 :
188 : #define AUTOFS_DEV_IOCTL_FAIL \
189 : _IOWR(AUTOFS_IOCTL, \
190 : AUTOFS_DEV_IOCTL_FAIL_CMD, struct autofs_dev_ioctl)
191 :
192 : #define AUTOFS_DEV_IOCTL_SETPIPEFD \
193 : _IOWR(AUTOFS_IOCTL, \
194 : AUTOFS_DEV_IOCTL_SETPIPEFD_CMD, struct autofs_dev_ioctl)
195 :
196 : #define AUTOFS_DEV_IOCTL_CATATONIC \
197 : _IOWR(AUTOFS_IOCTL, \
198 : AUTOFS_DEV_IOCTL_CATATONIC_CMD, struct autofs_dev_ioctl)
199 :
200 : #define AUTOFS_DEV_IOCTL_TIMEOUT \
201 : _IOWR(AUTOFS_IOCTL, \
202 : AUTOFS_DEV_IOCTL_TIMEOUT_CMD, struct autofs_dev_ioctl)
203 :
204 : #define AUTOFS_DEV_IOCTL_REQUESTER \
205 : _IOWR(AUTOFS_IOCTL, \
206 : AUTOFS_DEV_IOCTL_REQUESTER_CMD, struct autofs_dev_ioctl)
207 :
208 : #define AUTOFS_DEV_IOCTL_EXPIRE \
209 : _IOWR(AUTOFS_IOCTL, \
210 : AUTOFS_DEV_IOCTL_EXPIRE_CMD, struct autofs_dev_ioctl)
211 :
212 : #define AUTOFS_DEV_IOCTL_ASKUMOUNT \
213 : _IOWR(AUTOFS_IOCTL, \
214 : AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD, struct autofs_dev_ioctl)
215 :
216 : #define AUTOFS_DEV_IOCTL_ISMOUNTPOINT \
217 : _IOWR(AUTOFS_IOCTL, \
218 : AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
219 :
220 : #endif /* _UAPI_LINUX_AUTO_DEV_IOCTL_H */
|