diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-11-27 16:59:54 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-11-27 16:59:54 +0100 |
commit | 04f507556baf2336a613cb684ec98f2cdf519163 (patch) | |
tree | 4b7c88b000615e63bc7e5846930e6a36a461a108 /src/main.rs | |
parent | Enable up/down from configuration interface (diff) | |
download | wireguard-rs-04f507556baf2336a613cb684ec98f2cdf519163.tar.xz wireguard-rs-04f507556baf2336a613cb684ec98f2cdf519163.zip |
Work on netlink IF event code for Linux
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs index 1a9650b..5ea830f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ fn main() { let mut foreground = false; let mut args = env::args(); - args.next(); // skip path + args.next(); // skip path (argv[0]) for arg in args { match arg.as_str() { @@ -56,7 +56,7 @@ fn main() { }); // create TUN device - let (readers, writer, status) = plt::Tun::create(name.as_str()).unwrap_or_else(|e| { + let (mut readers, writer, status) = plt::Tun::create(name.as_str()).unwrap_or_else(|e| { eprintln!("Failed to create TUN device: {}", e); exit(-3); }); @@ -82,7 +82,15 @@ fn main() { if drop_privileges {} // create WireGuard device - let wg: wireguard::Wireguard<plt::Tun, plt::UDP> = wireguard::Wireguard::new(readers, writer); + let wg: wireguard::Wireguard<plt::Tun, plt::UDP> = wireguard::Wireguard::new(writer); + + // add all Tun readers + while let Some(reader) = readers.pop() { + wg.add_tun_reader(reader); + } + + // obtain handle for waiting + let wait = wg.wait(); // wrap in configuration interface let cfg = configuration::WireguardConfig::new(wg); @@ -124,7 +132,7 @@ fn main() { } // start UAPI server - loop { + thread::spawn(move || loop { match uapi.connect() { Ok(mut stream) => { let cfg = cfg.clone(); @@ -137,5 +145,8 @@ fn main() { break; } } - } + }); + + // block until all tun readers closed + wait.wait(); } |