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