From f790f59088df6ab287f70c643009c0c57d40033b Mon Sep 17 00:00:00 2001 From: Ryan Summers Date: Mon, 31 May 2021 17:36:26 +0200 Subject: [PATCH] Reverting phy changes --- src/iface/interface.rs | 4 ++++ src/phy/fault_injector.rs | 15 +++++++-------- src/phy/fuzz_injector.rs | 4 ++-- src/phy/loopback.rs | 8 ++++---- src/phy/mod.rs | 4 ++-- src/phy/pcap_writer.rs | 4 ++-- src/phy/raw_socket.rs | 8 ++++---- src/phy/tracer.rs | 6 +++--- src/phy/tuntap_interface.rs | 8 ++++---- 9 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/iface/interface.rs b/src/iface/interface.rs index b8c73d1..791cf6b 100644 --- a/src/iface/interface.rs +++ b/src/iface/interface.rs @@ -635,6 +635,8 @@ impl<'a, DeviceT> Interface<'a, DeviceT> } } } + + Ok(()) }) { Err(err) => net_debug!("Failed to consume RX token: {}", err), Ok(_) => {}, @@ -1601,6 +1603,7 @@ impl<'a> InterfaceInner<'a> { frame.set_src_addr(self.ethernet_addr.unwrap()); f(frame); + Ok(()) }) { Err(err) => net_debug!("Failed to consume TX token: {}", err), Ok(_) => {}, @@ -1776,6 +1779,7 @@ impl<'a> InterfaceInner<'a> { let payload = &mut tx_buffer[ip_repr.buffer_len()..]; packet.emit_payload(ip_repr, payload, &caps); + Ok(()) }) } } diff --git a/src/phy/fault_injector.rs b/src/phy/fault_injector.rs index 6464436..8c2e4aa 100644 --- a/src/phy/fault_injector.rs +++ b/src/phy/fault_injector.rs @@ -242,7 +242,7 @@ pub struct RxToken<'a, Rx: phy::RxToken> { impl<'a, Rx: phy::RxToken> phy::RxToken for RxToken<'a, Rx> { fn consume(self, timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { if self.state.borrow_mut().maybe(self.config.drop_pct) { net_trace!("rx: randomly dropping a packet"); @@ -254,11 +254,10 @@ impl<'a, Rx: phy::RxToken> phy::RxToken for RxToken<'a, Rx> { } let Self { token, config, state, mut corrupt } = self; token.consume(timestamp, |buffer| { - // TODO: Implement this in a new mechanism. Token consumption is infallible. - //if config.max_size > 0 && buffer.as_ref().len() > config.max_size { - // net_trace!("rx: dropping a packet that is too large"); - // return Error::Exhausted - //} + if config.max_size > 0 && buffer.as_ref().len() > config.max_size { + net_trace!("rx: dropping a packet that is too large"); + return Err(Error::Exhausted) + } if state.borrow_mut().maybe(config.corrupt_pct) { net_trace!("rx: randomly corrupting a packet"); let mut corrupt = &mut corrupt[..buffer.len()]; @@ -282,7 +281,7 @@ pub struct TxToken<'a, Tx: phy::TxToken> { impl<'a, Tx: phy::TxToken> phy::TxToken for TxToken<'a, Tx> { fn consume(mut self, timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let drop = if self.state.borrow_mut().maybe(self.config.drop_pct) { net_trace!("tx: randomly dropping a packet"); @@ -298,7 +297,7 @@ impl<'a, Tx: phy::TxToken> phy::TxToken for TxToken<'a, Tx> { }; if drop { - return Ok(f(&mut self.junk[..len])); + return f(&mut self.junk[..len]); } let Self { token, state, config, .. } = self; diff --git a/src/phy/fuzz_injector.rs b/src/phy/fuzz_injector.rs index a5e285b..5e2023b 100644 --- a/src/phy/fuzz_injector.rs +++ b/src/phy/fuzz_injector.rs @@ -86,7 +86,7 @@ pub struct RxToken<'a, Rx: phy::RxToken, F: Fuzzer + 'a>{ impl<'a, Rx: phy::RxToken, FRx: Fuzzer> phy::RxToken for RxToken<'a, Rx, FRx> { fn consume(self, timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let Self { fuzzer, token } = self; token.consume(timestamp, |buffer| { @@ -104,7 +104,7 @@ pub struct TxToken<'a, Tx: phy::TxToken, F: Fuzzer + 'a> { impl<'a, Tx: phy::TxToken, FTx: Fuzzer> phy::TxToken for TxToken<'a, Tx, FTx> { fn consume(self, timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let Self { fuzzer, token } = self; token.consume(timestamp, len, |mut buf| { diff --git a/src/phy/loopback.rs b/src/phy/loopback.rs index f18113f..beeba9f 100644 --- a/src/phy/loopback.rs +++ b/src/phy/loopback.rs @@ -68,9 +68,9 @@ pub struct RxToken { impl phy::RxToken for RxToken { fn consume(mut self, _timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { - Ok(f(&mut self.buffer)) + f(&mut self.buffer) } } @@ -81,12 +81,12 @@ pub struct TxToken<'a> { impl<'a> phy::TxToken for TxToken<'a> { fn consume(self, _timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let mut buffer = Vec::new(); buffer.resize(len, 0); let result = f(&mut buffer); self.queue.push_back(buffer); - Ok(result) + result } } diff --git a/src/phy/mod.rs b/src/phy/mod.rs index 8b3693c..c048677 100644 --- a/src/phy/mod.rs +++ b/src/phy/mod.rs @@ -295,7 +295,7 @@ pub trait RxToken { /// The timestamp must be a number of milliseconds, monotonically increasing since an /// arbitrary moment in time, such as system startup. fn consume(self, timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R; + where F: FnOnce(&mut [u8]) -> Result; } /// A token to transmit a single network packet. @@ -310,5 +310,5 @@ pub trait TxToken { /// The timestamp must be a number of milliseconds, monotonically increasing since an /// arbitrary moment in time, such as system startup. fn consume(self, timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R; + where F: FnOnce(&mut [u8]) -> Result; } diff --git a/src/phy/pcap_writer.rs b/src/phy/pcap_writer.rs index 6518a80..a2226bb 100644 --- a/src/phy/pcap_writer.rs +++ b/src/phy/pcap_writer.rs @@ -178,7 +178,7 @@ pub struct RxToken { } impl phy::RxToken for RxToken { - fn consume R>(self, timestamp: Instant, f: F) -> Result { + fn consume Result>(self, timestamp: Instant, f: F) -> Result { let Self { token, sink, mode } = self; token.consume(timestamp, |buffer| { match mode { @@ -200,7 +200,7 @@ pub struct TxToken { impl phy::TxToken for TxToken { fn consume(self, timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let Self { token, sink, mode } = self; token.consume(timestamp, len, |buffer| { diff --git a/src/phy/raw_socket.rs b/src/phy/raw_socket.rs index bf640b4..b4d4e68 100644 --- a/src/phy/raw_socket.rs +++ b/src/phy/raw_socket.rs @@ -80,9 +80,9 @@ pub struct RxToken { impl phy::RxToken for RxToken { fn consume(mut self, _timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { - Ok(f(&mut self.buffer[..])) + f(&mut self.buffer[..]) } } @@ -93,12 +93,12 @@ pub struct TxToken { impl phy::TxToken for TxToken { fn consume(self, _timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let mut lower = self.lower.borrow_mut(); let mut buffer = vec![0; len]; let result = f(&mut buffer); lower.send(&buffer[..]).unwrap(); - Ok(result) + result } } diff --git a/src/phy/tracer.rs b/src/phy/tracer.rs index c50f8cb..8a5e377 100644 --- a/src/phy/tracer.rs +++ b/src/phy/tracer.rs @@ -77,7 +77,7 @@ pub struct RxToken { impl phy::RxToken for RxToken { fn consume(self, timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let Self { token, writer, medium } = self; token.consume(timestamp, |buffer| { @@ -100,7 +100,7 @@ pub struct TxToken { impl phy::TxToken for TxToken { fn consume(self, timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let Self { token, writer, medium } = self; token.consume(timestamp, len, |buffer| { @@ -137,4 +137,4 @@ impl<'a> fmt::Display for Packet<'a> { } } } -} +} \ No newline at end of file diff --git a/src/phy/tuntap_interface.rs b/src/phy/tuntap_interface.rs index 62ecb8f..cfd4f2d 100644 --- a/src/phy/tuntap_interface.rs +++ b/src/phy/tuntap_interface.rs @@ -83,9 +83,9 @@ pub struct RxToken { impl phy::RxToken for RxToken { fn consume(mut self, _timestamp: Instant, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { - Ok(f(&mut self.buffer[..])) + f(&mut self.buffer[..]) } } @@ -96,12 +96,12 @@ pub struct TxToken { impl phy::TxToken for TxToken { fn consume(self, _timestamp: Instant, len: usize, f: F) -> Result - where F: FnOnce(&mut [u8]) -> R + where F: FnOnce(&mut [u8]) -> Result { let mut lower = self.lower.borrow_mut(); let mut buffer = vec![0; len]; let result = f(&mut buffer); lower.send(&buffer[..]).unwrap(); - Ok(result) + result } }