xref: /linux/fs/nfsd/xdr4cb.h (revision d141ec2825b4d3ec52f27c43bdd864090159273a)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #define NFS4_MAXTAGLEN		20
3 
4 #define NFS4_enc_cb_null_sz		0
5 #define NFS4_dec_cb_null_sz		0
6 #define cb_compound_enc_hdr_sz		4
7 #define cb_compound_dec_hdr_sz		(3 + (NFS4_MAXTAGLEN >> 2))
8 #define sessionid_sz			(NFS4_MAX_SESSIONID_LEN >> 2)
9 #define enc_referring_call4_sz		(1 + 1)
10 #define enc_referring_call_list4_sz	(sessionid_sz + 1 + \
11 					enc_referring_call4_sz)
12 #define cb_sequence_enc_sz		(sessionid_sz + 4 +             \
13 					enc_referring_call_list4_sz)
14 #define cb_sequence_dec_sz		(op_dec_sz + sessionid_sz + 4)
15 
16 #define op_enc_sz			1
17 #define op_dec_sz			2
18 #define enc_nfs4_fh_sz			(1 + (NFS4_FHSIZE >> 2))
19 #define enc_stateid_sz			(NFS4_STATEID_SIZE >> 2)
20 #define NFS4_enc_cb_recall_sz		(cb_compound_enc_hdr_sz +       \
21 					cb_sequence_enc_sz +            \
22 					1 + enc_stateid_sz +            \
23 					enc_nfs4_fh_sz)
24 
25 #define NFS4_dec_cb_recall_sz		(cb_compound_dec_hdr_sz  +      \
26 					cb_sequence_dec_sz +            \
27 					op_dec_sz)
28 #define NFS4_enc_cb_layout_sz		(cb_compound_enc_hdr_sz +       \
29 					cb_sequence_enc_sz +            \
30 					1 + 3 +                         \
31 					enc_nfs4_fh_sz + 4)
32 #define NFS4_dec_cb_layout_sz		(cb_compound_dec_hdr_sz  +      \
33 					cb_sequence_dec_sz +            \
34 					op_dec_sz)
35 
36 #define NFS4_enc_cb_notify_sz		(cb_compound_enc_hdr_sz +       \
37 					cb_sequence_enc_sz +            \
38 					1 + enc_stateid_sz +            \
39 					enc_nfs4_fh_sz +		\
40 					1 +				\
41 					NOTIFY4_EVENT_QUEUE_SIZE *	\
42 					(2 + (NFS4_OPAQUE_LIMIT >> 2)))
43 
44 #define NFS4_dec_cb_notify_sz		(cb_compound_dec_hdr_sz  +      \
45 					cb_sequence_dec_sz +            \
46 					op_dec_sz)
47 
48 #define NFS4_enc_cb_notify_lock_sz	(cb_compound_enc_hdr_sz +        \
49 					cb_sequence_enc_sz +             \
50 					2 + 1 +				 \
51 					XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
52 					enc_nfs4_fh_sz)
53 #define NFS4_dec_cb_notify_lock_sz	(cb_compound_dec_hdr_sz  +      \
54 					cb_sequence_dec_sz +            \
55 					op_dec_sz)
56 #define enc_cb_offload_info_sz		(1 + 1 + 2 + 1 +		\
57 					XDR_QUADLEN(NFS4_VERIFIER_SIZE))
58 #define NFS4_enc_cb_offload_sz		(cb_compound_enc_hdr_sz +       \
59 					cb_sequence_enc_sz +            \
60 					enc_nfs4_fh_sz +		\
61 					enc_stateid_sz +		\
62 					enc_cb_offload_info_sz)
63 #define NFS4_dec_cb_offload_sz		(cb_compound_dec_hdr_sz  +      \
64 					cb_sequence_dec_sz +            \
65 					op_dec_sz)
66 #define NFS4_enc_cb_recall_any_sz	(cb_compound_enc_hdr_sz +       \
67 					cb_sequence_enc_sz +            \
68 					1 + 1 + 1)
69 #define NFS4_dec_cb_recall_any_sz	(cb_compound_dec_hdr_sz  +      \
70 					cb_sequence_dec_sz +            \
71 					op_dec_sz)
72 
73 /*
74  * 1: CB_GETATTR opcode (32-bit)
75  * N: file_handle
76  * 1: number of entry in attribute array (32-bit)
77  * 3: entry 0-2 in attribute array (32-bit * 3)
78  */
79 #define NFS4_enc_cb_getattr_sz		(cb_compound_enc_hdr_sz +       \
80 					cb_sequence_enc_sz +            \
81 					1 + enc_nfs4_fh_sz + 1 + 3)
82 /*
83  * 4: fattr_bitmap_maxsz
84  * 1: attribute array len
85  * 2: change attr (64-bit)
86  * 2: size (64-bit)
87  * 2: atime.seconds (64-bit)
88  * 1: atime.nanoseconds (32-bit)
89  * 2: mtime.seconds (64-bit)
90  * 1: mtime.nanoseconds (32-bit)
91  */
92 #define NFS4_dec_cb_getattr_sz		(cb_compound_dec_hdr_sz  +      \
93 			cb_sequence_dec_sz + 4 + 1 + 2 + 2 + 2 + 1 + 2 + 1 + op_dec_sz)
94