Branch data 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 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 : 0 : *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 : 0 : *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 : 0 : *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 : 0 : 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 */
|