netlink_packet_route/link/link_info/
gre.rs

1// SPDX-License-Identifier: MIT
2
3use anyhow::Context;
4use netlink_packet_utils::{
5    nla::{DefaultNla, Nla, NlaBuffer},
6    DecodeError, Parseable,
7};
8
9#[derive(Debug, PartialEq, Eq, Clone)]
10#[non_exhaustive]
11pub enum InfoGreTun {
12    Other(DefaultNla),
13}
14
15impl Nla for InfoGreTun {
16    fn value_len(&self) -> usize {
17        match self {
18            Self::Other(nla) => nla.value_len(),
19        }
20    }
21
22    fn emit_value(&self, buffer: &mut [u8]) {
23        match self {
24            Self::Other(nla) => nla.emit_value(buffer),
25        }
26    }
27
28    fn kind(&self) -> u16 {
29        match self {
30            Self::Other(nla) => nla.kind(),
31        }
32    }
33}
34
35impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoGreTun {
36    fn parse(buf: &NlaBuffer<&'a T>) -> Result<Self, DecodeError> {
37        #[allow(clippy::match_single_binding)]
38        Ok(match buf.kind() {
39            kind => Self::Other(
40                DefaultNla::parse(buf)
41                    .context(format!("unknown NLA type {kind} for gre"))?,
42            ),
43        })
44    }
45}