Browse Source

Fix length of tx buffers returned by fault injector.

whitequark 8 years ago
parent
commit
1c7f972a86
5 changed files with 15 additions and 13 deletions
  1. 8 6
      src/phy/fault_injector.rs
  2. 1 1
      src/phy/mod.rs
  3. 2 2
      src/phy/raw_socket.rs
  4. 2 2
      src/phy/tap_interface.rs
  5. 2 2
      src/phy/tracer.rs

+ 8 - 6
src/phy/fault_injector.rs

@@ -119,19 +119,20 @@ impl<T: Device> Device for FaultInjector<T>
         Ok(buffer)
     }
 
-    fn transmit(&mut self, len: usize) -> Result<Self::TxBuffer, Error> {
+    fn transmit(&mut self, length: usize) -> Result<Self::TxBuffer, Error> {
         let buffer;
         if check_rng(&mut self.state, self.config.drop_pct) {
             net_trace!("rx: dropping a packet");
             buffer = None;
         } else {
-            buffer = Some(try!(self.lower.transmit(len)));
+            buffer = Some(try!(self.lower.transmit(length)));
         }
         Ok(TxBuffer {
             buffer: buffer,
             state:  xorshift32(&mut self.state),
             config: self.config,
-            junk:   [0; MTU]
+            junk:   [0; MTU],
+            length: length
         })
     }
 }
@@ -141,7 +142,8 @@ pub struct TxBuffer<T: AsRef<[u8]> + AsMut<[u8]>> {
     state:  u32,
     config: Config,
     buffer: Option<T>,
-    junk:   [u8; MTU]
+    junk:   [u8; MTU],
+    length: usize
 }
 
 impl<T: AsRef<[u8]> + AsMut<[u8]>> AsRef<[u8]>
@@ -149,7 +151,7 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> AsRef<[u8]>
     fn as_ref(&self) -> &[u8] {
         match self.buffer {
             Some(ref buf) => buf.as_ref(),
-            None => &self.junk[..]
+            None => &self.junk[..self.length]
         }
     }
 }
@@ -159,7 +161,7 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> AsMut<[u8]>
     fn as_mut(&mut self) -> &mut [u8] {
         match self.buffer {
             Some(ref mut buf) => buf.as_mut(),
-            None => &mut self.junk[..]
+            None => &mut self.junk[..self.length]
         }
     }
 }

+ 1 - 1
src/phy/mod.rs

@@ -51,5 +51,5 @@ pub trait Device {
     /// It is expected that a `transmit` implementation would gain ownership of a buffer with
     /// the requested length, provide it for emission, and schedule it to be read from
     /// memory by the network device once it is dropped.
-    fn transmit(&mut self, len: usize) -> Result<Self::TxBuffer, Error>;
+    fn transmit(&mut self, length: usize) -> Result<Self::TxBuffer, Error>;
 }

+ 2 - 2
src/phy/raw_socket.rs

@@ -43,10 +43,10 @@ impl Device for RawSocket {
         Ok(buffer)
     }
 
-    fn transmit(&mut self, len: usize) -> Result<Self::TxBuffer, Error> {
+    fn transmit(&mut self, length: usize) -> Result<Self::TxBuffer, Error> {
         Ok(TxBuffer {
             lower:  self.lower.clone(),
-            buffer: vec![0; len]
+            buffer: vec![0; length]
         })
     }
 }

+ 2 - 2
src/phy/tap_interface.rs

@@ -43,10 +43,10 @@ impl Device for TapInterface {
         Ok(buffer)
     }
 
-    fn transmit(&mut self, len: usize) -> Result<Self::TxBuffer, Error> {
+    fn transmit(&mut self, length: usize) -> Result<Self::TxBuffer, Error> {
         Ok(TxBuffer {
             lower:  self.lower.clone(),
-            buffer: vec![0; len]
+            buffer: vec![0; length]
         })
     }
 }

+ 2 - 2
src/phy/tracer.rs

@@ -51,8 +51,8 @@ impl<T: Device, U: PrettyPrint> Device for Tracer<T, U> {
         Ok(buffer)
     }
 
-    fn transmit(&mut self, len: usize) -> Result<Self::TxBuffer, Error> {
-        let buffer = try!(self.lower.transmit(len));
+    fn transmit(&mut self, length: usize) -> Result<Self::TxBuffer, Error> {
+        let buffer = try!(self.lower.transmit(length));
         Ok(TxBuffer {
             buffer:  buffer,
             writer:  self.writer