1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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)
}