rtnetlink/addr/
del.rs

1// SPDX-License-Identifier: MIT
2
3use futures::stream::StreamExt;
4use netlink_packet_core::{NetlinkMessage, NLM_F_ACK, NLM_F_REQUEST};
5use netlink_packet_route::{AddressMessage, RtnlMessage};
6
7use crate::{try_nl, Error, Handle};
8
9pub struct AddressDelRequest {
10    handle: Handle,
11    message: AddressMessage,
12}
13
14impl AddressDelRequest {
15    pub(crate) fn new(handle: Handle, message: AddressMessage) -> Self {
16        AddressDelRequest { handle, message }
17    }
18
19    /// Execute the request
20    pub async fn execute(self) -> Result<(), Error> {
21        let AddressDelRequest {
22            mut handle,
23            message,
24        } = self;
25
26        let mut req = NetlinkMessage::from(RtnlMessage::DelAddress(message));
27        req.header.flags = NLM_F_REQUEST | NLM_F_ACK;
28        let mut response = handle.request(req)?;
29        while let Some(msg) = response.next().await {
30            try_nl!(msg);
31        }
32        Ok(())
33    }
34
35    pub fn message_mut(&mut self) -> &mut AddressMessage {
36        &mut self.message
37    }
38}