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 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[]; |
113 | }; |
114 | |
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 /* _UAPI_LINUX_AUTO_DEV_IOCTL_H */ |
217 | |