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