From aabefa50436af8d614520bb219d675953eeba6eb Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Sat, 21 Dec 2019 00:17:31 +0100 Subject: Remove unused test code. - make naming consistent with the kernel module. - better distribution of functionality from src/wireguard.rs - more consistent "import pattern" throughout the project. - remove unused test code. --- src/platform/dummy/bind.rs | 224 --------------------------------------------- src/platform/dummy/mod.rs | 4 +- src/platform/dummy/tun.rs | 75 +++++++-------- src/platform/dummy/udp.rs | 201 ++++++++++++++++++++++++++++++++++++++++ src/platform/linux/tun.rs | 2 +- 5 files changed, 236 insertions(+), 270 deletions(-) delete mode 100644 src/platform/dummy/bind.rs create mode 100644 src/platform/dummy/udp.rs (limited to 'src/platform') diff --git a/src/platform/dummy/bind.rs b/src/platform/dummy/bind.rs deleted file mode 100644 index 3146af8..0000000 --- a/src/platform/dummy/bind.rs +++ /dev/null @@ -1,224 +0,0 @@ -use hex; -use std::error::Error; -use std::fmt; -use std::marker; - -use log::debug; -use rand::rngs::OsRng; -use rand::Rng; - -use std::sync::mpsc::{sync_channel, Receiver, SyncSender}; -use std::sync::Arc; -use std::sync::Mutex; - -use super::super::udp::*; - -use super::UnitEndpoint; - -pub struct VoidOwner {} - -#[derive(Debug)] -pub enum BindError { - Disconnected, -} - -impl Error for BindError { - fn description(&self) -> &str { - "Generic Bind Error" - } - - fn source(&self) -> Option<&(dyn Error + 'static)> { - None - } -} - -impl fmt::Display for BindError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - BindError::Disconnected => write!(f, "PairBind disconnected"), - } - } -} - -/* TUN implementation */ - -#[derive(Debug)] -pub enum TunError { - Disconnected, -} - -impl Error for TunError { - fn description(&self) -> &str { - "Generic Tun Error" - } - - fn source(&self) -> Option<&(dyn Error + 'static)> { - None - } -} - -impl fmt::Display for TunError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "Not Possible") - } -} - -#[derive(Clone, Copy)] -pub struct VoidBind {} - -impl Reader for VoidBind { - type Error = BindError; - - fn read(&self, _buf: &mut [u8]) -> Result<(usize, UnitEndpoint), Self::Error> { - Ok((0, UnitEndpoint {})) - } -} - -impl Writer for VoidBind { - type Error = BindError; - - fn write(&self, _buf: &[u8], _dst: &UnitEndpoint) -> Result<(), Self::Error> { - Ok(()) - } -} - -impl UDP for VoidBind { - type Error = BindError; - type Endpoint = UnitEndpoint; - - type Reader = VoidBind; - type Writer = VoidBind; -} - -impl VoidBind { - pub fn new() -> VoidBind { - VoidBind {} - } -} - -/* Pair Bind */ - -#[derive(Clone)] -pub struct PairReader { - id: u32, - recv: Arc>>>, - _marker: marker::PhantomData, -} - -impl Reader for PairReader { - type Error = BindError; - fn read(&self, buf: &mut [u8]) -> Result<(usize, UnitEndpoint), Self::Error> { - let vec = self - .recv - .lock() - .unwrap() - .recv() - .map_err(|_| BindError::Disconnected)?; - let len = vec.len(); - buf[..len].copy_from_slice(&vec[..]); - debug!( - "dummy({}): read ({}, {})", - self.id, - len, - hex::encode(&buf[..len]) - ); - Ok((len, UnitEndpoint {})) - } -} - -impl Writer for PairWriter { - type Error = BindError; - fn write(&self, buf: &[u8], _dst: &UnitEndpoint) -> Result<(), Self::Error> { - debug!( - "dummy({}): write ({}, {})", - self.id, - buf.len(), - hex::encode(buf) - ); - let owned = buf.to_owned(); - match self.send.lock().unwrap().send(owned) { - Err(_) => Err(BindError::Disconnected), - Ok(_) => Ok(()), - } - } -} - -#[derive(Clone)] -pub struct PairWriter { - id: u32, - send: Arc>>>, - _marker: marker::PhantomData, -} - -#[derive(Clone)] -pub struct PairBind {} - -impl PairBind { - pub fn pair() -> ( - (PairReader, PairWriter), - (PairReader, PairWriter), - ) { - let mut rng = OsRng::new().unwrap(); - let id1: u32 = rng.gen(); - let id2: u32 = rng.gen(); - - let (tx1, rx1) = sync_channel(128); - let (tx2, rx2) = sync_channel(128); - ( - ( - PairReader { - id: id1, - recv: Arc::new(Mutex::new(rx1)), - _marker: marker::PhantomData, - }, - PairWriter { - id: id1, - send: Arc::new(Mutex::new(tx2)), - _marker: marker::PhantomData, - }, - ), - ( - PairReader { - id: id2, - recv: Arc::new(Mutex::new(rx2)), - _marker: marker::PhantomData, - }, - PairWriter { - id: id2, - send: Arc::new(Mutex::new(tx1)), - _marker: marker::PhantomData, - }, - ), - ) - } -} - -impl UDP for PairBind { - type Error = BindError; - type Endpoint = UnitEndpoint; - type Reader = PairReader; - type Writer = PairWriter; -} - -impl Owner for VoidOwner { - type Error = BindError; - - fn set_fwmark(&mut self, _value: Option) -> Result<(), Self::Error> { - Ok(()) - } - - fn get_port(&self) -> u16 { - 0 - } - - fn get_fwmark(&self) -> Option { - None - } -} - -impl PlatformUDP for PairBind { - type Owner = VoidOwner; - fn bind(_port: u16) -> Result<(Vec, Self::Writer, Self::Owner), Self::Error> { - Err(BindError::Disconnected) - } -} diff --git a/src/platform/dummy/mod.rs b/src/platform/dummy/mod.rs index 884bd7e..2d2e7c6 100644 --- a/src/platform/dummy/mod.rs +++ b/src/platform/dummy/mod.rs @@ -1,4 +1,4 @@ -mod bind; +mod udp; mod endpoint; mod tun; @@ -8,6 +8,6 @@ mod tun; * the configuration interface and the UAPI parser. */ -pub use bind::*; pub use endpoint::*; pub use tun::*; +pub use udp::*; diff --git a/src/platform/dummy/tun.rs b/src/platform/dummy/tun.rs index 50c6654..9836b48 100644 --- a/src/platform/dummy/tun.rs +++ b/src/platform/dummy/tun.rs @@ -13,38 +13,51 @@ use std::time::Duration; use super::super::tun::*; -/* This submodule provides pure/dummy implementations of the IO interfaces - * for use in unit tests thoughout the project. - */ - -/* Error implementation */ - #[derive(Debug)] -pub enum BindError { +pub enum TunError { Disconnected, } -impl Error for BindError { - fn description(&self) -> &str { - "Generic Bind Error" +pub struct TunTest {} + +pub struct TunFakeIO { + id: u32, + store: bool, + tx: SyncSender>, + rx: Receiver>, +} + +pub struct TunReader { + id: u32, + rx: Receiver>, +} + +pub struct TunWriter { + id: u32, + store: bool, + tx: Mutex>>, +} + +impl fmt::Display for TunFakeIO { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "FakeIO({})", self.id) } +} - fn source(&self) -> Option<&(dyn Error + 'static)> { - None +impl fmt::Display for TunReader { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "TunReader({})", self.id) } } -impl fmt::Display for BindError { +impl fmt::Display for TunWriter { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - BindError::Disconnected => write!(f, "PairBind disconnected"), - } + write!(f, "TunWriter({})", self.id) } } -#[derive(Debug)] -pub enum TunError { - Disconnected, +pub struct TunStatus { + first: bool, } impl Error for TunError { @@ -63,30 +76,6 @@ impl fmt::Display for TunError { } } -pub struct TunTest {} - -pub struct TunFakeIO { - id: u32, - store: bool, - tx: SyncSender>, - rx: Receiver>, -} - -pub struct TunReader { - id: u32, - rx: Receiver>, -} - -pub struct TunWriter { - id: u32, - store: bool, - tx: Mutex>>, -} - -pub struct TunStatus { - first: bool, -} - impl Reader for TunReader { type Error = TunError; diff --git a/src/platform/dummy/udp.rs b/src/platform/dummy/udp.rs new file mode 100644 index 0000000..35c905d --- /dev/null +++ b/src/platform/dummy/udp.rs @@ -0,0 +1,201 @@ +use hex; +use std::error::Error; +use std::fmt; +use std::marker; + +use log::debug; +use rand::rngs::OsRng; +use rand::Rng; + +use std::sync::mpsc::{sync_channel, Receiver, SyncSender}; +use std::sync::Arc; +use std::sync::Mutex; + +use super::super::udp::*; + +use super::UnitEndpoint; + +pub struct VoidOwner {} + +#[derive(Debug)] +pub enum BindError { + Disconnected, +} + +impl Error for BindError { + fn description(&self) -> &str { + "Generic Bind Error" + } + + fn source(&self) -> Option<&(dyn Error + 'static)> { + None + } +} + +impl fmt::Display for BindError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + BindError::Disconnected => write!(f, "PairBind disconnected"), + } + } +} + +#[derive(Clone, Copy)] +pub struct VoidBind {} + +impl Reader for VoidBind { + type Error = BindError; + + fn read(&self, _buf: &mut [u8]) -> Result<(usize, UnitEndpoint), Self::Error> { + Ok((0, UnitEndpoint {})) + } +} + +impl Writer for VoidBind { + type Error = BindError; + + fn write(&self, _buf: &[u8], _dst: &UnitEndpoint) -> Result<(), Self::Error> { + Ok(()) + } +} + +impl UDP for VoidBind { + type Error = BindError; + type Endpoint = UnitEndpoint; + + type Reader = VoidBind; + type Writer = VoidBind; +} + +impl VoidBind { + pub fn new() -> VoidBind { + VoidBind {} + } +} + +/* Pair Bind */ + +#[derive(Clone)] +pub struct PairReader { + id: u32, + recv: Arc>>>, + _marker: marker::PhantomData, +} + +impl Reader for PairReader { + type Error = BindError; + fn read(&self, buf: &mut [u8]) -> Result<(usize, UnitEndpoint), Self::Error> { + let vec = self + .recv + .lock() + .unwrap() + .recv() + .map_err(|_| BindError::Disconnected)?; + let len = vec.len(); + buf[..len].copy_from_slice(&vec[..]); + debug!( + "dummy({}): read ({}, {})", + self.id, + len, + hex::encode(&buf[..len]) + ); + Ok((len, UnitEndpoint {})) + } +} + +impl Writer for PairWriter { + type Error = BindError; + fn write(&self, buf: &[u8], _dst: &UnitEndpoint) -> Result<(), Self::Error> { + debug!( + "dummy({}): write ({}, {})", + self.id, + buf.len(), + hex::encode(buf) + ); + let owned = buf.to_owned(); + match self.send.lock().unwrap().send(owned) { + Err(_) => Err(BindError::Disconnected), + Ok(_) => Ok(()), + } + } +} + +#[derive(Clone)] +pub struct PairWriter { + id: u32, + send: Arc>>>, + _marker: marker::PhantomData, +} + +#[derive(Clone)] +pub struct PairBind {} + +impl PairBind { + pub fn pair() -> ( + (PairReader, PairWriter), + (PairReader, PairWriter), + ) { + let mut rng = OsRng::new().unwrap(); + let id1: u32 = rng.gen(); + let id2: u32 = rng.gen(); + + let (tx1, rx1) = sync_channel(128); + let (tx2, rx2) = sync_channel(128); + ( + ( + PairReader { + id: id1, + recv: Arc::new(Mutex::new(rx1)), + _marker: marker::PhantomData, + }, + PairWriter { + id: id1, + send: Arc::new(Mutex::new(tx2)), + _marker: marker::PhantomData, + }, + ), + ( + PairReader { + id: id2, + recv: Arc::new(Mutex::new(rx2)), + _marker: marker::PhantomData, + }, + PairWriter { + id: id2, + send: Arc::new(Mutex::new(tx1)), + _marker: marker::PhantomData, + }, + ), + ) + } +} + +impl UDP for PairBind { + type Error = BindError; + type Endpoint = UnitEndpoint; + type Reader = PairReader; + type Writer = PairWriter; +} + +impl Owner for VoidOwner { + type Error = BindError; + + fn set_fwmark(&mut self, _value: Option) -> Result<(), Self::Error> { + Ok(()) + } + + fn get_port(&self) -> u16 { + 0 + } + + fn get_fwmark(&self) -> Option { + None + } +} + +impl PlatformUDP for PairBind { + type Owner = VoidOwner; + fn bind(_port: u16) -> Result<(Vec, Self::Writer, Self::Owner), Self::Error> { + Err(BindError::Disconnected) + } +} diff --git a/src/platform/linux/tun.rs b/src/platform/linux/tun.rs index 3c98c34..9ccda86 100644 --- a/src/platform/linux/tun.rs +++ b/src/platform/linux/tun.rs @@ -299,7 +299,7 @@ impl LinuxTunStatus { Err(LinuxTunError::Closed) } else { Ok(LinuxTunStatus { - events: vec![], + events: vec![TunEvent::Up(1500)], index: get_ifindex(&name), fd, name, -- cgit v1.2.3-59-g8ed1b