in src/bsd.rs [161:179]
fn if_name_mtu(idx: u32) -> Result<(String, Option<usize>)> {
let mut name = [0; libc::IF_NAMESIZE];
// if_indextoname writes into the provided buffer.
if unsafe { if_indextoname(idx, name.as_mut_ptr()).is_null() } {
return Err(Error::last_os_error());
}
// Convert to Rust string.
let name = unsafe {
CStr::from_ptr(name.as_ptr())
.to_str()
.map_err(Error::other)?
};
let mtu = IfAddrs::new()?
.iter()
.find(|ifa| ifa.addr().sa_family == AF_LINK && ifa.name() == name)
.and_then(|ifa| ifa.data())
.and_then(|ifa_data| usize::try_from(ifa_data.ifi_mtu).ok());
Ok((name.to_string(), mtu))
}