diff options
-rw-r--r-- | src/main.rs | 42 |
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())) + }, + )?; + } } } } |