rtnetlink/route/
handle.rs

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_route::route::RouteMessage;
4
5use crate::{Handle, RouteAddRequest, RouteDelRequest, RouteGetRequest};
6
7#[derive(Debug, Clone)]
8pub struct RouteHandle(Handle);
9
10impl RouteHandle {
11    pub fn new(handle: Handle) -> Self {
12        RouteHandle(handle)
13    }
14
15    /// Retrieve the list of routing table entries (equivalent to `ip route
16    /// show`)
17    /// The `RouteMessage` could be built by [crate::RouteMessageBuilder].
18    /// In order to perform kernel side filter, please enable
19    /// `NETLINK_GET_STRICT_CHK` via
20    /// `rtnetlink::sys::Socket::set_netlink_get_strict_chk(true)`.
21    pub fn get(&self, route: RouteMessage) -> RouteGetRequest {
22        RouteGetRequest::new(self.0.clone(), route)
23    }
24
25    /// Add an routing table entry (equivalent to `ip route add`)
26    /// The `RouteMessage` could be built by [crate::RouteMessageBuilder].
27    pub fn add(&self, route: RouteMessage) -> RouteAddRequest {
28        RouteAddRequest::new(self.0.clone(), route)
29    }
30
31    /// Delete the given routing table entry (equivalent to `ip route del`)
32    /// The `RouteMessage` could be built by [crate::RouteMessageBuilder].
33    pub fn del(&self, route: RouteMessage) -> RouteDelRequest {
34        RouteDelRequest::new(self.0.clone(), route)
35    }
36}