summaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_file.h
blob: 0b6ca536be7d1bf609cdeb6cf4be2629178bcb3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/*-
 * SPDX-License-Identifier: BSD-2-Clause
 *
 * Copyright (c) 2007 Roman Divacky
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef _LINUX_FILE_H_
#define	_LINUX_FILE_H_

#define	LINUX_AT_FDCWD			-100
#define	LINUX_AT_SYMLINK_NOFOLLOW	0x100
#define	LINUX_AT_EACCESS		0x200
#define	LINUX_AT_REMOVEDIR		0x200
#define	LINUX_AT_SYMLINK_FOLLOW		0x400
#define	LINUX_AT_NO_AUTOMOUNT		0x800
		/*
		 * Specific to Linux AT_NO_AUTOMOUNT flag tells the kernel to
		 * not automount the terminal component of pathname if it is a
		 * directory that is an automount point. As FreeBSD does not
		 * have such facility (automount), we can simply ignore this flag.
		 */
#define	LINUX_AT_EMPTY_PATH		0x1000

/*
 * posix_fadvise advice
 */
#define	LINUX_POSIX_FADV_NORMAL		0
#define	LINUX_POSIX_FADV_RANDOM		1
#define	LINUX_POSIX_FADV_SEQUENTIAL	2
#define	LINUX_POSIX_FADV_WILLNEED	3
#define	LINUX_POSIX_FADV_DONTNEED	4
#define	LINUX_POSIX_FADV_NOREUSE	5

/*
 * mount flags
 */
#define	LINUX_MS_RDONLY		0x0001
#define	LINUX_MS_NOSUID		0x0002
#define	LINUX_MS_NODEV		0x0004
#define	LINUX_MS_NOEXEC		0x0008
#define	LINUX_MS_REMOUNT	0x0020

/*
 * umount2 flags
 */
#define	LINUX_MNT_FORCE		0x0001

/*
 * common open/fcntl flags
 */
#define	LINUX_O_RDONLY		000000000
#define	LINUX_O_WRONLY		000000001
#define	LINUX_O_RDWR		000000002
#define	LINUX_O_ACCMODE		000000003
#define	LINUX_O_CREAT		000000100
#define	LINUX_O_EXCL		000000200
#define	LINUX_O_NOCTTY		000000400
#define	LINUX_O_TRUNC		000001000
#define	LINUX_O_APPEND		000002000
#define	LINUX_O_NONBLOCK	000004000
#define	LINUX_O_NDELAY		LINUX_O_NONBLOCK
#define	LINUX_O_SYNC		000010000
#define	LINUX_O_ASYNC		000020000
#ifndef LINUX_O_DIRECT
#define	LINUX_O_DIRECT		000040000	/* Direct disk access hint */
#endif
#ifndef LINUX_O_LARGEFILE
#define	LINUX_O_LARGEFILE	000100000
#endif
#ifndef LINUX_O_DIRECTORY
#define	LINUX_O_DIRECTORY	000200000	/* Must be a directory */
#endif
#ifndef LINUX_O_NOFOLLOW
#define	LINUX_O_NOFOLLOW	000400000	/* Do not follow links */
#endif
#define	LINUX_O_NOATIME		001000000
#define	LINUX_O_CLOEXEC		002000000
#define	LINUX_O_PATH		010000000

#define	LINUX_F_DUPFD		0
#define	LINUX_F_GETFD		1
#define	LINUX_F_SETFD		2
#define	LINUX_F_GETFL		3
#define	LINUX_F_SETFL		4
#ifndef LINUX_F_GETLK
#define	LINUX_F_GETLK		5
#define	LINUX_F_SETLK		6
#define	LINUX_F_SETLKW		7
#endif
#ifndef LINUX_F_SETOWN
#define	LINUX_F_SETOWN		8
#define	LINUX_F_GETOWN		9
#endif
#ifndef LINUX_F_SETSIG
#define	LINUX_F_SETSIG		10
#define	LINUX_F_GETSIG		11
#endif
#ifndef LINUX_F_SETOWN_EX
#define	LINUX_F_SETOWN_EX	15
#define	LINUX_F_GETOWN_EX	16
#define	LINUX_F_GETOWNER_UIDS	17
#endif

#define	LINUX_F_SPECIFIC_BASE	1024

#define	LINUX_F_SETLEASE	(LINUX_F_SPECIFIC_BASE + 0)
#define	LINUX_F_GETLEASE	(LINUX_F_SPECIFIC_BASE + 1)
#define	LINUX_F_DUPFD_QUERY	(LINUX_F_SPECIFIC_BASE + 3)
#define	LINUX_F_CANCELLK	(LINUX_F_SPECIFIC_BASE + 5)
#define	LINUX_F_DUPFD_CLOEXEC	(LINUX_F_SPECIFIC_BASE + 6)
#define	LINUX_F_NOTIFY		(LINUX_F_SPECIFIC_BASE + 2)
#define	LINUX_F_SETPIPE_SZ	(LINUX_F_SPECIFIC_BASE + 7)
#define	LINUX_F_GETPIPE_SZ	(LINUX_F_SPECIFIC_BASE + 8)

