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