Skip to main content

fidl_fuchsia_net_tcp_common/
fidl_fuchsia_net_tcp_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/// TCP congestion control state machine state.
12#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum CongestionControlState {
15    /// No indication of duplicate ACKs or loss. Everything is fine.
16    Open = 0,
17    /// Received SACK blocks duplicate ACKs, assumed to be due to packet loss
18    /// or reordering.
19    Disorder = 1,
20    /// Sending rate reduced due to congestion signal. This is either an ECN or
21    /// local queue overrun.
22    CongestionWindowReduced = 2,
23    /// Sender has entered either fast recovery (after seeing enough duplicate
24    /// ACKs) or SACK-based recovery
25    Recovery = 3,
26    /// Sender hit RTO and entered slow start. Exits when all retransmitted
27    /// packets have been ACKed.
28    Loss = 4,
29}
30
31impl CongestionControlState {
32    #[inline]
33    pub fn from_primitive(prim: u32) -> Option<Self> {
34        match prim {
35            0 => Some(Self::Open),
36            1 => Some(Self::Disorder),
37            2 => Some(Self::CongestionWindowReduced),
38            3 => Some(Self::Recovery),
39            4 => Some(Self::Loss),
40            _ => None,
41        }
42    }
43
44    #[inline]
45    pub const fn into_primitive(self) -> u32 {
46        self as u32
47    }
48}
49
50/// TCP state machine state.
51#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
52#[repr(u32)]
53pub enum State {
54    Established = 1,
55    SynSent = 2,
56    SynRecv = 3,
57    FinWait1 = 4,
58    FinWait2 = 5,
59    TimeWait = 6,
60    Close = 7,
61    CloseWait = 8,
62    LastAck = 9,
63    Listen = 10,
64    Closing = 11,
65}
66
67impl State {
68    #[inline]
69    pub fn from_primitive(prim: u32) -> Option<Self> {
70        match prim {
71            1 => Some(Self::Established),
72            2 => Some(Self::SynSent),
73            3 => Some(Self::SynRecv),
74            4 => Some(Self::FinWait1),
75            5 => Some(Self::FinWait2),
76            6 => Some(Self::TimeWait),
77            7 => Some(Self::Close),
78            8 => Some(Self::CloseWait),
79            9 => Some(Self::LastAck),
80            10 => Some(Self::Listen),
81            11 => Some(Self::Closing),
82            _ => None,
83        }
84    }
85
86    #[inline]
87    pub const fn into_primitive(self) -> u32 {
88        self as u32
89    }
90}
91
92/// TCP protocol state.
93#[derive(Clone, Debug, Default, PartialEq)]
94pub struct Info {
95    /// The current state of the TCP state machine.
96    pub state: Option<State>,
97    /// The current state of the TCP congention avoidance state machine.
98    pub ca_state: Option<CongestionControlState>,
99    /// The current RTO value in microseconds.
100    pub rto_usec: Option<u32>,
101    /// The maximum segment size (MSS) this endpoint can send.
102    pub tcpi_snd_mss: Option<u32>,
103    /// The maximum segment size (MSS) this endpoint can receive.
104    pub tcpi_rcv_mss: Option<u32>,
105    /// Time since data was last sent on the connection in milliseconds.
106    pub tcpi_last_data_sent_msec: Option<u32>,
107    /// Time since the most recent ACK was received in milliseconds.
108    pub tcpi_last_ack_recv_msec: Option<u32>,
109    /// The estimated smoothed roundtrip time in microseconds.
110    pub rtt_usec: Option<u32>,
111    /// The smoothed mean deviation of the roundtrip time in microseconds.
112    pub rtt_var_usec: Option<u32>,
113    /// The sending slow start threshold in segments.
114    pub snd_ssthresh: Option<u32>,
115    /// The current sending congestion window in segments.
116    pub snd_cwnd: Option<u32>,
117    /// The total number of retransmission events.
118    pub tcpi_total_retrans: Option<u32>,
119    /// The total number of segments transmitted.
120    pub tcpi_segs_out: Option<u64>,
121    /// The total number of segments received.
122    pub tcpi_segs_in: Option<u64>,
123    /// Whether the connection thinks it has ever seen reordering.
124    pub reorder_seen: Option<bool>,
125    #[doc(hidden)]
126    pub __source_breaking: fidl::marker::SourceBreaking,
127}
128
129impl fidl::Persistable for Info {}
130
131mod internal {
132    use super::*;
133    unsafe impl fidl::encoding::TypeMarker for CongestionControlState {
134        type Owned = Self;
135
136        #[inline(always)]
137        fn inline_align(_context: fidl::encoding::Context) -> usize {
138            std::mem::align_of::<u32>()
139        }
140
141        #[inline(always)]
142        fn inline_size(_context: fidl::encoding::Context) -> usize {
143            std::mem::size_of::<u32>()
144        }
145
146        #[inline(always)]
147        fn encode_is_copy() -> bool {
148            true
149        }
150
151        #[inline(always)]
152        fn decode_is_copy() -> bool {
153            false
154        }
155    }
156
157    impl fidl::encoding::ValueTypeMarker for CongestionControlState {
158        type Borrowed<'a> = Self;
159        #[inline(always)]
160        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
161            *value
162        }
163    }
164
165    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
166        for CongestionControlState
167    {
168        #[inline]
169        unsafe fn encode(
170            self,
171            encoder: &mut fidl::encoding::Encoder<'_, D>,
172            offset: usize,
173            _depth: fidl::encoding::Depth,
174        ) -> fidl::Result<()> {
175            encoder.debug_check_bounds::<Self>(offset);
176            encoder.write_num(self.into_primitive(), offset);
177            Ok(())
178        }
179    }
180
181    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
182        for CongestionControlState
183    {
184        #[inline(always)]
185        fn new_empty() -> Self {
186            Self::Open
187        }
188
189        #[inline]
190        unsafe fn decode(
191            &mut self,
192            decoder: &mut fidl::encoding::Decoder<'_, D>,
193            offset: usize,
194            _depth: fidl::encoding::Depth,
195        ) -> fidl::Result<()> {
196            decoder.debug_check_bounds::<Self>(offset);
197            let prim = decoder.read_num::<u32>(offset);
198
199            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
200            Ok(())
201        }
202    }
203    unsafe impl fidl::encoding::TypeMarker for State {
204        type Owned = Self;
205
206        #[inline(always)]
207        fn inline_align(_context: fidl::encoding::Context) -> usize {
208            std::mem::align_of::<u32>()
209        }
210
211        #[inline(always)]
212        fn inline_size(_context: fidl::encoding::Context) -> usize {
213            std::mem::size_of::<u32>()
214        }
215
216        #[inline(always)]
217        fn encode_is_copy() -> bool {
218            true
219        }
220
221        #[inline(always)]
222        fn decode_is_copy() -> bool {
223            false
224        }
225    }
226
227    impl fidl::encoding::ValueTypeMarker for State {
228        type Borrowed<'a> = Self;
229        #[inline(always)]
230        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
231            *value
232        }
233    }
234
235    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for State {
236        #[inline]
237        unsafe fn encode(
238            self,
239            encoder: &mut fidl::encoding::Encoder<'_, D>,
240            offset: usize,
241            _depth: fidl::encoding::Depth,
242        ) -> fidl::Result<()> {
243            encoder.debug_check_bounds::<Self>(offset);
244            encoder.write_num(self.into_primitive(), offset);
245            Ok(())
246        }
247    }
248
249    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for State {
250        #[inline(always)]
251        fn new_empty() -> Self {
252            Self::Established
253        }
254
255        #[inline]
256        unsafe fn decode(
257            &mut self,
258            decoder: &mut fidl::encoding::Decoder<'_, D>,
259            offset: usize,
260            _depth: fidl::encoding::Depth,
261        ) -> fidl::Result<()> {
262            decoder.debug_check_bounds::<Self>(offset);
263            let prim = decoder.read_num::<u32>(offset);
264
265            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
266            Ok(())
267        }
268    }
269
270    impl Info {
271        #[inline(always)]
272        fn max_ordinal_present(&self) -> u64 {
273            if let Some(_) = self.reorder_seen {
274                return 54;
275            }
276            if let Some(_) = self.tcpi_segs_in {
277                return 40;
278            }
279            if let Some(_) = self.tcpi_segs_out {
280                return 39;
281            }
282            if let Some(_) = self.tcpi_total_retrans {
283                return 34;
284            }
285            if let Some(_) = self.snd_cwnd {
286                return 29;
287            }
288            if let Some(_) = self.snd_ssthresh {
289                return 28;
290            }
291            if let Some(_) = self.rtt_var_usec {
292                return 27;
293            }
294            if let Some(_) = self.rtt_usec {
295                return 26;
296            }
297            if let Some(_) = self.tcpi_last_ack_recv_msec {
298                return 23;
299            }
300            if let Some(_) = self.tcpi_last_data_sent_msec {
301                return 20;
302            }
303            if let Some(_) = self.tcpi_rcv_mss {
304                return 14;
305            }
306            if let Some(_) = self.tcpi_snd_mss {
307                return 13;
308            }
309            if let Some(_) = self.rto_usec {
310                return 11;
311            }
312            if let Some(_) = self.ca_state {
313                return 2;
314            }
315            if let Some(_) = self.state {
316                return 1;
317            }
318            0
319        }
320    }
321
322    impl fidl::encoding::ValueTypeMarker for Info {
323        type Borrowed<'a> = &'a Self;
324        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
325            value
326        }
327    }
328
329    unsafe impl fidl::encoding::TypeMarker for Info {
330        type Owned = Self;
331
332        #[inline(always)]
333        fn inline_align(_context: fidl::encoding::Context) -> usize {
334            8
335        }
336
337        #[inline(always)]
338        fn inline_size(_context: fidl::encoding::Context) -> usize {
339            16
340        }
341    }
342
343    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Info, D> for &Info {
344        unsafe fn encode(
345            self,
346            encoder: &mut fidl::encoding::Encoder<'_, D>,
347            offset: usize,
348            mut depth: fidl::encoding::Depth,
349        ) -> fidl::Result<()> {
350            encoder.debug_check_bounds::<Info>(offset);
351            // Vector header
352            let max_ordinal: u64 = self.max_ordinal_present();
353            encoder.write_num(max_ordinal, offset);
354            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
355            // Calling encoder.out_of_line_offset(0) is not allowed.
356            if max_ordinal == 0 {
357                return Ok(());
358            }
359            depth.increment()?;
360            let envelope_size = 8;
361            let bytes_len = max_ordinal as usize * envelope_size;
362            #[allow(unused_variables)]
363            let offset = encoder.out_of_line_offset(bytes_len);
364            let mut _prev_end_offset: usize = 0;
365            if 1 > max_ordinal {
366                return Ok(());
367            }
368
369            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
370            // are envelope_size bytes.
371            let cur_offset: usize = (1 - 1) * envelope_size;
372
373            // Zero reserved fields.
374            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
375
376            // Safety:
377            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
378            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
379            //   envelope_size bytes, there is always sufficient room.
380            fidl::encoding::encode_in_envelope_optional::<State, D>(
381                self.state.as_ref().map(<State as fidl::encoding::ValueTypeMarker>::borrow),
382                encoder,
383                offset + cur_offset,
384                depth,
385            )?;
386
387            _prev_end_offset = cur_offset + envelope_size;
388            if 2 > max_ordinal {
389                return Ok(());
390            }
391
392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
393            // are envelope_size bytes.
394            let cur_offset: usize = (2 - 1) * envelope_size;
395
396            // Zero reserved fields.
397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
398
399            // Safety:
400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
402            //   envelope_size bytes, there is always sufficient room.
403            fidl::encoding::encode_in_envelope_optional::<CongestionControlState, D>(
404                self.ca_state
405                    .as_ref()
406                    .map(<CongestionControlState as fidl::encoding::ValueTypeMarker>::borrow),
407                encoder,
408                offset + cur_offset,
409                depth,
410            )?;
411
412            _prev_end_offset = cur_offset + envelope_size;
413            if 11 > max_ordinal {
414                return Ok(());
415            }
416
417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
418            // are envelope_size bytes.
419            let cur_offset: usize = (11 - 1) * envelope_size;
420
421            // Zero reserved fields.
422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
423
424            // Safety:
425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
427            //   envelope_size bytes, there is always sufficient room.
428            fidl::encoding::encode_in_envelope_optional::<u32, D>(
429                self.rto_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
430                encoder,
431                offset + cur_offset,
432                depth,
433            )?;
434
435            _prev_end_offset = cur_offset + envelope_size;
436            if 13 > max_ordinal {
437                return Ok(());
438            }
439
440            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
441            // are envelope_size bytes.
442            let cur_offset: usize = (13 - 1) * envelope_size;
443
444            // Zero reserved fields.
445            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
446
447            // Safety:
448            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
449            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
450            //   envelope_size bytes, there is always sufficient room.
451            fidl::encoding::encode_in_envelope_optional::<u32, D>(
452                self.tcpi_snd_mss.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
453                encoder,
454                offset + cur_offset,
455                depth,
456            )?;
457
458            _prev_end_offset = cur_offset + envelope_size;
459            if 14 > max_ordinal {
460                return Ok(());
461            }
462
463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
464            // are envelope_size bytes.
465            let cur_offset: usize = (14 - 1) * envelope_size;
466
467            // Zero reserved fields.
468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
469
470            // Safety:
471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
473            //   envelope_size bytes, there is always sufficient room.
474            fidl::encoding::encode_in_envelope_optional::<u32, D>(
475                self.tcpi_rcv_mss.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
476                encoder,
477                offset + cur_offset,
478                depth,
479            )?;
480
481            _prev_end_offset = cur_offset + envelope_size;
482            if 20 > max_ordinal {
483                return Ok(());
484            }
485
486            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
487            // are envelope_size bytes.
488            let cur_offset: usize = (20 - 1) * envelope_size;
489
490            // Zero reserved fields.
491            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
492
493            // Safety:
494            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
495            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
496            //   envelope_size bytes, there is always sufficient room.
497            fidl::encoding::encode_in_envelope_optional::<u32, D>(
498                self.tcpi_last_data_sent_msec
499                    .as_ref()
500                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
501                encoder,
502                offset + cur_offset,
503                depth,
504            )?;
505
506            _prev_end_offset = cur_offset + envelope_size;
507            if 23 > max_ordinal {
508                return Ok(());
509            }
510
511            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
512            // are envelope_size bytes.
513            let cur_offset: usize = (23 - 1) * envelope_size;
514
515            // Zero reserved fields.
516            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
517
518            // Safety:
519            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
520            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
521            //   envelope_size bytes, there is always sufficient room.
522            fidl::encoding::encode_in_envelope_optional::<u32, D>(
523                self.tcpi_last_ack_recv_msec
524                    .as_ref()
525                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
526                encoder,
527                offset + cur_offset,
528                depth,
529            )?;
530
531            _prev_end_offset = cur_offset + envelope_size;
532            if 26 > max_ordinal {
533                return Ok(());
534            }
535
536            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
537            // are envelope_size bytes.
538            let cur_offset: usize = (26 - 1) * envelope_size;
539
540            // Zero reserved fields.
541            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
542
543            // Safety:
544            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
545            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
546            //   envelope_size bytes, there is always sufficient room.
547            fidl::encoding::encode_in_envelope_optional::<u32, D>(
548                self.rtt_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
549                encoder,
550                offset + cur_offset,
551                depth,
552            )?;
553
554            _prev_end_offset = cur_offset + envelope_size;
555            if 27 > max_ordinal {
556                return Ok(());
557            }
558
559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
560            // are envelope_size bytes.
561            let cur_offset: usize = (27 - 1) * envelope_size;
562
563            // Zero reserved fields.
564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
565
566            // Safety:
567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
569            //   envelope_size bytes, there is always sufficient room.
570            fidl::encoding::encode_in_envelope_optional::<u32, D>(
571                self.rtt_var_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
572                encoder,
573                offset + cur_offset,
574                depth,
575            )?;
576
577            _prev_end_offset = cur_offset + envelope_size;
578            if 28 > max_ordinal {
579                return Ok(());
580            }
581
582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
583            // are envelope_size bytes.
584            let cur_offset: usize = (28 - 1) * envelope_size;
585
586            // Zero reserved fields.
587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
588
589            // Safety:
590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
592            //   envelope_size bytes, there is always sufficient room.
593            fidl::encoding::encode_in_envelope_optional::<u32, D>(
594                self.snd_ssthresh.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
595                encoder,
596                offset + cur_offset,
597                depth,
598            )?;
599
600            _prev_end_offset = cur_offset + envelope_size;
601            if 29 > max_ordinal {
602                return Ok(());
603            }
604
605            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
606            // are envelope_size bytes.
607            let cur_offset: usize = (29 - 1) * envelope_size;
608
609            // Zero reserved fields.
610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
611
612            // Safety:
613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
615            //   envelope_size bytes, there is always sufficient room.
616            fidl::encoding::encode_in_envelope_optional::<u32, D>(
617                self.snd_cwnd.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
618                encoder,
619                offset + cur_offset,
620                depth,
621            )?;
622
623            _prev_end_offset = cur_offset + envelope_size;
624            if 34 > max_ordinal {
625                return Ok(());
626            }
627
628            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
629            // are envelope_size bytes.
630            let cur_offset: usize = (34 - 1) * envelope_size;
631
632            // Zero reserved fields.
633            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
634
635            // Safety:
636            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
637            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
638            //   envelope_size bytes, there is always sufficient room.
639            fidl::encoding::encode_in_envelope_optional::<u32, D>(
640                self.tcpi_total_retrans
641                    .as_ref()
642                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
643                encoder,
644                offset + cur_offset,
645                depth,
646            )?;
647
648            _prev_end_offset = cur_offset + envelope_size;
649            if 39 > max_ordinal {
650                return Ok(());
651            }
652
653            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
654            // are envelope_size bytes.
655            let cur_offset: usize = (39 - 1) * envelope_size;
656
657            // Zero reserved fields.
658            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
659
660            // Safety:
661            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
662            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
663            //   envelope_size bytes, there is always sufficient room.
664            fidl::encoding::encode_in_envelope_optional::<u64, D>(
665                self.tcpi_segs_out.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
666                encoder,
667                offset + cur_offset,
668                depth,
669            )?;
670
671            _prev_end_offset = cur_offset + envelope_size;
672            if 40 > max_ordinal {
673                return Ok(());
674            }
675
676            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
677            // are envelope_size bytes.
678            let cur_offset: usize = (40 - 1) * envelope_size;
679
680            // Zero reserved fields.
681            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
682
683            // Safety:
684            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
685            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
686            //   envelope_size bytes, there is always sufficient room.
687            fidl::encoding::encode_in_envelope_optional::<u64, D>(
688                self.tcpi_segs_in.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
689                encoder,
690                offset + cur_offset,
691                depth,
692            )?;
693
694            _prev_end_offset = cur_offset + envelope_size;
695            if 54 > max_ordinal {
696                return Ok(());
697            }
698
699            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
700            // are envelope_size bytes.
701            let cur_offset: usize = (54 - 1) * envelope_size;
702
703            // Zero reserved fields.
704            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
705
706            // Safety:
707            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
708            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
709            //   envelope_size bytes, there is always sufficient room.
710            fidl::encoding::encode_in_envelope_optional::<bool, D>(
711                self.reorder_seen.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
712                encoder,
713                offset + cur_offset,
714                depth,
715            )?;
716
717            _prev_end_offset = cur_offset + envelope_size;
718
719            Ok(())
720        }
721    }
722
723    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Info {
724        #[inline(always)]
725        fn new_empty() -> Self {
726            Self::default()
727        }
728
729        unsafe fn decode(
730            &mut self,
731            decoder: &mut fidl::encoding::Decoder<'_, D>,
732            offset: usize,
733            mut depth: fidl::encoding::Depth,
734        ) -> fidl::Result<()> {
735            decoder.debug_check_bounds::<Self>(offset);
736            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
737                None => return Err(fidl::Error::NotNullable),
738                Some(len) => len,
739            };
740            // Calling decoder.out_of_line_offset(0) is not allowed.
741            if len == 0 {
742                return Ok(());
743            };
744            depth.increment()?;
745            let envelope_size = 8;
746            let bytes_len = len * envelope_size;
747            let offset = decoder.out_of_line_offset(bytes_len)?;
748            // Decode the envelope for each type.
749            let mut _next_ordinal_to_read = 0;
750            let mut next_offset = offset;
751            let end_offset = offset + bytes_len;
752            _next_ordinal_to_read += 1;
753            if next_offset >= end_offset {
754                return Ok(());
755            }
756
757            // Decode unknown envelopes for gaps in ordinals.
758            while _next_ordinal_to_read < 1 {
759                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
760                _next_ordinal_to_read += 1;
761                next_offset += envelope_size;
762            }
763
764            let next_out_of_line = decoder.next_out_of_line();
765            let handles_before = decoder.remaining_handles();
766            if let Some((inlined, num_bytes, num_handles)) =
767                fidl::encoding::decode_envelope_header(decoder, next_offset)?
768            {
769                let member_inline_size =
770                    <State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
771                if inlined != (member_inline_size <= 4) {
772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
773                }
774                let inner_offset;
775                let mut inner_depth = depth.clone();
776                if inlined {
777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
778                    inner_offset = next_offset;
779                } else {
780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
781                    inner_depth.increment()?;
782                }
783                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(State, D));
784                fidl::decode!(State, D, val_ref, decoder, inner_offset, inner_depth)?;
785                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
786                {
787                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
788                }
789                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
790                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
791                }
792            }
793
794            next_offset += envelope_size;
795            _next_ordinal_to_read += 1;
796            if next_offset >= end_offset {
797                return Ok(());
798            }
799
800            // Decode unknown envelopes for gaps in ordinals.
801            while _next_ordinal_to_read < 2 {
802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
803                _next_ordinal_to_read += 1;
804                next_offset += envelope_size;
805            }
806
807            let next_out_of_line = decoder.next_out_of_line();
808            let handles_before = decoder.remaining_handles();
809            if let Some((inlined, num_bytes, num_handles)) =
810                fidl::encoding::decode_envelope_header(decoder, next_offset)?
811            {
812                let member_inline_size =
813                    <CongestionControlState as fidl::encoding::TypeMarker>::inline_size(
814                        decoder.context,
815                    );
816                if inlined != (member_inline_size <= 4) {
817                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
818                }
819                let inner_offset;
820                let mut inner_depth = depth.clone();
821                if inlined {
822                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
823                    inner_offset = next_offset;
824                } else {
825                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
826                    inner_depth.increment()?;
827                }
828                let val_ref = self
829                    .ca_state
830                    .get_or_insert_with(|| fidl::new_empty!(CongestionControlState, D));
831                fidl::decode!(
832                    CongestionControlState,
833                    D,
834                    val_ref,
835                    decoder,
836                    inner_offset,
837                    inner_depth
838                )?;
839                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
840                {
841                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
842                }
843                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
844                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
845                }
846            }
847
848            next_offset += envelope_size;
849            _next_ordinal_to_read += 1;
850            if next_offset >= end_offset {
851                return Ok(());
852            }
853
854            // Decode unknown envelopes for gaps in ordinals.
855            while _next_ordinal_to_read < 11 {
856                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
857                _next_ordinal_to_read += 1;
858                next_offset += envelope_size;
859            }
860
861            let next_out_of_line = decoder.next_out_of_line();
862            let handles_before = decoder.remaining_handles();
863            if let Some((inlined, num_bytes, num_handles)) =
864                fidl::encoding::decode_envelope_header(decoder, next_offset)?
865            {
866                let member_inline_size =
867                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
868                if inlined != (member_inline_size <= 4) {
869                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
870                }
871                let inner_offset;
872                let mut inner_depth = depth.clone();
873                if inlined {
874                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
875                    inner_offset = next_offset;
876                } else {
877                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
878                    inner_depth.increment()?;
879                }
880                let val_ref = self.rto_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
881                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
882                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
883                {
884                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
885                }
886                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
887                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
888                }
889            }
890
891            next_offset += envelope_size;
892            _next_ordinal_to_read += 1;
893            if next_offset >= end_offset {
894                return Ok(());
895            }
896
897            // Decode unknown envelopes for gaps in ordinals.
898            while _next_ordinal_to_read < 13 {
899                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
900                _next_ordinal_to_read += 1;
901                next_offset += envelope_size;
902            }
903
904            let next_out_of_line = decoder.next_out_of_line();
905            let handles_before = decoder.remaining_handles();
906            if let Some((inlined, num_bytes, num_handles)) =
907                fidl::encoding::decode_envelope_header(decoder, next_offset)?
908            {
909                let member_inline_size =
910                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
911                if inlined != (member_inline_size <= 4) {
912                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
913                }
914                let inner_offset;
915                let mut inner_depth = depth.clone();
916                if inlined {
917                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
918                    inner_offset = next_offset;
919                } else {
920                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
921                    inner_depth.increment()?;
922                }
923                let val_ref = self.tcpi_snd_mss.get_or_insert_with(|| fidl::new_empty!(u32, D));
924                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
926                {
927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
928                }
929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
931                }
932            }
933
934            next_offset += envelope_size;
935            _next_ordinal_to_read += 1;
936            if next_offset >= end_offset {
937                return Ok(());
938            }
939
940            // Decode unknown envelopes for gaps in ordinals.
941            while _next_ordinal_to_read < 14 {
942                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
943                _next_ordinal_to_read += 1;
944                next_offset += envelope_size;
945            }
946
947            let next_out_of_line = decoder.next_out_of_line();
948            let handles_before = decoder.remaining_handles();
949            if let Some((inlined, num_bytes, num_handles)) =
950                fidl::encoding::decode_envelope_header(decoder, next_offset)?
951            {
952                let member_inline_size =
953                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
954                if inlined != (member_inline_size <= 4) {
955                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
956                }
957                let inner_offset;
958                let mut inner_depth = depth.clone();
959                if inlined {
960                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
961                    inner_offset = next_offset;
962                } else {
963                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
964                    inner_depth.increment()?;
965                }
966                let val_ref = self.tcpi_rcv_mss.get_or_insert_with(|| fidl::new_empty!(u32, D));
967                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
969                {
970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
971                }
972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
974                }
975            }
976
977            next_offset += envelope_size;
978            _next_ordinal_to_read += 1;
979            if next_offset >= end_offset {
980                return Ok(());
981            }
982
983            // Decode unknown envelopes for gaps in ordinals.
984            while _next_ordinal_to_read < 20 {
985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
986                _next_ordinal_to_read += 1;
987                next_offset += envelope_size;
988            }
989
990            let next_out_of_line = decoder.next_out_of_line();
991            let handles_before = decoder.remaining_handles();
992            if let Some((inlined, num_bytes, num_handles)) =
993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
994            {
995                let member_inline_size =
996                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
997                if inlined != (member_inline_size <= 4) {
998                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
999                }
1000                let inner_offset;
1001                let mut inner_depth = depth.clone();
1002                if inlined {
1003                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1004                    inner_offset = next_offset;
1005                } else {
1006                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1007                    inner_depth.increment()?;
1008                }
1009                let val_ref =
1010                    self.tcpi_last_data_sent_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
1011                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1012                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1013                {
1014                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1015                }
1016                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1017                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1018                }
1019            }
1020
1021            next_offset += envelope_size;
1022            _next_ordinal_to_read += 1;
1023            if next_offset >= end_offset {
1024                return Ok(());
1025            }
1026
1027            // Decode unknown envelopes for gaps in ordinals.
1028            while _next_ordinal_to_read < 23 {
1029                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1030                _next_ordinal_to_read += 1;
1031                next_offset += envelope_size;
1032            }
1033
1034            let next_out_of_line = decoder.next_out_of_line();
1035            let handles_before = decoder.remaining_handles();
1036            if let Some((inlined, num_bytes, num_handles)) =
1037                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1038            {
1039                let member_inline_size =
1040                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1041                if inlined != (member_inline_size <= 4) {
1042                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1043                }
1044                let inner_offset;
1045                let mut inner_depth = depth.clone();
1046                if inlined {
1047                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1048                    inner_offset = next_offset;
1049                } else {
1050                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1051                    inner_depth.increment()?;
1052                }
1053                let val_ref =
1054                    self.tcpi_last_ack_recv_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
1055                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1057                {
1058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1059                }
1060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1062                }
1063            }
1064
1065            next_offset += envelope_size;
1066            _next_ordinal_to_read += 1;
1067            if next_offset >= end_offset {
1068                return Ok(());
1069            }
1070
1071            // Decode unknown envelopes for gaps in ordinals.
1072            while _next_ordinal_to_read < 26 {
1073                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1074                _next_ordinal_to_read += 1;
1075                next_offset += envelope_size;
1076            }
1077
1078            let next_out_of_line = decoder.next_out_of_line();
1079            let handles_before = decoder.remaining_handles();
1080            if let Some((inlined, num_bytes, num_handles)) =
1081                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1082            {
1083                let member_inline_size =
1084                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1085                if inlined != (member_inline_size <= 4) {
1086                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1087                }
1088                let inner_offset;
1089                let mut inner_depth = depth.clone();
1090                if inlined {
1091                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1092                    inner_offset = next_offset;
1093                } else {
1094                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1095                    inner_depth.increment()?;
1096                }
1097                let val_ref = self.rtt_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
1098                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1099                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1100                {
1101                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1102                }
1103                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1104                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1105                }
1106            }
1107
1108            next_offset += envelope_size;
1109            _next_ordinal_to_read += 1;
1110            if next_offset >= end_offset {
1111                return Ok(());
1112            }
1113
1114            // Decode unknown envelopes for gaps in ordinals.
1115            while _next_ordinal_to_read < 27 {
1116                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1117                _next_ordinal_to_read += 1;
1118                next_offset += envelope_size;
1119            }
1120
1121            let next_out_of_line = decoder.next_out_of_line();
1122            let handles_before = decoder.remaining_handles();
1123            if let Some((inlined, num_bytes, num_handles)) =
1124                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1125            {
1126                let member_inline_size =
1127                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1128                if inlined != (member_inline_size <= 4) {
1129                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1130                }
1131                let inner_offset;
1132                let mut inner_depth = depth.clone();
1133                if inlined {
1134                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1135                    inner_offset = next_offset;
1136                } else {
1137                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1138                    inner_depth.increment()?;
1139                }
1140                let val_ref = self.rtt_var_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
1141                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1142                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1143                {
1144                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1145                }
1146                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1147                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1148                }
1149            }
1150
1151            next_offset += envelope_size;
1152            _next_ordinal_to_read += 1;
1153            if next_offset >= end_offset {
1154                return Ok(());
1155            }
1156
1157            // Decode unknown envelopes for gaps in ordinals.
1158            while _next_ordinal_to_read < 28 {
1159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1160                _next_ordinal_to_read += 1;
1161                next_offset += envelope_size;
1162            }
1163
1164            let next_out_of_line = decoder.next_out_of_line();
1165            let handles_before = decoder.remaining_handles();
1166            if let Some((inlined, num_bytes, num_handles)) =
1167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1168            {
1169                let member_inline_size =
1170                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1171                if inlined != (member_inline_size <= 4) {
1172                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1173                }
1174                let inner_offset;
1175                let mut inner_depth = depth.clone();
1176                if inlined {
1177                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1178                    inner_offset = next_offset;
1179                } else {
1180                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1181                    inner_depth.increment()?;
1182                }
1183                let val_ref = self.snd_ssthresh.get_or_insert_with(|| fidl::new_empty!(u32, D));
1184                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1185                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1186                {
1187                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1188                }
1189                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1190                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1191                }
1192            }
1193
1194            next_offset += envelope_size;
1195            _next_ordinal_to_read += 1;
1196            if next_offset >= end_offset {
1197                return Ok(());
1198            }
1199
1200            // Decode unknown envelopes for gaps in ordinals.
1201            while _next_ordinal_to_read < 29 {
1202                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1203                _next_ordinal_to_read += 1;
1204                next_offset += envelope_size;
1205            }
1206
1207            let next_out_of_line = decoder.next_out_of_line();
1208            let handles_before = decoder.remaining_handles();
1209            if let Some((inlined, num_bytes, num_handles)) =
1210                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1211            {
1212                let member_inline_size =
1213                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1214                if inlined != (member_inline_size <= 4) {
1215                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1216                }
1217                let inner_offset;
1218                let mut inner_depth = depth.clone();
1219                if inlined {
1220                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1221                    inner_offset = next_offset;
1222                } else {
1223                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1224                    inner_depth.increment()?;
1225                }
1226                let val_ref = self.snd_cwnd.get_or_insert_with(|| fidl::new_empty!(u32, D));
1227                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1228                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1229                {
1230                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1231                }
1232                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1233                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1234                }
1235            }
1236
1237            next_offset += envelope_size;
1238            _next_ordinal_to_read += 1;
1239            if next_offset >= end_offset {
1240                return Ok(());
1241            }
1242
1243            // Decode unknown envelopes for gaps in ordinals.
1244            while _next_ordinal_to_read < 34 {
1245                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1246                _next_ordinal_to_read += 1;
1247                next_offset += envelope_size;
1248            }
1249
1250            let next_out_of_line = decoder.next_out_of_line();
1251            let handles_before = decoder.remaining_handles();
1252            if let Some((inlined, num_bytes, num_handles)) =
1253                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1254            {
1255                let member_inline_size =
1256                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1257                if inlined != (member_inline_size <= 4) {
1258                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1259                }
1260                let inner_offset;
1261                let mut inner_depth = depth.clone();
1262                if inlined {
1263                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1264                    inner_offset = next_offset;
1265                } else {
1266                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1267                    inner_depth.increment()?;
1268                }
1269                let val_ref =
1270                    self.tcpi_total_retrans.get_or_insert_with(|| fidl::new_empty!(u32, D));
1271                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1272                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1273                {
1274                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1275                }
1276                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1277                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1278                }
1279            }
1280
1281            next_offset += envelope_size;
1282            _next_ordinal_to_read += 1;
1283            if next_offset >= end_offset {
1284                return Ok(());
1285            }
1286
1287            // Decode unknown envelopes for gaps in ordinals.
1288            while _next_ordinal_to_read < 39 {
1289                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1290                _next_ordinal_to_read += 1;
1291                next_offset += envelope_size;
1292            }
1293
1294            let next_out_of_line = decoder.next_out_of_line();
1295            let handles_before = decoder.remaining_handles();
1296            if let Some((inlined, num_bytes, num_handles)) =
1297                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1298            {
1299                let member_inline_size =
1300                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1301                if inlined != (member_inline_size <= 4) {
1302                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1303                }
1304                let inner_offset;
1305                let mut inner_depth = depth.clone();
1306                if inlined {
1307                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1308                    inner_offset = next_offset;
1309                } else {
1310                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1311                    inner_depth.increment()?;
1312                }
1313                let val_ref = self.tcpi_segs_out.get_or_insert_with(|| fidl::new_empty!(u64, D));
1314                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1315                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1316                {
1317                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1318                }
1319                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1320                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1321                }
1322            }
1323
1324            next_offset += envelope_size;
1325            _next_ordinal_to_read += 1;
1326            if next_offset >= end_offset {
1327                return Ok(());
1328            }
1329
1330            // Decode unknown envelopes for gaps in ordinals.
1331            while _next_ordinal_to_read < 40 {
1332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1333                _next_ordinal_to_read += 1;
1334                next_offset += envelope_size;
1335            }
1336
1337            let next_out_of_line = decoder.next_out_of_line();
1338            let handles_before = decoder.remaining_handles();
1339            if let Some((inlined, num_bytes, num_handles)) =
1340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1341            {
1342                let member_inline_size =
1343                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1344                if inlined != (member_inline_size <= 4) {
1345                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1346                }
1347                let inner_offset;
1348                let mut inner_depth = depth.clone();
1349                if inlined {
1350                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1351                    inner_offset = next_offset;
1352                } else {
1353                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1354                    inner_depth.increment()?;
1355                }
1356                let val_ref = self.tcpi_segs_in.get_or_insert_with(|| fidl::new_empty!(u64, D));
1357                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1358                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1359                {
1360                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1361                }
1362                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1363                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1364                }
1365            }
1366
1367            next_offset += envelope_size;
1368            _next_ordinal_to_read += 1;
1369            if next_offset >= end_offset {
1370                return Ok(());
1371            }
1372
1373            // Decode unknown envelopes for gaps in ordinals.
1374            while _next_ordinal_to_read < 54 {
1375                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1376                _next_ordinal_to_read += 1;
1377                next_offset += envelope_size;
1378            }
1379
1380            let next_out_of_line = decoder.next_out_of_line();
1381            let handles_before = decoder.remaining_handles();
1382            if let Some((inlined, num_bytes, num_handles)) =
1383                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1384            {
1385                let member_inline_size =
1386                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1387                if inlined != (member_inline_size <= 4) {
1388                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1389                }
1390                let inner_offset;
1391                let mut inner_depth = depth.clone();
1392                if inlined {
1393                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1394                    inner_offset = next_offset;
1395                } else {
1396                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1397                    inner_depth.increment()?;
1398                }
1399                let val_ref = self.reorder_seen.get_or_insert_with(|| fidl::new_empty!(bool, D));
1400                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1401                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1402                {
1403                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1404                }
1405                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1406                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1407                }
1408            }
1409
1410            next_offset += envelope_size;
1411
1412            // Decode the remaining unknown envelopes.
1413            while next_offset < end_offset {
1414                _next_ordinal_to_read += 1;
1415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1416                next_offset += envelope_size;
1417            }
1418
1419            Ok(())
1420        }
1421    }
1422}