1/* -*- c -*- 2 * linux/include/linux/auto_fs4.h 3 * 4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@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 38static inline void set_autofs_type_indirect(unsigned int *type) 39{ 40 *type = AUTOFS_TYPE_INDIRECT; 41 return; 42} 43 44static inline unsigned int autofs_type_indirect(unsigned int type) 45{ 46 return (type == AUTOFS_TYPE_INDIRECT); 47} 48 49static inline void set_autofs_type_direct(unsigned int *type) 50{ 51 *type = AUTOFS_TYPE_DIRECT; 52 return; 53} 54 55static inline unsigned int autofs_type_direct(unsigned int type) 56{ 57 return (type == AUTOFS_TYPE_DIRECT); 58} 59 60static inline void set_autofs_type_offset(unsigned int *type) 61{ 62 *type = AUTOFS_TYPE_OFFSET; 63 return; 64} 65 66static inline unsigned int autofs_type_offset(unsigned int type) 67{ 68 return (type == AUTOFS_TYPE_OFFSET); 69} 70 71static 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 */ 81static inline void set_autofs_type_any(unsigned int *type) 82{ 83 *type = AUTOFS_TYPE_ANY; 84 return; 85} 86 87static inline unsigned int autofs_type_any(unsigned int type) 88{ 89 return (type == AUTOFS_TYPE_ANY); 90} 91 92/* Daemon notification packet types */ 93enum 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) */ 115struct 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 122union 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 */ 130struct 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 143typedef struct autofs_v5_packet autofs_packet_missing_indirect_t; 144typedef struct autofs_v5_packet autofs_packet_expire_indirect_t; 145typedef struct autofs_v5_packet autofs_packet_missing_direct_t; 146typedef struct autofs_v5_packet autofs_packet_expire_direct_t; 147 148union 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