Home | History | Annotate | Download | only in linux
      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