#define	LINUX_F_ADD_SEALS	(LINUX_F_SPECIFIC_BASE + 9)
#define	LINUX_F_GET_SEALS	(LINUX_F_SPECIFIC_BASE + 10)

#define	LINUX_F_GETLKP		36
#define	LINUX_F_SETLKP		37
#define	LINUX_F_SETLKPW		38

#define	LINUX_F_OWNER_TID	0
#define	LINUX_F_OWNER_PID	1
#define	LINUX_F_OWNER_PGRP	2

#ifndef LINUX_F_RDLCK
#define	LINUX_F_RDLCK		0
#define	LINUX_F_WRLCK		1
#define	LINUX_F_UNLCK		2
#endif

/*
 * renameat2 flags
 */
#define	LINUX_RENAME_NOREPLACE	0x00000001
#define	LINUX_RENAME_EXCHANGE	0x00000002
#define	LINUX_RENAME_WHITEOUT	0x00000004

/*
 * sync_file_range flags
 */
#define	LINUX_SYNC_FILE_RANGE_WAIT_BEFORE	1
#define	LINUX_SYNC_FILE_RANGE_WRITE		2
#define	LINUX_SYNC_FILE_RANGE_WAIT_AFTER	4

#define	LINUX_F_SEAL_SEAL	0x0001
#define	LINUX_F_SEAL_SHRINK	0x0002
#define	LINUX_F_SEAL_GROW	0x0004
#define	LINUX_F_SEAL_WRITE	0x0008

#define	LINUX_MFD_CLOEXEC	0x0001
#define	LINUX_MFD_ALLOW_SEALING	0x0002
#define	LINUX_MFD_HUGETLB	0x0004

#define	LINUX_HUGETLB_FLAG_ENCODE_SHIFT	26
#define	LINUX_HUGETLB_FLAG_ENCODE_MASK	0x3f

#define LINUX_HUGETLB_FLAG_ENCODE_64KB	(16 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_512KB	(19 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_1MB	(20 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_2MB	(21 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_8MB	(23 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_16MB	(24 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_32MB	(25 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_256MB	(28 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_512MB	(29 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_1GB	(30 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_2GB	(31 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
#define LINUX_HUGETLB_FLAG_ENCODE_16GB	(34U << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)

/* inotify flags */
#define	LINUX_IN_ACCESS		0x00000001
#define	LINUX_IN_MODIFY		0x00000002
#define	LINUX_IN_ATTRIB		0x00000004
#define	LINUX_IN_CLOSE_WRITE	0x00000008
#define	LINUX_IN_CLOSE_NOWRITE	0x00000010
#define	LINUX_IN_OPEN		0x00000020
#define	LINUX_IN_MOVED_FROM	0x00000040
#define	LINUX_IN_MOVED_TO	0x00000080
#define	LINUX_IN_CREATE		0x00000100
#define	LINUX_IN_DELETE		0x00000200
#define	LINUX_IN_DELETE_SELF	0x00000400
#define	LINUX_IN_MOVE_SELF	0x00000800

#define	LINUX_IN_UNMOUNT	0x00002000
#define	LINUX_IN_Q_OVERFLOW	0x00004000
#define	LINUX_IN_IGNORED	0x00008000

#define	LINUX_IN_ONLYDIR	0x01000000
#define	LINUX_IN_DONT_FOLLOW	0x02000000
#define	LINUX_IN_EXCL_UNLINK	0x04000000
#define	LINUX_IN_MASK_CREATE	0x10000000
#define	LINUX_IN_MASK_ADD	0x20000000
#define	LINUX_IN_ISDIR		0x40000000
#define	LINUX_IN_ONESHOT	0x80000000

#define	LINUX_IN_ALL_EVENTS	0x00000fff
#define	LINUX_IN_ALL_FLAGS	0xf700e000

#define	LINUX_IN_NONBLOCK	0x00000800
#define	LINUX_IN_CLOEXEC	0x00080000

#if defined(_KERNEL)
struct l_file_handle {
	l_uint handle_bytes;
	l_int handle_type;
	unsigned char f_handle[0];
};

int	linux_enobufs2eagain(struct thread *, int, int);
int	linux_common_openflags(int);
#endif

/*
 * Look at linux_close_range() for an explanation.
 *
 * #define	LINUX_CLOSE_RANGE_UNSHARE	(1U << 1)
 */
#define	LINUX_CLOSE_RANGE_CLOEXEC	(1U << 2)

#endif	/* !_LINUX_FILE_H_ */