aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.rs42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index 02d7518..dea45da 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -475,29 +475,63 @@ fn session(
}
};
} else if *state == Ncp::Active {
+ let mut update = false;
+
match *ncp {
Network::Ipv4 if !ipv4_active => {
- write_dsconfig(config4.clone(), config6.clone())?;
ipv4_active = true;
+ update = true;
}
Network::Ipv6 if !ipv6_active => {
- write_dsconfig(config4.clone(), config6.clone())?;
ipv6_active = true;
+ update = true;
}
_ => {}
}
+
+ if update {
+ write_dsconfig(
+ if ipv4_active {
+ config4.clone()
+ } else {
+ Arc::new(Mutex::new(Ipv4Config::default()))
+ },
+ if ipv6_active {
+ config6.clone()
+ } else {
+ Arc::new(Mutex::new(Ipv6Config::default()))
+ },
+ )?;
+ }
} else if *state == Ncp::Failed {
+ let mut update = false;
+
match *ncp {
Network::Ipv4 if ipv4_active => {
- write_dsconfig(config4.clone(), config6.clone())?;
ipv4_active = false;
+ update = true;
}
Network::Ipv6 if ipv6_active => {
- write_dsconfig(config4.clone(), config6.clone())?;
ipv6_active = false;
+ update = true;
}
_ => {}
}
+
+ if update {
+ write_dsconfig(
+ if ipv4_active {
+ config4.clone()
+ } else {
+ Arc::new(Mutex::new(Ipv4Config::default()))
+ },
+ if ipv6_active {
+ config6.clone()
+ } else {
+ Arc::new(Mutex::new(Ipv6Config::default()))
+ },
+ )?;
+ }
}
}
}