xref: /linux/include/uapi/linux/auto_dev-ioctl.h (revision cdd5b5a9761fd66d17586e4f4ba6588c70e640ea)
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