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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#![cfg(any(feature = "audit", feature = "rtnetlink"))]

#[macro_use]
extern crate futures;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate log;

mod codecs;
pub use crate::codecs::*;

mod framed;
pub use crate::framed::*;

mod connection;
pub use crate::connection::*;

mod errors;
pub use crate::errors::*;

mod handle;
pub use crate::handle::*;

mod request;
pub(crate) use crate::request::Request;

use netlink_packet::NetlinkMessage;
pub use netlink_sys::{Protocol, SocketAddr};

use futures::sync::mpsc::{unbounded, UnboundedReceiver};
use std::io;

pub fn new_connection(
    protocol: Protocol,
) -> io::Result<(
    Connection,
    ConnectionHandle,
    UnboundedReceiver<NetlinkMessage>,
)> {
    let (requests_tx, requests_rx) = unbounded::<Request>();
    let (messages_tx, messages_rx) = unbounded::<NetlinkMessage>();
    Ok((
        Connection::new(requests_rx, messages_tx, protocol)?,
        ConnectionHandle::new(requests_tx),
        messages_rx,
    ))
}