use core::net::IpAddr;
use std::{
io,
net::{Ipv4Addr, Ipv6Addr},
};
use super::interfaces;
fn interface_not_found_for_ip() -> io::Error {
io::Error::new(io::ErrorKind::Other, "interface not found")
}
pub fn get_ip_mtu(ip: IpAddr) -> io::Result<u32> {
interfaces().and_then(|ifis| {
for iface in ifis {
match iface.addrs_by_filter(|addr| ip.eq(addr)) {
Ok(addrs) => {
if !addrs.is_empty() {
return Ok(iface.mtu());
}
}
Err(_) => continue,
}
}
Err(interface_not_found_for_ip())
})
}
pub fn get_ipv4_mtu(ip: Ipv4Addr) -> io::Result<u32> {
interfaces().and_then(|ifis| {
for iface in ifis {
match iface.ipv4_addrs_by_filter(|addr| ip.eq(addr)) {
Ok(addrs) => {
if !addrs.is_empty() {
return Ok(iface.mtu());
}
}
Err(_) => continue,
}
}
Err(interface_not_found_for_ip())
})
}
pub fn get_ipv6_mtu(ip: Ipv6Addr) -> io::Result<u32> {
interfaces().and_then(|ifis| {
for iface in ifis {
match iface.ipv6_addrs_by_filter(|addr| ip.eq(addr)) {
Ok(addrs) => {
if !addrs.is_empty() {
return Ok(iface.mtu());
}
}
Err(_) => continue,
}
}
Err(interface_not_found_for_ip())
})
}