diff --git a/src/transport/ethernet/addr.rs b/src/transport/ethernet/addr.rs new file mode 100644 index 0000000..677fe68 --- /dev/null +++ b/src/transport/ethernet/addr.rs @@ -0,0 +1,21 @@ +//! Ethernet address parsing. + +use crate::transport::TransportError; + +/// Parse a colon-separated MAC string (e.g., "aa:bb:cc:dd:ee:ff") into bytes. +pub fn parse_mac_string(s: &str) -> Result<[u8; 6], TransportError> { + let parts: Vec<&str> = s.split(':').collect(); + if parts.len() != 6 { + return Err(TransportError::InvalidAddress(format!( + "invalid MAC format: expected 6 colon-separated hex bytes, got '{}'", + s + ))); + } + let mut mac = [0u8; 6]; + for (i, part) in parts.iter().enumerate() { + mac[i] = u8::from_str_radix(part, 16).map_err(|_| { + TransportError::InvalidAddress(format!("invalid hex byte '{}' in MAC address", part)) + })?; + } + Ok(mac) +} diff --git a/src/transport/ethernet/mod.rs b/src/transport/ethernet/mod.rs index 1856669..b5862a2 100644 --- a/src/transport/ethernet/mod.rs +++ b/src/transport/ethernet/mod.rs @@ -5,10 +5,13 @@ //! Works on wired Ethernet and WiFi interfaces (kernel mac80211 abstracts //! 802.11 transparently on Linux). +pub mod addr; pub mod discovery; pub mod io; pub mod stats; +pub use addr::parse_mac_string; + use super::{ DiscoveredPeer, PacketTx, ReceivedPacket, Transport, TransportAddr, TransportError, TransportId, TransportState, TransportType, @@ -632,24 +635,6 @@ pub fn format_mac(mac: &[u8; 6]) -> String { ) } -/// Parse a colon-separated MAC string (e.g., "aa:bb:cc:dd:ee:ff") into bytes. -pub fn parse_mac_string(s: &str) -> Result<[u8; 6], TransportError> { - let parts: Vec<&str> = s.split(':').collect(); - if parts.len() != 6 { - return Err(TransportError::InvalidAddress(format!( - "invalid MAC format: expected 6 colon-separated hex bytes, got '{}'", - s - ))); - } - let mut mac = [0u8; 6]; - for (i, part) in parts.iter().enumerate() { - mac[i] = u8::from_str_radix(part, 16).map_err(|_| { - TransportError::InvalidAddress(format!("invalid hex byte '{}' in MAC address", part)) - })?; - } - Ok(mac) -} - // ============================================================================ // Tests // ============================================================================