Line data Source code
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 1
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 0 : *type = AUTOFS_TYPE_INDIRECT;
41 0 : return;
42 : }
43 :
44 : static inline unsigned int autofs_type_indirect(unsigned int type)
45 : {
46 9 : return (type == AUTOFS_TYPE_INDIRECT);
47 : }
48 :
49 : static inline void set_autofs_type_direct(unsigned int *type)
50 : {
51 0 : *type = AUTOFS_TYPE_DIRECT;
52 0 : return;
53 : }
54 :
55 : static inline unsigned int autofs_type_direct(unsigned int type)
56 : {
57 1 : return (type == AUTOFS_TYPE_DIRECT);
58 : }
59 :
60 : static inline void set_autofs_type_offset(unsigned int *type)
61 : {
62 0 : *type = AUTOFS_TYPE_OFFSET;
63 0 : return;
64 : }
65 :
66 : static inline unsigned int autofs_type_offset(unsigned int type)
67 : {
68 1 : return (type == AUTOFS_TYPE_OFFSET);
69 : }
70 :
71 : static inline unsigned int autofs_type_trigger(unsigned int type)
72 : {
73 204 : 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 0 : return (type == AUTOFS_TYPE_ANY);
90 : }
91 1 :
92 : /* Daemon notification packet types */
93 : enum autofs_notify {
94 : NFY_NONE,
95 : NFY_MOUNT,
96 : NFY_EXPIRE
97 1 : };
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 1 :
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 1 :
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 1 : typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
144 1 : typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
145 1 : typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
146 1 : typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
147 1 :
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 1 :
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 */
|