netlink_packet_route/link/
link_state.rs

1// SPDX-License-Identifier: MIT
2
3const IF_OPER_UNKNOWN: u8 = 0;
4const IF_OPER_NOTPRESENT: u8 = 1;
5const IF_OPER_DOWN: u8 = 2;
6const IF_OPER_LOWERLAYERDOWN: u8 = 3;
7const IF_OPER_TESTING: u8 = 4;
8const IF_OPER_DORMANT: u8 = 5;
9const IF_OPER_UP: u8 = 6;
10
11#[derive(Debug, Clone, Copy, Eq, PartialEq)]
12#[non_exhaustive]
13pub enum State {
14    /// Status can't be determined
15    Unknown,
16    /// Some component is missing
17    NotPresent,
18    /// Down
19    Down,
20    /// Down due to state of lower layer
21    LowerLayerDown,
22    /// In some test mode
23    Testing,
24    /// Not up but pending an external event
25    Dormant,
26    /// Up, ready to send packets
27    Up,
28    /// Place holder for new state introduced by kernel when current crate does
29    /// not support so.
30    Other(u8),
31}
32
33impl From<u8> for State {
34    fn from(value: u8) -> Self {
35        use self::State::*;
36        match value {
37            IF_OPER_UNKNOWN => Unknown,
38            IF_OPER_NOTPRESENT => NotPresent,
39            IF_OPER_DOWN => Down,
40            IF_OPER_LOWERLAYERDOWN => LowerLayerDown,
41            IF_OPER_TESTING => Testing,
42            IF_OPER_DORMANT => Dormant,
43            IF_OPER_UP => Up,
44            _ => Other(value),
45        }
46    }
47}
48
49impl From<State> for u8 {
50    fn from(value: State) -> Self {
51        use self::State::*;
52        match value {
53            Unknown => IF_OPER_UNKNOWN,
54            NotPresent => IF_OPER_NOTPRESENT,
55            Down => IF_OPER_DOWN,
56            LowerLayerDown => IF_OPER_LOWERLAYERDOWN,
57            Testing => IF_OPER_TESTING,
58            Dormant => IF_OPER_DORMANT,
59            Up => IF_OPER_UP,
60            Other(other) => other,
61        }
62    }
63}