ソースを参照

Make packet dumps emitted for broken packets more useful.

Before this commit, only the outermost frame (the Ethernet one)
would be shown, which is really no help at all.
whitequark 7 年 前
コミット
30012cc3b1
3 ファイル変更4 行追加20 行削除
  1. 3 10
      src/iface/ethernet.rs
  2. 1 1
      src/lib.rs
  3. 0 9
      src/macros.rs

+ 3 - 10
src/iface/ethernet.rs

@@ -6,6 +6,7 @@ use managed::ManagedSlice;
 
 use {Error, Result};
 use phy::{Device, DeviceCapabilities, RxToken, TxToken};
+use wire::pretty_print::PrettyPrinter;
 use wire::{EthernetAddress, EthernetProtocol, EthernetFrame};
 use wire::{Ipv4Address};
 use wire::{IpAddress, IpProtocol, IpRepr, IpCidr};
@@ -181,16 +182,8 @@ impl<'b, 'c, DeviceT> Interface<'b, 'c, DeviceT>
             let dispatch_result = rx_token.consume(timestamp, |frame| {
                 let response = inner.process_ethernet(sockets, timestamp, &frame).map_err(|err| {
                     net_debug!("cannot process ingress packet: {}", err);
-                    if net_log_enabled!(debug) {
-                        match EthernetFrame::new_checked(frame.as_ref()) {
-                            Err(_) => {
-                                net_debug!("packet dump follows:\n{:?}", frame.as_ref());
-                            }
-                            Ok(frame) => {
-                                net_debug!("packet dump follows:\n{}", frame);
-                            }
-                        }
-                    }
+                    net_debug!("packet dump follows:\n{}",
+                               PrettyPrinter::<EthernetFrame<&[u8]>>::new("", &frame));
                     err
                 })?;
                 processed_any = true;

+ 1 - 1
src/lib.rs

@@ -84,7 +84,7 @@ extern crate libc;
 #[cfg(feature = "alloc")]
 extern crate alloc;
 #[cfg(any(test, feature = "log"))]
-#[macro_use(log, log_enabled, trace, debug)]
+#[macro_use(log, trace, debug)]
 extern crate log;
 
 use core::fmt;

+ 0 - 9
src/macros.rs

@@ -1,11 +1,6 @@
 #[cfg(feature = "log")]
 #[macro_use]
 mod log {
-    macro_rules! net_log_enabled {
-        (trace) => (log_enabled!($crate::log::LogLevel::Trace));
-        (debug) => (log_enabled!($crate::log::LogLevel::Debug));
-    }
-
     macro_rules! net_log {
         (trace, $($arg:expr),*) => { trace!($($arg),*); };
         (debug, $($arg:expr),*) => { debug!($($arg),*); };
@@ -15,10 +10,6 @@ mod log {
 #[cfg(not(feature = "log"))]
 #[macro_use]
 mod log {
-    macro_rules! net_log_enabled {
-        ($level:ident) => (false);
-    }
-
     macro_rules! net_log {
         ($level:ident, $($arg:expr),*) => { $( let _ = $arg; )* }
     }