use crate::net::mac::MacAddr;
pub const KNOWN_VM_MAC_PREFIXES: &[&str] = &[
"00:05:69", "00:0C:29", "00:1C:14", "00:50:56", "00:03:FF", "00:1C:42", "00:0F:4B", "00:16:3E", "08:00:27", "02:42:AC", ];
pub const KNOWN_LOOPBACK_MAC_ADDRESSES: &[&str] = &[
"00:00:00:00:00:00", "02:00:4C:4F:4F:50", ];
pub fn is_virtual_mac(mac: &MacAddr) -> bool {
let mac = mac.address();
let prefix = mac[0..8].to_uppercase();
KNOWN_VM_MAC_PREFIXES.contains(&prefix.as_str())
}
pub fn is_known_loopback_mac(mac: &MacAddr) -> bool {
let mac = mac.address();
KNOWN_LOOPBACK_MAC_ADDRESSES.contains(&mac.to_uppercase().as_str())
}
#[cfg(test)]
mod tests {
use crate::net::db::oui;
use crate::net::mac::MacAddr;
#[test]
fn detects_loopback() {
let mac: MacAddr = "00:00:00:00:00:00".parse().unwrap();
assert!(oui::is_known_loopback_mac(&mac));
}
#[test]
fn detects_virtual() {
let mac: MacAddr = "00:50:56:AA:BB:CC".parse().unwrap();
assert!(oui::is_virtual_mac(&mac));
}
}