xref: /linux/fs/nfsd/nfs4xdr_gen.c (revision d141ec2825b4d3ec52f27c43bdd864090159273a)
1 // SPDX-License-Identifier: GPL-2.0
2 // Generated by xdrgen. Manual edits will be lost.
3 // XDR specification file: ../../Documentation/sunrpc/xdr/nfs4_1.x
4 // XDR specification modification time: Tue Jun 30 11:57:21 2026
5 
6 #include <linux/sunrpc/svc.h>
7 
8 #include "nfs4xdr_gen.h"
9 
10 static bool __maybe_unused
xdrgen_decode_int32_t(struct xdr_stream * xdr,int32_t * ptr)11 xdrgen_decode_int32_t(struct xdr_stream *xdr, int32_t *ptr)
12 {
13 	return xdrgen_decode_int(xdr, ptr);
14 }
15 
16 static bool __maybe_unused
xdrgen_decode_uint32_t(struct xdr_stream * xdr,uint32_t * ptr)17 xdrgen_decode_uint32_t(struct xdr_stream *xdr, uint32_t *ptr)
18 {
19 	return xdrgen_decode_unsigned_int(xdr, ptr);
20 }
21 
22 static bool __maybe_unused
xdrgen_decode_int64_t(struct xdr_stream * xdr,int64_t * ptr)23 xdrgen_decode_int64_t(struct xdr_stream *xdr, int64_t *ptr)
24 {
25 	return xdrgen_decode_hyper(xdr, ptr);
26 }
27 
28 static bool __maybe_unused
xdrgen_decode_uint64_t(struct xdr_stream * xdr,uint64_t * ptr)29 xdrgen_decode_uint64_t(struct xdr_stream *xdr, uint64_t *ptr)
30 {
31 	return xdrgen_decode_unsigned_hyper(xdr, ptr);
32 }
33 
34 static bool __maybe_unused
xdrgen_decode_nfsstat4(struct xdr_stream * xdr,nfsstat4 * ptr)35 xdrgen_decode_nfsstat4(struct xdr_stream *xdr, nfsstat4 *ptr)
36 {
37 	u32 val;
38 
39 	if (xdr_stream_decode_u32(xdr, &val) < 0)
40 		return false;
41 	/* Compiler may optimize to a range check for dense enums */
42 	switch (val) {
43 	case NFS4_OK:
44 	case NFS4ERR_PERM:
45 	case NFS4ERR_NOENT:
46 	case NFS4ERR_IO:
47 	case NFS4ERR_NXIO:
48 	case NFS4ERR_ACCESS:
49 	case NFS4ERR_EXIST:
50 	case NFS4ERR_XDEV:
51 	case NFS4ERR_NOTDIR:
52 	case NFS4ERR_ISDIR:
53 	case NFS4ERR_INVAL:
54 	case NFS4ERR_FBIG:
55 	case NFS4ERR_NOSPC:
56 	case NFS4ERR_ROFS:
57 	case NFS4ERR_MLINK:
58 	case NFS4ERR_NAMETOOLONG:
59 	case NFS4ERR_NOTEMPTY:
60 	case NFS4ERR_DQUOT:
61 	case NFS4ERR_STALE:
62 	case NFS4ERR_BADHANDLE:
63 	case NFS4ERR_BAD_COOKIE:
64 	case NFS4ERR_NOTSUPP:
65 	case NFS4ERR_TOOSMALL:
66 	case NFS4ERR_SERVERFAULT:
67 	case NFS4ERR_BADTYPE:
68 	case NFS4ERR_DELAY:
69 	case NFS4ERR_SAME:
70 	case NFS4ERR_DENIED:
71 	case NFS4ERR_EXPIRED:
72 	case NFS4ERR_LOCKED:
73 	case NFS4ERR_GRACE:
74 	case NFS4ERR_FHEXPIRED:
75 	case NFS4ERR_SHARE_DENIED:
76 	case NFS4ERR_WRONGSEC:
77 	case NFS4ERR_CLID_INUSE:
78 	case NFS4ERR_RESOURCE:
79 	case NFS4ERR_MOVED:
80 	case NFS4ERR_NOFILEHANDLE:
81 	case NFS4ERR_MINOR_VERS_MISMATCH:
82 	case NFS4ERR_STALE_CLIENTID:
83 	case NFS4ERR_STALE_STATEID:
84 	case NFS4ERR_OLD_STATEID:
85 	case NFS4ERR_BAD_STATEID:
86 	case NFS4ERR_BAD_SEQID:
87 	case NFS4ERR_NOT_SAME:
88 	case NFS4ERR_LOCK_RANGE:
89 	case NFS4ERR_SYMLINK:
90 	case NFS4ERR_RESTOREFH:
91 	case NFS4ERR_LEASE_MOVED:
92 	case NFS4ERR_ATTRNOTSUPP:
93 	case NFS4ERR_NO_GRACE:
94 	case NFS4ERR_RECLAIM_BAD:
95 	case NFS4ERR_RECLAIM_CONFLICT:
96 	case NFS4ERR_BADXDR:
97 	case NFS4ERR_LOCKS_HELD:
98 	case NFS4ERR_OPENMODE:
99 	case NFS4ERR_BADOWNER:
100 	case NFS4ERR_BADCHAR:
101 	case NFS4ERR_BADNAME:
102 	case NFS4ERR_BAD_RANGE:
103 	case NFS4ERR_LOCK_NOTSUPP:
104 	case NFS4ERR_OP_ILLEGAL:
105 	case NFS4ERR_DEADLOCK:
106 	case NFS4ERR_FILE_OPEN:
107 	case NFS4ERR_ADMIN_REVOKED:
108 	case NFS4ERR_CB_PATH_DOWN:
109 	case NFS4ERR_BADIOMODE:
110 	case NFS4ERR_BADLAYOUT:
111 	case NFS4ERR_BAD_SESSION_DIGEST:
112 	case NFS4ERR_BADSESSION:
113 	case NFS4ERR_BADSLOT:
114 	case NFS4ERR_COMPLETE_ALREADY:
115 	case NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
116 	case NFS4ERR_DELEG_ALREADY_WANTED:
117 	case NFS4ERR_BACK_CHAN_BUSY:
118 	case NFS4ERR_LAYOUTTRYLATER:
119 	case NFS4ERR_LAYOUTUNAVAILABLE:
120 	case NFS4ERR_NOMATCHING_LAYOUT:
121 	case NFS4ERR_RECALLCONFLICT:
122 	case NFS4ERR_UNKNOWN_LAYOUTTYPE:
123 	case NFS4ERR_SEQ_MISORDERED:
124 	case NFS4ERR_SEQUENCE_POS:
125 	case NFS4ERR_REQ_TOO_BIG:
126 	case NFS4ERR_REP_TOO_BIG:
127 	case NFS4ERR_REP_TOO_BIG_TO_CACHE:
128 	case NFS4ERR_RETRY_UNCACHED_REP:
129 	case NFS4ERR_UNSAFE_COMPOUND:
130 	case NFS4ERR_TOO_MANY_OPS:
131 	case NFS4ERR_OP_NOT_IN_SESSION:
132 	case NFS4ERR_HASH_ALG_UNSUPP:
133 	case NFS4ERR_CLIENTID_BUSY:
134 	case NFS4ERR_PNFS_IO_HOLE:
135 	case NFS4ERR_SEQ_FALSE_RETRY:
136 	case NFS4ERR_BAD_HIGH_SLOT:
137 	case NFS4ERR_DEADSESSION:
138 	case NFS4ERR_ENCR_ALG_UNSUPP:
139 	case NFS4ERR_PNFS_NO_LAYOUT:
140 	case NFS4ERR_NOT_ONLY_OP:
141 	case NFS4ERR_WRONG_CRED:
142 	case NFS4ERR_WRONG_TYPE:
143 	case NFS4ERR_DIRDELEG_UNAVAIL:
144 	case NFS4ERR_REJECT_DELEG:
145 	case NFS4ERR_RETURNCONFLICT:
146 	case NFS4ERR_DELEG_REVOKED:
147 	case NFS4ERR_PARTNER_NOTSUPP:
148 	case NFS4ERR_PARTNER_NO_AUTH:
149 	case NFS4ERR_UNION_NOTSUPP:
150 	case NFS4ERR_OFFLOAD_DENIED:
151 	case NFS4ERR_WRONG_LFS:
152 	case NFS4ERR_BADLABEL:
153 	case NFS4ERR_OFFLOAD_NO_REQS:
154 	case NFS4ERR_NOXATTR:
155 	case NFS4ERR_XATTR2BIG:
156 		break;
157 	default:
158 		return false;
159 	}
160 	*ptr = val;
161 	return true;
162 }
163 
164 static bool __maybe_unused
xdrgen_decode_attrlist4(struct xdr_stream * xdr,attrlist4 * ptr)165 xdrgen_decode_attrlist4(struct xdr_stream *xdr, attrlist4 *ptr)
166 {
167 	return xdrgen_decode_opaque(xdr, ptr, 0);
168 }
169 
170 static bool __maybe_unused
xdrgen_decode_bitmap4(struct xdr_stream * xdr,bitmap4 * ptr)171 xdrgen_decode_bitmap4(struct xdr_stream *xdr, bitmap4 *ptr)
172 {
173 	if (xdr_stream_decode_u32(xdr, &ptr->count) < 0)
174 		return false;
175 	for (u32 i = 0; i < ptr->count; i++)
176 		if (!xdrgen_decode_uint32_t(xdr, &ptr->element[i]))
177 			return false;
178 	return true;
179 }
180 
181 static bool __maybe_unused
xdrgen_decode_verifier4(struct xdr_stream * xdr,verifier4 * ptr)182 xdrgen_decode_verifier4(struct xdr_stream *xdr, verifier4 *ptr)
183 {
184 	return xdr_stream_decode_opaque_fixed(xdr, ptr, NFS4_VERIFIER_SIZE) == 0;
185 }
186 
187 static bool __maybe_unused
xdrgen_decode_nfs_cookie4(struct xdr_stream * xdr,nfs_cookie4 * ptr)188 xdrgen_decode_nfs_cookie4(struct xdr_stream *xdr, nfs_cookie4 *ptr)
189 {
190 	return xdrgen_decode_uint64_t(xdr, ptr);
191 }
192 
193 static bool __maybe_unused
xdrgen_decode_nfs_fh4(struct xdr_stream * xdr,nfs_fh4 * ptr)194 xdrgen_decode_nfs_fh4(struct xdr_stream *xdr, nfs_fh4 *ptr)
195 {
196 	return xdrgen_decode_opaque(xdr, ptr, NFS4_FHSIZE);
197 }
198 
199 static bool __maybe_unused
xdrgen_decode_utf8string(struct xdr_stream * xdr,utf8string * ptr)200 xdrgen_decode_utf8string(struct xdr_stream *xdr, utf8string *ptr)
201 {
202 	return xdrgen_decode_opaque(xdr, ptr, 0);
203 }
204 
205 static bool __maybe_unused
xdrgen_decode_utf8str_cis(struct xdr_stream * xdr,utf8str_cis * ptr)206 xdrgen_decode_utf8str_cis(struct xdr_stream *xdr, utf8str_cis *ptr)
207 {
208 	return xdrgen_decode_utf8string(xdr, ptr);
209 }
210 
211 static bool __maybe_unused
xdrgen_decode_utf8str_cs(struct xdr_stream * xdr,utf8str_cs * ptr)212 xdrgen_decode_utf8str_cs(struct xdr_stream *xdr, utf8str_cs *ptr)
213 {
214 	return xdrgen_decode_utf8string(xdr, ptr);
215 }
216 
217 static bool __maybe_unused
xdrgen_decode_utf8str_mixed(struct xdr_stream * xdr,utf8str_mixed * ptr)218 xdrgen_decode_utf8str_mixed(struct xdr_stream *xdr, utf8str_mixed *ptr)
219 {
220 	return xdrgen_decode_utf8string(xdr, ptr);
221 }
222 
223 static bool __maybe_unused
xdrgen_decode_component4(struct xdr_stream * xdr,component4 * ptr)224 xdrgen_decode_component4(struct xdr_stream *xdr, component4 *ptr)
225 {
226 	return xdrgen_decode_utf8str_cs(xdr, ptr);
227 }
228 
229 static bool __maybe_unused
xdrgen_decode_linktext4(struct xdr_stream * xdr,linktext4 * ptr)230 xdrgen_decode_linktext4(struct xdr_stream *xdr, linktext4 *ptr)
231 {
232 	return xdrgen_decode_utf8str_cs(xdr, ptr);
233 }
234 
235 static bool __maybe_unused
xdrgen_decode_pathname4(struct xdr_stream * xdr,pathname4 * ptr)236 xdrgen_decode_pathname4(struct xdr_stream *xdr, pathname4 *ptr)
237 {
238 	if (xdr_stream_decode_u32(xdr, &ptr->count) < 0)
239 		return false;
240 	for (u32 i = 0; i < ptr->count; i++)
241 		if (!xdrgen_decode_component4(xdr, &ptr->element[i]))
242 			return false;
243 	return true;
244 }
245 
246 static bool __maybe_unused
xdrgen_decode_nfstime4(struct xdr_stream * xdr,struct nfstime4 * ptr)247 xdrgen_decode_nfstime4(struct xdr_stream *xdr, struct nfstime4 *ptr)
248 {
249 	if (!xdrgen_decode_int64_t(xdr, &ptr->seconds))
250 		return false;
251 	if (!xdrgen_decode_uint32_t(xdr, &ptr->nseconds))
252 		return false;
253 	return true;
254 }
255 
256 static bool __maybe_unused
xdrgen_decode_fattr4(struct xdr_stream * xdr,struct fattr4 * ptr)257 xdrgen_decode_fattr4(struct xdr_stream *xdr, struct fattr4 *ptr)
258 {
259 	if (!xdrgen_decode_bitmap4(xdr, &ptr->attrmask))
260 		return false;
261 	if (!xdrgen_decode_attrlist4(xdr, &ptr->attr_vals))
262 		return false;
263 	return true;
264 }
265 
266 static bool __maybe_unused
xdrgen_decode_stateid4(struct xdr_stream * xdr,struct stateid4 * ptr)267 xdrgen_decode_stateid4(struct xdr_stream *xdr, struct stateid4 *ptr)
268 {
269 	if (!xdrgen_decode_uint32_t(xdr, &ptr->seqid))
270 		return false;
271 	if (xdr_stream_decode_opaque_fixed(xdr, ptr->other, 12) < 0)
272 		return false;
273 	return true;
274 }
275 
276 static bool __maybe_unused
xdrgen_decode_fattr4_offline(struct xdr_stream * xdr,fattr4_offline * ptr)277 xdrgen_decode_fattr4_offline(struct xdr_stream *xdr, fattr4_offline *ptr)
278 {
279 	return xdrgen_decode_bool(xdr, ptr);
280 }
281 
282 static bool __maybe_unused
xdrgen_decode_open_arguments4(struct xdr_stream * xdr,struct open_arguments4 * ptr)283 xdrgen_decode_open_arguments4(struct xdr_stream *xdr, struct open_arguments4 *ptr)
284 {
285 	if (!xdrgen_decode_bitmap4(xdr, &ptr->oa_share_access))
286 		return false;
287 	if (!xdrgen_decode_bitmap4(xdr, &ptr->oa_share_deny))
288 		return false;
289 	if (!xdrgen_decode_bitmap4(xdr, &ptr->oa_share_access_want))
290 		return false;
291 	if (!xdrgen_decode_bitmap4(xdr, &ptr->oa_open_claim))
292 		return false;
293 	if (!xdrgen_decode_bitmap4(xdr, &ptr->oa_create_mode))
294 		return false;
295 	return true;
296 }
297 
298 static bool __maybe_unused
xdrgen_decode_open_args_share_access4(struct xdr_stream * xdr,open_args_share_access4 * ptr)299 xdrgen_decode_open_args_share_access4(struct xdr_stream *xdr, open_args_share_access4 *ptr)
300 {
301 	u32 val;
302 
303 	if (xdr_stream_decode_u32(xdr, &val) < 0)
304 		return false;
305 	/* Compiler may optimize to a range check for dense enums */
306 	switch (val) {
307 	case OPEN_ARGS_SHARE_ACCESS_READ:
308 	case OPEN_ARGS_SHARE_ACCESS_WRITE:
309 	case OPEN_ARGS_SHARE_ACCESS_BOTH:
310 		break;
311 	default:
312 		return false;
313 	}
314 	*ptr = val;
315 	return true;
316 }
317 
318 static bool __maybe_unused
xdrgen_decode_open_args_share_deny4(struct xdr_stream * xdr,open_args_share_deny4 * ptr)319 xdrgen_decode_open_args_share_deny4(struct xdr_stream *xdr, open_args_share_deny4 *ptr)
320 {
321 	u32 val;
322 
323 	if (xdr_stream_decode_u32(xdr, &val) < 0)
324 		return false;
325 	/* Compiler may optimize to a range check for dense enums */
326 	switch (val) {
327 	case OPEN_ARGS_SHARE_DENY_NONE:
328 	case OPEN_ARGS_SHARE_DENY_READ:
329 	case OPEN_ARGS_SHARE_DENY_WRITE:
330 	case OPEN_ARGS_SHARE_DENY_BOTH:
331 		break;
332 	default:
333 		return false;
334 	}
335 	*ptr = val;
336 	return true;
337 }
338 
339 static bool __maybe_unused
xdrgen_decode_open_args_share_access_want4(struct xdr_stream * xdr,open_args_share_access_want4 * ptr)340 xdrgen_decode_open_args_share_access_want4(struct xdr_stream *xdr, open_args_share_access_want4 *ptr)
341 {
342 	u32 val;
343 
344 	if (xdr_stream_decode_u32(xdr, &val) < 0)
345 		return false;
346 	/* Compiler may optimize to a range check for dense enums */
347 	switch (val) {
348 	case OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG:
349 	case OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG:
350 	case OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL:
351 	case OPEN_ARGS_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL:
352 	case OPEN_ARGS_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED:
353 	case OPEN_ARGS_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS:
354 	case OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION:
355 		break;
356 	default:
357 		return false;
358 	}
359 	*ptr = val;
360 	return true;
361 }
362 
363 static bool __maybe_unused
xdrgen_decode_open_args_open_claim4(struct xdr_stream * xdr,open_args_open_claim4 * ptr)364 xdrgen_decode_open_args_open_claim4(struct xdr_stream *xdr, open_args_open_claim4 *ptr)
365 {
366 	u32 val;
367 
368 	if (xdr_stream_decode_u32(xdr, &val) < 0)
369 		return false;
370 	/* Compiler may optimize to a range check for dense enums */
371 	switch (val) {
372 	case OPEN_ARGS_OPEN_CLAIM_NULL:
373 	case OPEN_ARGS_OPEN_CLAIM_PREVIOUS:
374 	case OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR:
375 	case OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV:
376 	case OPEN_ARGS_OPEN_CLAIM_FH:
377 	case OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH:
378 	case OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH:
379 		break;
380 	default:
381 		return false;
382 	}
383 	*ptr = val;
384 	return true;
385 }
386 
387 static bool __maybe_unused
xdrgen_decode_open_args_createmode4(struct xdr_stream * xdr,open_args_createmode4 * ptr)388 xdrgen_decode_open_args_createmode4(struct xdr_stream *xdr, open_args_createmode4 *ptr)
389 {
390 	u32 val;
391 
392 	if (xdr_stream_decode_u32(xdr, &val) < 0)
393 		return false;
394 	/* Compiler may optimize to a range check for dense enums */
395 	switch (val) {
396 	case OPEN_ARGS_CREATEMODE_UNCHECKED4:
397 	case OPEN_ARGS_CREATE_MODE_GUARDED:
398 	case OPEN_ARGS_CREATEMODE_EXCLUSIVE4:
399 	case OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1:
400 		break;
401 	default:
402 		return false;
403 	}
404 	*ptr = val;
405 	return true;
406 }
407 
408 bool
xdrgen_decode_fattr4_open_arguments(struct xdr_stream * xdr,fattr4_open_arguments * ptr)409 xdrgen_decode_fattr4_open_arguments(struct xdr_stream *xdr, fattr4_open_arguments *ptr)
410 {
411 	return xdrgen_decode_open_arguments4(xdr, ptr);
412 }
413 
414 /*
415  * Determine what OPEN supports.
416  */
417 
418 bool
xdrgen_decode_fattr4_time_deleg_access(struct xdr_stream * xdr,fattr4_time_deleg_access * ptr)419 xdrgen_decode_fattr4_time_deleg_access(struct xdr_stream *xdr, fattr4_time_deleg_access *ptr)
420 {
421 	return xdrgen_decode_nfstime4(xdr, ptr);
422 }
423 
424 bool
xdrgen_decode_fattr4_time_deleg_modify(struct xdr_stream * xdr,fattr4_time_deleg_modify * ptr)425 xdrgen_decode_fattr4_time_deleg_modify(struct xdr_stream *xdr, fattr4_time_deleg_modify *ptr)
426 {
427 	return xdrgen_decode_nfstime4(xdr, ptr);
428 }
429 
430 /*
431  * New RECOMMENDED Attribute for
432  * delegation caching of times
433  */
434 
435 static bool __maybe_unused
xdrgen_decode_open_delegation_type4(struct xdr_stream * xdr,open_delegation_type4 * ptr)436 xdrgen_decode_open_delegation_type4(struct xdr_stream *xdr, open_delegation_type4 *ptr)
437 {
438 	u32 val;
439 
440 	if (xdr_stream_decode_u32(xdr, &val) < 0)
441 		return false;
442 	/* Compiler may optimize to a range check for dense enums */
443 	switch (val) {
444 	case OPEN_DELEGATE_NONE:
445 	case OPEN_DELEGATE_READ:
446 	case OPEN_DELEGATE_WRITE:
447 	case OPEN_DELEGATE_NONE_EXT:
448 	case OPEN_DELEGATE_READ_ATTRS_DELEG:
449 	case OPEN_DELEGATE_WRITE_ATTRS_DELEG:
450 		break;
451 	default:
452 		return false;
453 	}
454 	*ptr = val;
455 	return true;
456 }
457 
458 bool
xdrgen_decode_aclmodel4(struct xdr_stream * xdr,aclmodel4 * ptr)459 xdrgen_decode_aclmodel4(struct xdr_stream *xdr, aclmodel4 *ptr)
460 {
461 	u32 val;
462 
463 	if (xdr_stream_decode_u32(xdr, &val) < 0)
464 		return false;
465 	/* Compiler may optimize to a range check for dense enums */
466 	switch (val) {
467 	case ACL_MODEL_NFS4:
468 	case ACL_MODEL_POSIX_DRAFT:
469 	case ACL_MODEL_NONE:
470 		break;
471 	default:
472 		return false;
473 	}
474 	*ptr = val;
475 	return true;
476 }
477 
478 bool
xdrgen_decode_aclscope4(struct xdr_stream * xdr,aclscope4 * ptr)479 xdrgen_decode_aclscope4(struct xdr_stream *xdr, aclscope4 *ptr)
480 {
481 	u32 val;
482 
483 	if (xdr_stream_decode_u32(xdr, &val) < 0)
484 		return false;
485 	/* Compiler may optimize to a range check for dense enums */
486 	switch (val) {
487 	case ACL_SCOPE_FILE_OBJECT:
488 	case ACL_SCOPE_FILE_SYSTEM:
489 	case ACL_SCOPE_SERVER:
490 		break;
491 	default:
492 		return false;
493 	}
494 	*ptr = val;
495 	return true;
496 }
497 
498 bool
xdrgen_decode_posixacetag4(struct xdr_stream * xdr,posixacetag4 * ptr)499 xdrgen_decode_posixacetag4(struct xdr_stream *xdr, posixacetag4 *ptr)
500 {
501 	u32 val;
502 
503 	if (xdr_stream_decode_u32(xdr, &val) < 0)
504 		return false;
505 	/* Compiler may optimize to a range check for dense enums */
506 	switch (val) {
507 	case POSIXACE4_TAG_USER_OBJ:
508 	case POSIXACE4_TAG_USER:
509 	case POSIXACE4_TAG_GROUP_OBJ:
510 	case POSIXACE4_TAG_GROUP:
511 	case POSIXACE4_TAG_MASK:
512 	case POSIXACE4_TAG_OTHER:
513 		break;
514 	default:
515 		return false;
516 	}
517 	*ptr = val;
518 	return true;
519 }
520 
521 bool
xdrgen_decode_posixaceperm4(struct xdr_stream * xdr,posixaceperm4 * ptr)522 xdrgen_decode_posixaceperm4(struct xdr_stream *xdr, posixaceperm4 *ptr)
523 {
524 	return xdrgen_decode_uint32_t(xdr, ptr);
525 }
526 
527 static bool __maybe_unused
xdrgen_decode_posixace4(struct xdr_stream * xdr,struct posixace4 * ptr)528 xdrgen_decode_posixace4(struct xdr_stream *xdr, struct posixace4 *ptr)
529 {
530 	if (!xdrgen_decode_posixacetag4(xdr, &ptr->tag))
531 		return false;
532 	if (!xdrgen_decode_posixaceperm4(xdr, &ptr->perm))
533 		return false;
534 	if (!xdrgen_decode_utf8str_mixed(xdr, &ptr->who))
535 		return false;
536 	return true;
537 }
538 
539 static bool __maybe_unused
xdrgen_decode_fattr4_acl_trueform(struct xdr_stream * xdr,fattr4_acl_trueform * ptr)540 xdrgen_decode_fattr4_acl_trueform(struct xdr_stream *xdr, fattr4_acl_trueform *ptr)
541 {
542 	return xdrgen_decode_aclmodel4(xdr, ptr);
543 }
544 
545 static bool __maybe_unused
xdrgen_decode_fattr4_acl_trueform_scope(struct xdr_stream * xdr,fattr4_acl_trueform_scope * ptr)546 xdrgen_decode_fattr4_acl_trueform_scope(struct xdr_stream *xdr, fattr4_acl_trueform_scope *ptr)
547 {
548 	return xdrgen_decode_aclscope4(xdr, ptr);
549 }
550 
551 static bool __maybe_unused
xdrgen_decode_fattr4_posix_default_acl(struct xdr_stream * xdr,fattr4_posix_default_acl * ptr)552 xdrgen_decode_fattr4_posix_default_acl(struct xdr_stream *xdr, fattr4_posix_default_acl *ptr)
553 {
554 	if (xdr_stream_decode_u32(xdr, &ptr->count) < 0)
555 		return false;
556 	for (u32 i = 0; i < ptr->count; i++)
557 		if (!xdrgen_decode_posixace4(xdr, &ptr->element[i]))
558 			return false;
559 	return true;
560 }
561 
562 static bool __maybe_unused
xdrgen_decode_fattr4_posix_access_acl(struct xdr_stream * xdr,fattr4_posix_access_acl * ptr)563 xdrgen_decode_fattr4_posix_access_acl(struct xdr_stream *xdr, fattr4_posix_access_acl *ptr)
564 {
565 	if (xdr_stream_decode_u32(xdr, &ptr->count) < 0)
566 		return false;
567 	for (u32 i = 0; i < ptr->count; i++)
568 		if (!xdrgen_decode_posixace4(xdr, &ptr->element[i]))
569 			return false;
570 	return true;
571 }
572 
573 /*
574  * New for POSIX ACL extension
575  */
576 
577 static bool __maybe_unused
xdrgen_decode_notify_type4(struct xdr_stream * xdr,notify_type4 * ptr)578 xdrgen_decode_notify_type4(struct xdr_stream *xdr, notify_type4 *ptr)
579 {
580 	u32 val;
581 
582 	if (xdr_stream_decode_u32(xdr, &val) < 0)
583 		return false;
584 	/* Compiler may optimize to a range check for dense enums */
585 	switch (val) {
586 	case NOTIFY4_CHANGE_CHILD_ATTRS:
587 	case NOTIFY4_CHANGE_DIR_ATTRS:
588 	case NOTIFY4_REMOVE_ENTRY:
589 	case NOTIFY4_ADD_ENTRY:
590 	case NOTIFY4_RENAME_ENTRY:
591 	case NOTIFY4_CHANGE_COOKIE_VERIFIER:
592 	case NOTIFY4_GFLAG_EXTEND:
593 	case NOTIFY4_AUFLAG_VALID:
594 	case NOTIFY4_AUFLAG_USER:
595 	case NOTIFY4_AUFLAG_GROUP:
596 	case NOTIFY4_AUFLAG_OTHER:
597 	case NOTIFY4_CHANGE_AUTH:
598 	case NOTIFY4_CFLAG_ORDER:
599 	case NOTIFY4_AUFLAG_GANOW:
600 	case NOTIFY4_AUFLAG_GALATER:
601 	case NOTIFY4_CHANGE_GA:
602 	case NOTIFY4_CHANGE_AMASK:
603 		break;
604 	default:
605 		return false;
606 	}
607 	*ptr = val;
608 	return true;
609 }
610 
611 static bool __maybe_unused
xdrgen_decode_notify_entry4(struct xdr_stream * xdr,struct notify_entry4 * ptr)612 xdrgen_decode_notify_entry4(struct xdr_stream *xdr, struct notify_entry4 *ptr)
613 {
614 	if (!xdrgen_decode_component4(xdr, &ptr->ne_file))
615 		return false;
616 	if (!xdrgen_decode_fattr4(xdr, &ptr->ne_attrs))
617 		return false;
618 	return true;
619 }
620 
621 static bool __maybe_unused
xdrgen_decode_prev_entry4(struct xdr_stream * xdr,struct prev_entry4 * ptr)622 xdrgen_decode_prev_entry4(struct xdr_stream *xdr, struct prev_entry4 *ptr)
623 {
624 	if (!xdrgen_decode_notify_entry4(xdr, &ptr->pe_prev_entry))
625 		return false;
626 	if (!xdrgen_decode_nfs_cookie4(xdr, &ptr->pe_prev_entry_cookie))
627 		return false;
628 	return true;
629 }
630 
631 bool
xdrgen_decode_notify_remove4(struct xdr_stream * xdr,struct notify_remove4 * ptr)632 xdrgen_decode_notify_remove4(struct xdr_stream *xdr, struct notify_remove4 *ptr)
633 {
634 	if (!xdrgen_decode_notify_entry4(xdr, &ptr->nrm_old_entry))
635 		return false;
636 	if (!xdrgen_decode_nfs_cookie4(xdr, &ptr->nrm_old_entry_cookie))
637 		return false;
638 	return true;
639 }
640 
641 bool
xdrgen_decode_notify_add4(struct xdr_stream * xdr,struct notify_add4 * ptr)642 xdrgen_decode_notify_add4(struct xdr_stream *xdr, struct notify_add4 *ptr)
643 {
644 	if (xdr_stream_decode_u32(xdr, &ptr->nad_old_entry.count) < 0)
645 		return false;
646 	if (ptr->nad_old_entry.count > 1)
647 		return false;
648 	for (u32 i = 0; i < ptr->nad_old_entry.count; i++)
649 		if (!xdrgen_decode_notify_remove4(xdr, &ptr->nad_old_entry.element[i]))
650 			return false;
651 	if (!xdrgen_decode_notify_entry4(xdr, &ptr->nad_new_entry))
652 		return false;
653 	if (xdr_stream_decode_u32(xdr, &ptr->nad_new_entry_cookie.count) < 0)
654 		return false;
655 	if (ptr->nad_new_entry_cookie.count > 1)
656 		return false;
657 	for (u32 i = 0; i < ptr->nad_new_entry_cookie.count; i++)
658 		if (!xdrgen_decode_nfs_cookie4(xdr, &ptr->nad_new_entry_cookie.element[i]))
659 			return false;
660 	if (xdr_stream_decode_u32(xdr, &ptr->nad_prev_entry.count) < 0)
661 		return false;
662 	if (ptr->nad_prev_entry.count > 1)
663 		return false;
664 	for (u32 i = 0; i < ptr->nad_prev_entry.count; i++)
665 		if (!xdrgen_decode_prev_entry4(xdr, &ptr->nad_prev_entry.element[i]))
666 			return false;
667 	if (!xdrgen_decode_bool(xdr, &ptr->nad_last_entry))
668 		return false;
669 	return true;
670 }
671 
672 bool
xdrgen_decode_notify_attr4(struct xdr_stream * xdr,struct notify_attr4 * ptr)673 xdrgen_decode_notify_attr4(struct xdr_stream *xdr, struct notify_attr4 *ptr)
674 {
675 	if (!xdrgen_decode_notify_entry4(xdr, &ptr->na_changed_entry))
676 		return false;
677 	return true;
678 }
679 
680 bool
xdrgen_decode_notify_rename4(struct xdr_stream * xdr,struct notify_rename4 * ptr)681 xdrgen_decode_notify_rename4(struct xdr_stream *xdr, struct notify_rename4 *ptr)
682 {
683 	if (!xdrgen_decode_notify_remove4(xdr, &ptr->nrn_old_entry))
684 		return false;
685 	if (!xdrgen_decode_notify_add4(xdr, &ptr->nrn_new_entry))
686 		return false;
687 	return true;
688 }
689 
690 static bool __maybe_unused
xdrgen_decode_notify_verifier4(struct xdr_stream * xdr,struct notify_verifier4 * ptr)691 xdrgen_decode_notify_verifier4(struct xdr_stream *xdr, struct notify_verifier4 *ptr)
692 {
693 	if (!xdrgen_decode_verifier4(xdr, &ptr->nv_old_cookieverf))
694 		return false;
695 	if (!xdrgen_decode_verifier4(xdr, &ptr->nv_new_cookieverf))
696 		return false;
697 	return true;
698 }
699 
700 static bool __maybe_unused
xdrgen_decode_notifylist4(struct xdr_stream * xdr,notifylist4 * ptr)701 xdrgen_decode_notifylist4(struct xdr_stream *xdr, notifylist4 *ptr)
702 {
703 	return xdrgen_decode_opaque(xdr, ptr, 0);
704 }
705 
706 static bool __maybe_unused
xdrgen_decode_notify4(struct xdr_stream * xdr,struct notify4 * ptr)707 xdrgen_decode_notify4(struct xdr_stream *xdr, struct notify4 *ptr)
708 {
709 	if (!xdrgen_decode_bitmap4(xdr, &ptr->notify_mask))
710 		return false;
711 	if (!xdrgen_decode_notifylist4(xdr, &ptr->notify_vals))
712 		return false;
713 	return true;
714 }
715 
716 bool
xdrgen_decode_CB_NOTIFY4args(struct xdr_stream * xdr,struct CB_NOTIFY4args * ptr)717 xdrgen_decode_CB_NOTIFY4args(struct xdr_stream *xdr, struct CB_NOTIFY4args *ptr)
718 {
719 	if (!xdrgen_decode_stateid4(xdr, &ptr->cna_stateid))
720 		return false;
721 	if (!xdrgen_decode_nfs_fh4(xdr, &ptr->cna_fh))
722 		return false;
723 	if (xdr_stream_decode_u32(xdr, &ptr->cna_changes.count) < 0)
724 		return false;
725 	for (u32 i = 0; i < ptr->cna_changes.count; i++)
726 		if (!xdrgen_decode_notify4(xdr, &ptr->cna_changes.element[i]))
727 			return false;
728 	return true;
729 }
730 
731 static bool __maybe_unused
xdrgen_decode_CB_NOTIFY4res(struct xdr_stream * xdr,struct CB_NOTIFY4res * ptr)732 xdrgen_decode_CB_NOTIFY4res(struct xdr_stream *xdr, struct CB_NOTIFY4res *ptr)
733 {
734 	if (!xdrgen_decode_nfsstat4(xdr, &ptr->cnr_status))
735 		return false;
736 	return true;
737 }
738 
739 static bool __maybe_unused
xdrgen_encode_int32_t(struct xdr_stream * xdr,const int32_t value)740 xdrgen_encode_int32_t(struct xdr_stream *xdr, const int32_t value)
741 {
742 	return xdrgen_encode_int(xdr, value);
743 }
744 
745 static bool __maybe_unused
xdrgen_encode_uint32_t(struct xdr_stream * xdr,const uint32_t value)746 xdrgen_encode_uint32_t(struct xdr_stream *xdr, const uint32_t value)
747 {
748 	return xdrgen_encode_unsigned_int(xdr, value);
749 }
750 
751 static bool __maybe_unused
xdrgen_encode_int64_t(struct xdr_stream * xdr,const int64_t value)752 xdrgen_encode_int64_t(struct xdr_stream *xdr, const int64_t value)
753 {
754 	return xdrgen_encode_hyper(xdr, value);
755 }
756 
757 static bool __maybe_unused
xdrgen_encode_uint64_t(struct xdr_stream * xdr,const uint64_t value)758 xdrgen_encode_uint64_t(struct xdr_stream *xdr, const uint64_t value)
759 {
760 	return xdrgen_encode_unsigned_hyper(xdr, value);
761 }
762 
763 static bool __maybe_unused
xdrgen_encode_nfsstat4(struct xdr_stream * xdr,nfsstat4 value)764 xdrgen_encode_nfsstat4(struct xdr_stream *xdr, nfsstat4 value)
765 {
766 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
767 }
768 
769 static bool __maybe_unused
xdrgen_encode_attrlist4(struct xdr_stream * xdr,const attrlist4 value)770 xdrgen_encode_attrlist4(struct xdr_stream *xdr, const attrlist4 value)
771 {
772 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
773 }
774 
775 static bool __maybe_unused
xdrgen_encode_bitmap4(struct xdr_stream * xdr,const bitmap4 value)776 xdrgen_encode_bitmap4(struct xdr_stream *xdr, const bitmap4 value)
777 {
778 	if (xdr_stream_encode_u32(xdr, value.count) != XDR_UNIT)
779 		return false;
780 	for (u32 i = 0; i < value.count; i++)
781 		if (!xdrgen_encode_uint32_t(xdr, value.element[i]))
782 			return false;
783 	return true;
784 }
785 
786 static bool __maybe_unused
xdrgen_encode_verifier4(struct xdr_stream * xdr,const verifier4 value)787 xdrgen_encode_verifier4(struct xdr_stream *xdr, const verifier4 value)
788 {
789 	return xdr_stream_encode_opaque_fixed(xdr, value, NFS4_VERIFIER_SIZE) >= 0;
790 }
791 
792 static bool __maybe_unused
xdrgen_encode_nfs_cookie4(struct xdr_stream * xdr,const nfs_cookie4 value)793 xdrgen_encode_nfs_cookie4(struct xdr_stream *xdr, const nfs_cookie4 value)
794 {
795 	return xdrgen_encode_uint64_t(xdr, value);
796 }
797 
798 static bool __maybe_unused
xdrgen_encode_nfs_fh4(struct xdr_stream * xdr,const nfs_fh4 value)799 xdrgen_encode_nfs_fh4(struct xdr_stream *xdr, const nfs_fh4 value)
800 {
801 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
802 }
803 
804 static bool __maybe_unused
xdrgen_encode_utf8string(struct xdr_stream * xdr,const utf8string value)805 xdrgen_encode_utf8string(struct xdr_stream *xdr, const utf8string value)
806 {
807 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
808 }
809 
810 static bool __maybe_unused
xdrgen_encode_utf8str_cis(struct xdr_stream * xdr,const utf8str_cis value)811 xdrgen_encode_utf8str_cis(struct xdr_stream *xdr, const utf8str_cis value)
812 {
813 	return xdrgen_encode_utf8string(xdr, value);
814 }
815 
816 static bool __maybe_unused
xdrgen_encode_utf8str_cs(struct xdr_stream * xdr,const utf8str_cs value)817 xdrgen_encode_utf8str_cs(struct xdr_stream *xdr, const utf8str_cs value)
818 {
819 	return xdrgen_encode_utf8string(xdr, value);
820 }
821 
822 static bool __maybe_unused
xdrgen_encode_utf8str_mixed(struct xdr_stream * xdr,const utf8str_mixed value)823 xdrgen_encode_utf8str_mixed(struct xdr_stream *xdr, const utf8str_mixed value)
824 {
825 	return xdrgen_encode_utf8string(xdr, value);
826 }
827 
828 static bool __maybe_unused
xdrgen_encode_component4(struct xdr_stream * xdr,const component4 value)829 xdrgen_encode_component4(struct xdr_stream *xdr, const component4 value)
830 {
831 	return xdrgen_encode_utf8str_cs(xdr, value);
832 }
833 
834 static bool __maybe_unused
xdrgen_encode_linktext4(struct xdr_stream * xdr,const linktext4 value)835 xdrgen_encode_linktext4(struct xdr_stream *xdr, const linktext4 value)
836 {
837 	return xdrgen_encode_utf8str_cs(xdr, value);
838 }
839 
840 static bool __maybe_unused
xdrgen_encode_pathname4(struct xdr_stream * xdr,const pathname4 value)841 xdrgen_encode_pathname4(struct xdr_stream *xdr, const pathname4 value)
842 {
843 	if (xdr_stream_encode_u32(xdr, value.count) != XDR_UNIT)
844 		return false;
845 	for (u32 i = 0; i < value.count; i++)
846 		if (!xdrgen_encode_component4(xdr, value.element[i]))
847 			return false;
848 	return true;
849 }
850 
851 static bool __maybe_unused
xdrgen_encode_nfstime4(struct xdr_stream * xdr,const struct nfstime4 * value)852 xdrgen_encode_nfstime4(struct xdr_stream *xdr, const struct nfstime4 *value)
853 {
854 	if (!xdrgen_encode_int64_t(xdr, value->seconds))
855 		return false;
856 	if (!xdrgen_encode_uint32_t(xdr, value->nseconds))
857 		return false;
858 	return true;
859 }
860 
861 static bool __maybe_unused
xdrgen_encode_fattr4(struct xdr_stream * xdr,const struct fattr4 * value)862 xdrgen_encode_fattr4(struct xdr_stream *xdr, const struct fattr4 *value)
863 {
864 	if (!xdrgen_encode_bitmap4(xdr, value->attrmask))
865 		return false;
866 	if (!xdrgen_encode_attrlist4(xdr, value->attr_vals))
867 		return false;
868 	return true;
869 }
870 
871 static bool __maybe_unused
xdrgen_encode_stateid4(struct xdr_stream * xdr,const struct stateid4 * value)872 xdrgen_encode_stateid4(struct xdr_stream *xdr, const struct stateid4 *value)
873 {
874 	if (!xdrgen_encode_uint32_t(xdr, value->seqid))
875 		return false;
876 	if (xdr_stream_encode_opaque_fixed(xdr, value->other, 12) < 0)
877 		return false;
878 	return true;
879 }
880 
881 static bool __maybe_unused
xdrgen_encode_fattr4_offline(struct xdr_stream * xdr,const fattr4_offline value)882 xdrgen_encode_fattr4_offline(struct xdr_stream *xdr, const fattr4_offline value)
883 {
884 	return xdrgen_encode_bool(xdr, value);
885 }
886 
887 static bool __maybe_unused
xdrgen_encode_open_arguments4(struct xdr_stream * xdr,const struct open_arguments4 * value)888 xdrgen_encode_open_arguments4(struct xdr_stream *xdr, const struct open_arguments4 *value)
889 {
890 	if (!xdrgen_encode_bitmap4(xdr, value->oa_share_access))
891 		return false;
892 	if (!xdrgen_encode_bitmap4(xdr, value->oa_share_deny))
893 		return false;
894 	if (!xdrgen_encode_bitmap4(xdr, value->oa_share_access_want))
895 		return false;
896 	if (!xdrgen_encode_bitmap4(xdr, value->oa_open_claim))
897 		return false;
898 	if (!xdrgen_encode_bitmap4(xdr, value->oa_create_mode))
899 		return false;
900 	return true;
901 }
902 
903 static bool __maybe_unused
xdrgen_encode_open_args_share_access4(struct xdr_stream * xdr,open_args_share_access4 value)904 xdrgen_encode_open_args_share_access4(struct xdr_stream *xdr, open_args_share_access4 value)
905 {
906 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
907 }
908 
909 static bool __maybe_unused
xdrgen_encode_open_args_share_deny4(struct xdr_stream * xdr,open_args_share_deny4 value)910 xdrgen_encode_open_args_share_deny4(struct xdr_stream *xdr, open_args_share_deny4 value)
911 {
912 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
913 }
914 
915 static bool __maybe_unused
xdrgen_encode_open_args_share_access_want4(struct xdr_stream * xdr,open_args_share_access_want4 value)916 xdrgen_encode_open_args_share_access_want4(struct xdr_stream *xdr, open_args_share_access_want4 value)
917 {
918 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
919 }
920 
921 static bool __maybe_unused
xdrgen_encode_open_args_open_claim4(struct xdr_stream * xdr,open_args_open_claim4 value)922 xdrgen_encode_open_args_open_claim4(struct xdr_stream *xdr, open_args_open_claim4 value)
923 {
924 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
925 }
926 
927 static bool __maybe_unused
xdrgen_encode_open_args_createmode4(struct xdr_stream * xdr,open_args_createmode4 value)928 xdrgen_encode_open_args_createmode4(struct xdr_stream *xdr, open_args_createmode4 value)
929 {
930 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
931 }
932 
933 bool
xdrgen_encode_fattr4_open_arguments(struct xdr_stream * xdr,const fattr4_open_arguments * value)934 xdrgen_encode_fattr4_open_arguments(struct xdr_stream *xdr, const fattr4_open_arguments *value)
935 {
936 	return xdrgen_encode_open_arguments4(xdr, value);
937 }
938 
939 bool
xdrgen_encode_fattr4_time_deleg_access(struct xdr_stream * xdr,const fattr4_time_deleg_access * value)940 xdrgen_encode_fattr4_time_deleg_access(struct xdr_stream *xdr, const fattr4_time_deleg_access *value)
941 {
942 	return xdrgen_encode_nfstime4(xdr, value);
943 }
944 
945 bool
xdrgen_encode_fattr4_time_deleg_modify(struct xdr_stream * xdr,const fattr4_time_deleg_modify * value)946 xdrgen_encode_fattr4_time_deleg_modify(struct xdr_stream *xdr, const fattr4_time_deleg_modify *value)
947 {
948 	return xdrgen_encode_nfstime4(xdr, value);
949 }
950 
951 static bool __maybe_unused
xdrgen_encode_open_delegation_type4(struct xdr_stream * xdr,open_delegation_type4 value)952 xdrgen_encode_open_delegation_type4(struct xdr_stream *xdr, open_delegation_type4 value)
953 {
954 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
955 }
956 
957 bool
xdrgen_encode_aclmodel4(struct xdr_stream * xdr,aclmodel4 value)958 xdrgen_encode_aclmodel4(struct xdr_stream *xdr, aclmodel4 value)
959 {
960 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
961 }
962 
963 bool
xdrgen_encode_aclscope4(struct xdr_stream * xdr,aclscope4 value)964 xdrgen_encode_aclscope4(struct xdr_stream *xdr, aclscope4 value)
965 {
966 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
967 }
968 
969 bool
xdrgen_encode_posixacetag4(struct xdr_stream * xdr,posixacetag4 value)970 xdrgen_encode_posixacetag4(struct xdr_stream *xdr, posixacetag4 value)
971 {
972 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
973 }
974 
975 bool
xdrgen_encode_posixaceperm4(struct xdr_stream * xdr,const posixaceperm4 value)976 xdrgen_encode_posixaceperm4(struct xdr_stream *xdr, const posixaceperm4 value)
977 {
978 	return xdrgen_encode_uint32_t(xdr, value);
979 }
980 
981 static bool __maybe_unused
xdrgen_encode_posixace4(struct xdr_stream * xdr,const struct posixace4 * value)982 xdrgen_encode_posixace4(struct xdr_stream *xdr, const struct posixace4 *value)
983 {
984 	if (!xdrgen_encode_posixacetag4(xdr, value->tag))
985 		return false;
986 	if (!xdrgen_encode_posixaceperm4(xdr, value->perm))
987 		return false;
988 	if (!xdrgen_encode_utf8str_mixed(xdr, value->who))
989 		return false;
990 	return true;
991 }
992 
993 static bool __maybe_unused
xdrgen_encode_fattr4_acl_trueform(struct xdr_stream * xdr,const fattr4_acl_trueform value)994 xdrgen_encode_fattr4_acl_trueform(struct xdr_stream *xdr, const fattr4_acl_trueform value)
995 {
996 	return xdrgen_encode_aclmodel4(xdr, value);
997 }
998 
999 static bool __maybe_unused
xdrgen_encode_fattr4_acl_trueform_scope(struct xdr_stream * xdr,const fattr4_acl_trueform_scope value)1000 xdrgen_encode_fattr4_acl_trueform_scope(struct xdr_stream *xdr, const fattr4_acl_trueform_scope value)
1001 {
1002 	return xdrgen_encode_aclscope4(xdr, value);
1003 }
1004 
1005 static bool __maybe_unused
xdrgen_encode_fattr4_posix_default_acl(struct xdr_stream * xdr,const fattr4_posix_default_acl value)1006 xdrgen_encode_fattr4_posix_default_acl(struct xdr_stream *xdr, const fattr4_posix_default_acl value)
1007 {
1008 	if (xdr_stream_encode_u32(xdr, value.count) != XDR_UNIT)
1009 		return false;
1010 	for (u32 i = 0; i < value.count; i++)
1011 		if (!xdrgen_encode_posixace4(xdr, &value.element[i]))
1012 			return false;
1013 	return true;
1014 }
1015 
1016 static bool __maybe_unused
xdrgen_encode_fattr4_posix_access_acl(struct xdr_stream * xdr,const fattr4_posix_access_acl value)1017 xdrgen_encode_fattr4_posix_access_acl(struct xdr_stream *xdr, const fattr4_posix_access_acl value)
1018 {
1019 	if (xdr_stream_encode_u32(xdr, value.count) != XDR_UNIT)
1020 		return false;
1021 	for (u32 i = 0; i < value.count; i++)
1022 		if (!xdrgen_encode_posixace4(xdr, &value.element[i]))
1023 			return false;
1024 	return true;
1025 }
1026 
1027 static bool __maybe_unused
xdrgen_encode_notify_type4(struct xdr_stream * xdr,notify_type4 value)1028 xdrgen_encode_notify_type4(struct xdr_stream *xdr, notify_type4 value)
1029 {
1030 	return xdr_stream_encode_u32(xdr, value) == XDR_UNIT;
1031 }
1032 
1033 static bool __maybe_unused
xdrgen_encode_notify_entry4(struct xdr_stream * xdr,const struct notify_entry4 * value)1034 xdrgen_encode_notify_entry4(struct xdr_stream *xdr, const struct notify_entry4 *value)
1035 {
1036 	if (!xdrgen_encode_component4(xdr, value->ne_file))
1037 		return false;
1038 	if (!xdrgen_encode_fattr4(xdr, &value->ne_attrs))
1039 		return false;
1040 	return true;
1041 }
1042 
1043 static bool __maybe_unused
xdrgen_encode_prev_entry4(struct xdr_stream * xdr,const struct prev_entry4 * value)1044 xdrgen_encode_prev_entry4(struct xdr_stream *xdr, const struct prev_entry4 *value)
1045 {
1046 	if (!xdrgen_encode_notify_entry4(xdr, &value->pe_prev_entry))
1047 		return false;
1048 	if (!xdrgen_encode_nfs_cookie4(xdr, value->pe_prev_entry_cookie))
1049 		return false;
1050 	return true;
1051 }
1052 
1053 bool
xdrgen_encode_notify_remove4(struct xdr_stream * xdr,const struct notify_remove4 * value)1054 xdrgen_encode_notify_remove4(struct xdr_stream *xdr, const struct notify_remove4 *value)
1055 {
1056 	if (!xdrgen_encode_notify_entry4(xdr, &value->nrm_old_entry))
1057 		return false;
1058 	if (!xdrgen_encode_nfs_cookie4(xdr, value->nrm_old_entry_cookie))
1059 		return false;
1060 	return true;
1061 }
1062 
1063 bool
xdrgen_encode_notify_add4(struct xdr_stream * xdr,const struct notify_add4 * value)1064 xdrgen_encode_notify_add4(struct xdr_stream *xdr, const struct notify_add4 *value)
1065 {
1066 	if (value->nad_old_entry.count > 1)
1067 		return false;
1068 	if (xdr_stream_encode_u32(xdr, value->nad_old_entry.count) != XDR_UNIT)
1069 		return false;
1070 	for (u32 i = 0; i < value->nad_old_entry.count; i++)
1071 		if (!xdrgen_encode_notify_remove4(xdr, &value->nad_old_entry.element[i]))
1072 			return false;
1073 	if (!xdrgen_encode_notify_entry4(xdr, &value->nad_new_entry))
1074 		return false;
1075 	if (value->nad_new_entry_cookie.count > 1)
1076 		return false;
1077 	if (xdr_stream_encode_u32(xdr, value->nad_new_entry_cookie.count) != XDR_UNIT)
1078 		return false;
1079 	for (u32 i = 0; i < value->nad_new_entry_cookie.count; i++)
1080 		if (!xdrgen_encode_nfs_cookie4(xdr, value->nad_new_entry_cookie.element[i]))
1081 			return false;
1082 	if (value->nad_prev_entry.count > 1)
1083 		return false;
1084 	if (xdr_stream_encode_u32(xdr, value->nad_prev_entry.count) != XDR_UNIT)
1085 		return false;
1086 	for (u32 i = 0; i < value->nad_prev_entry.count; i++)
1087 		if (!xdrgen_encode_prev_entry4(xdr, &value->nad_prev_entry.element[i]))
1088 			return false;
1089 	if (!xdrgen_encode_bool(xdr, value->nad_last_entry))
1090 		return false;
1091 	return true;
1092 }
1093 
1094 bool
xdrgen_encode_notify_attr4(struct xdr_stream * xdr,const struct notify_attr4 * value)1095 xdrgen_encode_notify_attr4(struct xdr_stream *xdr, const struct notify_attr4 *value)
1096 {
1097 	if (!xdrgen_encode_notify_entry4(xdr, &value->na_changed_entry))
1098 		return false;
1099 	return true;
1100 }
1101 
1102 bool
xdrgen_encode_notify_rename4(struct xdr_stream * xdr,const struct notify_rename4 * value)1103 xdrgen_encode_notify_rename4(struct xdr_stream *xdr, const struct notify_rename4 *value)
1104 {
1105 	if (!xdrgen_encode_notify_remove4(xdr, &value->nrn_old_entry))
1106 		return false;
1107 	if (!xdrgen_encode_notify_add4(xdr, &value->nrn_new_entry))
1108 		return false;
1109 	return true;
1110 }
1111 
1112 static bool __maybe_unused
xdrgen_encode_notify_verifier4(struct xdr_stream * xdr,const struct notify_verifier4 * value)1113 xdrgen_encode_notify_verifier4(struct xdr_stream *xdr, const struct notify_verifier4 *value)
1114 {
1115 	if (!xdrgen_encode_verifier4(xdr, value->nv_old_cookieverf))
1116 		return false;
1117 	if (!xdrgen_encode_verifier4(xdr, value->nv_new_cookieverf))
1118 		return false;
1119 	return true;
1120 }
1121 
1122 static bool __maybe_unused
xdrgen_encode_notifylist4(struct xdr_stream * xdr,const notifylist4 value)1123 xdrgen_encode_notifylist4(struct xdr_stream *xdr, const notifylist4 value)
1124 {
1125 	return xdr_stream_encode_opaque(xdr, value.data, value.len) >= 0;
1126 }
1127 
1128 static bool __maybe_unused
xdrgen_encode_notify4(struct xdr_stream * xdr,const struct notify4 * value)1129 xdrgen_encode_notify4(struct xdr_stream *xdr, const struct notify4 *value)
1130 {
1131 	if (!xdrgen_encode_bitmap4(xdr, value->notify_mask))
1132 		return false;
1133 	if (!xdrgen_encode_notifylist4(xdr, value->notify_vals))
1134 		return false;
1135 	return true;
1136 }
1137 
1138 bool
xdrgen_encode_CB_NOTIFY4args(struct xdr_stream * xdr,const struct CB_NOTIFY4args * value)1139 xdrgen_encode_CB_NOTIFY4args(struct xdr_stream *xdr, const struct CB_NOTIFY4args *value)
1140 {
1141 	if (!xdrgen_encode_stateid4(xdr, &value->cna_stateid))
1142 		return false;
1143 	if (!xdrgen_encode_nfs_fh4(xdr, value->cna_fh))
1144 		return false;
1145 	if (xdr_stream_encode_u32(xdr, value->cna_changes.count) != XDR_UNIT)
1146 		return false;
1147 	for (u32 i = 0; i < value->cna_changes.count; i++)
1148 		if (!xdrgen_encode_notify4(xdr, &value->cna_changes.element[i]))
1149 			return false;
1150 	return true;
1151 }
1152 
1153 static bool __maybe_unused
xdrgen_encode_CB_NOTIFY4res(struct xdr_stream * xdr,const struct CB_NOTIFY4res * value)1154 xdrgen_encode_CB_NOTIFY4res(struct xdr_stream *xdr, const struct CB_NOTIFY4res *value)
1155 {
1156 	if (!xdrgen_encode_nfsstat4(xdr, value->cnr_status))
1157 		return false;
1158 	return true;
1159 }
1160