rtnetlink/
connection.rs

1// SPDX-License-Identifier: MIT
2
3use std::io;
4
5use futures::channel::mpsc::UnboundedReceiver;
6use netlink_packet_core::NetlinkMessage;
7use netlink_packet_route::RtnlMessage;
8use netlink_proto::Connection;
9use netlink_sys::{protocols::NETLINK_ROUTE, AsyncSocket, SocketAddr};
10
11use crate::Handle;
12
13#[cfg(feature = "tokio_socket")]
14#[allow(clippy::type_complexity)]
15pub fn new_connection() -> io::Result<(
16    Connection<RtnlMessage>,
17    Handle,
18    UnboundedReceiver<(NetlinkMessage<RtnlMessage>, SocketAddr)>,
19)> {
20    new_connection_with_socket()
21}
22
23#[allow(clippy::type_complexity)]
24pub fn new_connection_with_socket<S>() -> io::Result<(
25    Connection<RtnlMessage, S>,
26    Handle,
27    UnboundedReceiver<(NetlinkMessage<RtnlMessage>, SocketAddr)>,
28)>
29where
30    S: AsyncSocket,
31{
32    let (conn, handle, messages) =
33        netlink_proto::new_connection_with_socket(NETLINK_ROUTE)?;
34    Ok((conn, Handle::new(handle), messages))
35}