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