netlink_packet_route/neighbour_table/
config.rs

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_utils::traits::{Emitable, Parseable};
4use netlink_packet_utils::DecodeError;
5
6#[derive(Debug, Clone, Copy, Eq, PartialEq)]
7#[non_exhaustive]
8pub struct NeighbourTableConfig {
9    pub key_len: u16,
10    pub entry_size: u16,
11    pub entries: u32,
12    pub last_flush: u32,
13    pub last_rand: u32,
14    pub hash_rand: u32,
15    pub hash_mask: u32,
16    pub hash_chain_gc: u32,
17    pub proxy_qlen: u32,
18}
19
20pub const CONFIG_LEN: usize = 32;
21
22buffer!(NeighbourTableConfigBuffer(CONFIG_LEN) {
23    key_len: (u16, 0..2),
24    entry_size: (u16, 2..4),
25    entries: (u32, 4..8),
26    last_flush: (u32, 8..12),
27    last_rand: (u32, 12..16),
28    hash_rand: (u32, 16..20),
29    hash_mask: (u32, 20..24),
30    hash_chain_gc: (u32, 24..28),
31    proxy_qlen: (u32, 28..32),
32});
33
34impl<T: AsRef<[u8]>> Parseable<NeighbourTableConfigBuffer<T>> for NeighbourTableConfig {
35    type Error = DecodeError;
36    fn parse(buf: &NeighbourTableConfigBuffer<T>) -> Result<Self, DecodeError> {
37        Ok(Self {
38            key_len: buf.key_len(),
39            entry_size: buf.entry_size(),
40            entries: buf.entries(),
41            last_flush: buf.last_flush(),
42            last_rand: buf.last_rand(),
43            hash_rand: buf.hash_rand(),
44            hash_mask: buf.hash_mask(),
45            hash_chain_gc: buf.hash_chain_gc(),
46            proxy_qlen: buf.proxy_qlen(),
47        })
48    }
49}
50
51impl Emitable for NeighbourTableConfig {
52    fn buffer_len(&self) -> usize {
53        CONFIG_LEN
54    }
55
56    fn emit(&self, buffer: &mut [u8]) {
57        let mut buffer = NeighbourTableConfigBuffer::new(buffer);
58        buffer.set_key_len(self.key_len);
59        buffer.set_entry_size(self.entry_size);
60        buffer.set_entries(self.entries);
61        buffer.set_last_flush(self.last_flush);
62        buffer.set_last_rand(self.last_rand);
63        buffer.set_hash_rand(self.hash_rand);
64        buffer.set_hash_mask(self.hash_mask);
65        buffer.set_hash_chain_gc(self.hash_chain_gc);
66        buffer.set_proxy_qlen(self.proxy_qlen);
67    }
68}