2026-01-23 08:28:56 -05:00
|
|
|
use lazy_static::lazy_static;
|
2026-01-20 14:28:31 -05:00
|
|
|
use log::{debug, error, info};
|
2026-01-19 12:45:52 -05:00
|
|
|
use serde::Deserialize;
|
|
|
|
|
use std::collections::HashMap;
|
|
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
|
#[serde(rename_all = "camelCase")]
|
|
|
|
|
struct MacRecord {
|
|
|
|
|
pub mac_prefix: String,
|
|
|
|
|
pub vendor_name: String,
|
|
|
|
|
// private: bool,
|
|
|
|
|
// block_type: String,
|
|
|
|
|
// last_update: String,
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-20 14:28:31 -05:00
|
|
|
// Initialize mac vendors database as a static lazy loaded unit
|
2026-01-23 08:28:56 -05:00
|
|
|
lazy_static! {
|
|
|
|
|
static ref MAC_VENDORS_DATABASE: HashMap<String, String> = {
|
|
|
|
|
info!("Loading MAC vendor database into memory");
|
2026-01-19 12:45:52 -05:00
|
|
|
|
2026-01-23 08:28:56 -05:00
|
|
|
let mut database = HashMap::new();
|
2026-05-29 13:56:39 -04:00
|
|
|
let data = include_str!("../../data/mac-vendors-export.json");
|
2026-01-23 08:28:56 -05:00
|
|
|
|
2026-05-27 13:48:33 -04:00
|
|
|
let json: Vec<MacRecord> = match serde_json::from_str(data) {
|
2026-01-23 08:28:56 -05:00
|
|
|
Ok(value) => value,
|
|
|
|
|
Err(error) => {
|
|
|
|
|
error!(
|
|
|
|
|
"Error parsing mac vendors database (data/mac-vendors-export.json): {error}"
|
|
|
|
|
);
|
|
|
|
|
panic!(
|
|
|
|
|
"Error parsing mac vendors database (data/mac-vendors-export.json): {error}"
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
debug!("Found {} records in the database", json.len());
|
|
|
|
|
|
|
|
|
|
for el in json {
|
|
|
|
|
database.insert(el.mac_prefix.to_uppercase(), el.vendor_name);
|
2026-01-19 12:45:52 -05:00
|
|
|
}
|
2026-01-23 08:28:56 -05:00
|
|
|
|
|
|
|
|
info!("MAC vendor database loaded");
|
|
|
|
|
database
|
2026-01-20 14:28:31 -05:00
|
|
|
};
|
2026-01-23 08:28:56 -05:00
|
|
|
}
|
2026-01-20 14:28:31 -05:00
|
|
|
|
|
|
|
|
// Find a vendor based on the MAC prefix
|
|
|
|
|
pub fn find(mac_prefix: String) -> String {
|
|
|
|
|
MAC_VENDORS_DATABASE
|
|
|
|
|
.get(&mac_prefix.to_uppercase())
|
|
|
|
|
.unwrap_or(&"".to_string())
|
|
|
|
|
.to_string()
|
2026-01-19 12:45:52 -05:00
|
|
|
}
|