1use 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 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 pub fn message_mut(&mut self) -> &mut LinkMessage {
50 &mut self.message
51 }
52}