From a08fd4002bfae92072f64f8d5e0084e6f248f139 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Sun, 13 Oct 2019 22:26:12 +0200 Subject: Work on Linux platform code --- src/platform/mod.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/platform/mod.rs (limited to 'src/platform/mod.rs') diff --git a/src/platform/mod.rs b/src/platform/mod.rs new file mode 100644 index 0000000..e83384c --- /dev/null +++ b/src/platform/mod.rs @@ -0,0 +1,36 @@ +use std::error::Error; + +use super::wireguard::bind::Bind; +use super::wireguard::tun::Tun; + +#[cfg(target_os = "linux")] +mod linux; + +#[cfg(target_os = "linux")] +pub use linux::PlatformTun; + +/* Syntax is nasty here, due to open issue: + * https://github.com/rust-lang/rust/issues/38078 + */ +pub trait UDPBind { + type Closer; + type Error: Error; + type Bind: Bind; + + /// Bind to a new port, returning the reader/writer and + /// an associated instance of the Closer type, which closes the UDP socket upon "drop". + fn bind( + port: u16, + ) -> Result< + ( + <::Bind as Bind>::Reader, + <::Bind as Bind>::Writer, + Self::Closer, + ), + Self::Error, + >; +} + +pub trait TunBind: Tun { + fn create(name: &str) -> Result<(Vec, Self::Writer, Self::MTU), Self::Error>; +} -- cgit v1.2.3-59-g8ed1b