1#![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#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum CongestionControlState {
15 Open = 0,
17 Disorder = 1,
20 CongestionWindowReduced = 2,
23 Recovery = 3,
26 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#[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#[derive(Clone, Debug, Default, PartialEq)]
94pub struct Info {
95 pub state: Option<State>,
97 pub ca_state: Option<CongestionControlState>,
99 pub rto_usec: Option<u32>,
101 pub tcpi_snd_mss: Option<u32>,
103 pub tcpi_rcv_mss: Option<u32>,
105 pub tcpi_last_data_sent_msec: Option<u32>,
107 pub tcpi_last_ack_recv_msec: Option<u32>,
109 pub rtt_usec: Option<u32>,
111 pub rtt_var_usec: Option<u32>,
113 pub snd_ssthresh: Option<u32>,
115 pub snd_cwnd: Option<u32>,
117 pub tcpi_total_retrans: Option<u32>,
119 pub tcpi_segs_out: Option<u64>,
121 pub tcpi_segs_in: Option<u64>,
123 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
372
373 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
375
376 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 let cur_offset: usize = (2 - 1) * envelope_size;
395
396 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
398
399 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 let cur_offset: usize = (11 - 1) * envelope_size;
420
421 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
423
424 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 let cur_offset: usize = (13 - 1) * envelope_size;
443
444 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
446
447 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 let cur_offset: usize = (14 - 1) * envelope_size;
466
467 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
469
470 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 let cur_offset: usize = (20 - 1) * envelope_size;
489
490 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
492
493 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 let cur_offset: usize = (23 - 1) * envelope_size;
514
515 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
517
518 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 let cur_offset: usize = (26 - 1) * envelope_size;
539
540 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
542
543 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 let cur_offset: usize = (27 - 1) * envelope_size;
562
563 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
565
566 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 let cur_offset: usize = (28 - 1) * envelope_size;
585
586 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
588
589 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 let cur_offset: usize = (29 - 1) * envelope_size;
608
609 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
611
612 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 let cur_offset: usize = (34 - 1) * envelope_size;
631
632 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
634
635 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 let cur_offset: usize = (39 - 1) * envelope_size;
656
657 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
659
660 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 let cur_offset: usize = (40 - 1) * envelope_size;
679
680 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
682
683 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 let cur_offset: usize = (54 - 1) * envelope_size;
702
703 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
705
706 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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}