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