use anyhow::Result;
use nell::{Family, Message, Netlink};
use nell::api::{addr, link, peer, route};
use nell::ffi::*;
use nell::sync::Socket;
use {Family::Route, Netlink::Msg};
fn main() -> Result<()> {
let mut sock = Socket::new(Route)?;
let mut msg = Message::<rtgenmsg>::new(RTM_GETLINK);
msg.set_flags(NLM_F_REQUEST | NLM_F_DUMP);
msg.rtgen_family = AF_UNSPEC;
sock.send(&msg)?;
while let Msg(msg) = sock.recv::<ifinfomsg>()? {
let link = link(msg)?;
println!("{:?}", link);
}
let mut msg = Message::<rtgenmsg>::new(RTM_GETADDR);
msg.set_flags(NLM_F_REQUEST | NLM_F_DUMP);
msg.rtgen_family = AF_UNSPEC;
sock.send(&msg)?;
while let Msg(msg) = sock.recv::<ifaddrmsg>()? {
let addr = addr(msg)?;
println!("{:?}", addr);
}
let mut msg = Message::<rtgenmsg>::new(RTM_GETROUTE);
msg.set_flags(NLM_F_REQUEST | NLM_F_DUMP);
msg.rtgen_family = AF_UNSPEC;
sock.send(&msg)?;
while let Msg(msg) = sock.recv::<rtmsg>()? {
let route = route(msg)?;
println!("{:?}", route);
}
let mut msg = Message::<rtgenmsg>::new(RTM_GETNEIGH);
msg.set_flags(NLM_F_REQUEST | NLM_F_DUMP);
msg.rtgen_family = AF_UNSPEC;
sock.send(&msg)?;
while let Msg(msg) = sock.recv::<ndmsg>()? {
let peer = peer(msg)?;
println!("{:?}", peer);
}
Ok(())
}