Home | History | Annotate | Download | only in linux
      1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
      2 /*
      3  * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy (at) goop.org>
      4  *
      5  * This file is part of the Linux kernel and is made available under
      6  * the terms of the GNU General Public License, version 2, or at your
      7  * option, any later version, incorporated herein by reference.
      8  */
      9 
     10 #ifndef _LINUX_AUTO_FS4_H
     11 #define _LINUX_AUTO_FS4_H
     12 
     13 /* Include common v3 definitions */
     14 #include <linux/types.h>
     15 #include <linux/auto_fs.h>
     16 
     17 /* autofs v4 definitions */
     18 #undef AUTOFS_PROTO_VERSION
     19 #undef AUTOFS_MIN_PROTO_VERSION
     20 #undef AUTOFS_MAX_PROTO_VERSION
     21 
     22 #define AUTOFS_PROTO_VERSION		5
     23 #define AUTOFS_MIN_PROTO_VERSION	3
     24 #define AUTOFS_MAX_PROTO_VERSION	5
     25 
     26 #define AUTOFS_PROTO_SUBVERSION		2
     27 
     28 /* Mask for expire behaviour */
     29 #define AUTOFS_EXP_IMMEDIATE		1
     30 #define AUTOFS_EXP_LEAVES		2
     31 
     32 #define AUTOFS_TYPE_ANY			0U
     33 #define AUTOFS_TYPE_INDIRECT		1U
     34 #define AUTOFS_TYPE_DIRECT		2U
     35 #define AUTOFS_TYPE_OFFSET		4U
     36 
     37 static inline void set_autofs_type_indirect(unsigned int *type)
     38 {
     39 	*type = AUTOFS_TYPE_INDIRECT;
     40 }
     41 
     42 static inline unsigned int autofs_type_indirect(unsigned int type)
     43 {
     44 	return (type == AUTOFS_TYPE_INDIRECT);
     45 }
     46 
     47 static inline void set_autofs_type_direct(unsigned int *type)
     48 {
     49 	*type = AUTOFS_TYPE_DIRECT;
     50 }
     51 
     52 static inline unsigned int autofs_type_direct(unsigned int type)
     53 {
     54 	return (type == AUTOFS_TYPE_DIRECT);
     55 }
     56 
     57 static inline void set_autofs_type_offset(unsigned int *type)
     58 {
     59 	*type = AUTOFS_TYPE_OFFSET;
     60 }
     61 
     62 static inline unsigned int autofs_type_offset(unsigned int type)
     63 {
     64 	return (type == AUTOFS_TYPE_OFFSET);
     65 }
     66 
     67 static inline unsigned int autofs_type_trigger(unsigned int type)
     68 {
     69 	return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
     70 }
     71 
     72 /*
     73  * This isn't really a type as we use it to say "no type set" to
     74  * indicate we want to search for "any" mount in the
     75  * autofs_dev_ioctl_ismountpoint() device ioctl function.
     76  */
     77 static inline void set_autofs_type_any(unsigned int *type)
     78 {
     79 	*type = AUTOFS_TYPE_ANY;
     80 }
     81 
     82 static inline unsigned int autofs_type_any(unsigned int type)
     83 {
     84 	return (type == AUTOFS_TYPE_ANY);
     85 }
     86 
     87 /* Daemon notification packet types */
     88 enum autofs_notify {
     89 	NFY_NONE,
     90 	NFY_MOUNT,
     91 	NFY_EXPIRE
     92 };
     93 
     94 /* Kernel protocol version 4 packet types */
     95 
     96 /* Expire entry (umount request) */
     97 #define autofs_ptype_expire_multi	2
     98 
     99 /* Kernel protocol version 5 packet types */
    100 
    101 /* Indirect mount missing and expire requests. */
    102 #define autofs_ptype_missing_indirect	3
    103 #define autofs_ptype_expire_indirect	4
    104 
    105 /* Direct mount missing and expire requests */
    106 #define autofs_ptype_missing_direct	5
    107 #define autofs_ptype_expire_direct	6
    108 
    109 /* v4 multi expire (via pipe) */
    110 struct autofs_packet_expire_multi {
    111 	struct autofs_packet_hdr hdr;
    112 	autofs_wqt_t wait_queue_token;
    113 	int len;
    114 	char name[NAME_MAX+1];
    115 };
    116 
    117 union autofs_packet_union {
    118 	struct autofs_packet_hdr hdr;
    119 	struct autofs_packet_missing missing;
    120 	struct autofs_packet_expire expire;
    121 	struct autofs_packet_expire_multi expire_multi;
    122 };
    123 
    124 /* autofs v5 common packet struct */
    125 struct autofs_v5_packet {
    126 	struct autofs_packet_hdr hdr;
    127 	autofs_wqt_t wait_queue_token;
    128 	__u32 dev;
    129 	__u64 ino;
    130 	__u32 uid;
    131 	__u32 gid;
    132 	__u32 pid;
    133 	__u32 tgid;
    134 	__u32 len;
    135 	char name[NAME_MAX+1];
    136 };
    137 
    138 typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
    139 typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
    140 typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
    141 typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
    142 
    143 union autofs_v5_packet_union {
    144 	struct autofs_packet_hdr hdr;
    145 	struct autofs_v5_packet v5_packet;
    146 	autofs_packet_missing_indirect_t missing_indirect;
    147 	autofs_packet_expire_indirect_t expire_indirect;
    148 	autofs_packet_missing_direct_t missing_direct;
    149 	autofs_packet_expire_direct_t expire_direct;
    150 };
    151 
    152 enum {
    153 	AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66, /* AUTOFS_IOC_EXPIRE_CMD + 1 */
    154 	AUTOFS_IOC_PROTOSUBVER_CMD,
    155 	AUTOFS_IOC_ASKUMOUNT_CMD = 0x70, /* AUTOFS_DEV_IOCTL_VERSION_CMD - 1 */
    156 };
    157 
    158 #define AUTOFS_IOC_EXPIRE_MULTI    _IOW(AUTOFS_IOCTL, AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
    159 #define AUTOFS_IOC_PROTOSUBVER     _IOR(AUTOFS_IOCTL, AUTOFS_IOC_PROTOSUBVER_CMD, int)
    160 #define AUTOFS_IOC_ASKUMOUNT       _IOR(AUTOFS_IOCTL, AUTOFS_IOC_ASKUMOUNT_CMD, int)
    161 
    162 #endif /* _LINUX_AUTO_FS4_H */
    163