1use crate::net::mac::MacAddr;
2
3pub const KNOWN_VM_MAC_PREFIXES: &[&str] = &[
5 "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", ];
16
17pub const KNOWN_LOOPBACK_MAC_ADDRESSES: &[&str] = &[
19 "00:00:00:00:00:00", "02:00:4C:4F:4F:50", ];
22
23pub fn is_virtual_mac(mac: &MacAddr) -> bool {
27 let mac = mac.address();
28 let prefix = mac[0..8].to_uppercase();
29 KNOWN_VM_MAC_PREFIXES.contains(&prefix.as_str())
30}
31
32pub fn is_known_loopback_mac(mac: &MacAddr) -> bool {
34 let mac = mac.address();
35 KNOWN_LOOPBACK_MAC_ADDRESSES.contains(&mac.to_uppercase().as_str())
36}
37
38#[cfg(test)]
39mod tests {
40 use crate::net::db::oui;
41 use crate::net::mac::MacAddr;
42
43 #[test]
44 fn detects_loopback() {
45 let mac: MacAddr = "00:00:00:00:00:00".parse().unwrap();
46 assert!(oui::is_known_loopback_mac(&mac));
47 }
48
49 #[test]
50 fn detects_virtual() {
51 let mac: MacAddr = "00:50:56:AA:BB:CC".parse().unwrap();
52 assert!(oui::is_virtual_mac(&mac));
53 }
54}