fidl_fuchsia_net_interfaces_admin__common/
fidl_fuchsia_net_interfaces_admin__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Reasons from IP address removal.
12#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum AddressRemovalReason {
15    /// The address is not a valid address.
16    Invalid = 1,
17    /// The address is already assigned to the interface.
18    AlreadyAssigned = 2,
19    /// Duplicate Address Detection failed.
20    ///
21    /// A neighbor was found to hold the address.
22    DadFailed = 3,
23    /// The address was removed as a result of the interface being removed.
24    InterfaceRemoved = 4,
25    /// The address was removed from the interface by user action.
26    UserRemoved = 5,
27    /// Invalid address properties or parameters during addition or properties
28    /// update.
29    InvalidProperties = 6,
30    /// The address was voluntarily forfeited.
31    ///
32    /// While performing ongoing address conflict detection, a neighbor was
33    /// found to be using the address. This error is similar to `DAD_FAILED`,
34    /// except that it may occur at any time after the address becomes assigned.
35    Forfeited = 7,
36}
37
38impl AddressRemovalReason {
39    #[inline]
40    pub fn from_primitive(prim: u32) -> Option<Self> {
41        match prim {
42            1 => Some(Self::Invalid),
43            2 => Some(Self::AlreadyAssigned),
44            3 => Some(Self::DadFailed),
45            4 => Some(Self::InterfaceRemoved),
46            5 => Some(Self::UserRemoved),
47            6 => Some(Self::InvalidProperties),
48            7 => Some(Self::Forfeited),
49            _ => None,
50        }
51    }
52
53    #[inline]
54    pub const fn into_primitive(self) -> u32 {
55        self as u32
56    }
57}
58
59#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
60pub enum ControlDisableError {
61    #[doc(hidden)]
62    __SourceBreaking { unknown_ordinal: u32 },
63}
64
65/// Pattern that matches an unknown `ControlDisableError` member.
66#[macro_export]
67macro_rules! ControlDisableErrorUnknown {
68    () => {
69        _
70    };
71}
72
73impl ControlDisableError {
74    #[inline]
75    pub fn from_primitive(prim: u32) -> Option<Self> {
76        match prim {
77            _ => None,
78        }
79    }
80
81    #[inline]
82    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
83        match prim {
84            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
85        }
86    }
87
88    #[inline]
89    pub fn unknown() -> Self {
90        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
91    }
92
93    #[inline]
94    pub const fn into_primitive(self) -> u32 {
95        match self {
96            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
97        }
98    }
99
100    #[inline]
101    pub fn is_unknown(&self) -> bool {
102        match self {
103            Self::__SourceBreaking { unknown_ordinal: _ } => true,
104        }
105    }
106}
107
108#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
109pub enum ControlEnableError {
110    #[doc(hidden)]
111    __SourceBreaking { unknown_ordinal: u32 },
112}
113
114/// Pattern that matches an unknown `ControlEnableError` member.
115#[macro_export]
116macro_rules! ControlEnableErrorUnknown {
117    () => {
118        _
119    };
120}
121
122impl ControlEnableError {
123    #[inline]
124    pub fn from_primitive(prim: u32) -> Option<Self> {
125        match prim {
126            _ => None,
127        }
128    }
129
130    #[inline]
131    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
132        match prim {
133            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
134        }
135    }
136
137    #[inline]
138    pub fn unknown() -> Self {
139        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
140    }
141
142    #[inline]
143    pub const fn into_primitive(self) -> u32 {
144        match self {
145            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
146        }
147    }
148
149    #[inline]
150    pub fn is_unknown(&self) -> bool {
151        match self {
152            Self::__SourceBreaking { unknown_ordinal: _ } => true,
153        }
154    }
155}
156
157#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
158pub enum ControlGetConfigurationError {
159    #[doc(hidden)]
160    __SourceBreaking { unknown_ordinal: u32 },
161}
162
163/// Pattern that matches an unknown `ControlGetConfigurationError` member.
164#[macro_export]
165macro_rules! ControlGetConfigurationErrorUnknown {
166    () => {
167        _
168    };
169}
170
171impl ControlGetConfigurationError {
172    #[inline]
173    pub fn from_primitive(prim: u32) -> Option<Self> {
174        match prim {
175            _ => None,
176        }
177    }
178
179    #[inline]
180    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
181        match prim {
182            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
183        }
184    }
185
186    #[inline]
187    pub fn unknown() -> Self {
188        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
189    }
190
191    #[inline]
192    pub const fn into_primitive(self) -> u32 {
193        match self {
194            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
195        }
196    }
197
198    #[inline]
199    pub fn is_unknown(&self) -> bool {
200        match self {
201            Self::__SourceBreaking { unknown_ordinal: _ } => true,
202        }
203    }
204}
205
206#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
207pub enum ControlRemoveAddressError {
208    #[doc(hidden)]
209    __SourceBreaking { unknown_ordinal: u32 },
210}
211
212/// Pattern that matches an unknown `ControlRemoveAddressError` member.
213#[macro_export]
214macro_rules! ControlRemoveAddressErrorUnknown {
215    () => {
216        _
217    };
218}
219
220impl ControlRemoveAddressError {
221    #[inline]
222    pub fn from_primitive(prim: u32) -> Option<Self> {
223        match prim {
224            _ => None,
225        }
226    }
227
228    #[inline]
229    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
230        match prim {
231            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
232        }
233    }
234
235    #[inline]
236    pub fn unknown() -> Self {
237        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
238    }
239
240    #[inline]
241    pub const fn into_primitive(self) -> u32 {
242        match self {
243            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
244        }
245    }
246
247    #[inline]
248    pub fn is_unknown(&self) -> bool {
249        match self {
250            Self::__SourceBreaking { unknown_ordinal: _ } => true,
251        }
252    }
253}
254
255#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
256pub enum ControlRemoveError {
257    /// This interface can't be removed.
258    NotAllowed,
259    #[doc(hidden)]
260    __SourceBreaking { unknown_ordinal: u32 },
261}
262
263/// Pattern that matches an unknown `ControlRemoveError` member.
264#[macro_export]
265macro_rules! ControlRemoveErrorUnknown {
266    () => {
267        _
268    };
269}
270
271impl ControlRemoveError {
272    #[inline]
273    pub fn from_primitive(prim: u32) -> Option<Self> {
274        match prim {
275            1 => Some(Self::NotAllowed),
276            _ => None,
277        }
278    }
279
280    #[inline]
281    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
282        match prim {
283            1 => Self::NotAllowed,
284            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
285        }
286    }
287
288    #[inline]
289    pub fn unknown() -> Self {
290        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
291    }
292
293    #[inline]
294    pub const fn into_primitive(self) -> u32 {
295        match self {
296            Self::NotAllowed => 1,
297            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
298        }
299    }
300
301    #[inline]
302    pub fn is_unknown(&self) -> bool {
303        match self {
304            Self::__SourceBreaking { unknown_ordinal: _ } => true,
305            _ => false,
306        }
307    }
308}
309
310#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
311pub enum ControlSetConfigurationError {
312    /// Indicates that the provided value for `config.ipv4.forwarding` is
313    /// unsupported.
314    Ipv4ForwardingUnsupported,
315    /// Indicates that the provided value for `config.ipv4.multicast_forwarding`
316    /// is unsupported.
317    Ipv4MulticastForwardingUnsupported,
318    /// Indicates that the provided value for `config.ipv4.igmp.version` is
319    /// unsupported.
320    Ipv4IgmpVersionUnsupported,
321    /// Indicates that the provided value for `config.ipv6.forwarding` is
322    /// unsupported.
323    Ipv6ForwardingUnsupported,
324    /// Indicates that the provided value for `config.ipv6.multicast_forwarding`
325    /// is unsupported.
326    Ipv6MulticastForwardingUnsupported,
327    /// Indicates that the provided value for `config.ipv6.mld.version` is
328    /// unsupported.
329    Ipv6MldVersionUnsupported,
330    /// Indicates that a zero value was provided for a field that must be
331    /// nonzero.
332    IllegalZeroValue,
333    /// Indicates that ARP configurations are not supported for this device.
334    ///
335    /// Devices without a link (notably loopback) do not support ARP.
336    ArpNotSupported,
337    /// Indicates that NDP configurations are not supported for this device.
338    ///
339    /// Devices without a link (notably loopback) do not support NDP.
340    NdpNotSupported,
341    /// Indicates that a negative value was provided for a field that must be
342    /// non-negative.
343    IllegalNegativeValue,
344    #[doc(hidden)]
345    __SourceBreaking { unknown_ordinal: u32 },
346}
347
348/// Pattern that matches an unknown `ControlSetConfigurationError` member.
349#[macro_export]
350macro_rules! ControlSetConfigurationErrorUnknown {
351    () => {
352        _
353    };
354}
355
356impl ControlSetConfigurationError {
357    #[inline]
358    pub fn from_primitive(prim: u32) -> Option<Self> {
359        match prim {
360            1 => Some(Self::Ipv4ForwardingUnsupported),
361            2 => Some(Self::Ipv4MulticastForwardingUnsupported),
362            3 => Some(Self::Ipv4IgmpVersionUnsupported),
363            4 => Some(Self::Ipv6ForwardingUnsupported),
364            5 => Some(Self::Ipv6MulticastForwardingUnsupported),
365            6 => Some(Self::Ipv6MldVersionUnsupported),
366            7 => Some(Self::IllegalZeroValue),
367            8 => Some(Self::ArpNotSupported),
368            9 => Some(Self::NdpNotSupported),
369            10 => Some(Self::IllegalNegativeValue),
370            _ => None,
371        }
372    }
373
374    #[inline]
375    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
376        match prim {
377            1 => Self::Ipv4ForwardingUnsupported,
378            2 => Self::Ipv4MulticastForwardingUnsupported,
379            3 => Self::Ipv4IgmpVersionUnsupported,
380            4 => Self::Ipv6ForwardingUnsupported,
381            5 => Self::Ipv6MulticastForwardingUnsupported,
382            6 => Self::Ipv6MldVersionUnsupported,
383            7 => Self::IllegalZeroValue,
384            8 => Self::ArpNotSupported,
385            9 => Self::NdpNotSupported,
386            10 => Self::IllegalNegativeValue,
387            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
388        }
389    }
390
391    #[inline]
392    pub fn unknown() -> Self {
393        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
394    }
395
396    #[inline]
397    pub const fn into_primitive(self) -> u32 {
398        match self {
399            Self::Ipv4ForwardingUnsupported => 1,
400            Self::Ipv4MulticastForwardingUnsupported => 2,
401            Self::Ipv4IgmpVersionUnsupported => 3,
402            Self::Ipv6ForwardingUnsupported => 4,
403            Self::Ipv6MulticastForwardingUnsupported => 5,
404            Self::Ipv6MldVersionUnsupported => 6,
405            Self::IllegalZeroValue => 7,
406            Self::ArpNotSupported => 8,
407            Self::NdpNotSupported => 9,
408            Self::IllegalNegativeValue => 10,
409            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
410        }
411    }
412
413    #[inline]
414    pub fn is_unknown(&self) -> bool {
415        match self {
416            Self::__SourceBreaking { unknown_ordinal: _ } => true,
417            _ => false,
418        }
419    }
420}
421
422#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
423pub enum IgmpVersion {
424    /// IGMPv1.
425    V1,
426    /// IGMPv2.
427    V2,
428    /// IGMPv3.
429    V3,
430    #[doc(hidden)]
431    __SourceBreaking { unknown_ordinal: u8 },
432}
433
434/// Pattern that matches an unknown `IgmpVersion` member.
435#[macro_export]
436macro_rules! IgmpVersionUnknown {
437    () => {
438        _
439    };
440}
441
442impl IgmpVersion {
443    #[inline]
444    pub fn from_primitive(prim: u8) -> Option<Self> {
445        match prim {
446            1 => Some(Self::V1),
447            2 => Some(Self::V2),
448            3 => Some(Self::V3),
449            _ => None,
450        }
451    }
452
453    #[inline]
454    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
455        match prim {
456            1 => Self::V1,
457            2 => Self::V2,
458            3 => Self::V3,
459            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
460        }
461    }
462
463    #[inline]
464    pub fn unknown() -> Self {
465        Self::__SourceBreaking { unknown_ordinal: 0xff }
466    }
467
468    #[inline]
469    pub const fn into_primitive(self) -> u8 {
470        match self {
471            Self::V1 => 1,
472            Self::V2 => 2,
473            Self::V3 => 3,
474            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
475        }
476    }
477
478    #[inline]
479    pub fn is_unknown(&self) -> bool {
480        match self {
481            Self::__SourceBreaking { unknown_ordinal: _ } => true,
482            _ => false,
483        }
484    }
485}
486
487#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
488pub enum InterfaceRemovedReason {
489    /// Interface failed to be instantiated because the requested name
490    /// is in use.
491    DuplicateName,
492    /// The requested port is already bound to an interface.
493    PortAlreadyBound,
494    /// The provided device port can't be made into an interface because
495    /// of incompatible configuration.
496    BadPort,
497    /// The device port backing this interface has been closed.
498    PortClosed,
499    /// Administrative user action removed the interface.
500    User,
501    /// The netstack managed routes designation is invalid when creating
502    /// the interface.
503    InvalidNetstackManagedRoutesDesignation,
504    /// Cannot create a local route table as requested for the interface.
505    LocalRouteTableUnavailable,
506    #[doc(hidden)]
507    __SourceBreaking { unknown_ordinal: u32 },
508}
509
510/// Pattern that matches an unknown `InterfaceRemovedReason` member.
511#[macro_export]
512macro_rules! InterfaceRemovedReasonUnknown {
513    () => {
514        _
515    };
516}
517
518impl InterfaceRemovedReason {
519    #[inline]
520    pub fn from_primitive(prim: u32) -> Option<Self> {
521        match prim {
522            1 => Some(Self::DuplicateName),
523            2 => Some(Self::PortAlreadyBound),
524            3 => Some(Self::BadPort),
525            4 => Some(Self::PortClosed),
526            5 => Some(Self::User),
527            6 => Some(Self::InvalidNetstackManagedRoutesDesignation),
528            7 => Some(Self::LocalRouteTableUnavailable),
529            _ => None,
530        }
531    }
532
533    #[inline]
534    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
535        match prim {
536            1 => Self::DuplicateName,
537            2 => Self::PortAlreadyBound,
538            3 => Self::BadPort,
539            4 => Self::PortClosed,
540            5 => Self::User,
541            6 => Self::InvalidNetstackManagedRoutesDesignation,
542            7 => Self::LocalRouteTableUnavailable,
543            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
544        }
545    }
546
547    #[inline]
548    pub fn unknown() -> Self {
549        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
550    }
551
552    #[inline]
553    pub const fn into_primitive(self) -> u32 {
554        match self {
555            Self::DuplicateName => 1,
556            Self::PortAlreadyBound => 2,
557            Self::BadPort => 3,
558            Self::PortClosed => 4,
559            Self::User => 5,
560            Self::InvalidNetstackManagedRoutesDesignation => 6,
561            Self::LocalRouteTableUnavailable => 7,
562            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
563        }
564    }
565
566    #[inline]
567    pub fn is_unknown(&self) -> bool {
568        match self {
569            Self::__SourceBreaking { unknown_ordinal: _ } => true,
570            _ => false,
571        }
572    }
573}
574
575#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
576pub enum MldVersion {
577    /// MLDv1.
578    V1,
579    /// MLDv2.
580    V2,
581    #[doc(hidden)]
582    __SourceBreaking { unknown_ordinal: u8 },
583}
584
585/// Pattern that matches an unknown `MldVersion` member.
586#[macro_export]
587macro_rules! MldVersionUnknown {
588    () => {
589        _
590    };
591}
592
593impl MldVersion {
594    #[inline]
595    pub fn from_primitive(prim: u8) -> Option<Self> {
596        match prim {
597            1 => Some(Self::V1),
598            2 => Some(Self::V2),
599            _ => None,
600        }
601    }
602
603    #[inline]
604    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
605        match prim {
606            1 => Self::V1,
607            2 => Self::V2,
608            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
609        }
610    }
611
612    #[inline]
613    pub fn unknown() -> Self {
614        Self::__SourceBreaking { unknown_ordinal: 0xff }
615    }
616
617    #[inline]
618    pub const fn into_primitive(self) -> u8 {
619        match self {
620            Self::V1 => 1,
621            Self::V2 => 2,
622            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
623        }
624    }
625
626    #[inline]
627    pub fn is_unknown(&self) -> bool {
628        match self {
629            Self::__SourceBreaking { unknown_ordinal: _ } => true,
630            _ => false,
631        }
632    }
633}
634
635#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
636pub struct AddressStateProviderOnAddressRemovedRequest {
637    pub error: AddressRemovalReason,
638}
639
640impl fidl::Persistable for AddressStateProviderOnAddressRemovedRequest {}
641
642#[derive(Clone, Debug, PartialEq)]
643pub struct AddressStateProviderUpdateAddressPropertiesRequest {
644    pub address_properties: AddressProperties,
645}
646
647impl fidl::Persistable for AddressStateProviderUpdateAddressPropertiesRequest {}
648
649#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
650pub struct AddressStateProviderWatchAddressAssignmentStateResponse {
651    pub assignment_state: fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
652}
653
654impl fidl::Persistable for AddressStateProviderWatchAddressAssignmentStateResponse {}
655
656#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
657#[repr(C)]
658pub struct ControlGetIdResponse {
659    pub id: u64,
660}
661
662impl fidl::Persistable for ControlGetIdResponse {}
663
664#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
665pub struct ControlOnInterfaceRemovedRequest {
666    pub reason: InterfaceRemovedReason,
667}
668
669impl fidl::Persistable for ControlOnInterfaceRemovedRequest {}
670
671#[derive(Clone, Debug, PartialEq)]
672pub struct ControlRemoveAddressRequest {
673    pub address: fidl_fuchsia_net__common::Subnet,
674}
675
676impl fidl::Persistable for ControlRemoveAddressRequest {}
677
678#[derive(Clone, Debug, PartialEq)]
679pub struct ControlSetConfigurationRequest {
680    pub config: Configuration,
681}
682
683impl fidl::Persistable for ControlSetConfigurationRequest {}
684
685#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
686pub struct ControlDisableResponse {
687    pub did_disable: bool,
688}
689
690impl fidl::Persistable for ControlDisableResponse {}
691
692#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
693pub struct ControlEnableResponse {
694    pub did_enable: bool,
695}
696
697impl fidl::Persistable for ControlEnableResponse {}
698
699#[derive(Clone, Debug, PartialEq)]
700pub struct ControlGetConfigurationResponse {
701    pub config: Configuration,
702}
703
704impl fidl::Persistable for ControlGetConfigurationResponse {}
705
706#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
707pub struct ControlRemoveAddressResponse {
708    pub did_remove: bool,
709}
710
711impl fidl::Persistable for ControlRemoveAddressResponse {}
712
713#[derive(Clone, Debug, PartialEq)]
714pub struct ControlSetConfigurationResponse {
715    pub previous_config: Configuration,
716}
717
718impl fidl::Persistable for ControlSetConfigurationResponse {}
719
720#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
721pub struct Empty;
722
723impl fidl::Persistable for Empty {}
724
725/// Address assignment parameters.
726#[derive(Clone, Debug, Default, PartialEq)]
727pub struct AddressParameters {
728    /// The initial properties of the address.
729    ///
730    /// If not set, interpreted as an empty `AddressProperties`.
731    pub initial_properties: Option<AddressProperties>,
732    /// True if the address is temporary.
733    ///
734    /// A temporary address is intended to be used for a short period of time
735    /// (hours to days), and its lifetime may not be extended, as detailed in
736    /// [RFC 4941](https://tools.ietf.org/html/rfc4941).
737    ///
738    /// Both temporary and non-temporary addresses have preferred and valid
739    /// lifetimes, but temporary addresses may not be renewed beyond their
740    /// initial lifetime.
741    ///
742    /// Information used in source address selection; temporary addresses are
743    /// preferred over non-temporary addresses if both types are available, as
744    /// detailed in
745    /// [RFC 6724, section 5](https://tools.ietf.org/html/rfc6724#section-5).
746    ///
747    /// If not set, interpreted as false.
748    pub temporary: Option<bool>,
749    /// True if the subnet route corresponding to the address should be
750    /// installed, and removed once the address is removed.
751    ///
752    /// For example, if `Control#AddAddress` is called with 192.168.1.5/24, and
753    /// `add_subnet_route` is true, then a route with destination 192.168.1.0/24
754    /// will be installed through the interface the address is being added to.
755    /// If the address is removed for any reason, the route will also be
756    /// removed.
757    ///
758    /// The subnet route is always installed in the main table (see
759    /// https://fxbug.dev/42074223#c13 for more details). In the future, we
760    /// should allow the user of this API to specify where the route should be
761    /// installed and provide proof of access.
762    pub add_subnet_route: Option<bool>,
763    /// True if Duplicate Address Detection (DAD) should be performed.
764    ///
765    /// For IPv6, DAD is defined in RFC 4862, Section 5.4.
766    ///
767    /// For IPv4, Address Conflict Detection (ACD) is defined in RFC 5227. For
768    /// simplicity's sake, both specifications are refered to as DAD on this
769    /// API.
770    ///
771    /// If not set, interpreted as `true` for IPv6 addresses, and `false` for
772    /// IPv4 addresses.
773    ///
774    /// Note, the `fuchsia.net.interfaces.admin/Control` API allows setting
775    /// per-interface DAD configuration. DAD will only be performed for a given
776    /// address if its interface's configuration allows for it. Setting this
777    /// property to `true` will not override the interface's DAD configuration.
778    pub perform_dad: Option<bool>,
779    #[doc(hidden)]
780    pub __source_breaking: fidl::marker::SourceBreaking,
781}
782
783impl fidl::Persistable for AddressParameters {}
784
785/// Properties of an IP address.
786#[derive(Clone, Debug, Default, PartialEq)]
787pub struct AddressProperties {
788    /// Information about the preferred lifetime of the address.
789    ///
790    /// If not set, interpreted as
791    /// `PreferredLifetimeInfo.preferred_lifetime_end = zx.Time.INFINITE`.
792    pub preferred_lifetime_info: Option<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo>,
793    /// The end of the valid lifetime of the address.
794    ///
795    /// The address should *not* be considered invalid if `zx.Time` is in the
796    /// past. `valid_lifetime_end` is exchanged as a means to inform the
797    /// deadline where invalidation is expected to happen.
798    ///
799    /// Refers to the valid lifetime of the address, as defined in
800    /// [RFC 4862, section 2](https://tools.ietf.org/html/rfc4862#section-2).
801    ///
802    /// Must be greater than 0. If `zx.Time.INFINITE`, the valid lifetime does
803    /// not expire.
804    ///
805    /// If not set, interpreted as `zx.Time.INFINITE`.
806    pub valid_lifetime_end: Option<i64>,
807    #[doc(hidden)]
808    pub __source_breaking: fidl::marker::SourceBreaking,
809}
810
811impl fidl::Persistable for AddressProperties {}
812
813#[derive(Clone, Debug, Default, PartialEq)]
814pub struct ArpConfiguration {
815    /// Neighbor Unreachabilty Detection over ARP configuration.
816    pub nud: Option<NudConfiguration>,
817    /// Duplicate Address Detection over ARP configuration.
818    ///
819    /// Note that for IPv4, "Duplicate Address Detection" refers to
820    /// Address Conflict Detection, as defined in RFC 5227.
821    pub dad: Option<DadConfiguration>,
822    #[doc(hidden)]
823    pub __source_breaking: fidl::marker::SourceBreaking,
824}
825
826impl fidl::Persistable for ArpConfiguration {}
827
828/// The configuration for an interface.
829#[derive(Clone, Debug, Default, PartialEq)]
830pub struct Configuration {
831    /// The IPv4 configuration for an interface.
832    pub ipv4: Option<Ipv4Configuration>,
833    /// The IPv6 configuration for an interface.
834    pub ipv6: Option<Ipv6Configuration>,
835    #[doc(hidden)]
836    pub __source_breaking: fidl::marker::SourceBreaking,
837}
838
839impl fidl::Persistable for Configuration {}
840
841/// DAD (Duplicate Address Detection) configuration for an interface.
842#[derive(Clone, Debug, Default, PartialEq)]
843pub struct DadConfiguration {
844    /// Number of transmissions before an address is considered available for
845    /// use.
846    ///
847    /// A value of zero effectively disables DAD for the interface.
848    pub transmits: Option<u16>,
849    #[doc(hidden)]
850    pub __source_breaking: fidl::marker::SourceBreaking,
851}
852
853impl fidl::Persistable for DadConfiguration {}
854
855#[derive(Clone, Debug, Default, PartialEq)]
856pub struct IgmpConfiguration {
857    /// Indicates the version of IGMP to be performed.
858    ///
859    /// Note that the stack may perform lower versioned IGMP as required
860    /// for backwards compatibility with other nodes on the network per
861    /// IGMP requirements.
862    pub version: Option<IgmpVersion>,
863    #[doc(hidden)]
864    pub __source_breaking: fidl::marker::SourceBreaking,
865}
866
867impl fidl::Persistable for IgmpConfiguration {}
868
869#[derive(Clone, Debug, Default, PartialEq)]
870pub struct Ipv4Configuration {
871    /// Controls whether or not IPv4 unicast packets may be forwarded if not
872    /// destined to the host.
873    pub unicast_forwarding: Option<bool>,
874    /// Controls whether or not IPv4 multicast packets may be forwarded.
875    pub multicast_forwarding: Option<bool>,
876    /// Controls IGMP configuration.
877    pub igmp: Option<IgmpConfiguration>,
878    /// Controls ARP configuration.
879    pub arp: Option<ArpConfiguration>,
880    /// Controls whether or not IPv4 is enabled on the interface.
881    ///
882    /// If set to false, IPv4 is disabled on the interface.
883    pub enabled: Option<bool>,
884    #[doc(hidden)]
885    pub __source_breaking: fidl::marker::SourceBreaking,
886}
887
888impl fidl::Persistable for Ipv4Configuration {}
889
890#[derive(Clone, Debug, Default, PartialEq)]
891pub struct Ipv6Configuration {
892    /// Controls whether or not IPv6 unicast packets may be forwarded if not
893    /// destined to the host.
894    pub unicast_forwarding: Option<bool>,
895    /// Controls whether or not IPv6 multicast packets may be forwarded.
896    pub multicast_forwarding: Option<bool>,
897    /// Controls MLD configuration.
898    pub mld: Option<MldConfiguration>,
899    /// Controls NDP configuration.
900    pub ndp: Option<NdpConfiguration>,
901    /// Controls whether or not IPv6 is enabled on the interface.
902    ///
903    /// If set to false, IPv6 is disabled on the interface.
904    pub enabled: Option<bool>,
905    #[doc(hidden)]
906    pub __source_breaking: fidl::marker::SourceBreaking,
907}
908
909impl fidl::Persistable for Ipv6Configuration {}
910
911#[derive(Clone, Debug, Default, PartialEq)]
912pub struct MldConfiguration {
913    /// Indicates the version of MLD to be performed.
914    ///
915    /// Note that the stack may perform lower versioned MLD as required
916    /// for backwards compatibility with other nodes on the network per
917    /// MLD requirements.
918    pub version: Option<MldVersion>,
919    #[doc(hidden)]
920    pub __source_breaking: fidl::marker::SourceBreaking,
921}
922
923impl fidl::Persistable for MldConfiguration {}
924
925#[derive(Clone, Debug, Default, PartialEq)]
926pub struct NdpConfiguration {
927    /// Neighbor Unreachabilty Detection over NDP configuration.
928    pub nud: Option<NudConfiguration>,
929    /// Duplicate Address Detection over NDP configuration.
930    pub dad: Option<DadConfiguration>,
931    /// SLAAC (Stateless Address Auto-configuration) configuration.
932    pub slaac: Option<SlaacConfiguration>,
933    #[doc(hidden)]
934    pub __source_breaking: fidl::marker::SourceBreaking,
935}
936
937impl fidl::Persistable for NdpConfiguration {}
938
939/// NudConfiguration for an interface.
940///
941/// This is scoped to IPv4 or IPv6 configuration by the [`Configuration`] type.
942#[derive(Clone, Debug, Default, PartialEq)]
943pub struct NudConfiguration {
944    /// The number of multicast solicitations before considering a neighbor
945    /// unreachable.
946    ///
947    /// Must be nonzero. `ILLEGAL_ZERO_VALUE` is returned on
948    /// [`Control.SetConfiguration`] otherwise.
949    pub max_multicast_solicitations: Option<u16>,
950    /// The number of unicast solicitations before considering a neighbor
951    /// unreachable.
952    ///
953    /// Must be nonzero.
954    pub max_unicast_solicitations: Option<u16>,
955    /// A base duration for computing the random reachable time.
956    ///
957    /// Reachable time is the duration for which a neighbor is considered
958    /// reachable after a positive reachability confirmation is received.
959    /// After this time, an entry will transition from REACHABLE to STALE state.
960    ///
961    /// Referred to as "BaseReachableTime" by RFC 4861.
962    ///
963    /// Must be greater than 0.
964    pub base_reachable_time: Option<i64>,
965    /// The time between retransmissions of neighbor probes (Neighbor
966    /// Solicitations for IPv6 and ARP requests for IPv4) to a neighbor when
967    /// resolving the address or when probing the reachability of a neighbor
968    /// as defined in [RFC 4861 section 6.3.2].
969    ///
970    /// Referred to as "RetransTimer" by RFC 4861.
971    ///
972    /// For IPv6, this value will not be used if the router has provided an
973    /// override as per [RFC 4861 section 6.3.2]:
974    ///  The RetransTimer variable SHOULD be copied from the Retrans Timer
975    ///  field, if the received value is non-zero.
976    /// Usually networks don't advertise a non-zero RetransTimer, so this value
977    /// will be used in those environments.
978    ///
979    /// Must be greater than 0.
980    pub retrans_timer: Option<i64>,
981    #[doc(hidden)]
982    pub __source_breaking: fidl::marker::SourceBreaking,
983}
984
985impl fidl::Persistable for NudConfiguration {}
986
987#[derive(Clone, Debug, Default, PartialEq)]
988pub struct SlaacConfiguration {
989    /// Controls whether temporary addresses as described in
990    /// [RFC 4941] are generated.
991    ///
992    /// Note that assigned SLAAC temporary addresses will remain
993    /// assigned when this configuration goes from enabled to
994    /// disabled.
995    ///
996    /// [RFC 4941]: https://datatracker.ietf.org/doc/html/rfc4941
997    pub temporary_address: Option<bool>,
998    #[doc(hidden)]
999    pub __source_breaking: fidl::marker::SourceBreaking,
1000}
1001
1002impl fidl::Persistable for SlaacConfiguration {}
1003
1004pub mod address_state_provider_ordinals {
1005    pub const UPDATE_ADDRESS_PROPERTIES: u64 = 0x52bdf5ed96ef573c;
1006    pub const WATCH_ADDRESS_ASSIGNMENT_STATE: u64 = 0x740bb58c1b2d3188;
1007    pub const DETACH: u64 = 0xc752381d739622f;
1008    pub const REMOVE: u64 = 0x554407fe183e78ad;
1009    pub const ON_ADDRESS_ADDED: u64 = 0x624f6ea62cce189e;
1010    pub const ON_ADDRESS_REMOVED: u64 = 0x2480eb672ffd5962;
1011}
1012
1013pub mod control_ordinals {
1014    pub const ADD_ADDRESS: u64 = 0x1349d36da453ce;
1015    pub const REMOVE_ADDRESS: u64 = 0x213ba73da997a620;
1016    pub const GET_ID: u64 = 0x2a2459768d9ecc6f;
1017    pub const SET_CONFIGURATION: u64 = 0x573923b7b4bde27f;
1018    pub const GET_CONFIGURATION: u64 = 0x5f5d239820bdcc65;
1019    pub const ENABLE: u64 = 0x15c983d3a8ac0b98;
1020    pub const DISABLE: u64 = 0x98d3a585d905473;
1021    pub const DETACH: u64 = 0x78ee27518b2dbfa;
1022    pub const GET_AUTHORIZATION_FOR_INTERFACE: u64 = 0xc1de2ab60b5cb9e;
1023    pub const REMOVE: u64 = 0x13aab8bbecc7ff0b;
1024    pub const ON_INTERFACE_REMOVED: u64 = 0x800d39e76c1cddd;
1025}
1026
1027pub mod device_control_ordinals {
1028    pub const CREATE_INTERFACE: u64 = 0x4ff8be7351d12f86;
1029    pub const DETACH: u64 = 0x57489f1554d489d2;
1030}
1031
1032pub mod installer_ordinals {
1033    pub const INSTALL_DEVICE: u64 = 0x3e84524dcecab23a;
1034    pub const INSTALL_BLACKHOLE_INTERFACE: u64 = 0x2ce57e87cdbcb809;
1035}
1036
1037mod internal {
1038    use super::*;
1039    unsafe impl fidl::encoding::TypeMarker for AddressRemovalReason {
1040        type Owned = Self;
1041
1042        #[inline(always)]
1043        fn inline_align(_context: fidl::encoding::Context) -> usize {
1044            std::mem::align_of::<u32>()
1045        }
1046
1047        #[inline(always)]
1048        fn inline_size(_context: fidl::encoding::Context) -> usize {
1049            std::mem::size_of::<u32>()
1050        }
1051
1052        #[inline(always)]
1053        fn encode_is_copy() -> bool {
1054            true
1055        }
1056
1057        #[inline(always)]
1058        fn decode_is_copy() -> bool {
1059            false
1060        }
1061    }
1062
1063    impl fidl::encoding::ValueTypeMarker for AddressRemovalReason {
1064        type Borrowed<'a> = Self;
1065        #[inline(always)]
1066        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1067            *value
1068        }
1069    }
1070
1071    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1072        for AddressRemovalReason
1073    {
1074        #[inline]
1075        unsafe fn encode(
1076            self,
1077            encoder: &mut fidl::encoding::Encoder<'_, D>,
1078            offset: usize,
1079            _depth: fidl::encoding::Depth,
1080        ) -> fidl::Result<()> {
1081            encoder.debug_check_bounds::<Self>(offset);
1082            encoder.write_num(self.into_primitive(), offset);
1083            Ok(())
1084        }
1085    }
1086
1087    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressRemovalReason {
1088        #[inline(always)]
1089        fn new_empty() -> Self {
1090            Self::Invalid
1091        }
1092
1093        #[inline]
1094        unsafe fn decode(
1095            &mut self,
1096            decoder: &mut fidl::encoding::Decoder<'_, D>,
1097            offset: usize,
1098            _depth: fidl::encoding::Depth,
1099        ) -> fidl::Result<()> {
1100            decoder.debug_check_bounds::<Self>(offset);
1101            let prim = decoder.read_num::<u32>(offset);
1102
1103            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1104            Ok(())
1105        }
1106    }
1107    unsafe impl fidl::encoding::TypeMarker for ControlDisableError {
1108        type Owned = Self;
1109
1110        #[inline(always)]
1111        fn inline_align(_context: fidl::encoding::Context) -> usize {
1112            std::mem::align_of::<u32>()
1113        }
1114
1115        #[inline(always)]
1116        fn inline_size(_context: fidl::encoding::Context) -> usize {
1117            std::mem::size_of::<u32>()
1118        }
1119
1120        #[inline(always)]
1121        fn encode_is_copy() -> bool {
1122            false
1123        }
1124
1125        #[inline(always)]
1126        fn decode_is_copy() -> bool {
1127            false
1128        }
1129    }
1130
1131    impl fidl::encoding::ValueTypeMarker for ControlDisableError {
1132        type Borrowed<'a> = Self;
1133        #[inline(always)]
1134        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1135            *value
1136        }
1137    }
1138
1139    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1140        for ControlDisableError
1141    {
1142        #[inline]
1143        unsafe fn encode(
1144            self,
1145            encoder: &mut fidl::encoding::Encoder<'_, D>,
1146            offset: usize,
1147            _depth: fidl::encoding::Depth,
1148        ) -> fidl::Result<()> {
1149            encoder.debug_check_bounds::<Self>(offset);
1150            encoder.write_num(self.into_primitive(), offset);
1151            Ok(())
1152        }
1153    }
1154
1155    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlDisableError {
1156        #[inline(always)]
1157        fn new_empty() -> Self {
1158            Self::unknown()
1159        }
1160
1161        #[inline]
1162        unsafe fn decode(
1163            &mut self,
1164            decoder: &mut fidl::encoding::Decoder<'_, D>,
1165            offset: usize,
1166            _depth: fidl::encoding::Depth,
1167        ) -> fidl::Result<()> {
1168            decoder.debug_check_bounds::<Self>(offset);
1169            let prim = decoder.read_num::<u32>(offset);
1170
1171            *self = Self::from_primitive_allow_unknown(prim);
1172            Ok(())
1173        }
1174    }
1175    unsafe impl fidl::encoding::TypeMarker for ControlEnableError {
1176        type Owned = Self;
1177
1178        #[inline(always)]
1179        fn inline_align(_context: fidl::encoding::Context) -> usize {
1180            std::mem::align_of::<u32>()
1181        }
1182
1183        #[inline(always)]
1184        fn inline_size(_context: fidl::encoding::Context) -> usize {
1185            std::mem::size_of::<u32>()
1186        }
1187
1188        #[inline(always)]
1189        fn encode_is_copy() -> bool {
1190            false
1191        }
1192
1193        #[inline(always)]
1194        fn decode_is_copy() -> bool {
1195            false
1196        }
1197    }
1198
1199    impl fidl::encoding::ValueTypeMarker for ControlEnableError {
1200        type Borrowed<'a> = Self;
1201        #[inline(always)]
1202        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1203            *value
1204        }
1205    }
1206
1207    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1208        for ControlEnableError
1209    {
1210        #[inline]
1211        unsafe fn encode(
1212            self,
1213            encoder: &mut fidl::encoding::Encoder<'_, D>,
1214            offset: usize,
1215            _depth: fidl::encoding::Depth,
1216        ) -> fidl::Result<()> {
1217            encoder.debug_check_bounds::<Self>(offset);
1218            encoder.write_num(self.into_primitive(), offset);
1219            Ok(())
1220        }
1221    }
1222
1223    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlEnableError {
1224        #[inline(always)]
1225        fn new_empty() -> Self {
1226            Self::unknown()
1227        }
1228
1229        #[inline]
1230        unsafe fn decode(
1231            &mut self,
1232            decoder: &mut fidl::encoding::Decoder<'_, D>,
1233            offset: usize,
1234            _depth: fidl::encoding::Depth,
1235        ) -> fidl::Result<()> {
1236            decoder.debug_check_bounds::<Self>(offset);
1237            let prim = decoder.read_num::<u32>(offset);
1238
1239            *self = Self::from_primitive_allow_unknown(prim);
1240            Ok(())
1241        }
1242    }
1243    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationError {
1244        type Owned = Self;
1245
1246        #[inline(always)]
1247        fn inline_align(_context: fidl::encoding::Context) -> usize {
1248            std::mem::align_of::<u32>()
1249        }
1250
1251        #[inline(always)]
1252        fn inline_size(_context: fidl::encoding::Context) -> usize {
1253            std::mem::size_of::<u32>()
1254        }
1255
1256        #[inline(always)]
1257        fn encode_is_copy() -> bool {
1258            false
1259        }
1260
1261        #[inline(always)]
1262        fn decode_is_copy() -> bool {
1263            false
1264        }
1265    }
1266
1267    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationError {
1268        type Borrowed<'a> = Self;
1269        #[inline(always)]
1270        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1271            *value
1272        }
1273    }
1274
1275    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1276        for ControlGetConfigurationError
1277    {
1278        #[inline]
1279        unsafe fn encode(
1280            self,
1281            encoder: &mut fidl::encoding::Encoder<'_, D>,
1282            offset: usize,
1283            _depth: fidl::encoding::Depth,
1284        ) -> fidl::Result<()> {
1285            encoder.debug_check_bounds::<Self>(offset);
1286            encoder.write_num(self.into_primitive(), offset);
1287            Ok(())
1288        }
1289    }
1290
1291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1292        for ControlGetConfigurationError
1293    {
1294        #[inline(always)]
1295        fn new_empty() -> Self {
1296            Self::unknown()
1297        }
1298
1299        #[inline]
1300        unsafe fn decode(
1301            &mut self,
1302            decoder: &mut fidl::encoding::Decoder<'_, D>,
1303            offset: usize,
1304            _depth: fidl::encoding::Depth,
1305        ) -> fidl::Result<()> {
1306            decoder.debug_check_bounds::<Self>(offset);
1307            let prim = decoder.read_num::<u32>(offset);
1308
1309            *self = Self::from_primitive_allow_unknown(prim);
1310            Ok(())
1311        }
1312    }
1313    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressError {
1314        type Owned = Self;
1315
1316        #[inline(always)]
1317        fn inline_align(_context: fidl::encoding::Context) -> usize {
1318            std::mem::align_of::<u32>()
1319        }
1320
1321        #[inline(always)]
1322        fn inline_size(_context: fidl::encoding::Context) -> usize {
1323            std::mem::size_of::<u32>()
1324        }
1325
1326        #[inline(always)]
1327        fn encode_is_copy() -> bool {
1328            false
1329        }
1330
1331        #[inline(always)]
1332        fn decode_is_copy() -> bool {
1333            false
1334        }
1335    }
1336
1337    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressError {
1338        type Borrowed<'a> = Self;
1339        #[inline(always)]
1340        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1341            *value
1342        }
1343    }
1344
1345    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1346        for ControlRemoveAddressError
1347    {
1348        #[inline]
1349        unsafe fn encode(
1350            self,
1351            encoder: &mut fidl::encoding::Encoder<'_, D>,
1352            offset: usize,
1353            _depth: fidl::encoding::Depth,
1354        ) -> fidl::Result<()> {
1355            encoder.debug_check_bounds::<Self>(offset);
1356            encoder.write_num(self.into_primitive(), offset);
1357            Ok(())
1358        }
1359    }
1360
1361    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1362        for ControlRemoveAddressError
1363    {
1364        #[inline(always)]
1365        fn new_empty() -> Self {
1366            Self::unknown()
1367        }
1368
1369        #[inline]
1370        unsafe fn decode(
1371            &mut self,
1372            decoder: &mut fidl::encoding::Decoder<'_, D>,
1373            offset: usize,
1374            _depth: fidl::encoding::Depth,
1375        ) -> fidl::Result<()> {
1376            decoder.debug_check_bounds::<Self>(offset);
1377            let prim = decoder.read_num::<u32>(offset);
1378
1379            *self = Self::from_primitive_allow_unknown(prim);
1380            Ok(())
1381        }
1382    }
1383    unsafe impl fidl::encoding::TypeMarker for ControlRemoveError {
1384        type Owned = Self;
1385
1386        #[inline(always)]
1387        fn inline_align(_context: fidl::encoding::Context) -> usize {
1388            std::mem::align_of::<u32>()
1389        }
1390
1391        #[inline(always)]
1392        fn inline_size(_context: fidl::encoding::Context) -> usize {
1393            std::mem::size_of::<u32>()
1394        }
1395
1396        #[inline(always)]
1397        fn encode_is_copy() -> bool {
1398            false
1399        }
1400
1401        #[inline(always)]
1402        fn decode_is_copy() -> bool {
1403            false
1404        }
1405    }
1406
1407    impl fidl::encoding::ValueTypeMarker for ControlRemoveError {
1408        type Borrowed<'a> = Self;
1409        #[inline(always)]
1410        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1411            *value
1412        }
1413    }
1414
1415    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1416        for ControlRemoveError
1417    {
1418        #[inline]
1419        unsafe fn encode(
1420            self,
1421            encoder: &mut fidl::encoding::Encoder<'_, D>,
1422            offset: usize,
1423            _depth: fidl::encoding::Depth,
1424        ) -> fidl::Result<()> {
1425            encoder.debug_check_bounds::<Self>(offset);
1426            encoder.write_num(self.into_primitive(), offset);
1427            Ok(())
1428        }
1429    }
1430
1431    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlRemoveError {
1432        #[inline(always)]
1433        fn new_empty() -> Self {
1434            Self::unknown()
1435        }
1436
1437        #[inline]
1438        unsafe fn decode(
1439            &mut self,
1440            decoder: &mut fidl::encoding::Decoder<'_, D>,
1441            offset: usize,
1442            _depth: fidl::encoding::Depth,
1443        ) -> fidl::Result<()> {
1444            decoder.debug_check_bounds::<Self>(offset);
1445            let prim = decoder.read_num::<u32>(offset);
1446
1447            *self = Self::from_primitive_allow_unknown(prim);
1448            Ok(())
1449        }
1450    }
1451    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationError {
1452        type Owned = Self;
1453
1454        #[inline(always)]
1455        fn inline_align(_context: fidl::encoding::Context) -> usize {
1456            std::mem::align_of::<u32>()
1457        }
1458
1459        #[inline(always)]
1460        fn inline_size(_context: fidl::encoding::Context) -> usize {
1461            std::mem::size_of::<u32>()
1462        }
1463
1464        #[inline(always)]
1465        fn encode_is_copy() -> bool {
1466            false
1467        }
1468
1469        #[inline(always)]
1470        fn decode_is_copy() -> bool {
1471            false
1472        }
1473    }
1474
1475    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationError {
1476        type Borrowed<'a> = Self;
1477        #[inline(always)]
1478        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1479            *value
1480        }
1481    }
1482
1483    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1484        for ControlSetConfigurationError
1485    {
1486        #[inline]
1487        unsafe fn encode(
1488            self,
1489            encoder: &mut fidl::encoding::Encoder<'_, D>,
1490            offset: usize,
1491            _depth: fidl::encoding::Depth,
1492        ) -> fidl::Result<()> {
1493            encoder.debug_check_bounds::<Self>(offset);
1494            encoder.write_num(self.into_primitive(), offset);
1495            Ok(())
1496        }
1497    }
1498
1499    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1500        for ControlSetConfigurationError
1501    {
1502        #[inline(always)]
1503        fn new_empty() -> Self {
1504            Self::unknown()
1505        }
1506
1507        #[inline]
1508        unsafe fn decode(
1509            &mut self,
1510            decoder: &mut fidl::encoding::Decoder<'_, D>,
1511            offset: usize,
1512            _depth: fidl::encoding::Depth,
1513        ) -> fidl::Result<()> {
1514            decoder.debug_check_bounds::<Self>(offset);
1515            let prim = decoder.read_num::<u32>(offset);
1516
1517            *self = Self::from_primitive_allow_unknown(prim);
1518            Ok(())
1519        }
1520    }
1521    unsafe impl fidl::encoding::TypeMarker for IgmpVersion {
1522        type Owned = Self;
1523
1524        #[inline(always)]
1525        fn inline_align(_context: fidl::encoding::Context) -> usize {
1526            std::mem::align_of::<u8>()
1527        }
1528
1529        #[inline(always)]
1530        fn inline_size(_context: fidl::encoding::Context) -> usize {
1531            std::mem::size_of::<u8>()
1532        }
1533
1534        #[inline(always)]
1535        fn encode_is_copy() -> bool {
1536            false
1537        }
1538
1539        #[inline(always)]
1540        fn decode_is_copy() -> bool {
1541            false
1542        }
1543    }
1544
1545    impl fidl::encoding::ValueTypeMarker for IgmpVersion {
1546        type Borrowed<'a> = Self;
1547        #[inline(always)]
1548        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1549            *value
1550        }
1551    }
1552
1553    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for IgmpVersion {
1554        #[inline]
1555        unsafe fn encode(
1556            self,
1557            encoder: &mut fidl::encoding::Encoder<'_, D>,
1558            offset: usize,
1559            _depth: fidl::encoding::Depth,
1560        ) -> fidl::Result<()> {
1561            encoder.debug_check_bounds::<Self>(offset);
1562            encoder.write_num(self.into_primitive(), offset);
1563            Ok(())
1564        }
1565    }
1566
1567    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpVersion {
1568        #[inline(always)]
1569        fn new_empty() -> Self {
1570            Self::unknown()
1571        }
1572
1573        #[inline]
1574        unsafe fn decode(
1575            &mut self,
1576            decoder: &mut fidl::encoding::Decoder<'_, D>,
1577            offset: usize,
1578            _depth: fidl::encoding::Depth,
1579        ) -> fidl::Result<()> {
1580            decoder.debug_check_bounds::<Self>(offset);
1581            let prim = decoder.read_num::<u8>(offset);
1582
1583            *self = Self::from_primitive_allow_unknown(prim);
1584            Ok(())
1585        }
1586    }
1587    unsafe impl fidl::encoding::TypeMarker for InterfaceRemovedReason {
1588        type Owned = Self;
1589
1590        #[inline(always)]
1591        fn inline_align(_context: fidl::encoding::Context) -> usize {
1592            std::mem::align_of::<u32>()
1593        }
1594
1595        #[inline(always)]
1596        fn inline_size(_context: fidl::encoding::Context) -> usize {
1597            std::mem::size_of::<u32>()
1598        }
1599
1600        #[inline(always)]
1601        fn encode_is_copy() -> bool {
1602            false
1603        }
1604
1605        #[inline(always)]
1606        fn decode_is_copy() -> bool {
1607            false
1608        }
1609    }
1610
1611    impl fidl::encoding::ValueTypeMarker for InterfaceRemovedReason {
1612        type Borrowed<'a> = Self;
1613        #[inline(always)]
1614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1615            *value
1616        }
1617    }
1618
1619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1620        for InterfaceRemovedReason
1621    {
1622        #[inline]
1623        unsafe fn encode(
1624            self,
1625            encoder: &mut fidl::encoding::Encoder<'_, D>,
1626            offset: usize,
1627            _depth: fidl::encoding::Depth,
1628        ) -> fidl::Result<()> {
1629            encoder.debug_check_bounds::<Self>(offset);
1630            encoder.write_num(self.into_primitive(), offset);
1631            Ok(())
1632        }
1633    }
1634
1635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1636        for InterfaceRemovedReason
1637    {
1638        #[inline(always)]
1639        fn new_empty() -> Self {
1640            Self::unknown()
1641        }
1642
1643        #[inline]
1644        unsafe fn decode(
1645            &mut self,
1646            decoder: &mut fidl::encoding::Decoder<'_, D>,
1647            offset: usize,
1648            _depth: fidl::encoding::Depth,
1649        ) -> fidl::Result<()> {
1650            decoder.debug_check_bounds::<Self>(offset);
1651            let prim = decoder.read_num::<u32>(offset);
1652
1653            *self = Self::from_primitive_allow_unknown(prim);
1654            Ok(())
1655        }
1656    }
1657    unsafe impl fidl::encoding::TypeMarker for MldVersion {
1658        type Owned = Self;
1659
1660        #[inline(always)]
1661        fn inline_align(_context: fidl::encoding::Context) -> usize {
1662            std::mem::align_of::<u8>()
1663        }
1664
1665        #[inline(always)]
1666        fn inline_size(_context: fidl::encoding::Context) -> usize {
1667            std::mem::size_of::<u8>()
1668        }
1669
1670        #[inline(always)]
1671        fn encode_is_copy() -> bool {
1672            false
1673        }
1674
1675        #[inline(always)]
1676        fn decode_is_copy() -> bool {
1677            false
1678        }
1679    }
1680
1681    impl fidl::encoding::ValueTypeMarker for MldVersion {
1682        type Borrowed<'a> = Self;
1683        #[inline(always)]
1684        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1685            *value
1686        }
1687    }
1688
1689    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for MldVersion {
1690        #[inline]
1691        unsafe fn encode(
1692            self,
1693            encoder: &mut fidl::encoding::Encoder<'_, D>,
1694            offset: usize,
1695            _depth: fidl::encoding::Depth,
1696        ) -> fidl::Result<()> {
1697            encoder.debug_check_bounds::<Self>(offset);
1698            encoder.write_num(self.into_primitive(), offset);
1699            Ok(())
1700        }
1701    }
1702
1703    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldVersion {
1704        #[inline(always)]
1705        fn new_empty() -> Self {
1706            Self::unknown()
1707        }
1708
1709        #[inline]
1710        unsafe fn decode(
1711            &mut self,
1712            decoder: &mut fidl::encoding::Decoder<'_, D>,
1713            offset: usize,
1714            _depth: fidl::encoding::Depth,
1715        ) -> fidl::Result<()> {
1716            decoder.debug_check_bounds::<Self>(offset);
1717            let prim = decoder.read_num::<u8>(offset);
1718
1719            *self = Self::from_primitive_allow_unknown(prim);
1720            Ok(())
1721        }
1722    }
1723
1724    impl fidl::encoding::ValueTypeMarker for AddressStateProviderOnAddressRemovedRequest {
1725        type Borrowed<'a> = &'a Self;
1726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1727            value
1728        }
1729    }
1730
1731    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderOnAddressRemovedRequest {
1732        type Owned = Self;
1733
1734        #[inline(always)]
1735        fn inline_align(_context: fidl::encoding::Context) -> usize {
1736            4
1737        }
1738
1739        #[inline(always)]
1740        fn inline_size(_context: fidl::encoding::Context) -> usize {
1741            4
1742        }
1743    }
1744
1745    unsafe impl<D: fidl::encoding::ResourceDialect>
1746        fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D>
1747        for &AddressStateProviderOnAddressRemovedRequest
1748    {
1749        #[inline]
1750        unsafe fn encode(
1751            self,
1752            encoder: &mut fidl::encoding::Encoder<'_, D>,
1753            offset: usize,
1754            _depth: fidl::encoding::Depth,
1755        ) -> fidl::Result<()> {
1756            encoder.debug_check_bounds::<AddressStateProviderOnAddressRemovedRequest>(offset);
1757            // Delegate to tuple encoding.
1758            fidl::encoding::Encode::<AddressStateProviderOnAddressRemovedRequest, D>::encode(
1759                (<AddressRemovalReason as fidl::encoding::ValueTypeMarker>::borrow(&self.error),),
1760                encoder,
1761                offset,
1762                _depth,
1763            )
1764        }
1765    }
1766    unsafe impl<
1767        D: fidl::encoding::ResourceDialect,
1768        T0: fidl::encoding::Encode<AddressRemovalReason, D>,
1769    > fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D> for (T0,)
1770    {
1771        #[inline]
1772        unsafe fn encode(
1773            self,
1774            encoder: &mut fidl::encoding::Encoder<'_, D>,
1775            offset: usize,
1776            depth: fidl::encoding::Depth,
1777        ) -> fidl::Result<()> {
1778            encoder.debug_check_bounds::<AddressStateProviderOnAddressRemovedRequest>(offset);
1779            // Zero out padding regions. There's no need to apply masks
1780            // because the unmasked parts will be overwritten by fields.
1781            // Write the fields.
1782            self.0.encode(encoder, offset + 0, depth)?;
1783            Ok(())
1784        }
1785    }
1786
1787    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1788        for AddressStateProviderOnAddressRemovedRequest
1789    {
1790        #[inline(always)]
1791        fn new_empty() -> Self {
1792            Self { error: fidl::new_empty!(AddressRemovalReason, D) }
1793        }
1794
1795        #[inline]
1796        unsafe fn decode(
1797            &mut self,
1798            decoder: &mut fidl::encoding::Decoder<'_, D>,
1799            offset: usize,
1800            _depth: fidl::encoding::Depth,
1801        ) -> fidl::Result<()> {
1802            decoder.debug_check_bounds::<Self>(offset);
1803            // Verify that padding bytes are zero.
1804            fidl::decode!(AddressRemovalReason, D, &mut self.error, decoder, offset + 0, _depth)?;
1805            Ok(())
1806        }
1807    }
1808
1809    impl fidl::encoding::ValueTypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1810        type Borrowed<'a> = &'a Self;
1811        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1812            value
1813        }
1814    }
1815
1816    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1817        type Owned = Self;
1818
1819        #[inline(always)]
1820        fn inline_align(_context: fidl::encoding::Context) -> usize {
1821            8
1822        }
1823
1824        #[inline(always)]
1825        fn inline_size(_context: fidl::encoding::Context) -> usize {
1826            16
1827        }
1828    }
1829
1830    unsafe impl<D: fidl::encoding::ResourceDialect>
1831        fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D>
1832        for &AddressStateProviderUpdateAddressPropertiesRequest
1833    {
1834        #[inline]
1835        unsafe fn encode(
1836            self,
1837            encoder: &mut fidl::encoding::Encoder<'_, D>,
1838            offset: usize,
1839            _depth: fidl::encoding::Depth,
1840        ) -> fidl::Result<()> {
1841            encoder
1842                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1843            // Delegate to tuple encoding.
1844            fidl::encoding::Encode::<AddressStateProviderUpdateAddressPropertiesRequest, D>::encode(
1845                (<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow(
1846                    &self.address_properties,
1847                ),),
1848                encoder,
1849                offset,
1850                _depth,
1851            )
1852        }
1853    }
1854    unsafe impl<
1855        D: fidl::encoding::ResourceDialect,
1856        T0: fidl::encoding::Encode<AddressProperties, D>,
1857    > fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D> for (T0,)
1858    {
1859        #[inline]
1860        unsafe fn encode(
1861            self,
1862            encoder: &mut fidl::encoding::Encoder<'_, D>,
1863            offset: usize,
1864            depth: fidl::encoding::Depth,
1865        ) -> fidl::Result<()> {
1866            encoder
1867                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1868            // Zero out padding regions. There's no need to apply masks
1869            // because the unmasked parts will be overwritten by fields.
1870            // Write the fields.
1871            self.0.encode(encoder, offset + 0, depth)?;
1872            Ok(())
1873        }
1874    }
1875
1876    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1877        for AddressStateProviderUpdateAddressPropertiesRequest
1878    {
1879        #[inline(always)]
1880        fn new_empty() -> Self {
1881            Self { address_properties: fidl::new_empty!(AddressProperties, D) }
1882        }
1883
1884        #[inline]
1885        unsafe fn decode(
1886            &mut self,
1887            decoder: &mut fidl::encoding::Decoder<'_, D>,
1888            offset: usize,
1889            _depth: fidl::encoding::Depth,
1890        ) -> fidl::Result<()> {
1891            decoder.debug_check_bounds::<Self>(offset);
1892            // Verify that padding bytes are zero.
1893            fidl::decode!(
1894                AddressProperties,
1895                D,
1896                &mut self.address_properties,
1897                decoder,
1898                offset + 0,
1899                _depth
1900            )?;
1901            Ok(())
1902        }
1903    }
1904
1905    impl fidl::encoding::ValueTypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1906        type Borrowed<'a> = &'a Self;
1907        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1908            value
1909        }
1910    }
1911
1912    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1913        type Owned = Self;
1914
1915        #[inline(always)]
1916        fn inline_align(_context: fidl::encoding::Context) -> usize {
1917            4
1918        }
1919
1920        #[inline(always)]
1921        fn inline_size(_context: fidl::encoding::Context) -> usize {
1922            4
1923        }
1924    }
1925
1926    unsafe impl<D: fidl::encoding::ResourceDialect>
1927        fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D>
1928        for &AddressStateProviderWatchAddressAssignmentStateResponse
1929    {
1930        #[inline]
1931        unsafe fn encode(
1932            self,
1933            encoder: &mut fidl::encoding::Encoder<'_, D>,
1934            offset: usize,
1935            _depth: fidl::encoding::Depth,
1936        ) -> fidl::Result<()> {
1937            encoder.debug_check_bounds::<AddressStateProviderWatchAddressAssignmentStateResponse>(
1938                offset,
1939            );
1940            // Delegate to tuple encoding.
1941            fidl::encoding::Encode::<AddressStateProviderWatchAddressAssignmentStateResponse, D>::encode(
1942                (
1943                    <fidl_fuchsia_net_interfaces__common::AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow(&self.assignment_state),
1944                ),
1945                encoder, offset, _depth
1946            )
1947        }
1948    }
1949    unsafe impl<
1950        D: fidl::encoding::ResourceDialect,
1951        T0: fidl::encoding::Encode<fidl_fuchsia_net_interfaces__common::AddressAssignmentState, D>,
1952    > fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D> for (T0,)
1953    {
1954        #[inline]
1955        unsafe fn encode(
1956            self,
1957            encoder: &mut fidl::encoding::Encoder<'_, D>,
1958            offset: usize,
1959            depth: fidl::encoding::Depth,
1960        ) -> fidl::Result<()> {
1961            encoder.debug_check_bounds::<AddressStateProviderWatchAddressAssignmentStateResponse>(
1962                offset,
1963            );
1964            // Zero out padding regions. There's no need to apply masks
1965            // because the unmasked parts will be overwritten by fields.
1966            // Write the fields.
1967            self.0.encode(encoder, offset + 0, depth)?;
1968            Ok(())
1969        }
1970    }
1971
1972    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1973        for AddressStateProviderWatchAddressAssignmentStateResponse
1974    {
1975        #[inline(always)]
1976        fn new_empty() -> Self {
1977            Self {
1978                assignment_state: fidl::new_empty!(
1979                    fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
1980                    D
1981                ),
1982            }
1983        }
1984
1985        #[inline]
1986        unsafe fn decode(
1987            &mut self,
1988            decoder: &mut fidl::encoding::Decoder<'_, D>,
1989            offset: usize,
1990            _depth: fidl::encoding::Depth,
1991        ) -> fidl::Result<()> {
1992            decoder.debug_check_bounds::<Self>(offset);
1993            // Verify that padding bytes are zero.
1994            fidl::decode!(
1995                fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
1996                D,
1997                &mut self.assignment_state,
1998                decoder,
1999                offset + 0,
2000                _depth
2001            )?;
2002            Ok(())
2003        }
2004    }
2005
2006    impl fidl::encoding::ValueTypeMarker for ControlGetIdResponse {
2007        type Borrowed<'a> = &'a Self;
2008        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2009            value
2010        }
2011    }
2012
2013    unsafe impl fidl::encoding::TypeMarker for ControlGetIdResponse {
2014        type Owned = Self;
2015
2016        #[inline(always)]
2017        fn inline_align(_context: fidl::encoding::Context) -> usize {
2018            8
2019        }
2020
2021        #[inline(always)]
2022        fn inline_size(_context: fidl::encoding::Context) -> usize {
2023            8
2024        }
2025        #[inline(always)]
2026        fn encode_is_copy() -> bool {
2027            true
2028        }
2029
2030        #[inline(always)]
2031        fn decode_is_copy() -> bool {
2032            true
2033        }
2034    }
2035
2036    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlGetIdResponse, D>
2037        for &ControlGetIdResponse
2038    {
2039        #[inline]
2040        unsafe fn encode(
2041            self,
2042            encoder: &mut fidl::encoding::Encoder<'_, D>,
2043            offset: usize,
2044            _depth: fidl::encoding::Depth,
2045        ) -> fidl::Result<()> {
2046            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2047            unsafe {
2048                // Copy the object into the buffer.
2049                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2050                (buf_ptr as *mut ControlGetIdResponse)
2051                    .write_unaligned((self as *const ControlGetIdResponse).read());
2052                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2053                // done second because the memcpy will write garbage to these bytes.
2054            }
2055            Ok(())
2056        }
2057    }
2058    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2059        fidl::encoding::Encode<ControlGetIdResponse, D> for (T0,)
2060    {
2061        #[inline]
2062        unsafe fn encode(
2063            self,
2064            encoder: &mut fidl::encoding::Encoder<'_, D>,
2065            offset: usize,
2066            depth: fidl::encoding::Depth,
2067        ) -> fidl::Result<()> {
2068            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2069            // Zero out padding regions. There's no need to apply masks
2070            // because the unmasked parts will be overwritten by fields.
2071            // Write the fields.
2072            self.0.encode(encoder, offset + 0, depth)?;
2073            Ok(())
2074        }
2075    }
2076
2077    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlGetIdResponse {
2078        #[inline(always)]
2079        fn new_empty() -> Self {
2080            Self { id: fidl::new_empty!(u64, D) }
2081        }
2082
2083        #[inline]
2084        unsafe fn decode(
2085            &mut self,
2086            decoder: &mut fidl::encoding::Decoder<'_, D>,
2087            offset: usize,
2088            _depth: fidl::encoding::Depth,
2089        ) -> fidl::Result<()> {
2090            decoder.debug_check_bounds::<Self>(offset);
2091            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2092            // Verify that padding bytes are zero.
2093            // Copy from the buffer into the object.
2094            unsafe {
2095                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2096            }
2097            Ok(())
2098        }
2099    }
2100
2101    impl fidl::encoding::ValueTypeMarker for ControlOnInterfaceRemovedRequest {
2102        type Borrowed<'a> = &'a Self;
2103        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2104            value
2105        }
2106    }
2107
2108    unsafe impl fidl::encoding::TypeMarker for ControlOnInterfaceRemovedRequest {
2109        type Owned = Self;
2110
2111        #[inline(always)]
2112        fn inline_align(_context: fidl::encoding::Context) -> usize {
2113            4
2114        }
2115
2116        #[inline(always)]
2117        fn inline_size(_context: fidl::encoding::Context) -> usize {
2118            4
2119        }
2120    }
2121
2122    unsafe impl<D: fidl::encoding::ResourceDialect>
2123        fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D>
2124        for &ControlOnInterfaceRemovedRequest
2125    {
2126        #[inline]
2127        unsafe fn encode(
2128            self,
2129            encoder: &mut fidl::encoding::Encoder<'_, D>,
2130            offset: usize,
2131            _depth: fidl::encoding::Depth,
2132        ) -> fidl::Result<()> {
2133            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2134            // Delegate to tuple encoding.
2135            fidl::encoding::Encode::<ControlOnInterfaceRemovedRequest, D>::encode(
2136                (<InterfaceRemovedReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
2137                encoder,
2138                offset,
2139                _depth,
2140            )
2141        }
2142    }
2143    unsafe impl<
2144        D: fidl::encoding::ResourceDialect,
2145        T0: fidl::encoding::Encode<InterfaceRemovedReason, D>,
2146    > fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D> for (T0,)
2147    {
2148        #[inline]
2149        unsafe fn encode(
2150            self,
2151            encoder: &mut fidl::encoding::Encoder<'_, D>,
2152            offset: usize,
2153            depth: fidl::encoding::Depth,
2154        ) -> fidl::Result<()> {
2155            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2156            // Zero out padding regions. There's no need to apply masks
2157            // because the unmasked parts will be overwritten by fields.
2158            // Write the fields.
2159            self.0.encode(encoder, offset + 0, depth)?;
2160            Ok(())
2161        }
2162    }
2163
2164    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2165        for ControlOnInterfaceRemovedRequest
2166    {
2167        #[inline(always)]
2168        fn new_empty() -> Self {
2169            Self { reason: fidl::new_empty!(InterfaceRemovedReason, D) }
2170        }
2171
2172        #[inline]
2173        unsafe fn decode(
2174            &mut self,
2175            decoder: &mut fidl::encoding::Decoder<'_, D>,
2176            offset: usize,
2177            _depth: fidl::encoding::Depth,
2178        ) -> fidl::Result<()> {
2179            decoder.debug_check_bounds::<Self>(offset);
2180            // Verify that padding bytes are zero.
2181            fidl::decode!(
2182                InterfaceRemovedReason,
2183                D,
2184                &mut self.reason,
2185                decoder,
2186                offset + 0,
2187                _depth
2188            )?;
2189            Ok(())
2190        }
2191    }
2192
2193    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressRequest {
2194        type Borrowed<'a> = &'a Self;
2195        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2196            value
2197        }
2198    }
2199
2200    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressRequest {
2201        type Owned = Self;
2202
2203        #[inline(always)]
2204        fn inline_align(_context: fidl::encoding::Context) -> usize {
2205            8
2206        }
2207
2208        #[inline(always)]
2209        fn inline_size(_context: fidl::encoding::Context) -> usize {
2210            24
2211        }
2212    }
2213
2214    unsafe impl<D: fidl::encoding::ResourceDialect>
2215        fidl::encoding::Encode<ControlRemoveAddressRequest, D> for &ControlRemoveAddressRequest
2216    {
2217        #[inline]
2218        unsafe fn encode(
2219            self,
2220            encoder: &mut fidl::encoding::Encoder<'_, D>,
2221            offset: usize,
2222            _depth: fidl::encoding::Depth,
2223        ) -> fidl::Result<()> {
2224            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2225            // Delegate to tuple encoding.
2226            fidl::encoding::Encode::<ControlRemoveAddressRequest, D>::encode(
2227                (<fidl_fuchsia_net__common::Subnet as fidl::encoding::ValueTypeMarker>::borrow(
2228                    &self.address,
2229                ),),
2230                encoder,
2231                offset,
2232                _depth,
2233            )
2234        }
2235    }
2236    unsafe impl<
2237        D: fidl::encoding::ResourceDialect,
2238        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Subnet, D>,
2239    > fidl::encoding::Encode<ControlRemoveAddressRequest, D> for (T0,)
2240    {
2241        #[inline]
2242        unsafe fn encode(
2243            self,
2244            encoder: &mut fidl::encoding::Encoder<'_, D>,
2245            offset: usize,
2246            depth: fidl::encoding::Depth,
2247        ) -> fidl::Result<()> {
2248            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2249            // Zero out padding regions. There's no need to apply masks
2250            // because the unmasked parts will be overwritten by fields.
2251            // Write the fields.
2252            self.0.encode(encoder, offset + 0, depth)?;
2253            Ok(())
2254        }
2255    }
2256
2257    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2258        for ControlRemoveAddressRequest
2259    {
2260        #[inline(always)]
2261        fn new_empty() -> Self {
2262            Self { address: fidl::new_empty!(fidl_fuchsia_net__common::Subnet, D) }
2263        }
2264
2265        #[inline]
2266        unsafe fn decode(
2267            &mut self,
2268            decoder: &mut fidl::encoding::Decoder<'_, D>,
2269            offset: usize,
2270            _depth: fidl::encoding::Depth,
2271        ) -> fidl::Result<()> {
2272            decoder.debug_check_bounds::<Self>(offset);
2273            // Verify that padding bytes are zero.
2274            fidl::decode!(
2275                fidl_fuchsia_net__common::Subnet,
2276                D,
2277                &mut self.address,
2278                decoder,
2279                offset + 0,
2280                _depth
2281            )?;
2282            Ok(())
2283        }
2284    }
2285
2286    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationRequest {
2287        type Borrowed<'a> = &'a Self;
2288        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2289            value
2290        }
2291    }
2292
2293    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationRequest {
2294        type Owned = Self;
2295
2296        #[inline(always)]
2297        fn inline_align(_context: fidl::encoding::Context) -> usize {
2298            8
2299        }
2300
2301        #[inline(always)]
2302        fn inline_size(_context: fidl::encoding::Context) -> usize {
2303            16
2304        }
2305    }
2306
2307    unsafe impl<D: fidl::encoding::ResourceDialect>
2308        fidl::encoding::Encode<ControlSetConfigurationRequest, D>
2309        for &ControlSetConfigurationRequest
2310    {
2311        #[inline]
2312        unsafe fn encode(
2313            self,
2314            encoder: &mut fidl::encoding::Encoder<'_, D>,
2315            offset: usize,
2316            _depth: fidl::encoding::Depth,
2317        ) -> fidl::Result<()> {
2318            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2319            // Delegate to tuple encoding.
2320            fidl::encoding::Encode::<ControlSetConfigurationRequest, D>::encode(
2321                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2322                encoder,
2323                offset,
2324                _depth,
2325            )
2326        }
2327    }
2328    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2329        fidl::encoding::Encode<ControlSetConfigurationRequest, D> for (T0,)
2330    {
2331        #[inline]
2332        unsafe fn encode(
2333            self,
2334            encoder: &mut fidl::encoding::Encoder<'_, D>,
2335            offset: usize,
2336            depth: fidl::encoding::Depth,
2337        ) -> fidl::Result<()> {
2338            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2339            // Zero out padding regions. There's no need to apply masks
2340            // because the unmasked parts will be overwritten by fields.
2341            // Write the fields.
2342            self.0.encode(encoder, offset + 0, depth)?;
2343            Ok(())
2344        }
2345    }
2346
2347    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2348        for ControlSetConfigurationRequest
2349    {
2350        #[inline(always)]
2351        fn new_empty() -> Self {
2352            Self { config: fidl::new_empty!(Configuration, D) }
2353        }
2354
2355        #[inline]
2356        unsafe fn decode(
2357            &mut self,
2358            decoder: &mut fidl::encoding::Decoder<'_, D>,
2359            offset: usize,
2360            _depth: fidl::encoding::Depth,
2361        ) -> fidl::Result<()> {
2362            decoder.debug_check_bounds::<Self>(offset);
2363            // Verify that padding bytes are zero.
2364            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2365            Ok(())
2366        }
2367    }
2368
2369    impl fidl::encoding::ValueTypeMarker for ControlDisableResponse {
2370        type Borrowed<'a> = &'a Self;
2371        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2372            value
2373        }
2374    }
2375
2376    unsafe impl fidl::encoding::TypeMarker for ControlDisableResponse {
2377        type Owned = Self;
2378
2379        #[inline(always)]
2380        fn inline_align(_context: fidl::encoding::Context) -> usize {
2381            1
2382        }
2383
2384        #[inline(always)]
2385        fn inline_size(_context: fidl::encoding::Context) -> usize {
2386            1
2387        }
2388    }
2389
2390    unsafe impl<D: fidl::encoding::ResourceDialect>
2391        fidl::encoding::Encode<ControlDisableResponse, D> for &ControlDisableResponse
2392    {
2393        #[inline]
2394        unsafe fn encode(
2395            self,
2396            encoder: &mut fidl::encoding::Encoder<'_, D>,
2397            offset: usize,
2398            _depth: fidl::encoding::Depth,
2399        ) -> fidl::Result<()> {
2400            encoder.debug_check_bounds::<ControlDisableResponse>(offset);
2401            // Delegate to tuple encoding.
2402            fidl::encoding::Encode::<ControlDisableResponse, D>::encode(
2403                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_disable),),
2404                encoder,
2405                offset,
2406                _depth,
2407            )
2408        }
2409    }
2410    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2411        fidl::encoding::Encode<ControlDisableResponse, D> for (T0,)
2412    {
2413        #[inline]
2414        unsafe fn encode(
2415            self,
2416            encoder: &mut fidl::encoding::Encoder<'_, D>,
2417            offset: usize,
2418            depth: fidl::encoding::Depth,
2419        ) -> fidl::Result<()> {
2420            encoder.debug_check_bounds::<ControlDisableResponse>(offset);
2421            // Zero out padding regions. There's no need to apply masks
2422            // because the unmasked parts will be overwritten by fields.
2423            // Write the fields.
2424            self.0.encode(encoder, offset + 0, depth)?;
2425            Ok(())
2426        }
2427    }
2428
2429    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2430        for ControlDisableResponse
2431    {
2432        #[inline(always)]
2433        fn new_empty() -> Self {
2434            Self { did_disable: fidl::new_empty!(bool, D) }
2435        }
2436
2437        #[inline]
2438        unsafe fn decode(
2439            &mut self,
2440            decoder: &mut fidl::encoding::Decoder<'_, D>,
2441            offset: usize,
2442            _depth: fidl::encoding::Depth,
2443        ) -> fidl::Result<()> {
2444            decoder.debug_check_bounds::<Self>(offset);
2445            // Verify that padding bytes are zero.
2446            fidl::decode!(bool, D, &mut self.did_disable, decoder, offset + 0, _depth)?;
2447            Ok(())
2448        }
2449    }
2450
2451    impl fidl::encoding::ValueTypeMarker for ControlEnableResponse {
2452        type Borrowed<'a> = &'a Self;
2453        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2454            value
2455        }
2456    }
2457
2458    unsafe impl fidl::encoding::TypeMarker for ControlEnableResponse {
2459        type Owned = Self;
2460
2461        #[inline(always)]
2462        fn inline_align(_context: fidl::encoding::Context) -> usize {
2463            1
2464        }
2465
2466        #[inline(always)]
2467        fn inline_size(_context: fidl::encoding::Context) -> usize {
2468            1
2469        }
2470    }
2471
2472    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlEnableResponse, D>
2473        for &ControlEnableResponse
2474    {
2475        #[inline]
2476        unsafe fn encode(
2477            self,
2478            encoder: &mut fidl::encoding::Encoder<'_, D>,
2479            offset: usize,
2480            _depth: fidl::encoding::Depth,
2481        ) -> fidl::Result<()> {
2482            encoder.debug_check_bounds::<ControlEnableResponse>(offset);
2483            // Delegate to tuple encoding.
2484            fidl::encoding::Encode::<ControlEnableResponse, D>::encode(
2485                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_enable),),
2486                encoder,
2487                offset,
2488                _depth,
2489            )
2490        }
2491    }
2492    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2493        fidl::encoding::Encode<ControlEnableResponse, D> for (T0,)
2494    {
2495        #[inline]
2496        unsafe fn encode(
2497            self,
2498            encoder: &mut fidl::encoding::Encoder<'_, D>,
2499            offset: usize,
2500            depth: fidl::encoding::Depth,
2501        ) -> fidl::Result<()> {
2502            encoder.debug_check_bounds::<ControlEnableResponse>(offset);
2503            // Zero out padding regions. There's no need to apply masks
2504            // because the unmasked parts will be overwritten by fields.
2505            // Write the fields.
2506            self.0.encode(encoder, offset + 0, depth)?;
2507            Ok(())
2508        }
2509    }
2510
2511    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlEnableResponse {
2512        #[inline(always)]
2513        fn new_empty() -> Self {
2514            Self { did_enable: fidl::new_empty!(bool, D) }
2515        }
2516
2517        #[inline]
2518        unsafe fn decode(
2519            &mut self,
2520            decoder: &mut fidl::encoding::Decoder<'_, D>,
2521            offset: usize,
2522            _depth: fidl::encoding::Depth,
2523        ) -> fidl::Result<()> {
2524            decoder.debug_check_bounds::<Self>(offset);
2525            // Verify that padding bytes are zero.
2526            fidl::decode!(bool, D, &mut self.did_enable, decoder, offset + 0, _depth)?;
2527            Ok(())
2528        }
2529    }
2530
2531    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationResponse {
2532        type Borrowed<'a> = &'a Self;
2533        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2534            value
2535        }
2536    }
2537
2538    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationResponse {
2539        type Owned = Self;
2540
2541        #[inline(always)]
2542        fn inline_align(_context: fidl::encoding::Context) -> usize {
2543            8
2544        }
2545
2546        #[inline(always)]
2547        fn inline_size(_context: fidl::encoding::Context) -> usize {
2548            16
2549        }
2550    }
2551
2552    unsafe impl<D: fidl::encoding::ResourceDialect>
2553        fidl::encoding::Encode<ControlGetConfigurationResponse, D>
2554        for &ControlGetConfigurationResponse
2555    {
2556        #[inline]
2557        unsafe fn encode(
2558            self,
2559            encoder: &mut fidl::encoding::Encoder<'_, D>,
2560            offset: usize,
2561            _depth: fidl::encoding::Depth,
2562        ) -> fidl::Result<()> {
2563            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2564            // Delegate to tuple encoding.
2565            fidl::encoding::Encode::<ControlGetConfigurationResponse, D>::encode(
2566                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2567                encoder,
2568                offset,
2569                _depth,
2570            )
2571        }
2572    }
2573    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2574        fidl::encoding::Encode<ControlGetConfigurationResponse, D> for (T0,)
2575    {
2576        #[inline]
2577        unsafe fn encode(
2578            self,
2579            encoder: &mut fidl::encoding::Encoder<'_, D>,
2580            offset: usize,
2581            depth: fidl::encoding::Depth,
2582        ) -> fidl::Result<()> {
2583            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2584            // Zero out padding regions. There's no need to apply masks
2585            // because the unmasked parts will be overwritten by fields.
2586            // Write the fields.
2587            self.0.encode(encoder, offset + 0, depth)?;
2588            Ok(())
2589        }
2590    }
2591
2592    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2593        for ControlGetConfigurationResponse
2594    {
2595        #[inline(always)]
2596        fn new_empty() -> Self {
2597            Self { config: fidl::new_empty!(Configuration, D) }
2598        }
2599
2600        #[inline]
2601        unsafe fn decode(
2602            &mut self,
2603            decoder: &mut fidl::encoding::Decoder<'_, D>,
2604            offset: usize,
2605            _depth: fidl::encoding::Depth,
2606        ) -> fidl::Result<()> {
2607            decoder.debug_check_bounds::<Self>(offset);
2608            // Verify that padding bytes are zero.
2609            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2610            Ok(())
2611        }
2612    }
2613
2614    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressResponse {
2615        type Borrowed<'a> = &'a Self;
2616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2617            value
2618        }
2619    }
2620
2621    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressResponse {
2622        type Owned = Self;
2623
2624        #[inline(always)]
2625        fn inline_align(_context: fidl::encoding::Context) -> usize {
2626            1
2627        }
2628
2629        #[inline(always)]
2630        fn inline_size(_context: fidl::encoding::Context) -> usize {
2631            1
2632        }
2633    }
2634
2635    unsafe impl<D: fidl::encoding::ResourceDialect>
2636        fidl::encoding::Encode<ControlRemoveAddressResponse, D> for &ControlRemoveAddressResponse
2637    {
2638        #[inline]
2639        unsafe fn encode(
2640            self,
2641            encoder: &mut fidl::encoding::Encoder<'_, D>,
2642            offset: usize,
2643            _depth: fidl::encoding::Depth,
2644        ) -> fidl::Result<()> {
2645            encoder.debug_check_bounds::<ControlRemoveAddressResponse>(offset);
2646            // Delegate to tuple encoding.
2647            fidl::encoding::Encode::<ControlRemoveAddressResponse, D>::encode(
2648                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_remove),),
2649                encoder,
2650                offset,
2651                _depth,
2652            )
2653        }
2654    }
2655    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2656        fidl::encoding::Encode<ControlRemoveAddressResponse, D> for (T0,)
2657    {
2658        #[inline]
2659        unsafe fn encode(
2660            self,
2661            encoder: &mut fidl::encoding::Encoder<'_, D>,
2662            offset: usize,
2663            depth: fidl::encoding::Depth,
2664        ) -> fidl::Result<()> {
2665            encoder.debug_check_bounds::<ControlRemoveAddressResponse>(offset);
2666            // Zero out padding regions. There's no need to apply masks
2667            // because the unmasked parts will be overwritten by fields.
2668            // Write the fields.
2669            self.0.encode(encoder, offset + 0, depth)?;
2670            Ok(())
2671        }
2672    }
2673
2674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2675        for ControlRemoveAddressResponse
2676    {
2677        #[inline(always)]
2678        fn new_empty() -> Self {
2679            Self { did_remove: fidl::new_empty!(bool, D) }
2680        }
2681
2682        #[inline]
2683        unsafe fn decode(
2684            &mut self,
2685            decoder: &mut fidl::encoding::Decoder<'_, D>,
2686            offset: usize,
2687            _depth: fidl::encoding::Depth,
2688        ) -> fidl::Result<()> {
2689            decoder.debug_check_bounds::<Self>(offset);
2690            // Verify that padding bytes are zero.
2691            fidl::decode!(bool, D, &mut self.did_remove, decoder, offset + 0, _depth)?;
2692            Ok(())
2693        }
2694    }
2695
2696    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationResponse {
2697        type Borrowed<'a> = &'a Self;
2698        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2699            value
2700        }
2701    }
2702
2703    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationResponse {
2704        type Owned = Self;
2705
2706        #[inline(always)]
2707        fn inline_align(_context: fidl::encoding::Context) -> usize {
2708            8
2709        }
2710
2711        #[inline(always)]
2712        fn inline_size(_context: fidl::encoding::Context) -> usize {
2713            16
2714        }
2715    }
2716
2717    unsafe impl<D: fidl::encoding::ResourceDialect>
2718        fidl::encoding::Encode<ControlSetConfigurationResponse, D>
2719        for &ControlSetConfigurationResponse
2720    {
2721        #[inline]
2722        unsafe fn encode(
2723            self,
2724            encoder: &mut fidl::encoding::Encoder<'_, D>,
2725            offset: usize,
2726            _depth: fidl::encoding::Depth,
2727        ) -> fidl::Result<()> {
2728            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2729            // Delegate to tuple encoding.
2730            fidl::encoding::Encode::<ControlSetConfigurationResponse, D>::encode(
2731                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.previous_config),),
2732                encoder,
2733                offset,
2734                _depth,
2735            )
2736        }
2737    }
2738    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2739        fidl::encoding::Encode<ControlSetConfigurationResponse, D> for (T0,)
2740    {
2741        #[inline]
2742        unsafe fn encode(
2743            self,
2744            encoder: &mut fidl::encoding::Encoder<'_, D>,
2745            offset: usize,
2746            depth: fidl::encoding::Depth,
2747        ) -> fidl::Result<()> {
2748            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2749            // Zero out padding regions. There's no need to apply masks
2750            // because the unmasked parts will be overwritten by fields.
2751            // Write the fields.
2752            self.0.encode(encoder, offset + 0, depth)?;
2753            Ok(())
2754        }
2755    }
2756
2757    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2758        for ControlSetConfigurationResponse
2759    {
2760        #[inline(always)]
2761        fn new_empty() -> Self {
2762            Self { previous_config: fidl::new_empty!(Configuration, D) }
2763        }
2764
2765        #[inline]
2766        unsafe fn decode(
2767            &mut self,
2768            decoder: &mut fidl::encoding::Decoder<'_, D>,
2769            offset: usize,
2770            _depth: fidl::encoding::Depth,
2771        ) -> fidl::Result<()> {
2772            decoder.debug_check_bounds::<Self>(offset);
2773            // Verify that padding bytes are zero.
2774            fidl::decode!(
2775                Configuration,
2776                D,
2777                &mut self.previous_config,
2778                decoder,
2779                offset + 0,
2780                _depth
2781            )?;
2782            Ok(())
2783        }
2784    }
2785
2786    impl fidl::encoding::ValueTypeMarker for Empty {
2787        type Borrowed<'a> = &'a Self;
2788        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2789            value
2790        }
2791    }
2792
2793    unsafe impl fidl::encoding::TypeMarker for Empty {
2794        type Owned = Self;
2795
2796        #[inline(always)]
2797        fn inline_align(_context: fidl::encoding::Context) -> usize {
2798            1
2799        }
2800
2801        #[inline(always)]
2802        fn inline_size(_context: fidl::encoding::Context) -> usize {
2803            1
2804        }
2805    }
2806
2807    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
2808        #[inline]
2809        unsafe fn encode(
2810            self,
2811            encoder: &mut fidl::encoding::Encoder<'_, D>,
2812            offset: usize,
2813            _depth: fidl::encoding::Depth,
2814        ) -> fidl::Result<()> {
2815            encoder.debug_check_bounds::<Empty>(offset);
2816            encoder.write_num(0u8, offset);
2817            Ok(())
2818        }
2819    }
2820
2821    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
2822        #[inline(always)]
2823        fn new_empty() -> Self {
2824            Self
2825        }
2826
2827        #[inline]
2828        unsafe fn decode(
2829            &mut self,
2830            decoder: &mut fidl::encoding::Decoder<'_, D>,
2831            offset: usize,
2832            _depth: fidl::encoding::Depth,
2833        ) -> fidl::Result<()> {
2834            decoder.debug_check_bounds::<Self>(offset);
2835            match decoder.read_num::<u8>(offset) {
2836                0 => Ok(()),
2837                _ => Err(fidl::Error::Invalid),
2838            }
2839        }
2840    }
2841
2842    impl AddressParameters {
2843        #[inline(always)]
2844        fn max_ordinal_present(&self) -> u64 {
2845            if let Some(_) = self.perform_dad {
2846                return 4;
2847            }
2848            if let Some(_) = self.add_subnet_route {
2849                return 3;
2850            }
2851            if let Some(_) = self.temporary {
2852                return 2;
2853            }
2854            if let Some(_) = self.initial_properties {
2855                return 1;
2856            }
2857            0
2858        }
2859    }
2860
2861    impl fidl::encoding::ValueTypeMarker for AddressParameters {
2862        type Borrowed<'a> = &'a Self;
2863        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2864            value
2865        }
2866    }
2867
2868    unsafe impl fidl::encoding::TypeMarker for AddressParameters {
2869        type Owned = Self;
2870
2871        #[inline(always)]
2872        fn inline_align(_context: fidl::encoding::Context) -> usize {
2873            8
2874        }
2875
2876        #[inline(always)]
2877        fn inline_size(_context: fidl::encoding::Context) -> usize {
2878            16
2879        }
2880    }
2881
2882    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressParameters, D>
2883        for &AddressParameters
2884    {
2885        unsafe fn encode(
2886            self,
2887            encoder: &mut fidl::encoding::Encoder<'_, D>,
2888            offset: usize,
2889            mut depth: fidl::encoding::Depth,
2890        ) -> fidl::Result<()> {
2891            encoder.debug_check_bounds::<AddressParameters>(offset);
2892            // Vector header
2893            let max_ordinal: u64 = self.max_ordinal_present();
2894            encoder.write_num(max_ordinal, offset);
2895            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2896            // Calling encoder.out_of_line_offset(0) is not allowed.
2897            if max_ordinal == 0 {
2898                return Ok(());
2899            }
2900            depth.increment()?;
2901            let envelope_size = 8;
2902            let bytes_len = max_ordinal as usize * envelope_size;
2903            #[allow(unused_variables)]
2904            let offset = encoder.out_of_line_offset(bytes_len);
2905            let mut _prev_end_offset: usize = 0;
2906            if 1 > max_ordinal {
2907                return Ok(());
2908            }
2909
2910            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2911            // are envelope_size bytes.
2912            let cur_offset: usize = (1 - 1) * envelope_size;
2913
2914            // Zero reserved fields.
2915            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2916
2917            // Safety:
2918            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2919            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2920            //   envelope_size bytes, there is always sufficient room.
2921            fidl::encoding::encode_in_envelope_optional::<AddressProperties, D>(
2922                self.initial_properties
2923                    .as_ref()
2924                    .map(<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow),
2925                encoder,
2926                offset + cur_offset,
2927                depth,
2928            )?;
2929
2930            _prev_end_offset = cur_offset + envelope_size;
2931            if 2 > max_ordinal {
2932                return Ok(());
2933            }
2934
2935            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2936            // are envelope_size bytes.
2937            let cur_offset: usize = (2 - 1) * envelope_size;
2938
2939            // Zero reserved fields.
2940            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2941
2942            // Safety:
2943            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2944            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2945            //   envelope_size bytes, there is always sufficient room.
2946            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2947                self.temporary.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2948                encoder,
2949                offset + cur_offset,
2950                depth,
2951            )?;
2952
2953            _prev_end_offset = cur_offset + envelope_size;
2954            if 3 > max_ordinal {
2955                return Ok(());
2956            }
2957
2958            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2959            // are envelope_size bytes.
2960            let cur_offset: usize = (3 - 1) * envelope_size;
2961
2962            // Zero reserved fields.
2963            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2964
2965            // Safety:
2966            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2967            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2968            //   envelope_size bytes, there is always sufficient room.
2969            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2970                self.add_subnet_route
2971                    .as_ref()
2972                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2973                encoder,
2974                offset + cur_offset,
2975                depth,
2976            )?;
2977
2978            _prev_end_offset = cur_offset + envelope_size;
2979            if 4 > max_ordinal {
2980                return Ok(());
2981            }
2982
2983            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2984            // are envelope_size bytes.
2985            let cur_offset: usize = (4 - 1) * envelope_size;
2986
2987            // Zero reserved fields.
2988            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2989
2990            // Safety:
2991            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2992            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2993            //   envelope_size bytes, there is always sufficient room.
2994            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2995                self.perform_dad.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2996                encoder,
2997                offset + cur_offset,
2998                depth,
2999            )?;
3000
3001            _prev_end_offset = cur_offset + envelope_size;
3002
3003            Ok(())
3004        }
3005    }
3006
3007    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressParameters {
3008        #[inline(always)]
3009        fn new_empty() -> Self {
3010            Self::default()
3011        }
3012
3013        unsafe fn decode(
3014            &mut self,
3015            decoder: &mut fidl::encoding::Decoder<'_, D>,
3016            offset: usize,
3017            mut depth: fidl::encoding::Depth,
3018        ) -> fidl::Result<()> {
3019            decoder.debug_check_bounds::<Self>(offset);
3020            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3021                None => return Err(fidl::Error::NotNullable),
3022                Some(len) => len,
3023            };
3024            // Calling decoder.out_of_line_offset(0) is not allowed.
3025            if len == 0 {
3026                return Ok(());
3027            };
3028            depth.increment()?;
3029            let envelope_size = 8;
3030            let bytes_len = len * envelope_size;
3031            let offset = decoder.out_of_line_offset(bytes_len)?;
3032            // Decode the envelope for each type.
3033            let mut _next_ordinal_to_read = 0;
3034            let mut next_offset = offset;
3035            let end_offset = offset + bytes_len;
3036            _next_ordinal_to_read += 1;
3037            if next_offset >= end_offset {
3038                return Ok(());
3039            }
3040
3041            // Decode unknown envelopes for gaps in ordinals.
3042            while _next_ordinal_to_read < 1 {
3043                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3044                _next_ordinal_to_read += 1;
3045                next_offset += envelope_size;
3046            }
3047
3048            let next_out_of_line = decoder.next_out_of_line();
3049            let handles_before = decoder.remaining_handles();
3050            if let Some((inlined, num_bytes, num_handles)) =
3051                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3052            {
3053                let member_inline_size =
3054                    <AddressProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3055                if inlined != (member_inline_size <= 4) {
3056                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3057                }
3058                let inner_offset;
3059                let mut inner_depth = depth.clone();
3060                if inlined {
3061                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3062                    inner_offset = next_offset;
3063                } else {
3064                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3065                    inner_depth.increment()?;
3066                }
3067                let val_ref = self
3068                    .initial_properties
3069                    .get_or_insert_with(|| fidl::new_empty!(AddressProperties, D));
3070                fidl::decode!(AddressProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
3071                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3072                {
3073                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3074                }
3075                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3076                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3077                }
3078            }
3079
3080            next_offset += envelope_size;
3081            _next_ordinal_to_read += 1;
3082            if next_offset >= end_offset {
3083                return Ok(());
3084            }
3085
3086            // Decode unknown envelopes for gaps in ordinals.
3087            while _next_ordinal_to_read < 2 {
3088                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3089                _next_ordinal_to_read += 1;
3090                next_offset += envelope_size;
3091            }
3092
3093            let next_out_of_line = decoder.next_out_of_line();
3094            let handles_before = decoder.remaining_handles();
3095            if let Some((inlined, num_bytes, num_handles)) =
3096                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3097            {
3098                let member_inline_size =
3099                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3100                if inlined != (member_inline_size <= 4) {
3101                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3102                }
3103                let inner_offset;
3104                let mut inner_depth = depth.clone();
3105                if inlined {
3106                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3107                    inner_offset = next_offset;
3108                } else {
3109                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3110                    inner_depth.increment()?;
3111                }
3112                let val_ref = self.temporary.get_or_insert_with(|| fidl::new_empty!(bool, D));
3113                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3114                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3115                {
3116                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3117                }
3118                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3119                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3120                }
3121            }
3122
3123            next_offset += envelope_size;
3124            _next_ordinal_to_read += 1;
3125            if next_offset >= end_offset {
3126                return Ok(());
3127            }
3128
3129            // Decode unknown envelopes for gaps in ordinals.
3130            while _next_ordinal_to_read < 3 {
3131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3132                _next_ordinal_to_read += 1;
3133                next_offset += envelope_size;
3134            }
3135
3136            let next_out_of_line = decoder.next_out_of_line();
3137            let handles_before = decoder.remaining_handles();
3138            if let Some((inlined, num_bytes, num_handles)) =
3139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3140            {
3141                let member_inline_size =
3142                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3143                if inlined != (member_inline_size <= 4) {
3144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3145                }
3146                let inner_offset;
3147                let mut inner_depth = depth.clone();
3148                if inlined {
3149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3150                    inner_offset = next_offset;
3151                } else {
3152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3153                    inner_depth.increment()?;
3154                }
3155                let val_ref =
3156                    self.add_subnet_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
3157                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3158                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3159                {
3160                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3161                }
3162                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3163                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3164                }
3165            }
3166
3167            next_offset += envelope_size;
3168            _next_ordinal_to_read += 1;
3169            if next_offset >= end_offset {
3170                return Ok(());
3171            }
3172
3173            // Decode unknown envelopes for gaps in ordinals.
3174            while _next_ordinal_to_read < 4 {
3175                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3176                _next_ordinal_to_read += 1;
3177                next_offset += envelope_size;
3178            }
3179
3180            let next_out_of_line = decoder.next_out_of_line();
3181            let handles_before = decoder.remaining_handles();
3182            if let Some((inlined, num_bytes, num_handles)) =
3183                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3184            {
3185                let member_inline_size =
3186                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3187                if inlined != (member_inline_size <= 4) {
3188                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3189                }
3190                let inner_offset;
3191                let mut inner_depth = depth.clone();
3192                if inlined {
3193                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3194                    inner_offset = next_offset;
3195                } else {
3196                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3197                    inner_depth.increment()?;
3198                }
3199                let val_ref = self.perform_dad.get_or_insert_with(|| fidl::new_empty!(bool, D));
3200                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3201                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3202                {
3203                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3204                }
3205                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3206                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3207                }
3208            }
3209
3210            next_offset += envelope_size;
3211
3212            // Decode the remaining unknown envelopes.
3213            while next_offset < end_offset {
3214                _next_ordinal_to_read += 1;
3215                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3216                next_offset += envelope_size;
3217            }
3218
3219            Ok(())
3220        }
3221    }
3222
3223    impl AddressProperties {
3224        #[inline(always)]
3225        fn max_ordinal_present(&self) -> u64 {
3226            if let Some(_) = self.valid_lifetime_end {
3227                return 2;
3228            }
3229            if let Some(_) = self.preferred_lifetime_info {
3230                return 1;
3231            }
3232            0
3233        }
3234    }
3235
3236    impl fidl::encoding::ValueTypeMarker for AddressProperties {
3237        type Borrowed<'a> = &'a Self;
3238        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3239            value
3240        }
3241    }
3242
3243    unsafe impl fidl::encoding::TypeMarker for AddressProperties {
3244        type Owned = Self;
3245
3246        #[inline(always)]
3247        fn inline_align(_context: fidl::encoding::Context) -> usize {
3248            8
3249        }
3250
3251        #[inline(always)]
3252        fn inline_size(_context: fidl::encoding::Context) -> usize {
3253            16
3254        }
3255    }
3256
3257    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressProperties, D>
3258        for &AddressProperties
3259    {
3260        unsafe fn encode(
3261            self,
3262            encoder: &mut fidl::encoding::Encoder<'_, D>,
3263            offset: usize,
3264            mut depth: fidl::encoding::Depth,
3265        ) -> fidl::Result<()> {
3266            encoder.debug_check_bounds::<AddressProperties>(offset);
3267            // Vector header
3268            let max_ordinal: u64 = self.max_ordinal_present();
3269            encoder.write_num(max_ordinal, offset);
3270            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3271            // Calling encoder.out_of_line_offset(0) is not allowed.
3272            if max_ordinal == 0 {
3273                return Ok(());
3274            }
3275            depth.increment()?;
3276            let envelope_size = 8;
3277            let bytes_len = max_ordinal as usize * envelope_size;
3278            #[allow(unused_variables)]
3279            let offset = encoder.out_of_line_offset(bytes_len);
3280            let mut _prev_end_offset: usize = 0;
3281            if 1 > max_ordinal {
3282                return Ok(());
3283            }
3284
3285            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3286            // are envelope_size bytes.
3287            let cur_offset: usize = (1 - 1) * envelope_size;
3288
3289            // Zero reserved fields.
3290            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3291
3292            // Safety:
3293            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3294            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3295            //   envelope_size bytes, there is always sufficient room.
3296            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo, D>(
3297            self.preferred_lifetime_info.as_ref().map(<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
3298            encoder, offset + cur_offset, depth
3299        )?;
3300
3301            _prev_end_offset = cur_offset + envelope_size;
3302            if 2 > max_ordinal {
3303                return Ok(());
3304            }
3305
3306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3307            // are envelope_size bytes.
3308            let cur_offset: usize = (2 - 1) * envelope_size;
3309
3310            // Zero reserved fields.
3311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3312
3313            // Safety:
3314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3316            //   envelope_size bytes, there is always sufficient room.
3317            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3318                self.valid_lifetime_end
3319                    .as_ref()
3320                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3321                encoder,
3322                offset + cur_offset,
3323                depth,
3324            )?;
3325
3326            _prev_end_offset = cur_offset + envelope_size;
3327
3328            Ok(())
3329        }
3330    }
3331
3332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressProperties {
3333        #[inline(always)]
3334        fn new_empty() -> Self {
3335            Self::default()
3336        }
3337
3338        unsafe fn decode(
3339            &mut self,
3340            decoder: &mut fidl::encoding::Decoder<'_, D>,
3341            offset: usize,
3342            mut depth: fidl::encoding::Depth,
3343        ) -> fidl::Result<()> {
3344            decoder.debug_check_bounds::<Self>(offset);
3345            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3346                None => return Err(fidl::Error::NotNullable),
3347                Some(len) => len,
3348            };
3349            // Calling decoder.out_of_line_offset(0) is not allowed.
3350            if len == 0 {
3351                return Ok(());
3352            };
3353            depth.increment()?;
3354            let envelope_size = 8;
3355            let bytes_len = len * envelope_size;
3356            let offset = decoder.out_of_line_offset(bytes_len)?;
3357            // Decode the envelope for each type.
3358            let mut _next_ordinal_to_read = 0;
3359            let mut next_offset = offset;
3360            let end_offset = offset + bytes_len;
3361            _next_ordinal_to_read += 1;
3362            if next_offset >= end_offset {
3363                return Ok(());
3364            }
3365
3366            // Decode unknown envelopes for gaps in ordinals.
3367            while _next_ordinal_to_read < 1 {
3368                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3369                _next_ordinal_to_read += 1;
3370                next_offset += envelope_size;
3371            }
3372
3373            let next_out_of_line = decoder.next_out_of_line();
3374            let handles_before = decoder.remaining_handles();
3375            if let Some((inlined, num_bytes, num_handles)) =
3376                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3377            {
3378                let member_inline_size = <fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3379                if inlined != (member_inline_size <= 4) {
3380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3381                }
3382                let inner_offset;
3383                let mut inner_depth = depth.clone();
3384                if inlined {
3385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3386                    inner_offset = next_offset;
3387                } else {
3388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3389                    inner_depth.increment()?;
3390                }
3391                let val_ref = self.preferred_lifetime_info.get_or_insert_with(|| {
3392                    fidl::new_empty!(fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo, D)
3393                });
3394                fidl::decode!(
3395                    fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo,
3396                    D,
3397                    val_ref,
3398                    decoder,
3399                    inner_offset,
3400                    inner_depth
3401                )?;
3402                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3403                {
3404                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3405                }
3406                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3407                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3408                }
3409            }
3410
3411            next_offset += envelope_size;
3412            _next_ordinal_to_read += 1;
3413            if next_offset >= end_offset {
3414                return Ok(());
3415            }
3416
3417            // Decode unknown envelopes for gaps in ordinals.
3418            while _next_ordinal_to_read < 2 {
3419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3420                _next_ordinal_to_read += 1;
3421                next_offset += envelope_size;
3422            }
3423
3424            let next_out_of_line = decoder.next_out_of_line();
3425            let handles_before = decoder.remaining_handles();
3426            if let Some((inlined, num_bytes, num_handles)) =
3427                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3428            {
3429                let member_inline_size =
3430                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3431                if inlined != (member_inline_size <= 4) {
3432                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3433                }
3434                let inner_offset;
3435                let mut inner_depth = depth.clone();
3436                if inlined {
3437                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3438                    inner_offset = next_offset;
3439                } else {
3440                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3441                    inner_depth.increment()?;
3442                }
3443                let val_ref =
3444                    self.valid_lifetime_end.get_or_insert_with(|| fidl::new_empty!(i64, D));
3445                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3446                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3447                {
3448                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3449                }
3450                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3451                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3452                }
3453            }
3454
3455            next_offset += envelope_size;
3456
3457            // Decode the remaining unknown envelopes.
3458            while next_offset < end_offset {
3459                _next_ordinal_to_read += 1;
3460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3461                next_offset += envelope_size;
3462            }
3463
3464            Ok(())
3465        }
3466    }
3467
3468    impl ArpConfiguration {
3469        #[inline(always)]
3470        fn max_ordinal_present(&self) -> u64 {
3471            if let Some(_) = self.dad {
3472                return 2;
3473            }
3474            if let Some(_) = self.nud {
3475                return 1;
3476            }
3477            0
3478        }
3479    }
3480
3481    impl fidl::encoding::ValueTypeMarker for ArpConfiguration {
3482        type Borrowed<'a> = &'a Self;
3483        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3484            value
3485        }
3486    }
3487
3488    unsafe impl fidl::encoding::TypeMarker for ArpConfiguration {
3489        type Owned = Self;
3490
3491        #[inline(always)]
3492        fn inline_align(_context: fidl::encoding::Context) -> usize {
3493            8
3494        }
3495
3496        #[inline(always)]
3497        fn inline_size(_context: fidl::encoding::Context) -> usize {
3498            16
3499        }
3500    }
3501
3502    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ArpConfiguration, D>
3503        for &ArpConfiguration
3504    {
3505        unsafe fn encode(
3506            self,
3507            encoder: &mut fidl::encoding::Encoder<'_, D>,
3508            offset: usize,
3509            mut depth: fidl::encoding::Depth,
3510        ) -> fidl::Result<()> {
3511            encoder.debug_check_bounds::<ArpConfiguration>(offset);
3512            // Vector header
3513            let max_ordinal: u64 = self.max_ordinal_present();
3514            encoder.write_num(max_ordinal, offset);
3515            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3516            // Calling encoder.out_of_line_offset(0) is not allowed.
3517            if max_ordinal == 0 {
3518                return Ok(());
3519            }
3520            depth.increment()?;
3521            let envelope_size = 8;
3522            let bytes_len = max_ordinal as usize * envelope_size;
3523            #[allow(unused_variables)]
3524            let offset = encoder.out_of_line_offset(bytes_len);
3525            let mut _prev_end_offset: usize = 0;
3526            if 1 > max_ordinal {
3527                return Ok(());
3528            }
3529
3530            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3531            // are envelope_size bytes.
3532            let cur_offset: usize = (1 - 1) * envelope_size;
3533
3534            // Zero reserved fields.
3535            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3536
3537            // Safety:
3538            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3539            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3540            //   envelope_size bytes, there is always sufficient room.
3541            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
3542                self.nud
3543                    .as_ref()
3544                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3545                encoder,
3546                offset + cur_offset,
3547                depth,
3548            )?;
3549
3550            _prev_end_offset = cur_offset + envelope_size;
3551            if 2 > max_ordinal {
3552                return Ok(());
3553            }
3554
3555            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3556            // are envelope_size bytes.
3557            let cur_offset: usize = (2 - 1) * envelope_size;
3558
3559            // Zero reserved fields.
3560            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3561
3562            // Safety:
3563            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3564            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3565            //   envelope_size bytes, there is always sufficient room.
3566            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
3567                self.dad
3568                    .as_ref()
3569                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3570                encoder,
3571                offset + cur_offset,
3572                depth,
3573            )?;
3574
3575            _prev_end_offset = cur_offset + envelope_size;
3576
3577            Ok(())
3578        }
3579    }
3580
3581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ArpConfiguration {
3582        #[inline(always)]
3583        fn new_empty() -> Self {
3584            Self::default()
3585        }
3586
3587        unsafe fn decode(
3588            &mut self,
3589            decoder: &mut fidl::encoding::Decoder<'_, D>,
3590            offset: usize,
3591            mut depth: fidl::encoding::Depth,
3592        ) -> fidl::Result<()> {
3593            decoder.debug_check_bounds::<Self>(offset);
3594            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3595                None => return Err(fidl::Error::NotNullable),
3596                Some(len) => len,
3597            };
3598            // Calling decoder.out_of_line_offset(0) is not allowed.
3599            if len == 0 {
3600                return Ok(());
3601            };
3602            depth.increment()?;
3603            let envelope_size = 8;
3604            let bytes_len = len * envelope_size;
3605            let offset = decoder.out_of_line_offset(bytes_len)?;
3606            // Decode the envelope for each type.
3607            let mut _next_ordinal_to_read = 0;
3608            let mut next_offset = offset;
3609            let end_offset = offset + bytes_len;
3610            _next_ordinal_to_read += 1;
3611            if next_offset >= end_offset {
3612                return Ok(());
3613            }
3614
3615            // Decode unknown envelopes for gaps in ordinals.
3616            while _next_ordinal_to_read < 1 {
3617                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3618                _next_ordinal_to_read += 1;
3619                next_offset += envelope_size;
3620            }
3621
3622            let next_out_of_line = decoder.next_out_of_line();
3623            let handles_before = decoder.remaining_handles();
3624            if let Some((inlined, num_bytes, num_handles)) =
3625                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3626            {
3627                let member_inline_size =
3628                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3629                if inlined != (member_inline_size <= 4) {
3630                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3631                }
3632                let inner_offset;
3633                let mut inner_depth = depth.clone();
3634                if inlined {
3635                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3636                    inner_offset = next_offset;
3637                } else {
3638                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3639                    inner_depth.increment()?;
3640                }
3641                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
3642                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3643                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3644                {
3645                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3646                }
3647                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3648                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3649                }
3650            }
3651
3652            next_offset += envelope_size;
3653            _next_ordinal_to_read += 1;
3654            if next_offset >= end_offset {
3655                return Ok(());
3656            }
3657
3658            // Decode unknown envelopes for gaps in ordinals.
3659            while _next_ordinal_to_read < 2 {
3660                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3661                _next_ordinal_to_read += 1;
3662                next_offset += envelope_size;
3663            }
3664
3665            let next_out_of_line = decoder.next_out_of_line();
3666            let handles_before = decoder.remaining_handles();
3667            if let Some((inlined, num_bytes, num_handles)) =
3668                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3669            {
3670                let member_inline_size =
3671                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3672                if inlined != (member_inline_size <= 4) {
3673                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3674                }
3675                let inner_offset;
3676                let mut inner_depth = depth.clone();
3677                if inlined {
3678                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3679                    inner_offset = next_offset;
3680                } else {
3681                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3682                    inner_depth.increment()?;
3683                }
3684                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
3685                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3687                {
3688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3689                }
3690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3692                }
3693            }
3694
3695            next_offset += envelope_size;
3696
3697            // Decode the remaining unknown envelopes.
3698            while next_offset < end_offset {
3699                _next_ordinal_to_read += 1;
3700                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3701                next_offset += envelope_size;
3702            }
3703
3704            Ok(())
3705        }
3706    }
3707
3708    impl Configuration {
3709        #[inline(always)]
3710        fn max_ordinal_present(&self) -> u64 {
3711            if let Some(_) = self.ipv6 {
3712                return 2;
3713            }
3714            if let Some(_) = self.ipv4 {
3715                return 1;
3716            }
3717            0
3718        }
3719    }
3720
3721    impl fidl::encoding::ValueTypeMarker for Configuration {
3722        type Borrowed<'a> = &'a Self;
3723        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3724            value
3725        }
3726    }
3727
3728    unsafe impl fidl::encoding::TypeMarker for Configuration {
3729        type Owned = Self;
3730
3731        #[inline(always)]
3732        fn inline_align(_context: fidl::encoding::Context) -> usize {
3733            8
3734        }
3735
3736        #[inline(always)]
3737        fn inline_size(_context: fidl::encoding::Context) -> usize {
3738            16
3739        }
3740    }
3741
3742    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Configuration, D>
3743        for &Configuration
3744    {
3745        unsafe fn encode(
3746            self,
3747            encoder: &mut fidl::encoding::Encoder<'_, D>,
3748            offset: usize,
3749            mut depth: fidl::encoding::Depth,
3750        ) -> fidl::Result<()> {
3751            encoder.debug_check_bounds::<Configuration>(offset);
3752            // Vector header
3753            let max_ordinal: u64 = self.max_ordinal_present();
3754            encoder.write_num(max_ordinal, offset);
3755            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3756            // Calling encoder.out_of_line_offset(0) is not allowed.
3757            if max_ordinal == 0 {
3758                return Ok(());
3759            }
3760            depth.increment()?;
3761            let envelope_size = 8;
3762            let bytes_len = max_ordinal as usize * envelope_size;
3763            #[allow(unused_variables)]
3764            let offset = encoder.out_of_line_offset(bytes_len);
3765            let mut _prev_end_offset: usize = 0;
3766            if 1 > max_ordinal {
3767                return Ok(());
3768            }
3769
3770            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3771            // are envelope_size bytes.
3772            let cur_offset: usize = (1 - 1) * envelope_size;
3773
3774            // Zero reserved fields.
3775            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3776
3777            // Safety:
3778            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3779            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3780            //   envelope_size bytes, there is always sufficient room.
3781            fidl::encoding::encode_in_envelope_optional::<Ipv4Configuration, D>(
3782                self.ipv4
3783                    .as_ref()
3784                    .map(<Ipv4Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3785                encoder,
3786                offset + cur_offset,
3787                depth,
3788            )?;
3789
3790            _prev_end_offset = cur_offset + envelope_size;
3791            if 2 > max_ordinal {
3792                return Ok(());
3793            }
3794
3795            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3796            // are envelope_size bytes.
3797            let cur_offset: usize = (2 - 1) * envelope_size;
3798
3799            // Zero reserved fields.
3800            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3801
3802            // Safety:
3803            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3804            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3805            //   envelope_size bytes, there is always sufficient room.
3806            fidl::encoding::encode_in_envelope_optional::<Ipv6Configuration, D>(
3807                self.ipv6
3808                    .as_ref()
3809                    .map(<Ipv6Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3810                encoder,
3811                offset + cur_offset,
3812                depth,
3813            )?;
3814
3815            _prev_end_offset = cur_offset + envelope_size;
3816
3817            Ok(())
3818        }
3819    }
3820
3821    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Configuration {
3822        #[inline(always)]
3823        fn new_empty() -> Self {
3824            Self::default()
3825        }
3826
3827        unsafe fn decode(
3828            &mut self,
3829            decoder: &mut fidl::encoding::Decoder<'_, D>,
3830            offset: usize,
3831            mut depth: fidl::encoding::Depth,
3832        ) -> fidl::Result<()> {
3833            decoder.debug_check_bounds::<Self>(offset);
3834            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3835                None => return Err(fidl::Error::NotNullable),
3836                Some(len) => len,
3837            };
3838            // Calling decoder.out_of_line_offset(0) is not allowed.
3839            if len == 0 {
3840                return Ok(());
3841            };
3842            depth.increment()?;
3843            let envelope_size = 8;
3844            let bytes_len = len * envelope_size;
3845            let offset = decoder.out_of_line_offset(bytes_len)?;
3846            // Decode the envelope for each type.
3847            let mut _next_ordinal_to_read = 0;
3848            let mut next_offset = offset;
3849            let end_offset = offset + bytes_len;
3850            _next_ordinal_to_read += 1;
3851            if next_offset >= end_offset {
3852                return Ok(());
3853            }
3854
3855            // Decode unknown envelopes for gaps in ordinals.
3856            while _next_ordinal_to_read < 1 {
3857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3858                _next_ordinal_to_read += 1;
3859                next_offset += envelope_size;
3860            }
3861
3862            let next_out_of_line = decoder.next_out_of_line();
3863            let handles_before = decoder.remaining_handles();
3864            if let Some((inlined, num_bytes, num_handles)) =
3865                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3866            {
3867                let member_inline_size =
3868                    <Ipv4Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3869                if inlined != (member_inline_size <= 4) {
3870                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3871                }
3872                let inner_offset;
3873                let mut inner_depth = depth.clone();
3874                if inlined {
3875                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3876                    inner_offset = next_offset;
3877                } else {
3878                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3879                    inner_depth.increment()?;
3880                }
3881                let val_ref =
3882                    self.ipv4.get_or_insert_with(|| fidl::new_empty!(Ipv4Configuration, D));
3883                fidl::decode!(Ipv4Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3884                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3885                {
3886                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3887                }
3888                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3889                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3890                }
3891            }
3892
3893            next_offset += envelope_size;
3894            _next_ordinal_to_read += 1;
3895            if next_offset >= end_offset {
3896                return Ok(());
3897            }
3898
3899            // Decode unknown envelopes for gaps in ordinals.
3900            while _next_ordinal_to_read < 2 {
3901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3902                _next_ordinal_to_read += 1;
3903                next_offset += envelope_size;
3904            }
3905
3906            let next_out_of_line = decoder.next_out_of_line();
3907            let handles_before = decoder.remaining_handles();
3908            if let Some((inlined, num_bytes, num_handles)) =
3909                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3910            {
3911                let member_inline_size =
3912                    <Ipv6Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3913                if inlined != (member_inline_size <= 4) {
3914                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3915                }
3916                let inner_offset;
3917                let mut inner_depth = depth.clone();
3918                if inlined {
3919                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3920                    inner_offset = next_offset;
3921                } else {
3922                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3923                    inner_depth.increment()?;
3924                }
3925                let val_ref =
3926                    self.ipv6.get_or_insert_with(|| fidl::new_empty!(Ipv6Configuration, D));
3927                fidl::decode!(Ipv6Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3928                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3929                {
3930                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3931                }
3932                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3933                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3934                }
3935            }
3936
3937            next_offset += envelope_size;
3938
3939            // Decode the remaining unknown envelopes.
3940            while next_offset < end_offset {
3941                _next_ordinal_to_read += 1;
3942                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3943                next_offset += envelope_size;
3944            }
3945
3946            Ok(())
3947        }
3948    }
3949
3950    impl DadConfiguration {
3951        #[inline(always)]
3952        fn max_ordinal_present(&self) -> u64 {
3953            if let Some(_) = self.transmits {
3954                return 1;
3955            }
3956            0
3957        }
3958    }
3959
3960    impl fidl::encoding::ValueTypeMarker for DadConfiguration {
3961        type Borrowed<'a> = &'a Self;
3962        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3963            value
3964        }
3965    }
3966
3967    unsafe impl fidl::encoding::TypeMarker for DadConfiguration {
3968        type Owned = Self;
3969
3970        #[inline(always)]
3971        fn inline_align(_context: fidl::encoding::Context) -> usize {
3972            8
3973        }
3974
3975        #[inline(always)]
3976        fn inline_size(_context: fidl::encoding::Context) -> usize {
3977            16
3978        }
3979    }
3980
3981    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DadConfiguration, D>
3982        for &DadConfiguration
3983    {
3984        unsafe fn encode(
3985            self,
3986            encoder: &mut fidl::encoding::Encoder<'_, D>,
3987            offset: usize,
3988            mut depth: fidl::encoding::Depth,
3989        ) -> fidl::Result<()> {
3990            encoder.debug_check_bounds::<DadConfiguration>(offset);
3991            // Vector header
3992            let max_ordinal: u64 = self.max_ordinal_present();
3993            encoder.write_num(max_ordinal, offset);
3994            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3995            // Calling encoder.out_of_line_offset(0) is not allowed.
3996            if max_ordinal == 0 {
3997                return Ok(());
3998            }
3999            depth.increment()?;
4000            let envelope_size = 8;
4001            let bytes_len = max_ordinal as usize * envelope_size;
4002            #[allow(unused_variables)]
4003            let offset = encoder.out_of_line_offset(bytes_len);
4004            let mut _prev_end_offset: usize = 0;
4005            if 1 > max_ordinal {
4006                return Ok(());
4007            }
4008
4009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4010            // are envelope_size bytes.
4011            let cur_offset: usize = (1 - 1) * envelope_size;
4012
4013            // Zero reserved fields.
4014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4015
4016            // Safety:
4017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4019            //   envelope_size bytes, there is always sufficient room.
4020            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4021                self.transmits.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4022                encoder,
4023                offset + cur_offset,
4024                depth,
4025            )?;
4026
4027            _prev_end_offset = cur_offset + envelope_size;
4028
4029            Ok(())
4030        }
4031    }
4032
4033    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DadConfiguration {
4034        #[inline(always)]
4035        fn new_empty() -> Self {
4036            Self::default()
4037        }
4038
4039        unsafe fn decode(
4040            &mut self,
4041            decoder: &mut fidl::encoding::Decoder<'_, D>,
4042            offset: usize,
4043            mut depth: fidl::encoding::Depth,
4044        ) -> fidl::Result<()> {
4045            decoder.debug_check_bounds::<Self>(offset);
4046            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4047                None => return Err(fidl::Error::NotNullable),
4048                Some(len) => len,
4049            };
4050            // Calling decoder.out_of_line_offset(0) is not allowed.
4051            if len == 0 {
4052                return Ok(());
4053            };
4054            depth.increment()?;
4055            let envelope_size = 8;
4056            let bytes_len = len * envelope_size;
4057            let offset = decoder.out_of_line_offset(bytes_len)?;
4058            // Decode the envelope for each type.
4059            let mut _next_ordinal_to_read = 0;
4060            let mut next_offset = offset;
4061            let end_offset = offset + bytes_len;
4062            _next_ordinal_to_read += 1;
4063            if next_offset >= end_offset {
4064                return Ok(());
4065            }
4066
4067            // Decode unknown envelopes for gaps in ordinals.
4068            while _next_ordinal_to_read < 1 {
4069                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4070                _next_ordinal_to_read += 1;
4071                next_offset += envelope_size;
4072            }
4073
4074            let next_out_of_line = decoder.next_out_of_line();
4075            let handles_before = decoder.remaining_handles();
4076            if let Some((inlined, num_bytes, num_handles)) =
4077                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4078            {
4079                let member_inline_size =
4080                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4081                if inlined != (member_inline_size <= 4) {
4082                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4083                }
4084                let inner_offset;
4085                let mut inner_depth = depth.clone();
4086                if inlined {
4087                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4088                    inner_offset = next_offset;
4089                } else {
4090                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4091                    inner_depth.increment()?;
4092                }
4093                let val_ref = self.transmits.get_or_insert_with(|| fidl::new_empty!(u16, D));
4094                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4095                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4096                {
4097                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4098                }
4099                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4100                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4101                }
4102            }
4103
4104            next_offset += envelope_size;
4105
4106            // Decode the remaining unknown envelopes.
4107            while next_offset < end_offset {
4108                _next_ordinal_to_read += 1;
4109                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4110                next_offset += envelope_size;
4111            }
4112
4113            Ok(())
4114        }
4115    }
4116
4117    impl IgmpConfiguration {
4118        #[inline(always)]
4119        fn max_ordinal_present(&self) -> u64 {
4120            if let Some(_) = self.version {
4121                return 1;
4122            }
4123            0
4124        }
4125    }
4126
4127    impl fidl::encoding::ValueTypeMarker for IgmpConfiguration {
4128        type Borrowed<'a> = &'a Self;
4129        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4130            value
4131        }
4132    }
4133
4134    unsafe impl fidl::encoding::TypeMarker for IgmpConfiguration {
4135        type Owned = Self;
4136
4137        #[inline(always)]
4138        fn inline_align(_context: fidl::encoding::Context) -> usize {
4139            8
4140        }
4141
4142        #[inline(always)]
4143        fn inline_size(_context: fidl::encoding::Context) -> usize {
4144            16
4145        }
4146    }
4147
4148    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IgmpConfiguration, D>
4149        for &IgmpConfiguration
4150    {
4151        unsafe fn encode(
4152            self,
4153            encoder: &mut fidl::encoding::Encoder<'_, D>,
4154            offset: usize,
4155            mut depth: fidl::encoding::Depth,
4156        ) -> fidl::Result<()> {
4157            encoder.debug_check_bounds::<IgmpConfiguration>(offset);
4158            // Vector header
4159            let max_ordinal: u64 = self.max_ordinal_present();
4160            encoder.write_num(max_ordinal, offset);
4161            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4162            // Calling encoder.out_of_line_offset(0) is not allowed.
4163            if max_ordinal == 0 {
4164                return Ok(());
4165            }
4166            depth.increment()?;
4167            let envelope_size = 8;
4168            let bytes_len = max_ordinal as usize * envelope_size;
4169            #[allow(unused_variables)]
4170            let offset = encoder.out_of_line_offset(bytes_len);
4171            let mut _prev_end_offset: usize = 0;
4172            if 1 > max_ordinal {
4173                return Ok(());
4174            }
4175
4176            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4177            // are envelope_size bytes.
4178            let cur_offset: usize = (1 - 1) * envelope_size;
4179
4180            // Zero reserved fields.
4181            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4182
4183            // Safety:
4184            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4185            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4186            //   envelope_size bytes, there is always sufficient room.
4187            fidl::encoding::encode_in_envelope_optional::<IgmpVersion, D>(
4188                self.version.as_ref().map(<IgmpVersion as fidl::encoding::ValueTypeMarker>::borrow),
4189                encoder,
4190                offset + cur_offset,
4191                depth,
4192            )?;
4193
4194            _prev_end_offset = cur_offset + envelope_size;
4195
4196            Ok(())
4197        }
4198    }
4199
4200    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpConfiguration {
4201        #[inline(always)]
4202        fn new_empty() -> Self {
4203            Self::default()
4204        }
4205
4206        unsafe fn decode(
4207            &mut self,
4208            decoder: &mut fidl::encoding::Decoder<'_, D>,
4209            offset: usize,
4210            mut depth: fidl::encoding::Depth,
4211        ) -> fidl::Result<()> {
4212            decoder.debug_check_bounds::<Self>(offset);
4213            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4214                None => return Err(fidl::Error::NotNullable),
4215                Some(len) => len,
4216            };
4217            // Calling decoder.out_of_line_offset(0) is not allowed.
4218            if len == 0 {
4219                return Ok(());
4220            };
4221            depth.increment()?;
4222            let envelope_size = 8;
4223            let bytes_len = len * envelope_size;
4224            let offset = decoder.out_of_line_offset(bytes_len)?;
4225            // Decode the envelope for each type.
4226            let mut _next_ordinal_to_read = 0;
4227            let mut next_offset = offset;
4228            let end_offset = offset + bytes_len;
4229            _next_ordinal_to_read += 1;
4230            if next_offset >= end_offset {
4231                return Ok(());
4232            }
4233
4234            // Decode unknown envelopes for gaps in ordinals.
4235            while _next_ordinal_to_read < 1 {
4236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4237                _next_ordinal_to_read += 1;
4238                next_offset += envelope_size;
4239            }
4240
4241            let next_out_of_line = decoder.next_out_of_line();
4242            let handles_before = decoder.remaining_handles();
4243            if let Some((inlined, num_bytes, num_handles)) =
4244                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4245            {
4246                let member_inline_size =
4247                    <IgmpVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4248                if inlined != (member_inline_size <= 4) {
4249                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4250                }
4251                let inner_offset;
4252                let mut inner_depth = depth.clone();
4253                if inlined {
4254                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4255                    inner_offset = next_offset;
4256                } else {
4257                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4258                    inner_depth.increment()?;
4259                }
4260                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(IgmpVersion, D));
4261                fidl::decode!(IgmpVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
4262                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4263                {
4264                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4265                }
4266                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4267                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4268                }
4269            }
4270
4271            next_offset += envelope_size;
4272
4273            // Decode the remaining unknown envelopes.
4274            while next_offset < end_offset {
4275                _next_ordinal_to_read += 1;
4276                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4277                next_offset += envelope_size;
4278            }
4279
4280            Ok(())
4281        }
4282    }
4283
4284    impl Ipv4Configuration {
4285        #[inline(always)]
4286        fn max_ordinal_present(&self) -> u64 {
4287            if let Some(_) = self.enabled {
4288                return 5;
4289            }
4290            if let Some(_) = self.arp {
4291                return 4;
4292            }
4293            if let Some(_) = self.igmp {
4294                return 3;
4295            }
4296            if let Some(_) = self.multicast_forwarding {
4297                return 2;
4298            }
4299            if let Some(_) = self.unicast_forwarding {
4300                return 1;
4301            }
4302            0
4303        }
4304    }
4305
4306    impl fidl::encoding::ValueTypeMarker for Ipv4Configuration {
4307        type Borrowed<'a> = &'a Self;
4308        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4309            value
4310        }
4311    }
4312
4313    unsafe impl fidl::encoding::TypeMarker for Ipv4Configuration {
4314        type Owned = Self;
4315
4316        #[inline(always)]
4317        fn inline_align(_context: fidl::encoding::Context) -> usize {
4318            8
4319        }
4320
4321        #[inline(always)]
4322        fn inline_size(_context: fidl::encoding::Context) -> usize {
4323            16
4324        }
4325    }
4326
4327    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv4Configuration, D>
4328        for &Ipv4Configuration
4329    {
4330        unsafe fn encode(
4331            self,
4332            encoder: &mut fidl::encoding::Encoder<'_, D>,
4333            offset: usize,
4334            mut depth: fidl::encoding::Depth,
4335        ) -> fidl::Result<()> {
4336            encoder.debug_check_bounds::<Ipv4Configuration>(offset);
4337            // Vector header
4338            let max_ordinal: u64 = self.max_ordinal_present();
4339            encoder.write_num(max_ordinal, offset);
4340            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4341            // Calling encoder.out_of_line_offset(0) is not allowed.
4342            if max_ordinal == 0 {
4343                return Ok(());
4344            }
4345            depth.increment()?;
4346            let envelope_size = 8;
4347            let bytes_len = max_ordinal as usize * envelope_size;
4348            #[allow(unused_variables)]
4349            let offset = encoder.out_of_line_offset(bytes_len);
4350            let mut _prev_end_offset: usize = 0;
4351            if 1 > max_ordinal {
4352                return Ok(());
4353            }
4354
4355            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4356            // are envelope_size bytes.
4357            let cur_offset: usize = (1 - 1) * envelope_size;
4358
4359            // Zero reserved fields.
4360            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4361
4362            // Safety:
4363            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4364            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4365            //   envelope_size bytes, there is always sufficient room.
4366            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4367                self.unicast_forwarding
4368                    .as_ref()
4369                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4370                encoder,
4371                offset + cur_offset,
4372                depth,
4373            )?;
4374
4375            _prev_end_offset = cur_offset + envelope_size;
4376            if 2 > max_ordinal {
4377                return Ok(());
4378            }
4379
4380            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4381            // are envelope_size bytes.
4382            let cur_offset: usize = (2 - 1) * envelope_size;
4383
4384            // Zero reserved fields.
4385            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4386
4387            // Safety:
4388            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4389            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4390            //   envelope_size bytes, there is always sufficient room.
4391            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4392                self.multicast_forwarding
4393                    .as_ref()
4394                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4395                encoder,
4396                offset + cur_offset,
4397                depth,
4398            )?;
4399
4400            _prev_end_offset = cur_offset + envelope_size;
4401            if 3 > max_ordinal {
4402                return Ok(());
4403            }
4404
4405            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4406            // are envelope_size bytes.
4407            let cur_offset: usize = (3 - 1) * envelope_size;
4408
4409            // Zero reserved fields.
4410            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4411
4412            // Safety:
4413            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4414            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4415            //   envelope_size bytes, there is always sufficient room.
4416            fidl::encoding::encode_in_envelope_optional::<IgmpConfiguration, D>(
4417                self.igmp
4418                    .as_ref()
4419                    .map(<IgmpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4420                encoder,
4421                offset + cur_offset,
4422                depth,
4423            )?;
4424
4425            _prev_end_offset = cur_offset + envelope_size;
4426            if 4 > max_ordinal {
4427                return Ok(());
4428            }
4429
4430            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4431            // are envelope_size bytes.
4432            let cur_offset: usize = (4 - 1) * envelope_size;
4433
4434            // Zero reserved fields.
4435            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4436
4437            // Safety:
4438            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4439            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4440            //   envelope_size bytes, there is always sufficient room.
4441            fidl::encoding::encode_in_envelope_optional::<ArpConfiguration, D>(
4442                self.arp
4443                    .as_ref()
4444                    .map(<ArpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4445                encoder,
4446                offset + cur_offset,
4447                depth,
4448            )?;
4449
4450            _prev_end_offset = cur_offset + envelope_size;
4451            if 5 > max_ordinal {
4452                return Ok(());
4453            }
4454
4455            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4456            // are envelope_size bytes.
4457            let cur_offset: usize = (5 - 1) * envelope_size;
4458
4459            // Zero reserved fields.
4460            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4461
4462            // Safety:
4463            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4464            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4465            //   envelope_size bytes, there is always sufficient room.
4466            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4467                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4468                encoder,
4469                offset + cur_offset,
4470                depth,
4471            )?;
4472
4473            _prev_end_offset = cur_offset + envelope_size;
4474
4475            Ok(())
4476        }
4477    }
4478
4479    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv4Configuration {
4480        #[inline(always)]
4481        fn new_empty() -> Self {
4482            Self::default()
4483        }
4484
4485        unsafe fn decode(
4486            &mut self,
4487            decoder: &mut fidl::encoding::Decoder<'_, D>,
4488            offset: usize,
4489            mut depth: fidl::encoding::Depth,
4490        ) -> fidl::Result<()> {
4491            decoder.debug_check_bounds::<Self>(offset);
4492            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4493                None => return Err(fidl::Error::NotNullable),
4494                Some(len) => len,
4495            };
4496            // Calling decoder.out_of_line_offset(0) is not allowed.
4497            if len == 0 {
4498                return Ok(());
4499            };
4500            depth.increment()?;
4501            let envelope_size = 8;
4502            let bytes_len = len * envelope_size;
4503            let offset = decoder.out_of_line_offset(bytes_len)?;
4504            // Decode the envelope for each type.
4505            let mut _next_ordinal_to_read = 0;
4506            let mut next_offset = offset;
4507            let end_offset = offset + bytes_len;
4508            _next_ordinal_to_read += 1;
4509            if next_offset >= end_offset {
4510                return Ok(());
4511            }
4512
4513            // Decode unknown envelopes for gaps in ordinals.
4514            while _next_ordinal_to_read < 1 {
4515                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4516                _next_ordinal_to_read += 1;
4517                next_offset += envelope_size;
4518            }
4519
4520            let next_out_of_line = decoder.next_out_of_line();
4521            let handles_before = decoder.remaining_handles();
4522            if let Some((inlined, num_bytes, num_handles)) =
4523                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4524            {
4525                let member_inline_size =
4526                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4527                if inlined != (member_inline_size <= 4) {
4528                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4529                }
4530                let inner_offset;
4531                let mut inner_depth = depth.clone();
4532                if inlined {
4533                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4534                    inner_offset = next_offset;
4535                } else {
4536                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4537                    inner_depth.increment()?;
4538                }
4539                let val_ref =
4540                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4541                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4543                {
4544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4545                }
4546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4548                }
4549            }
4550
4551            next_offset += envelope_size;
4552            _next_ordinal_to_read += 1;
4553            if next_offset >= end_offset {
4554                return Ok(());
4555            }
4556
4557            // Decode unknown envelopes for gaps in ordinals.
4558            while _next_ordinal_to_read < 2 {
4559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4560                _next_ordinal_to_read += 1;
4561                next_offset += envelope_size;
4562            }
4563
4564            let next_out_of_line = decoder.next_out_of_line();
4565            let handles_before = decoder.remaining_handles();
4566            if let Some((inlined, num_bytes, num_handles)) =
4567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4568            {
4569                let member_inline_size =
4570                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4571                if inlined != (member_inline_size <= 4) {
4572                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4573                }
4574                let inner_offset;
4575                let mut inner_depth = depth.clone();
4576                if inlined {
4577                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4578                    inner_offset = next_offset;
4579                } else {
4580                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4581                    inner_depth.increment()?;
4582                }
4583                let val_ref =
4584                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4585                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4586                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4587                {
4588                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4589                }
4590                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4591                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4592                }
4593            }
4594
4595            next_offset += envelope_size;
4596            _next_ordinal_to_read += 1;
4597            if next_offset >= end_offset {
4598                return Ok(());
4599            }
4600
4601            // Decode unknown envelopes for gaps in ordinals.
4602            while _next_ordinal_to_read < 3 {
4603                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4604                _next_ordinal_to_read += 1;
4605                next_offset += envelope_size;
4606            }
4607
4608            let next_out_of_line = decoder.next_out_of_line();
4609            let handles_before = decoder.remaining_handles();
4610            if let Some((inlined, num_bytes, num_handles)) =
4611                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4612            {
4613                let member_inline_size =
4614                    <IgmpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4615                if inlined != (member_inline_size <= 4) {
4616                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4617                }
4618                let inner_offset;
4619                let mut inner_depth = depth.clone();
4620                if inlined {
4621                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4622                    inner_offset = next_offset;
4623                } else {
4624                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4625                    inner_depth.increment()?;
4626                }
4627                let val_ref =
4628                    self.igmp.get_or_insert_with(|| fidl::new_empty!(IgmpConfiguration, D));
4629                fidl::decode!(IgmpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4630                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4631                {
4632                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4633                }
4634                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4635                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4636                }
4637            }
4638
4639            next_offset += envelope_size;
4640            _next_ordinal_to_read += 1;
4641            if next_offset >= end_offset {
4642                return Ok(());
4643            }
4644
4645            // Decode unknown envelopes for gaps in ordinals.
4646            while _next_ordinal_to_read < 4 {
4647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4648                _next_ordinal_to_read += 1;
4649                next_offset += envelope_size;
4650            }
4651
4652            let next_out_of_line = decoder.next_out_of_line();
4653            let handles_before = decoder.remaining_handles();
4654            if let Some((inlined, num_bytes, num_handles)) =
4655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4656            {
4657                let member_inline_size =
4658                    <ArpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4659                if inlined != (member_inline_size <= 4) {
4660                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4661                }
4662                let inner_offset;
4663                let mut inner_depth = depth.clone();
4664                if inlined {
4665                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4666                    inner_offset = next_offset;
4667                } else {
4668                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4669                    inner_depth.increment()?;
4670                }
4671                let val_ref = self.arp.get_or_insert_with(|| fidl::new_empty!(ArpConfiguration, D));
4672                fidl::decode!(ArpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4673                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4674                {
4675                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4676                }
4677                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4678                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4679                }
4680            }
4681
4682            next_offset += envelope_size;
4683            _next_ordinal_to_read += 1;
4684            if next_offset >= end_offset {
4685                return Ok(());
4686            }
4687
4688            // Decode unknown envelopes for gaps in ordinals.
4689            while _next_ordinal_to_read < 5 {
4690                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4691                _next_ordinal_to_read += 1;
4692                next_offset += envelope_size;
4693            }
4694
4695            let next_out_of_line = decoder.next_out_of_line();
4696            let handles_before = decoder.remaining_handles();
4697            if let Some((inlined, num_bytes, num_handles)) =
4698                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4699            {
4700                let member_inline_size =
4701                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4702                if inlined != (member_inline_size <= 4) {
4703                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4704                }
4705                let inner_offset;
4706                let mut inner_depth = depth.clone();
4707                if inlined {
4708                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4709                    inner_offset = next_offset;
4710                } else {
4711                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4712                    inner_depth.increment()?;
4713                }
4714                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
4715                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4716                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4717                {
4718                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4719                }
4720                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4721                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4722                }
4723            }
4724
4725            next_offset += envelope_size;
4726
4727            // Decode the remaining unknown envelopes.
4728            while next_offset < end_offset {
4729                _next_ordinal_to_read += 1;
4730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4731                next_offset += envelope_size;
4732            }
4733
4734            Ok(())
4735        }
4736    }
4737
4738    impl Ipv6Configuration {
4739        #[inline(always)]
4740        fn max_ordinal_present(&self) -> u64 {
4741            if let Some(_) = self.enabled {
4742                return 5;
4743            }
4744            if let Some(_) = self.ndp {
4745                return 4;
4746            }
4747            if let Some(_) = self.mld {
4748                return 3;
4749            }
4750            if let Some(_) = self.multicast_forwarding {
4751                return 2;
4752            }
4753            if let Some(_) = self.unicast_forwarding {
4754                return 1;
4755            }
4756            0
4757        }
4758    }
4759
4760    impl fidl::encoding::ValueTypeMarker for Ipv6Configuration {
4761        type Borrowed<'a> = &'a Self;
4762        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4763            value
4764        }
4765    }
4766
4767    unsafe impl fidl::encoding::TypeMarker for Ipv6Configuration {
4768        type Owned = Self;
4769
4770        #[inline(always)]
4771        fn inline_align(_context: fidl::encoding::Context) -> usize {
4772            8
4773        }
4774
4775        #[inline(always)]
4776        fn inline_size(_context: fidl::encoding::Context) -> usize {
4777            16
4778        }
4779    }
4780
4781    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv6Configuration, D>
4782        for &Ipv6Configuration
4783    {
4784        unsafe fn encode(
4785            self,
4786            encoder: &mut fidl::encoding::Encoder<'_, D>,
4787            offset: usize,
4788            mut depth: fidl::encoding::Depth,
4789        ) -> fidl::Result<()> {
4790            encoder.debug_check_bounds::<Ipv6Configuration>(offset);
4791            // Vector header
4792            let max_ordinal: u64 = self.max_ordinal_present();
4793            encoder.write_num(max_ordinal, offset);
4794            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4795            // Calling encoder.out_of_line_offset(0) is not allowed.
4796            if max_ordinal == 0 {
4797                return Ok(());
4798            }
4799            depth.increment()?;
4800            let envelope_size = 8;
4801            let bytes_len = max_ordinal as usize * envelope_size;
4802            #[allow(unused_variables)]
4803            let offset = encoder.out_of_line_offset(bytes_len);
4804            let mut _prev_end_offset: usize = 0;
4805            if 1 > max_ordinal {
4806                return Ok(());
4807            }
4808
4809            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4810            // are envelope_size bytes.
4811            let cur_offset: usize = (1 - 1) * envelope_size;
4812
4813            // Zero reserved fields.
4814            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4815
4816            // Safety:
4817            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4818            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4819            //   envelope_size bytes, there is always sufficient room.
4820            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4821                self.unicast_forwarding
4822                    .as_ref()
4823                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4824                encoder,
4825                offset + cur_offset,
4826                depth,
4827            )?;
4828
4829            _prev_end_offset = cur_offset + envelope_size;
4830            if 2 > max_ordinal {
4831                return Ok(());
4832            }
4833
4834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4835            // are envelope_size bytes.
4836            let cur_offset: usize = (2 - 1) * envelope_size;
4837
4838            // Zero reserved fields.
4839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4840
4841            // Safety:
4842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4844            //   envelope_size bytes, there is always sufficient room.
4845            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4846                self.multicast_forwarding
4847                    .as_ref()
4848                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4849                encoder,
4850                offset + cur_offset,
4851                depth,
4852            )?;
4853
4854            _prev_end_offset = cur_offset + envelope_size;
4855            if 3 > max_ordinal {
4856                return Ok(());
4857            }
4858
4859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4860            // are envelope_size bytes.
4861            let cur_offset: usize = (3 - 1) * envelope_size;
4862
4863            // Zero reserved fields.
4864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4865
4866            // Safety:
4867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4869            //   envelope_size bytes, there is always sufficient room.
4870            fidl::encoding::encode_in_envelope_optional::<MldConfiguration, D>(
4871                self.mld
4872                    .as_ref()
4873                    .map(<MldConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4874                encoder,
4875                offset + cur_offset,
4876                depth,
4877            )?;
4878
4879            _prev_end_offset = cur_offset + envelope_size;
4880            if 4 > max_ordinal {
4881                return Ok(());
4882            }
4883
4884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4885            // are envelope_size bytes.
4886            let cur_offset: usize = (4 - 1) * envelope_size;
4887
4888            // Zero reserved fields.
4889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4890
4891            // Safety:
4892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4894            //   envelope_size bytes, there is always sufficient room.
4895            fidl::encoding::encode_in_envelope_optional::<NdpConfiguration, D>(
4896                self.ndp
4897                    .as_ref()
4898                    .map(<NdpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4899                encoder,
4900                offset + cur_offset,
4901                depth,
4902            )?;
4903
4904            _prev_end_offset = cur_offset + envelope_size;
4905            if 5 > max_ordinal {
4906                return Ok(());
4907            }
4908
4909            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4910            // are envelope_size bytes.
4911            let cur_offset: usize = (5 - 1) * envelope_size;
4912
4913            // Zero reserved fields.
4914            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4915
4916            // Safety:
4917            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4918            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4919            //   envelope_size bytes, there is always sufficient room.
4920            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4921                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4922                encoder,
4923                offset + cur_offset,
4924                depth,
4925            )?;
4926
4927            _prev_end_offset = cur_offset + envelope_size;
4928
4929            Ok(())
4930        }
4931    }
4932
4933    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv6Configuration {
4934        #[inline(always)]
4935        fn new_empty() -> Self {
4936            Self::default()
4937        }
4938
4939        unsafe fn decode(
4940            &mut self,
4941            decoder: &mut fidl::encoding::Decoder<'_, D>,
4942            offset: usize,
4943            mut depth: fidl::encoding::Depth,
4944        ) -> fidl::Result<()> {
4945            decoder.debug_check_bounds::<Self>(offset);
4946            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4947                None => return Err(fidl::Error::NotNullable),
4948                Some(len) => len,
4949            };
4950            // Calling decoder.out_of_line_offset(0) is not allowed.
4951            if len == 0 {
4952                return Ok(());
4953            };
4954            depth.increment()?;
4955            let envelope_size = 8;
4956            let bytes_len = len * envelope_size;
4957            let offset = decoder.out_of_line_offset(bytes_len)?;
4958            // Decode the envelope for each type.
4959            let mut _next_ordinal_to_read = 0;
4960            let mut next_offset = offset;
4961            let end_offset = offset + bytes_len;
4962            _next_ordinal_to_read += 1;
4963            if next_offset >= end_offset {
4964                return Ok(());
4965            }
4966
4967            // Decode unknown envelopes for gaps in ordinals.
4968            while _next_ordinal_to_read < 1 {
4969                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4970                _next_ordinal_to_read += 1;
4971                next_offset += envelope_size;
4972            }
4973
4974            let next_out_of_line = decoder.next_out_of_line();
4975            let handles_before = decoder.remaining_handles();
4976            if let Some((inlined, num_bytes, num_handles)) =
4977                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4978            {
4979                let member_inline_size =
4980                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4981                if inlined != (member_inline_size <= 4) {
4982                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4983                }
4984                let inner_offset;
4985                let mut inner_depth = depth.clone();
4986                if inlined {
4987                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4988                    inner_offset = next_offset;
4989                } else {
4990                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4991                    inner_depth.increment()?;
4992                }
4993                let val_ref =
4994                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4995                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4996                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4997                {
4998                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4999                }
5000                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5001                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5002                }
5003            }
5004
5005            next_offset += envelope_size;
5006            _next_ordinal_to_read += 1;
5007            if next_offset >= end_offset {
5008                return Ok(());
5009            }
5010
5011            // Decode unknown envelopes for gaps in ordinals.
5012            while _next_ordinal_to_read < 2 {
5013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5014                _next_ordinal_to_read += 1;
5015                next_offset += envelope_size;
5016            }
5017
5018            let next_out_of_line = decoder.next_out_of_line();
5019            let handles_before = decoder.remaining_handles();
5020            if let Some((inlined, num_bytes, num_handles)) =
5021                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5022            {
5023                let member_inline_size =
5024                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5025                if inlined != (member_inline_size <= 4) {
5026                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5027                }
5028                let inner_offset;
5029                let mut inner_depth = depth.clone();
5030                if inlined {
5031                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5032                    inner_offset = next_offset;
5033                } else {
5034                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5035                    inner_depth.increment()?;
5036                }
5037                let val_ref =
5038                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
5039                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5040                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5041                {
5042                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5043                }
5044                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5045                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5046                }
5047            }
5048
5049            next_offset += envelope_size;
5050            _next_ordinal_to_read += 1;
5051            if next_offset >= end_offset {
5052                return Ok(());
5053            }
5054
5055            // Decode unknown envelopes for gaps in ordinals.
5056            while _next_ordinal_to_read < 3 {
5057                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5058                _next_ordinal_to_read += 1;
5059                next_offset += envelope_size;
5060            }
5061
5062            let next_out_of_line = decoder.next_out_of_line();
5063            let handles_before = decoder.remaining_handles();
5064            if let Some((inlined, num_bytes, num_handles)) =
5065                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5066            {
5067                let member_inline_size =
5068                    <MldConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5069                if inlined != (member_inline_size <= 4) {
5070                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5071                }
5072                let inner_offset;
5073                let mut inner_depth = depth.clone();
5074                if inlined {
5075                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5076                    inner_offset = next_offset;
5077                } else {
5078                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5079                    inner_depth.increment()?;
5080                }
5081                let val_ref = self.mld.get_or_insert_with(|| fidl::new_empty!(MldConfiguration, D));
5082                fidl::decode!(MldConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5083                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5084                {
5085                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5086                }
5087                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5088                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5089                }
5090            }
5091
5092            next_offset += envelope_size;
5093            _next_ordinal_to_read += 1;
5094            if next_offset >= end_offset {
5095                return Ok(());
5096            }
5097
5098            // Decode unknown envelopes for gaps in ordinals.
5099            while _next_ordinal_to_read < 4 {
5100                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5101                _next_ordinal_to_read += 1;
5102                next_offset += envelope_size;
5103            }
5104
5105            let next_out_of_line = decoder.next_out_of_line();
5106            let handles_before = decoder.remaining_handles();
5107            if let Some((inlined, num_bytes, num_handles)) =
5108                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5109            {
5110                let member_inline_size =
5111                    <NdpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5112                if inlined != (member_inline_size <= 4) {
5113                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5114                }
5115                let inner_offset;
5116                let mut inner_depth = depth.clone();
5117                if inlined {
5118                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5119                    inner_offset = next_offset;
5120                } else {
5121                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5122                    inner_depth.increment()?;
5123                }
5124                let val_ref = self.ndp.get_or_insert_with(|| fidl::new_empty!(NdpConfiguration, D));
5125                fidl::decode!(NdpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5126                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5127                {
5128                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5129                }
5130                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5131                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5132                }
5133            }
5134
5135            next_offset += envelope_size;
5136            _next_ordinal_to_read += 1;
5137            if next_offset >= end_offset {
5138                return Ok(());
5139            }
5140
5141            // Decode unknown envelopes for gaps in ordinals.
5142            while _next_ordinal_to_read < 5 {
5143                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5144                _next_ordinal_to_read += 1;
5145                next_offset += envelope_size;
5146            }
5147
5148            let next_out_of_line = decoder.next_out_of_line();
5149            let handles_before = decoder.remaining_handles();
5150            if let Some((inlined, num_bytes, num_handles)) =
5151                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5152            {
5153                let member_inline_size =
5154                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5155                if inlined != (member_inline_size <= 4) {
5156                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5157                }
5158                let inner_offset;
5159                let mut inner_depth = depth.clone();
5160                if inlined {
5161                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5162                    inner_offset = next_offset;
5163                } else {
5164                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5165                    inner_depth.increment()?;
5166                }
5167                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5168                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5170                {
5171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5172                }
5173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5175                }
5176            }
5177
5178            next_offset += envelope_size;
5179
5180            // Decode the remaining unknown envelopes.
5181            while next_offset < end_offset {
5182                _next_ordinal_to_read += 1;
5183                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5184                next_offset += envelope_size;
5185            }
5186
5187            Ok(())
5188        }
5189    }
5190
5191    impl MldConfiguration {
5192        #[inline(always)]
5193        fn max_ordinal_present(&self) -> u64 {
5194            if let Some(_) = self.version {
5195                return 1;
5196            }
5197            0
5198        }
5199    }
5200
5201    impl fidl::encoding::ValueTypeMarker for MldConfiguration {
5202        type Borrowed<'a> = &'a Self;
5203        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5204            value
5205        }
5206    }
5207
5208    unsafe impl fidl::encoding::TypeMarker for MldConfiguration {
5209        type Owned = Self;
5210
5211        #[inline(always)]
5212        fn inline_align(_context: fidl::encoding::Context) -> usize {
5213            8
5214        }
5215
5216        #[inline(always)]
5217        fn inline_size(_context: fidl::encoding::Context) -> usize {
5218            16
5219        }
5220    }
5221
5222    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MldConfiguration, D>
5223        for &MldConfiguration
5224    {
5225        unsafe fn encode(
5226            self,
5227            encoder: &mut fidl::encoding::Encoder<'_, D>,
5228            offset: usize,
5229            mut depth: fidl::encoding::Depth,
5230        ) -> fidl::Result<()> {
5231            encoder.debug_check_bounds::<MldConfiguration>(offset);
5232            // Vector header
5233            let max_ordinal: u64 = self.max_ordinal_present();
5234            encoder.write_num(max_ordinal, offset);
5235            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5236            // Calling encoder.out_of_line_offset(0) is not allowed.
5237            if max_ordinal == 0 {
5238                return Ok(());
5239            }
5240            depth.increment()?;
5241            let envelope_size = 8;
5242            let bytes_len = max_ordinal as usize * envelope_size;
5243            #[allow(unused_variables)]
5244            let offset = encoder.out_of_line_offset(bytes_len);
5245            let mut _prev_end_offset: usize = 0;
5246            if 1 > max_ordinal {
5247                return Ok(());
5248            }
5249
5250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5251            // are envelope_size bytes.
5252            let cur_offset: usize = (1 - 1) * envelope_size;
5253
5254            // Zero reserved fields.
5255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5256
5257            // Safety:
5258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5260            //   envelope_size bytes, there is always sufficient room.
5261            fidl::encoding::encode_in_envelope_optional::<MldVersion, D>(
5262                self.version.as_ref().map(<MldVersion as fidl::encoding::ValueTypeMarker>::borrow),
5263                encoder,
5264                offset + cur_offset,
5265                depth,
5266            )?;
5267
5268            _prev_end_offset = cur_offset + envelope_size;
5269
5270            Ok(())
5271        }
5272    }
5273
5274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldConfiguration {
5275        #[inline(always)]
5276        fn new_empty() -> Self {
5277            Self::default()
5278        }
5279
5280        unsafe fn decode(
5281            &mut self,
5282            decoder: &mut fidl::encoding::Decoder<'_, D>,
5283            offset: usize,
5284            mut depth: fidl::encoding::Depth,
5285        ) -> fidl::Result<()> {
5286            decoder.debug_check_bounds::<Self>(offset);
5287            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5288                None => return Err(fidl::Error::NotNullable),
5289                Some(len) => len,
5290            };
5291            // Calling decoder.out_of_line_offset(0) is not allowed.
5292            if len == 0 {
5293                return Ok(());
5294            };
5295            depth.increment()?;
5296            let envelope_size = 8;
5297            let bytes_len = len * envelope_size;
5298            let offset = decoder.out_of_line_offset(bytes_len)?;
5299            // Decode the envelope for each type.
5300            let mut _next_ordinal_to_read = 0;
5301            let mut next_offset = offset;
5302            let end_offset = offset + bytes_len;
5303            _next_ordinal_to_read += 1;
5304            if next_offset >= end_offset {
5305                return Ok(());
5306            }
5307
5308            // Decode unknown envelopes for gaps in ordinals.
5309            while _next_ordinal_to_read < 1 {
5310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5311                _next_ordinal_to_read += 1;
5312                next_offset += envelope_size;
5313            }
5314
5315            let next_out_of_line = decoder.next_out_of_line();
5316            let handles_before = decoder.remaining_handles();
5317            if let Some((inlined, num_bytes, num_handles)) =
5318                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5319            {
5320                let member_inline_size =
5321                    <MldVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5322                if inlined != (member_inline_size <= 4) {
5323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5324                }
5325                let inner_offset;
5326                let mut inner_depth = depth.clone();
5327                if inlined {
5328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5329                    inner_offset = next_offset;
5330                } else {
5331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5332                    inner_depth.increment()?;
5333                }
5334                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(MldVersion, D));
5335                fidl::decode!(MldVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
5336                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5337                {
5338                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5339                }
5340                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5341                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5342                }
5343            }
5344
5345            next_offset += envelope_size;
5346
5347            // Decode the remaining unknown envelopes.
5348            while next_offset < end_offset {
5349                _next_ordinal_to_read += 1;
5350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5351                next_offset += envelope_size;
5352            }
5353
5354            Ok(())
5355        }
5356    }
5357
5358    impl NdpConfiguration {
5359        #[inline(always)]
5360        fn max_ordinal_present(&self) -> u64 {
5361            if let Some(_) = self.slaac {
5362                return 3;
5363            }
5364            if let Some(_) = self.dad {
5365                return 2;
5366            }
5367            if let Some(_) = self.nud {
5368                return 1;
5369            }
5370            0
5371        }
5372    }
5373
5374    impl fidl::encoding::ValueTypeMarker for NdpConfiguration {
5375        type Borrowed<'a> = &'a Self;
5376        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5377            value
5378        }
5379    }
5380
5381    unsafe impl fidl::encoding::TypeMarker for NdpConfiguration {
5382        type Owned = Self;
5383
5384        #[inline(always)]
5385        fn inline_align(_context: fidl::encoding::Context) -> usize {
5386            8
5387        }
5388
5389        #[inline(always)]
5390        fn inline_size(_context: fidl::encoding::Context) -> usize {
5391            16
5392        }
5393    }
5394
5395    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NdpConfiguration, D>
5396        for &NdpConfiguration
5397    {
5398        unsafe fn encode(
5399            self,
5400            encoder: &mut fidl::encoding::Encoder<'_, D>,
5401            offset: usize,
5402            mut depth: fidl::encoding::Depth,
5403        ) -> fidl::Result<()> {
5404            encoder.debug_check_bounds::<NdpConfiguration>(offset);
5405            // Vector header
5406            let max_ordinal: u64 = self.max_ordinal_present();
5407            encoder.write_num(max_ordinal, offset);
5408            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5409            // Calling encoder.out_of_line_offset(0) is not allowed.
5410            if max_ordinal == 0 {
5411                return Ok(());
5412            }
5413            depth.increment()?;
5414            let envelope_size = 8;
5415            let bytes_len = max_ordinal as usize * envelope_size;
5416            #[allow(unused_variables)]
5417            let offset = encoder.out_of_line_offset(bytes_len);
5418            let mut _prev_end_offset: usize = 0;
5419            if 1 > max_ordinal {
5420                return Ok(());
5421            }
5422
5423            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5424            // are envelope_size bytes.
5425            let cur_offset: usize = (1 - 1) * envelope_size;
5426
5427            // Zero reserved fields.
5428            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5429
5430            // Safety:
5431            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5432            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5433            //   envelope_size bytes, there is always sufficient room.
5434            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
5435                self.nud
5436                    .as_ref()
5437                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5438                encoder,
5439                offset + cur_offset,
5440                depth,
5441            )?;
5442
5443            _prev_end_offset = cur_offset + envelope_size;
5444            if 2 > max_ordinal {
5445                return Ok(());
5446            }
5447
5448            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5449            // are envelope_size bytes.
5450            let cur_offset: usize = (2 - 1) * envelope_size;
5451
5452            // Zero reserved fields.
5453            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5454
5455            // Safety:
5456            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5457            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5458            //   envelope_size bytes, there is always sufficient room.
5459            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
5460                self.dad
5461                    .as_ref()
5462                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5463                encoder,
5464                offset + cur_offset,
5465                depth,
5466            )?;
5467
5468            _prev_end_offset = cur_offset + envelope_size;
5469            if 3 > max_ordinal {
5470                return Ok(());
5471            }
5472
5473            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5474            // are envelope_size bytes.
5475            let cur_offset: usize = (3 - 1) * envelope_size;
5476
5477            // Zero reserved fields.
5478            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5479
5480            // Safety:
5481            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5482            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5483            //   envelope_size bytes, there is always sufficient room.
5484            fidl::encoding::encode_in_envelope_optional::<SlaacConfiguration, D>(
5485                self.slaac
5486                    .as_ref()
5487                    .map(<SlaacConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5488                encoder,
5489                offset + cur_offset,
5490                depth,
5491            )?;
5492
5493            _prev_end_offset = cur_offset + envelope_size;
5494
5495            Ok(())
5496        }
5497    }
5498
5499    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NdpConfiguration {
5500        #[inline(always)]
5501        fn new_empty() -> Self {
5502            Self::default()
5503        }
5504
5505        unsafe fn decode(
5506            &mut self,
5507            decoder: &mut fidl::encoding::Decoder<'_, D>,
5508            offset: usize,
5509            mut depth: fidl::encoding::Depth,
5510        ) -> fidl::Result<()> {
5511            decoder.debug_check_bounds::<Self>(offset);
5512            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5513                None => return Err(fidl::Error::NotNullable),
5514                Some(len) => len,
5515            };
5516            // Calling decoder.out_of_line_offset(0) is not allowed.
5517            if len == 0 {
5518                return Ok(());
5519            };
5520            depth.increment()?;
5521            let envelope_size = 8;
5522            let bytes_len = len * envelope_size;
5523            let offset = decoder.out_of_line_offset(bytes_len)?;
5524            // Decode the envelope for each type.
5525            let mut _next_ordinal_to_read = 0;
5526            let mut next_offset = offset;
5527            let end_offset = offset + bytes_len;
5528            _next_ordinal_to_read += 1;
5529            if next_offset >= end_offset {
5530                return Ok(());
5531            }
5532
5533            // Decode unknown envelopes for gaps in ordinals.
5534            while _next_ordinal_to_read < 1 {
5535                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5536                _next_ordinal_to_read += 1;
5537                next_offset += envelope_size;
5538            }
5539
5540            let next_out_of_line = decoder.next_out_of_line();
5541            let handles_before = decoder.remaining_handles();
5542            if let Some((inlined, num_bytes, num_handles)) =
5543                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5544            {
5545                let member_inline_size =
5546                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5547                if inlined != (member_inline_size <= 4) {
5548                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5549                }
5550                let inner_offset;
5551                let mut inner_depth = depth.clone();
5552                if inlined {
5553                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5554                    inner_offset = next_offset;
5555                } else {
5556                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5557                    inner_depth.increment()?;
5558                }
5559                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
5560                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5561                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5562                {
5563                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5564                }
5565                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5566                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5567                }
5568            }
5569
5570            next_offset += envelope_size;
5571            _next_ordinal_to_read += 1;
5572            if next_offset >= end_offset {
5573                return Ok(());
5574            }
5575
5576            // Decode unknown envelopes for gaps in ordinals.
5577            while _next_ordinal_to_read < 2 {
5578                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5579                _next_ordinal_to_read += 1;
5580                next_offset += envelope_size;
5581            }
5582
5583            let next_out_of_line = decoder.next_out_of_line();
5584            let handles_before = decoder.remaining_handles();
5585            if let Some((inlined, num_bytes, num_handles)) =
5586                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5587            {
5588                let member_inline_size =
5589                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5590                if inlined != (member_inline_size <= 4) {
5591                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5592                }
5593                let inner_offset;
5594                let mut inner_depth = depth.clone();
5595                if inlined {
5596                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5597                    inner_offset = next_offset;
5598                } else {
5599                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5600                    inner_depth.increment()?;
5601                }
5602                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
5603                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5604                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5605                {
5606                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5607                }
5608                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5609                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5610                }
5611            }
5612
5613            next_offset += envelope_size;
5614            _next_ordinal_to_read += 1;
5615            if next_offset >= end_offset {
5616                return Ok(());
5617            }
5618
5619            // Decode unknown envelopes for gaps in ordinals.
5620            while _next_ordinal_to_read < 3 {
5621                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5622                _next_ordinal_to_read += 1;
5623                next_offset += envelope_size;
5624            }
5625
5626            let next_out_of_line = decoder.next_out_of_line();
5627            let handles_before = decoder.remaining_handles();
5628            if let Some((inlined, num_bytes, num_handles)) =
5629                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5630            {
5631                let member_inline_size =
5632                    <SlaacConfiguration as fidl::encoding::TypeMarker>::inline_size(
5633                        decoder.context,
5634                    );
5635                if inlined != (member_inline_size <= 4) {
5636                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5637                }
5638                let inner_offset;
5639                let mut inner_depth = depth.clone();
5640                if inlined {
5641                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5642                    inner_offset = next_offset;
5643                } else {
5644                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5645                    inner_depth.increment()?;
5646                }
5647                let val_ref =
5648                    self.slaac.get_or_insert_with(|| fidl::new_empty!(SlaacConfiguration, D));
5649                fidl::decode!(SlaacConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5651                {
5652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5653                }
5654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5656                }
5657            }
5658
5659            next_offset += envelope_size;
5660
5661            // Decode the remaining unknown envelopes.
5662            while next_offset < end_offset {
5663                _next_ordinal_to_read += 1;
5664                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5665                next_offset += envelope_size;
5666            }
5667
5668            Ok(())
5669        }
5670    }
5671
5672    impl NudConfiguration {
5673        #[inline(always)]
5674        fn max_ordinal_present(&self) -> u64 {
5675            if let Some(_) = self.retrans_timer {
5676                return 4;
5677            }
5678            if let Some(_) = self.base_reachable_time {
5679                return 3;
5680            }
5681            if let Some(_) = self.max_unicast_solicitations {
5682                return 2;
5683            }
5684            if let Some(_) = self.max_multicast_solicitations {
5685                return 1;
5686            }
5687            0
5688        }
5689    }
5690
5691    impl fidl::encoding::ValueTypeMarker for NudConfiguration {
5692        type Borrowed<'a> = &'a Self;
5693        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5694            value
5695        }
5696    }
5697
5698    unsafe impl fidl::encoding::TypeMarker for NudConfiguration {
5699        type Owned = Self;
5700
5701        #[inline(always)]
5702        fn inline_align(_context: fidl::encoding::Context) -> usize {
5703            8
5704        }
5705
5706        #[inline(always)]
5707        fn inline_size(_context: fidl::encoding::Context) -> usize {
5708            16
5709        }
5710    }
5711
5712    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NudConfiguration, D>
5713        for &NudConfiguration
5714    {
5715        unsafe fn encode(
5716            self,
5717            encoder: &mut fidl::encoding::Encoder<'_, D>,
5718            offset: usize,
5719            mut depth: fidl::encoding::Depth,
5720        ) -> fidl::Result<()> {
5721            encoder.debug_check_bounds::<NudConfiguration>(offset);
5722            // Vector header
5723            let max_ordinal: u64 = self.max_ordinal_present();
5724            encoder.write_num(max_ordinal, offset);
5725            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5726            // Calling encoder.out_of_line_offset(0) is not allowed.
5727            if max_ordinal == 0 {
5728                return Ok(());
5729            }
5730            depth.increment()?;
5731            let envelope_size = 8;
5732            let bytes_len = max_ordinal as usize * envelope_size;
5733            #[allow(unused_variables)]
5734            let offset = encoder.out_of_line_offset(bytes_len);
5735            let mut _prev_end_offset: usize = 0;
5736            if 1 > max_ordinal {
5737                return Ok(());
5738            }
5739
5740            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5741            // are envelope_size bytes.
5742            let cur_offset: usize = (1 - 1) * envelope_size;
5743
5744            // Zero reserved fields.
5745            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5746
5747            // Safety:
5748            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5749            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5750            //   envelope_size bytes, there is always sufficient room.
5751            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5752                self.max_multicast_solicitations
5753                    .as_ref()
5754                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5755                encoder,
5756                offset + cur_offset,
5757                depth,
5758            )?;
5759
5760            _prev_end_offset = cur_offset + envelope_size;
5761            if 2 > max_ordinal {
5762                return Ok(());
5763            }
5764
5765            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5766            // are envelope_size bytes.
5767            let cur_offset: usize = (2 - 1) * envelope_size;
5768
5769            // Zero reserved fields.
5770            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5771
5772            // Safety:
5773            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5774            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5775            //   envelope_size bytes, there is always sufficient room.
5776            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5777                self.max_unicast_solicitations
5778                    .as_ref()
5779                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5780                encoder,
5781                offset + cur_offset,
5782                depth,
5783            )?;
5784
5785            _prev_end_offset = cur_offset + envelope_size;
5786            if 3 > max_ordinal {
5787                return Ok(());
5788            }
5789
5790            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5791            // are envelope_size bytes.
5792            let cur_offset: usize = (3 - 1) * envelope_size;
5793
5794            // Zero reserved fields.
5795            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5796
5797            // Safety:
5798            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5799            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5800            //   envelope_size bytes, there is always sufficient room.
5801            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5802                self.base_reachable_time
5803                    .as_ref()
5804                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5805                encoder,
5806                offset + cur_offset,
5807                depth,
5808            )?;
5809
5810            _prev_end_offset = cur_offset + envelope_size;
5811            if 4 > max_ordinal {
5812                return Ok(());
5813            }
5814
5815            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5816            // are envelope_size bytes.
5817            let cur_offset: usize = (4 - 1) * envelope_size;
5818
5819            // Zero reserved fields.
5820            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5821
5822            // Safety:
5823            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5824            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5825            //   envelope_size bytes, there is always sufficient room.
5826            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5827                self.retrans_timer.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5828                encoder,
5829                offset + cur_offset,
5830                depth,
5831            )?;
5832
5833            _prev_end_offset = cur_offset + envelope_size;
5834
5835            Ok(())
5836        }
5837    }
5838
5839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NudConfiguration {
5840        #[inline(always)]
5841        fn new_empty() -> Self {
5842            Self::default()
5843        }
5844
5845        unsafe fn decode(
5846            &mut self,
5847            decoder: &mut fidl::encoding::Decoder<'_, D>,
5848            offset: usize,
5849            mut depth: fidl::encoding::Depth,
5850        ) -> fidl::Result<()> {
5851            decoder.debug_check_bounds::<Self>(offset);
5852            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5853                None => return Err(fidl::Error::NotNullable),
5854                Some(len) => len,
5855            };
5856            // Calling decoder.out_of_line_offset(0) is not allowed.
5857            if len == 0 {
5858                return Ok(());
5859            };
5860            depth.increment()?;
5861            let envelope_size = 8;
5862            let bytes_len = len * envelope_size;
5863            let offset = decoder.out_of_line_offset(bytes_len)?;
5864            // Decode the envelope for each type.
5865            let mut _next_ordinal_to_read = 0;
5866            let mut next_offset = offset;
5867            let end_offset = offset + bytes_len;
5868            _next_ordinal_to_read += 1;
5869            if next_offset >= end_offset {
5870                return Ok(());
5871            }
5872
5873            // Decode unknown envelopes for gaps in ordinals.
5874            while _next_ordinal_to_read < 1 {
5875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5876                _next_ordinal_to_read += 1;
5877                next_offset += envelope_size;
5878            }
5879
5880            let next_out_of_line = decoder.next_out_of_line();
5881            let handles_before = decoder.remaining_handles();
5882            if let Some((inlined, num_bytes, num_handles)) =
5883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5884            {
5885                let member_inline_size =
5886                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5887                if inlined != (member_inline_size <= 4) {
5888                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5889                }
5890                let inner_offset;
5891                let mut inner_depth = depth.clone();
5892                if inlined {
5893                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5894                    inner_offset = next_offset;
5895                } else {
5896                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5897                    inner_depth.increment()?;
5898                }
5899                let val_ref = self
5900                    .max_multicast_solicitations
5901                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
5902                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5904                {
5905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5906                }
5907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5909                }
5910            }
5911
5912            next_offset += envelope_size;
5913            _next_ordinal_to_read += 1;
5914            if next_offset >= end_offset {
5915                return Ok(());
5916            }
5917
5918            // Decode unknown envelopes for gaps in ordinals.
5919            while _next_ordinal_to_read < 2 {
5920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5921                _next_ordinal_to_read += 1;
5922                next_offset += envelope_size;
5923            }
5924
5925            let next_out_of_line = decoder.next_out_of_line();
5926            let handles_before = decoder.remaining_handles();
5927            if let Some((inlined, num_bytes, num_handles)) =
5928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5929            {
5930                let member_inline_size =
5931                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5932                if inlined != (member_inline_size <= 4) {
5933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5934                }
5935                let inner_offset;
5936                let mut inner_depth = depth.clone();
5937                if inlined {
5938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5939                    inner_offset = next_offset;
5940                } else {
5941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5942                    inner_depth.increment()?;
5943                }
5944                let val_ref =
5945                    self.max_unicast_solicitations.get_or_insert_with(|| fidl::new_empty!(u16, D));
5946                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5947                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5948                {
5949                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5950                }
5951                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5952                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5953                }
5954            }
5955
5956            next_offset += envelope_size;
5957            _next_ordinal_to_read += 1;
5958            if next_offset >= end_offset {
5959                return Ok(());
5960            }
5961
5962            // Decode unknown envelopes for gaps in ordinals.
5963            while _next_ordinal_to_read < 3 {
5964                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5965                _next_ordinal_to_read += 1;
5966                next_offset += envelope_size;
5967            }
5968
5969            let next_out_of_line = decoder.next_out_of_line();
5970            let handles_before = decoder.remaining_handles();
5971            if let Some((inlined, num_bytes, num_handles)) =
5972                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5973            {
5974                let member_inline_size =
5975                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5976                if inlined != (member_inline_size <= 4) {
5977                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5978                }
5979                let inner_offset;
5980                let mut inner_depth = depth.clone();
5981                if inlined {
5982                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5983                    inner_offset = next_offset;
5984                } else {
5985                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5986                    inner_depth.increment()?;
5987                }
5988                let val_ref =
5989                    self.base_reachable_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
5990                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5991                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5992                {
5993                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5994                }
5995                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5996                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5997                }
5998            }
5999
6000            next_offset += envelope_size;
6001            _next_ordinal_to_read += 1;
6002            if next_offset >= end_offset {
6003                return Ok(());
6004            }
6005
6006            // Decode unknown envelopes for gaps in ordinals.
6007            while _next_ordinal_to_read < 4 {
6008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6009                _next_ordinal_to_read += 1;
6010                next_offset += envelope_size;
6011            }
6012
6013            let next_out_of_line = decoder.next_out_of_line();
6014            let handles_before = decoder.remaining_handles();
6015            if let Some((inlined, num_bytes, num_handles)) =
6016                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6017            {
6018                let member_inline_size =
6019                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6020                if inlined != (member_inline_size <= 4) {
6021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6022                }
6023                let inner_offset;
6024                let mut inner_depth = depth.clone();
6025                if inlined {
6026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6027                    inner_offset = next_offset;
6028                } else {
6029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6030                    inner_depth.increment()?;
6031                }
6032                let val_ref = self.retrans_timer.get_or_insert_with(|| fidl::new_empty!(i64, D));
6033                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6034                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6035                {
6036                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6037                }
6038                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6039                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6040                }
6041            }
6042
6043            next_offset += envelope_size;
6044
6045            // Decode the remaining unknown envelopes.
6046            while next_offset < end_offset {
6047                _next_ordinal_to_read += 1;
6048                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6049                next_offset += envelope_size;
6050            }
6051
6052            Ok(())
6053        }
6054    }
6055
6056    impl SlaacConfiguration {
6057        #[inline(always)]
6058        fn max_ordinal_present(&self) -> u64 {
6059            if let Some(_) = self.temporary_address {
6060                return 1;
6061            }
6062            0
6063        }
6064    }
6065
6066    impl fidl::encoding::ValueTypeMarker for SlaacConfiguration {
6067        type Borrowed<'a> = &'a Self;
6068        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6069            value
6070        }
6071    }
6072
6073    unsafe impl fidl::encoding::TypeMarker for SlaacConfiguration {
6074        type Owned = Self;
6075
6076        #[inline(always)]
6077        fn inline_align(_context: fidl::encoding::Context) -> usize {
6078            8
6079        }
6080
6081        #[inline(always)]
6082        fn inline_size(_context: fidl::encoding::Context) -> usize {
6083            16
6084        }
6085    }
6086
6087    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SlaacConfiguration, D>
6088        for &SlaacConfiguration
6089    {
6090        unsafe fn encode(
6091            self,
6092            encoder: &mut fidl::encoding::Encoder<'_, D>,
6093            offset: usize,
6094            mut depth: fidl::encoding::Depth,
6095        ) -> fidl::Result<()> {
6096            encoder.debug_check_bounds::<SlaacConfiguration>(offset);
6097            // Vector header
6098            let max_ordinal: u64 = self.max_ordinal_present();
6099            encoder.write_num(max_ordinal, offset);
6100            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6101            // Calling encoder.out_of_line_offset(0) is not allowed.
6102            if max_ordinal == 0 {
6103                return Ok(());
6104            }
6105            depth.increment()?;
6106            let envelope_size = 8;
6107            let bytes_len = max_ordinal as usize * envelope_size;
6108            #[allow(unused_variables)]
6109            let offset = encoder.out_of_line_offset(bytes_len);
6110            let mut _prev_end_offset: usize = 0;
6111            if 1 > max_ordinal {
6112                return Ok(());
6113            }
6114
6115            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6116            // are envelope_size bytes.
6117            let cur_offset: usize = (1 - 1) * envelope_size;
6118
6119            // Zero reserved fields.
6120            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6121
6122            // Safety:
6123            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6124            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6125            //   envelope_size bytes, there is always sufficient room.
6126            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6127                self.temporary_address
6128                    .as_ref()
6129                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6130                encoder,
6131                offset + cur_offset,
6132                depth,
6133            )?;
6134
6135            _prev_end_offset = cur_offset + envelope_size;
6136
6137            Ok(())
6138        }
6139    }
6140
6141    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SlaacConfiguration {
6142        #[inline(always)]
6143        fn new_empty() -> Self {
6144            Self::default()
6145        }
6146
6147        unsafe fn decode(
6148            &mut self,
6149            decoder: &mut fidl::encoding::Decoder<'_, D>,
6150            offset: usize,
6151            mut depth: fidl::encoding::Depth,
6152        ) -> fidl::Result<()> {
6153            decoder.debug_check_bounds::<Self>(offset);
6154            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6155                None => return Err(fidl::Error::NotNullable),
6156                Some(len) => len,
6157            };
6158            // Calling decoder.out_of_line_offset(0) is not allowed.
6159            if len == 0 {
6160                return Ok(());
6161            };
6162            depth.increment()?;
6163            let envelope_size = 8;
6164            let bytes_len = len * envelope_size;
6165            let offset = decoder.out_of_line_offset(bytes_len)?;
6166            // Decode the envelope for each type.
6167            let mut _next_ordinal_to_read = 0;
6168            let mut next_offset = offset;
6169            let end_offset = offset + bytes_len;
6170            _next_ordinal_to_read += 1;
6171            if next_offset >= end_offset {
6172                return Ok(());
6173            }
6174
6175            // Decode unknown envelopes for gaps in ordinals.
6176            while _next_ordinal_to_read < 1 {
6177                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6178                _next_ordinal_to_read += 1;
6179                next_offset += envelope_size;
6180            }
6181
6182            let next_out_of_line = decoder.next_out_of_line();
6183            let handles_before = decoder.remaining_handles();
6184            if let Some((inlined, num_bytes, num_handles)) =
6185                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6186            {
6187                let member_inline_size =
6188                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6189                if inlined != (member_inline_size <= 4) {
6190                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6191                }
6192                let inner_offset;
6193                let mut inner_depth = depth.clone();
6194                if inlined {
6195                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6196                    inner_offset = next_offset;
6197                } else {
6198                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6199                    inner_depth.increment()?;
6200                }
6201                let val_ref =
6202                    self.temporary_address.get_or_insert_with(|| fidl::new_empty!(bool, D));
6203                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6204                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6205                {
6206                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6207                }
6208                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6209                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6210                }
6211            }
6212
6213            next_offset += envelope_size;
6214
6215            // Decode the remaining unknown envelopes.
6216            while next_offset < end_offset {
6217                _next_ordinal_to_read += 1;
6218                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6219                next_offset += envelope_size;
6220            }
6221
6222            Ok(())
6223        }
6224    }
6225}