1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
29b88ee0fSIan Kent /*
39b88ee0fSIan Kent * Copyright 2008 Red Hat, Inc. All rights reserved.
49b88ee0fSIan Kent * Copyright 2008 Ian Kent <raven@themaw.net>
59b88ee0fSIan Kent *
69b88ee0fSIan Kent * This file is part of the Linux kernel and is made available under
79b88ee0fSIan Kent * the terms of the GNU General Public License, version 2, or at your
89b88ee0fSIan Kent * option, any later version, incorporated herein by reference.
99b88ee0fSIan Kent */
109b88ee0fSIan Kent
119b88ee0fSIan Kent #ifndef _UAPI_LINUX_AUTO_DEV_IOCTL_H
129b88ee0fSIan Kent #define _UAPI_LINUX_AUTO_DEV_IOCTL_H
139b88ee0fSIan Kent
149b88ee0fSIan Kent #include <linux/auto_fs.h>
159b88ee0fSIan Kent #include <linux/string.h>
169b88ee0fSIan Kent
179b88ee0fSIan Kent #define AUTOFS_DEVICE_NAME "autofs"
189b88ee0fSIan Kent
199b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_VERSION_MAJOR 1
203dd8f7c3SIan Kent #define AUTOFS_DEV_IOCTL_VERSION_MINOR 1
219b88ee0fSIan Kent
229b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_SIZE sizeof(struct autofs_dev_ioctl)
239b88ee0fSIan Kent
249b88ee0fSIan Kent /*
259b88ee0fSIan Kent * An ioctl interface for autofs mount point control.
269b88ee0fSIan Kent */
279b88ee0fSIan Kent
289b88ee0fSIan Kent struct args_protover {
299b88ee0fSIan Kent __u32 version;
309b88ee0fSIan Kent };
319b88ee0fSIan Kent
329b88ee0fSIan Kent struct args_protosubver {
339b88ee0fSIan Kent __u32 sub_version;
349b88ee0fSIan Kent };
359b88ee0fSIan Kent
369b88ee0fSIan Kent struct args_openmount {
379b88ee0fSIan Kent __u32 devid;
389b88ee0fSIan Kent };
399b88ee0fSIan Kent
409b88ee0fSIan Kent struct args_ready {
419b88ee0fSIan Kent __u32 token;
429b88ee0fSIan Kent };
439b88ee0fSIan Kent
449b88ee0fSIan Kent struct args_fail {
459b88ee0fSIan Kent __u32 token;
469b88ee0fSIan Kent __s32 status;
479b88ee0fSIan Kent };
489b88ee0fSIan Kent
499b88ee0fSIan Kent struct args_setpipefd {
509b88ee0fSIan Kent __s32 pipefd;
519b88ee0fSIan Kent };
529b88ee0fSIan Kent
539b88ee0fSIan Kent struct args_timeout {
549b88ee0fSIan Kent __u64 timeout;
559b88ee0fSIan Kent };
569b88ee0fSIan Kent
579b88ee0fSIan Kent struct args_requester {
589b88ee0fSIan Kent __u32 uid;
599b88ee0fSIan Kent __u32 gid;
609b88ee0fSIan Kent };
619b88ee0fSIan Kent
629b88ee0fSIan Kent struct args_expire {
639b88ee0fSIan Kent __u32 how;
649b88ee0fSIan Kent };
659b88ee0fSIan Kent
669b88ee0fSIan Kent struct args_askumount {
679b88ee0fSIan Kent __u32 may_umount;
689b88ee0fSIan Kent };
699b88ee0fSIan Kent
709b88ee0fSIan Kent struct args_ismountpoint {
719b88ee0fSIan Kent union {
729b88ee0fSIan Kent struct args_in {
739b88ee0fSIan Kent __u32 type;
749b88ee0fSIan Kent } in;
759b88ee0fSIan Kent struct args_out {
769b88ee0fSIan Kent __u32 devid;
779b88ee0fSIan Kent __u32 magic;
789b88ee0fSIan Kent } out;
799b88ee0fSIan Kent };
809b88ee0fSIan Kent };
819b88ee0fSIan Kent
829b88ee0fSIan Kent /*
839b88ee0fSIan Kent * All the ioctls use this structure.
849b88ee0fSIan Kent * When sending a path size must account for the total length
852fb3244fSRandy Dunlap * of the chunk of memory otherwise it is the size of the
869b88ee0fSIan Kent * structure.
879b88ee0fSIan Kent */
889b88ee0fSIan Kent
899b88ee0fSIan Kent struct autofs_dev_ioctl {
909b88ee0fSIan Kent __u32 ver_major;
919b88ee0fSIan Kent __u32 ver_minor;
929b88ee0fSIan Kent __u32 size; /* total size of data passed in
939b88ee0fSIan Kent * including this struct */
949b88ee0fSIan Kent __s32 ioctlfd; /* automount command fd */
959b88ee0fSIan Kent
969b88ee0fSIan Kent /* Command parameters */
979b88ee0fSIan Kent
989b88ee0fSIan Kent union {
999b88ee0fSIan Kent struct args_protover protover;
1009b88ee0fSIan Kent struct args_protosubver protosubver;
1019b88ee0fSIan Kent struct args_openmount openmount;
1029b88ee0fSIan Kent struct args_ready ready;
1039b88ee0fSIan Kent struct args_fail fail;
1049b88ee0fSIan Kent struct args_setpipefd setpipefd;
1059b88ee0fSIan Kent struct args_timeout timeout;
1069b88ee0fSIan Kent struct args_requester requester;
1079b88ee0fSIan Kent struct args_expire expire;
1089b88ee0fSIan Kent struct args_askumount askumount;
1099b88ee0fSIan Kent struct args_ismountpoint ismountpoint;
1109b88ee0fSIan Kent };
1119b88ee0fSIan Kent
112*e910c8e3SArnd Bergmann char path[];
1139b88ee0fSIan Kent };
1149b88ee0fSIan Kent
init_autofs_dev_ioctl(struct autofs_dev_ioctl * in)1159b88ee0fSIan Kent static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
1169b88ee0fSIan Kent {
1173bb2fbdaSTomohiro Kusumi memset(in, 0, AUTOFS_DEV_IOCTL_SIZE);
1189b88ee0fSIan Kent in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
1199b88ee0fSIan Kent in->ver_minor = AUTOFS_DEV_IOCTL_VERSION_MINOR;
1203bb2fbdaSTomohiro Kusumi in->size = AUTOFS_DEV_IOCTL_SIZE;
1219b88ee0fSIan Kent in->ioctlfd = -1;
1229b88ee0fSIan Kent }
1239b88ee0fSIan Kent
1249b88ee0fSIan Kent enum {
1259b88ee0fSIan Kent /* Get various version info */
1269b88ee0fSIan Kent AUTOFS_DEV_IOCTL_VERSION_CMD = 0x71,
1279b88ee0fSIan Kent AUTOFS_DEV_IOCTL_PROTOVER_CMD,
1289b88ee0fSIan Kent AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD,
1299b88ee0fSIan Kent
1309b88ee0fSIan Kent /* Open mount ioctl fd */
1319b88ee0fSIan Kent AUTOFS_DEV_IOCTL_OPENMOUNT_CMD,
1329b88ee0fSIan Kent
1339b88ee0fSIan Kent /* Close mount ioctl fd */
1349b88ee0fSIan Kent AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD,
1359b88ee0fSIan Kent
1369b88ee0fSIan Kent /* Mount/expire status returns */
1379b88ee0fSIan Kent AUTOFS_DEV_IOCTL_READY_CMD,
1389b88ee0fSIan Kent AUTOFS_DEV_IOCTL_FAIL_CMD,
1399b88ee0fSIan Kent
1409b88ee0fSIan Kent /* Activate/deactivate autofs mount */
1419b88ee0fSIan Kent AUTOFS_DEV_IOCTL_SETPIPEFD_CMD,
1429b88ee0fSIan Kent AUTOFS_DEV_IOCTL_CATATONIC_CMD,
1439b88ee0fSIan Kent
1449b88ee0fSIan Kent /* Expiry timeout */
1459b88ee0fSIan Kent AUTOFS_DEV_IOCTL_TIMEOUT_CMD,
1469b88ee0fSIan Kent
1479b88ee0fSIan Kent /* Get mount last requesting uid and gid */
1489b88ee0fSIan Kent AUTOFS_DEV_IOCTL_REQUESTER_CMD,
1499b88ee0fSIan Kent
1509b88ee0fSIan Kent /* Check for eligible expire candidates */
1519b88ee0fSIan Kent AUTOFS_DEV_IOCTL_EXPIRE_CMD,
1529b88ee0fSIan Kent
1539b88ee0fSIan Kent /* Request busy status */
1549b88ee0fSIan Kent AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD,
1559b88ee0fSIan Kent
1569b88ee0fSIan Kent /* Check if path is a mountpoint */
1579b88ee0fSIan Kent AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD,
1589b88ee0fSIan Kent };
1599b88ee0fSIan Kent
1609b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_VERSION \
1619b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1629b88ee0fSIan Kent AUTOFS_DEV_IOCTL_VERSION_CMD, struct autofs_dev_ioctl)
1639b88ee0fSIan Kent
1649b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_PROTOVER \
1659b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1669b88ee0fSIan Kent AUTOFS_DEV_IOCTL_PROTOVER_CMD, struct autofs_dev_ioctl)
1679b88ee0fSIan Kent
1689b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_PROTOSUBVER \
1699b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1709b88ee0fSIan Kent AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD, struct autofs_dev_ioctl)
1719b88ee0fSIan Kent
1729b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_OPENMOUNT \
1739b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1749b88ee0fSIan Kent AUTOFS_DEV_IOCTL_OPENMOUNT_CMD, struct autofs_dev_ioctl)
1759b88ee0fSIan Kent
1769b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_CLOSEMOUNT \
1779b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1789b88ee0fSIan Kent AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD, struct autofs_dev_ioctl)
1799b88ee0fSIan Kent
1809b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_READY \
1819b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1829b88ee0fSIan Kent AUTOFS_DEV_IOCTL_READY_CMD, struct autofs_dev_ioctl)
1839b88ee0fSIan Kent
1849b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_FAIL \
1859b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1869b88ee0fSIan Kent AUTOFS_DEV_IOCTL_FAIL_CMD, struct autofs_dev_ioctl)
1879b88ee0fSIan Kent
1889b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_SETPIPEFD \
1899b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1909b88ee0fSIan Kent AUTOFS_DEV_IOCTL_SETPIPEFD_CMD, struct autofs_dev_ioctl)
1919b88ee0fSIan Kent
1929b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_CATATONIC \
1939b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1949b88ee0fSIan Kent AUTOFS_DEV_IOCTL_CATATONIC_CMD, struct autofs_dev_ioctl)
1959b88ee0fSIan Kent
1969b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_TIMEOUT \
1979b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
1989b88ee0fSIan Kent AUTOFS_DEV_IOCTL_TIMEOUT_CMD, struct autofs_dev_ioctl)
1999b88ee0fSIan Kent
2009b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_REQUESTER \
2019b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
2029b88ee0fSIan Kent AUTOFS_DEV_IOCTL_REQUESTER_CMD, struct autofs_dev_ioctl)
2039b88ee0fSIan Kent
2049b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_EXPIRE \
2059b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
2069b88ee0fSIan Kent AUTOFS_DEV_IOCTL_EXPIRE_CMD, struct autofs_dev_ioctl)
2079b88ee0fSIan Kent
2089b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_ASKUMOUNT \
2099b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
2109b88ee0fSIan Kent AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD, struct autofs_dev_ioctl)
2119b88ee0fSIan Kent
2129b88ee0fSIan Kent #define AUTOFS_DEV_IOCTL_ISMOUNTPOINT \
2139b88ee0fSIan Kent _IOWR(AUTOFS_IOCTL, \
2149b88ee0fSIan Kent AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
2159b88ee0fSIan Kent
2169b88ee0fSIan Kent #endif /* _UAPI_LINUX_AUTO_DEV_IOCTL_H */
217