aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2025-03-20 17:35:50 +0100
committerHimbeer <himbeer@disroot.org>2025-03-20 17:35:50 +0100
commit8295db3fbb6717f82b795c0ba4f20eb5d6aa55a2 (patch)
tree108db0ec13e8255935abfb0e3e170a53bf69d67a /src
parentc06ed776ab8081d89099de3fb7ddc8a29426a8df (diff)
Create/delete IPv4/v6 rules separately for RuleVersion::Both
This change is needed because rtnetlink does not support multi-protocol rules.
Diffstat (limited to 'src')
-rw-r--r--src/main.rs54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs
index ff0b6ad..0754003 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -465,15 +465,26 @@ struct Rule {
impl Rule {
fn add(self, c: &Connection) -> Result<(), SetupError> {
match self.version {
- RuleVersion::Both => rsdsl_netlinklib::rule::Rule::<()> {
- invert: self.invert,
- fwmark: self.fwmark,
- dst: None,
- src: None,
- action: self.action,
- table: self.table,
+ RuleVersion::Both => {
+ rsdsl_netlinklib::rule::Rule::<Ipv4Addr> {
+ invert: self.invert,
+ fwmark: self.fwmark,
+ dst: None,
+ src: None,
+ action: self.action,
+ table: self.table,
+ }
+ .blocking_add(c)?;
+ rsdsl_netlinklib::rule::Rule::<Ipv6Addr> {
+ invert: self.invert,
+ fwmark: self.fwmark,
+ dst: None,
+ src: None,
+ action: self.action,
+ table: self.table,
+ }
+ .blocking_add(c)?;
}
- .blocking_add(c)?,
RuleVersion::Ipv4 => rsdsl_netlinklib::rule::Rule::<Ipv4Addr> {
invert: self.invert,
fwmark: self.fwmark,
@@ -523,15 +534,26 @@ impl Rule {
fn delete(self, c: &Connection) -> Result<(), SetupError> {
match self.version {
- RuleVersion::Both => rsdsl_netlinklib::rule::Rule::<()> {
- invert: self.invert,
- fwmark: self.fwmark,
- dst: None,
- src: None,
- action: self.action,
- table: self.table,
+ RuleVersion::Both => {
+ rsdsl_netlinklib::rule::Rule::<Ipv4Addr> {
+ invert: self.invert,
+ fwmark: self.fwmark,
+ dst: None,
+ src: None,
+ action: self.action,
+ table: self.table,
+ }
+ .blocking_del(c)?;
+ rsdsl_netlinklib::rule::Rule::<Ipv6Addr> {
+ invert: self.invert,
+ fwmark: self.fwmark,
+ dst: None,
+ src: None,
+ action: self.action,
+ table: self.table,
+ }
+ .blocking_del(c)?;
}
- .blocking_del(c)?,
RuleVersion::Ipv4 => rsdsl_netlinklib::rule::Rule::<Ipv4Addr> {
invert: self.invert,
fwmark: self.fwmark,