rtnetlink/neighbour/
del.rs

1// SPDX-License-Identifier: MIT
2
3use futures::stream::StreamExt;
4
5use netlink_packet_route::{
6    constants::*,
7    neighbour::NeighbourMessage,
8    NetlinkPayload,
9    RtnlMessage,
10};
11
12use netlink_proto::packet::NetlinkMessage;
13
14use crate::{Error, Handle};
15
16pub struct NeighbourDelRequest {
17    handle: Handle,
18    message: NeighbourMessage,
19}
20
21impl NeighbourDelRequest {
22    pub(crate) fn new(handle: Handle, message: NeighbourMessage) -> Self {
23        NeighbourDelRequest { handle, message }
24    }
25
26    /// Execute the request
27    pub async fn execute(self) -> Result<(), Error> {
28        let NeighbourDelRequest {
29            mut handle,
30            message,
31        } = self;
32
33        let mut req = NetlinkMessage::from(RtnlMessage::DelNeighbour(message));
34        req.header.flags = NLM_F_REQUEST | NLM_F_ACK;
35        let mut response = handle.request(req)?;
36        while let Some(msg) = response.next().await {
37            if let NetlinkPayload::Error(e) = msg.payload {
38                return Err(Error::NetlinkError(e));
39            }
40        }
41        Ok(())
42    }
43
44    pub fn message_mut(&mut self) -> &mut NeighbourMessage {
45        &mut self.message
46    }
47}