use std::convert::TryFrom;
use crate::{MacAddress, Message};
use crate::api::IFLA;
use crate::err::Invalid;
use crate::ffi::*;
#[derive(Default, Debug)]
pub struct Link {
pub index: u32,
pub name: String,
pub flags: u32,
pub mac: MacAddress,
pub mtu: u32,
}
pub fn link(msg: &Message<ifinfomsg>) -> Result<Link, Invalid> {
let mut link = Link::default();
link.index = msg.ifi_index as u32;
link.flags = msg.ifi_flags as u32;
for attr in msg.attrs() {
match attr? {
IFLA::Address(octets) => link.mac = MacAddress::try_from(octets)?,
IFLA::IFName(name) => link.name = name.to_string(),
IFLA::MTU(mtu) => link.mtu = mtu,
_ => (),
}
}
Ok(link)
}