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