fn if_name_mtu()

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))
}