Skip to content

Commit 4055a19

Browse files
committed
Change mutability of RxToken's consume argument.
This drops the requirement that we can mutate the receive buffer, which is not always te case.
1 parent 125773e commit 4055a19

9 files changed

+26
-22
lines changed

src/phy/fault_injector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ pub struct RxToken<'a> {
274274
impl<'a> phy::RxToken for RxToken<'a> {
275275
fn consume<R, F>(self, f: F) -> R
276276
where
277-
F: FnOnce(&mut [u8]) -> R,
277+
F: FnOnce(&[u8]) -> R,
278278
{
279279
f(self.buf)
280280
}

src/phy/fuzz_injector.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
extern crate alloc;
2+
use alloc::vec::Vec;
3+
14
use crate::phy::{self, Device, DeviceCapabilities};
25
use crate::time::Instant;
36

@@ -92,11 +95,12 @@ pub struct RxToken<'a, Rx: phy::RxToken, F: Fuzzer + 'a> {
9295
impl<'a, Rx: phy::RxToken, FRx: Fuzzer> phy::RxToken for RxToken<'a, Rx, FRx> {
9396
fn consume<R, F>(self, f: F) -> R
9497
where
95-
F: FnOnce(&mut [u8]) -> R,
98+
F: FnOnce(&[u8]) -> R,
9699
{
97100
self.token.consume(|buffer| {
98-
self.fuzzer.fuzz_packet(buffer);
99-
f(buffer)
101+
let mut new_buffer: Vec<u8> = buffer.to_vec();
102+
self.fuzzer.fuzz_packet(&mut new_buffer);
103+
f(&mut new_buffer)
100104
})
101105
}
102106

src/phy/loopback.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ pub struct RxToken {
6161
}
6262

6363
impl phy::RxToken for RxToken {
64-
fn consume<R, F>(mut self, f: F) -> R
64+
fn consume<R, F>(self, f: F) -> R
6565
where
66-
F: FnOnce(&mut [u8]) -> R,
66+
F: FnOnce(&[u8]) -> R,
6767
{
68-
f(&mut self.buffer)
68+
f(&self.buffer)
6969
}
7070
}
7171

src/phy/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ impl phy::Device for StmPhy {
6262
struct StmPhyRxToken<'a>(&'a mut [u8]);
6363
6464
impl<'a> phy::RxToken for StmPhyRxToken<'a> {
65-
fn consume<R, F>(mut self, f: F) -> R
66-
where F: FnOnce(&mut [u8]) -> R
65+
fn consume<R, F>(self, f: F) -> R
66+
where F: FnOnce(& [u8]) -> R
6767
{
6868
// TODO: receive packet into buffer
69-
let result = f(&mut self.0);
69+
let result = f(&self.0);
7070
println!("rx called");
7171
result
7272
}
@@ -372,7 +372,7 @@ pub trait RxToken {
372372
/// packet bytes as argument.
373373
fn consume<R, F>(self, f: F) -> R
374374
where
375-
F: FnOnce(&mut [u8]) -> R;
375+
F: FnOnce(&[u8]) -> R;
376376

377377
/// The Packet ID associated with the frame received by this [`RxToken`]
378378
fn meta(&self) -> PacketMeta {

src/phy/pcap_writer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ pub struct RxToken<'a, Rx: phy::RxToken, S: PcapSink> {
219219
}
220220

221221
impl<'a, Rx: phy::RxToken, S: PcapSink> phy::RxToken for RxToken<'a, Rx, S> {
222-
fn consume<R, F: FnOnce(&mut [u8]) -> R>(self, f: F) -> R {
222+
fn consume<R, F: FnOnce(&[u8]) -> R>(self, f: F) -> R {
223223
self.token.consume(|buffer| {
224224
match self.mode {
225225
PcapMode::Both | PcapMode::RxOnly => self

src/phy/raw_socket.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@ pub struct RxToken {
104104
}
105105

106106
impl phy::RxToken for RxToken {
107-
fn consume<R, F>(mut self, f: F) -> R
107+
fn consume<R, F>(self, f: F) -> R
108108
where
109-
F: FnOnce(&mut [u8]) -> R,
109+
F: FnOnce(&[u8]) -> R,
110110
{
111-
f(&mut self.buffer[..])
111+
f(&self.buffer[..])
112112
}
113113
}
114114

src/phy/tracer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ pub struct RxToken<Rx: phy::RxToken> {
9494
impl<Rx: phy::RxToken> phy::RxToken for RxToken<Rx> {
9595
fn consume<R, F>(self, f: F) -> R
9696
where
97-
F: FnOnce(&mut [u8]) -> R,
97+
F: FnOnce(&[u8]) -> R,
9898
{
9999
self.token.consume(|buffer| {
100100
(self.writer)(

src/phy/tuntap_interface.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ pub struct RxToken {
9393
}
9494

9595
impl phy::RxToken for RxToken {
96-
fn consume<R, F>(mut self, f: F) -> R
96+
fn consume<R, F>(self, f: F) -> R
9797
where
98-
F: FnOnce(&mut [u8]) -> R,
98+
F: FnOnce(&[u8]) -> R,
9999
{
100-
f(&mut self.buffer[..])
100+
f(&self.buffer[..])
101101
}
102102
}
103103

src/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ pub struct RxToken {
120120
}
121121

122122
impl phy::RxToken for RxToken {
123-
fn consume<R, F>(mut self, f: F) -> R
123+
fn consume<R, F>(self, f: F) -> R
124124
where
125-
F: FnOnce(&mut [u8]) -> R,
125+
F: FnOnce(&[u8]) -> R,
126126
{
127-
f(&mut self.buffer)
127+
f(&self.buffer)
128128
}
129129
}
130130

0 commit comments

Comments
 (0)