netlink_packet_route/link/af_spec/
in6_addr_gen_mode.rs1use std::fmt::Display;
4
5const IN6_ADDR_GEN_MODE_EUI64: u8 = 0;
6const IN6_ADDR_GEN_MODE_NONE: u8 = 1;
7const IN6_ADDR_GEN_MODE_STABLE_PRIVACY: u8 = 2;
8const IN6_ADDR_GEN_MODE_RANDOM: u8 = 3;
9
10#[derive(Clone, Copy, Eq, PartialEq, Debug, Default)]
11#[non_exhaustive]
12#[repr(u8)]
13pub enum In6AddrGenMode {
14 #[default]
15 Eui64,
16 None,
17 StablePrivacy,
18 Random,
19 Other(u8),
20}
21
22impl From<u8> for In6AddrGenMode {
23 fn from(d: u8) -> Self {
24 match d {
25 IN6_ADDR_GEN_MODE_EUI64 => Self::Eui64,
26 IN6_ADDR_GEN_MODE_NONE => Self::None,
27 IN6_ADDR_GEN_MODE_STABLE_PRIVACY => Self::StablePrivacy,
28 IN6_ADDR_GEN_MODE_RANDOM => Self::Random,
29 _ => Self::Other(d),
30 }
31 }
32}
33impl From<&In6AddrGenMode> for u8 {
34 fn from(v: &In6AddrGenMode) -> Self {
35 match v {
36 In6AddrGenMode::Eui64 => IN6_ADDR_GEN_MODE_EUI64,
37 In6AddrGenMode::None => IN6_ADDR_GEN_MODE_NONE,
38 In6AddrGenMode::StablePrivacy => IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
39 In6AddrGenMode::Random => IN6_ADDR_GEN_MODE_RANDOM,
40 In6AddrGenMode::Other(d) => *d,
41 }
42 }
43}
44
45impl Display for In6AddrGenMode {
46 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47 match self {
48 Self::Eui64 => write!(f, "eui64"),
49 Self::None => write!(f, "none"),
50 Self::StablePrivacy => write!(f, "stable_secret"),
52 Self::Random => write!(f, "random"),
53 Self::Other(d) => write!(f, "other({d})"),
54 }
55 }
56}