rtnetlink/addr/
del.rs

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