use crate::Result;
use libc::ARPHRD_CAN;
use libudev::{Context, Enumerator};
pub fn available_interfaces() -> Result<Vec<String>> {
let mut interfaces = Vec::new();
if let Ok(context) = Context::new() {
let mut enumerator = Enumerator::new(&context)?;
enumerator.match_subsystem("net")?;
enumerator.match_attribute("type", ARPHRD_CAN.to_string())?;
let devices = enumerator.scan_devices()?;
for d in devices {
if let Some(interface) = d.property_value("INTERFACE") {
if let Some(interface) = interface.to_str() {
interfaces.push(String::from(interface));
}
}
}
}
Ok(interfaces)
}