netlink_packet_route/rtnl/neighbour_table/nlas/
config.rs1use crate::{
4 traits::{Emitable, Parseable},
5 DecodeError,
6};
7
8#[derive(Debug, Clone, Copy, Eq, PartialEq)]
9pub struct Config {
10 pub key_len: u16,
11 pub entry_size: u16,
12 pub entries: u32,
13 pub last_flush: u32,
14 pub last_rand: u32,
15 pub hash_rand: u32,
16 pub hash_mask: u32,
17 pub hash_chain_gc: u32,
18 pub proxy_qlen: u32,
19}
20
21pub const CONFIG_LEN: usize = 32;
22
23buffer!(ConfigBuffer(CONFIG_LEN) {
24 key_len: (u16, 0..2),
25 entry_size: (u16, 2..4),
26 entries: (u32, 4..8),
27 last_flush: (u32, 8..12),
28 last_rand: (u32, 12..16),
29 hash_rand: (u32, 16..20),
30 hash_mask: (u32, 20..24),
31 hash_chain_gc: (u32, 24..28),
32 proxy_qlen: (u32, 28..32),
33});
34
35impl<T: AsRef<[u8]>> Parseable<ConfigBuffer<T>> for Config {
36 fn parse(buf: &ConfigBuffer<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 Config {
52 fn buffer_len(&self) -> usize {
53 CONFIG_LEN
54 }
55
56 fn emit(&self, buffer: &mut [u8]) {
57 let mut buffer = ConfigBuffer::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}