netlink_packet_route/link/link_info/
gre.rs1use 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}