netlink_packet_route/link/
link_mode.rs

1// SPDX-License-Identifier: MIT
2
3const IF_LINK_MODE_DEFAULT: u8 = 0;
4const IF_LINK_MODE_DORMANT: u8 = 1;
5const IF_LINK_MODE_TESTING: u8 = 2;
6
7#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
8#[non_exhaustive]
9pub enum LinkMode {
10    #[default]
11    Default,
12    ///limit upward transition to dormant
13    Dormant,
14    ///limit upward transition to testing
15    Testing,
16    Other(u8),
17}
18
19impl From<u8> for LinkMode {
20    fn from(d: u8) -> Self {
21        match d {
22            IF_LINK_MODE_DEFAULT => Self::Default,
23            IF_LINK_MODE_DORMANT => Self::Dormant,
24            IF_LINK_MODE_TESTING => Self::Testing,
25            _ => Self::Other(d),
26        }
27    }
28}
29
30impl From<LinkMode> for u8 {
31    fn from(v: LinkMode) -> u8 {
32        match v {
33            LinkMode::Default => IF_LINK_MODE_DEFAULT,
34            LinkMode::Dormant => IF_LINK_MODE_DORMANT,
35            LinkMode::Testing => IF_LINK_MODE_TESTING,
36            LinkMode::Other(d) => d,
37        }
38    }
39}
40
41impl std::fmt::Display for LinkMode {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        match self {
44            Self::Default => write!(f, "DEFAULT"),
45            Self::Dormant => write!(f, "DORMANT"),
46            Self::Testing => write!(f, "TESTING"),
47            Self::Other(d) => write!(f, "UNKNOWN:{d}"),
48        }
49    }
50}