From 5aeea9b619cbdc3776a23aa5a1c6547d42c7f427 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Fri, 16 Aug 2019 22:00:48 +0200 Subject: Begin drafting cross-platform interface --- src/platform/mod.rs | 2 ++ src/platform/tun.rs | 10 ++++++++++ src/platform/udp.rs | 11 +++++++++++ 3 files changed, 23 insertions(+) create mode 100644 src/platform/mod.rs create mode 100644 src/platform/tun.rs create mode 100644 src/platform/udp.rs (limited to 'src/platform') diff --git a/src/platform/mod.rs b/src/platform/mod.rs new file mode 100644 index 0000000..46f712a --- /dev/null +++ b/src/platform/mod.rs @@ -0,0 +1,2 @@ +mod tun; +mod udp; diff --git a/src/platform/tun.rs b/src/platform/tun.rs new file mode 100644 index 0000000..45fd591 --- /dev/null +++ b/src/platform/tun.rs @@ -0,0 +1,10 @@ +use std::sync::atomic::AtomicUsize; +use std::sync::Arc; + +pub trait Tun: Send + Sync { + type Error; + + fn new(mtu: Arc) -> Self; + fn read(&self, dst: &mut [u8]) -> Result; + fn write(&self, src: &[u8]) -> Result<(), Self::Error>; +} diff --git a/src/platform/udp.rs b/src/platform/udp.rs new file mode 100644 index 0000000..f21a3d3 --- /dev/null +++ b/src/platform/udp.rs @@ -0,0 +1,11 @@ +/* Often times an a file descriptor in an atomic might suffice. + */ +pub trait Bind: Send + Sync { + type Error; + + fn new() -> Self; + fn set_port(&self, port: u16) -> Result<(), Self::Error>; + fn get_port(&self) -> u16; + fn recv(&self, dst: &mut [u8]) -> Endpoint; + fn send(&self, src: &[u8], dst: &Endpoint); +} -- cgit v1.2.3-59-g8ed1b