rtnetlink/
macros.rs

1// SPDX-License-Identifier: MIT
2
3#[macro_export]
4macro_rules! try_rtnl {
5    ($msg: expr, $message_type:path) => {{
6        use netlink_packet_core::{NetlinkMessage, NetlinkPayload};
7        use netlink_packet_route::RouteNetlinkMessage;
8        use $crate::Error;
9
10        let (header, payload) = $msg.into_parts();
11        match payload {
12            NetlinkPayload::InnerMessage($message_type(msg)) => msg,
13            NetlinkPayload::Error(err) => return Err(Error::NetlinkError(err)),
14            _ => {
15                return Err(Error::UnexpectedMessage(NetlinkMessage::new(
16                    header, payload,
17                )))
18            }
19        }
20    }};
21}
22
23#[macro_export]
24macro_rules! try_nl {
25    ($msg: expr) => {{
26        use netlink_packet_core::NetlinkPayload;
27        use $crate::Error;
28        if let NetlinkPayload::Error(err) = $msg.payload {
29            return Err(Error::NetlinkError(err));
30        }
31    }};
32}