summaryrefslogtreecommitdiffstats
path: root/src/configuration
diff options
context:
space:
mode:
Diffstat (limited to 'src/configuration')
-rw-r--r--src/configuration/config.rs19
-rw-r--r--src/configuration/uapi/get.rs3
-rw-r--r--src/configuration/uapi/mod.rs1
3 files changed, 10 insertions, 13 deletions
diff --git a/src/configuration/config.rs b/src/configuration/config.rs
index aec943f..59cef4a 100644
--- a/src/configuration/config.rs
+++ b/src/configuration/config.rs
@@ -1,3 +1,4 @@
+use std::mem;
use std::net::{IpAddr, SocketAddr};
use std::sync::atomic::Ordering;
use std::sync::{Arc, Mutex, MutexGuard};
@@ -205,7 +206,7 @@ impl<T: tun::Tun, B: udp::PlatformUDP> Configuration for WireGuardConfig<T, B> {
}
fn get_fwmark(&self) -> Option<u32> {
- self.lock().bind.as_ref().and_then(|own| own.get_fwmark())
+ self.lock().fwmark
}
fn set_private_key(&self, sk: Option<StaticSecret>) {
@@ -266,24 +267,22 @@ impl<T: tun::Tun, B: udp::PlatformUDP> Configuration for WireGuardConfig<T, B> {
fn set_listen_port(&self, port: u16) -> Result<(), ConfigError> {
log::trace!("Config, Set listen port: {:?}", port);
- // update port
- let listen: bool = {
+ // update port and take old bind
+ let old: Option<B::Owner> = {
let mut cfg = self.lock();
+ let old = mem::replace(&mut cfg.bind, None);
cfg.port = port;
- if cfg.bind.is_some() {
- cfg.bind = None;
- true
- } else {
- false
- }
+ old
};
// restart listener if bound
- if listen {
+ if old.is_some() {
self.start_listener()
} else {
Ok(())
}
+
+ // old bind is dropped, causing the file-descriptors to be released
}
fn set_fwmark(&self, mark: Option<u32>) -> Result<(), ConfigError> {
diff --git a/src/configuration/uapi/get.rs b/src/configuration/uapi/get.rs
index 9e6ab36..00048cd 100644
--- a/src/configuration/uapi/get.rs
+++ b/src/configuration/uapi/get.rs
@@ -2,7 +2,6 @@ use log;
use std::io;
use super::Configuration;
-use super::Endpoint;
pub fn serialize<C: Configuration, W: io::Write>(writer: &mut W, config: &C) -> io::Result<()> {
let mut write = |key: &'static str, value: String| {
@@ -46,7 +45,7 @@ pub fn serialize<C: Configuration, W: io::Write>(writer: &mut W, config: &C) ->
}
if let Some(endpoint) = p.endpoint {
- write("endpoint", endpoint.into_address().to_string())?;
+ write("endpoint", endpoint.to_string())?;
}
for (ip, cidr) in p.allowed_ips {
diff --git a/src/configuration/uapi/mod.rs b/src/configuration/uapi/mod.rs
index 4f0b741..9f54775 100644
--- a/src/configuration/uapi/mod.rs
+++ b/src/configuration/uapi/mod.rs
@@ -4,7 +4,6 @@ mod set;
use log;
use std::io::{Read, Write};
-use super::Endpoint;
use super::{ConfigError, Configuration};
use get::serialize;