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}