rtnetlink/link/
del.rs

1// SPDX-License-Identifier: MIT
2
3use futures::stream::StreamExt;
4
5use crate::{
6    packet::{
7        LinkMessage,
8        NetlinkMessage,
9        RtnlMessage,
10        NLM_F_ACK,
11        NLM_F_CREATE,
12        NLM_F_EXCL,
13        NLM_F_REQUEST,
14    },
15    try_nl,
16    Error,
17    Handle,
18};
19
20pub struct LinkDelRequest {
21    handle: Handle,
22    message: LinkMessage,
23}
24
25impl LinkDelRequest {
26    pub(crate) fn new(handle: Handle, index: u32) -> Self {
27        let mut message = LinkMessage::default();
28        message.header.index = index;
29        LinkDelRequest { handle, message }
30    }
31
32    /// Execute the request
33    pub async fn execute(self) -> Result<(), Error> {
34        let LinkDelRequest {
35            mut handle,
36            message,
37        } = self;
38        let mut req = NetlinkMessage::from(RtnlMessage::DelLink(message));
39        req.header.flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE;
40
41        let mut response = handle.request(req)?;
42        while let Some(message) = response.next().await {
43            try_nl!(message)
44        }
45        Ok(())
46    }
47
48    /// Return a mutable reference to the request
49    pub fn message_mut(&mut self) -> &mut LinkMessage {
50        &mut self.message
51    }
52}