1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _LINUX_CACHEFILES_H
3 #define _LINUX_CACHEFILES_H
4 
5 #include <linux/types.h>
6 #include <linux/ioctl.h>
7 
8 /*
9  * Fscache ensures that the maximum length of cookie key is 255. The volume key
10  * is controlled by netfs, and generally no bigger than 255.
11  */
12 #define CACHEFILES_MSG_MAX_SIZE	1024
13 
14 enum cachefiles_opcode {
15 	CACHEFILES_OP_OPEN,
16 	CACHEFILES_OP_CLOSE,
17 	CACHEFILES_OP_READ,
18 };
19 
20 /*
21  * Message Header
22  *
23  * @msg_id	a unique ID identifying this message
24  * @opcode	message type, CACHEFILE_OP_*
25  * @len		message length, including message header and following data
26  * @object_id	a unique ID identifying a cache file
27  * @data	message type specific payload
28  */
29 struct cachefiles_msg {
30 	__u32 msg_id;
31 	__u32 opcode;
32 	__u32 len;
33 	__u32 object_id;
34 	__u8  data[];
35 };
36 
37 /*
38  * @data contains the volume_key followed directly by the cookie_key. volume_key
39  * is a NUL-terminated string; @volume_key_size indicates the size of the volume
40  * key in bytes. cookie_key is binary data, which is netfs specific;
41  * @cookie_key_size indicates the size of the cookie key in bytes.
42  *
43  * @fd identifies an anon_fd referring to the cache file.
44  */
45 struct cachefiles_open {
46 	__u32 volume_key_size;
47 	__u32 cookie_key_size;
48 	__u32 fd;
49 	__u32 flags;
50 	__u8  data[];
51 };
52 
53 /*
54  * @off		indicates the starting offset of the requested file range
55  * @len		indicates the length of the requested file range
56  */
57 struct cachefiles_read {
58 	__u64 off;
59 	__u64 len;
60 };
61 
62 /*
63  * Reply for READ request
64  * @arg for this ioctl is the @id field of READ request.
65  */
66 #define CACHEFILES_IOC_READ_COMPLETE	_IOW(0x98, 1, int)
67 
68 #endif
69