nullnet_firewall/
firewall_error.rs1use std::fmt::{Display, Formatter};
2
3use crate::firewall_option::FirewallOption;
4
5#[derive(Debug, Eq, PartialEq, Clone)]
7pub enum FirewallError {
8 InvalidDportValue(usize, String),
10 InvalidSportValue(usize, String),
12 InvalidDestValue(usize, String),
14 InvalidSourceValue(usize, String),
16 InvalidIcmpTypeValue(usize, String),
18 InvalidProtocolValue(usize, String),
20 InvalidDirection(usize, String),
22 InvalidAction(usize, String),
24 UnknownOption(usize, String),
26 EmptyOption(usize, String),
28 DuplicatedOption(usize, String),
30 NotEnoughArguments(usize),
32 NotApplicableIcmpType(usize),
34}
35
36impl Display for FirewallError {
37 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
38 let (l, err_info) = match self {
39 FirewallError::InvalidDportValue(l, val) => (
40 l,
41 format!(
42 "incorrect value for option '{} {val}'",
43 FirewallOption::DPORT
44 ),
45 ),
46 FirewallError::InvalidSportValue(l, val) => (
47 l,
48 format!(
49 "incorrect value for option '{} {val}'",
50 FirewallOption::SPORT
51 ),
52 ),
53 FirewallError::InvalidDestValue(l, val) => (
54 l,
55 format!(
56 "incorrect value for option '{} {val}'",
57 FirewallOption::DEST
58 ),
59 ),
60 FirewallError::InvalidSourceValue(l, val) => (
61 l,
62 format!(
63 "incorrect value for option '{} {val}'",
64 FirewallOption::SOURCE
65 ),
66 ),
67 FirewallError::InvalidIcmpTypeValue(l, val) => (
68 l,
69 format!(
70 "incorrect value for option '{} {val}'",
71 FirewallOption::ICMPTYPE
72 ),
73 ),
74 FirewallError::InvalidProtocolValue(l, val) => (
75 l,
76 format!(
77 "incorrect value for option '{} {val}'",
78 FirewallOption::PROTO
79 ),
80 ),
81 FirewallError::InvalidDirection(l, direction) => {
82 (l, format!("incorrect direction '{direction}'"))
83 }
84 FirewallError::InvalidAction(l, action) => (l, format!("incorrect action '{action}'")),
85 FirewallError::UnknownOption(l, opt) => {
86 (l, format!("the specified option '{opt}' doesn't exist"))
87 }
88 FirewallError::NotEnoughArguments(l) => {
89 (l, "not enough arguments supplied for rule".to_string())
90 }
91 FirewallError::EmptyOption(l, opt) => {
92 (l, format!("the supplied option '{opt}' is empty"))
93 }
94 FirewallError::DuplicatedOption(l, opt) => {
95 (l, format!("duplicated option '{opt}' for the same rule"))
96 }
97 FirewallError::NotApplicableIcmpType(l) => (
98 l,
99 format!(
100 "option '{}' is valid only if '{} 1' or '{} 58' is also specified",
101 FirewallOption::ICMPTYPE,
102 FirewallOption::PROTO,
103 FirewallOption::PROTO
104 ),
105 ),
106 };
107
108 write!(f, "Firewall error at line {l} - {err_info}")
109 }
110}