netlink_packet_route/nsid/
header.rs
1use netlink_packet_utils::nla::{NlaBuffer, NlaError, NlasIterator};
4use netlink_packet_utils::{DecodeError, Emitable, Parseable};
5
6use crate::AddressFamily;
7
8const NSID_HEADER_LEN: usize = 4;
9
10buffer!(NsidMessageBuffer(NSID_HEADER_LEN) {
11 family: (u8, 0),
12 payload: (slice, NSID_HEADER_LEN..),
13});
14
15impl<'a, T: AsRef<[u8]> + ?Sized> NsidMessageBuffer<&'a T> {
16 pub fn attributes(&self) -> impl Iterator<Item = Result<NlaBuffer<&'a [u8]>, NlaError>> {
17 NlasIterator::new(self.payload())
18 }
19}
20
21#[derive(Debug, PartialEq, Eq, Clone, Default)]
22pub struct NsidHeader {
23 pub family: AddressFamily,
24}
25
26impl Emitable for NsidHeader {
27 fn buffer_len(&self) -> usize {
28 NSID_HEADER_LEN
29 }
30
31 fn emit(&self, buffer: &mut [u8]) {
32 let mut packet = NsidMessageBuffer::new(buffer);
33 packet.set_family(self.family.into());
34 }
35}
36
37impl<T: AsRef<[u8]>> Parseable<NsidMessageBuffer<T>> for NsidHeader {
38 type Error = ();
39 fn parse(buf: &NsidMessageBuffer<T>) -> Result<Self, ()> {
40 Ok(NsidHeader { family: buf.family().into() })
41 }
42}