netlink_packet_route/prefix/
header.rs1use netlink_packet_core::{DecodeError, Emitable, NlaBuffer, NlasIterator};
4
5const PREFIX_HEADER_LEN: usize = 12;
6
7buffer!(PrefixMessageBuffer(PREFIX_HEADER_LEN) {
8 prefix_family: (u8, 0),
9 pad1: (u8, 1),
10 pad2: (u16, 2..4),
11 ifindex: (i32, 4..8),
12 prefix_type: (u8, 8),
13 prefix_len: (u8, 9),
14 flags: (u8, 10),
15 pad3: (u8, 11),
16 payload: (slice, PREFIX_HEADER_LEN..),
17});
18
19impl<'a, T: AsRef<[u8]> + ?Sized> PrefixMessageBuffer<&'a T> {
20 pub fn nlas(
21 &self,
22 ) -> impl Iterator<Item = Result<NlaBuffer<&'a [u8]>, DecodeError>> {
23 NlasIterator::new(self.payload())
24 }
25}
26
27#[derive(Debug, PartialEq, Eq, Clone, Default)]
28pub struct PrefixHeader {
29 pub prefix_family: u8,
30 pub ifindex: i32,
31 pub prefix_type: u8,
32 pub prefix_len: u8,
33 pub flags: u8,
34}
35
36impl Emitable for PrefixHeader {
37 fn buffer_len(&self) -> usize {
38 PREFIX_HEADER_LEN
39 }
40
41 fn emit(&self, buffer: &mut [u8]) {
42 let mut packet = PrefixMessageBuffer::new(buffer);
43 packet.set_prefix_family(self.prefix_family);
44 packet.set_ifindex(self.ifindex);
45 packet.set_prefix_type(self.prefix_type);
46 packet.set_prefix_len(self.prefix_len);
47 packet.set_flags(self.flags);
48 }
49}