netlink_packet_route/rule/
action.rs

1// SPDX-License-Identifier: MIT
2
3const FR_ACT_UNSPEC: u8 = 0;
4const FR_ACT_TO_TBL: u8 = 1;
5const FR_ACT_GOTO: u8 = 2;
6const FR_ACT_NOP: u8 = 3;
7// const FR_ACT_RES3: u8 = 4;
8// const FR_ACT_RES4: u8 = 5;
9const FR_ACT_BLACKHOLE: u8 = 6;
10const FR_ACT_UNREACHABLE: u8 = 7;
11const FR_ACT_PROHIBIT: u8 = 8;
12
13#[derive(Eq, PartialEq, Debug, Clone, Copy, Default)]
14#[non_exhaustive]
15pub enum RuleAction {
16    #[default]
17    Unspec,
18    ToTable,
19    Goto,
20    Nop,
21    Blackhole,
22    Unreachable,
23    Prohibit,
24    Other(u8),
25}
26
27impl From<u8> for RuleAction {
28    fn from(d: u8) -> Self {
29        match d {
30            FR_ACT_UNSPEC => Self::Unspec,
31            FR_ACT_TO_TBL => Self::ToTable,
32            FR_ACT_GOTO => Self::Goto,
33            FR_ACT_NOP => Self::Nop,
34            FR_ACT_BLACKHOLE => Self::Blackhole,
35            FR_ACT_UNREACHABLE => Self::Unreachable,
36            FR_ACT_PROHIBIT => Self::Prohibit,
37            _ => Self::Other(d),
38        }
39    }
40}
41
42impl From<RuleAction> for u8 {
43    fn from(v: RuleAction) -> u8 {
44        match v {
45            RuleAction::Unspec => FR_ACT_UNSPEC,
46            RuleAction::ToTable => FR_ACT_TO_TBL,
47            RuleAction::Goto => FR_ACT_GOTO,
48            RuleAction::Nop => FR_ACT_NOP,
49            RuleAction::Blackhole => FR_ACT_BLACKHOLE,
50            RuleAction::Unreachable => FR_ACT_UNREACHABLE,
51            RuleAction::Prohibit => FR_ACT_PROHIBIT,
52            RuleAction::Other(d) => d,
53        }
54    }
55}