1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
// SPDX-License-Identifier: MIT
use crate::constants::*;
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
#[non_exhaustive]
pub enum State {
/// Status can't be determined
Unknown,
/// Some component is missing
NotPresent,
/// Down
Down,
/// Down due to state of lower layer
LowerLayerDown,
/// In some test mode
Testing,
/// Not up but pending an external event
Dormant,
/// Up, ready to send packets
Up,
/// Unrecognized value. This should go away when `TryFrom` is stable in
/// Rust
// FIXME: there's not point in having this. When TryFrom is stable we'll
// remove it
Other(u8),
}
impl From<u8> for State {
fn from(value: u8) -> Self {
use self::State::*;
match value {
IF_OPER_UNKNOWN => Unknown,
IF_OPER_NOTPRESENT => NotPresent,
IF_OPER_DOWN => Down,
IF_OPER_LOWERLAYERDOWN => LowerLayerDown,
IF_OPER_TESTING => Testing,
IF_OPER_DORMANT => Dormant,
IF_OPER_UP => Up,
_ => Other(value),
}
}
}
impl From<State> for u8 {
fn from(value: State) -> Self {
use self::State::*;
match value {
Unknown => IF_OPER_UNKNOWN,
NotPresent => IF_OPER_NOTPRESENT,
Down => IF_OPER_DOWN,
LowerLayerDown => IF_OPER_LOWERLAYERDOWN,
Testing => IF_OPER_TESTING,
Dormant => IF_OPER_DORMANT,
Up => IF_OPER_UP,
Other(other) => other,
}
}
}