1use futures::stream::StreamExt;
4
5use crate::{
6 packet::{NetlinkMessage, NetlinkPayload, RouteMessage, RtnlMessage, NLM_F_ACK, NLM_F_REQUEST},
7 Error,
8 Handle,
9};
10
11pub struct RouteDelRequest {
12 handle: Handle,
13 message: RouteMessage,
14}
15
16impl RouteDelRequest {
17 pub(crate) fn new(handle: Handle, message: RouteMessage) -> Self {
18 RouteDelRequest { handle, message }
19 }
20
21 pub async fn execute(self) -> Result<(), Error> {
23 let RouteDelRequest {
24 mut handle,
25 message,
26 } = self;
27
28 let mut req = NetlinkMessage::from(RtnlMessage::DelRoute(message));
29 req.header.flags = NLM_F_REQUEST | NLM_F_ACK;
30 let mut response = handle.request(req)?;
31 while let Some(msg) = response.next().await {
32 if let NetlinkPayload::Error(e) = msg.payload {
33 return Err(Error::NetlinkError(e));
34 }
35 }
36 Ok(())
37 }
38
39 pub fn message_mut(&mut self) -> &mut RouteMessage {
40 &mut self.message
41 }
42}