netlink_packet_route/link/
map.rs1use netlink_packet_core::{DecodeError, Emitable, Parseable};
4
5const LINK_MAP_LEN: usize = 32;
6
7buffer!(MapBuffer(LINK_MAP_LEN) {
8 memory_start: (u64, 0..8),
9 memory_end: (u64, 8..16),
10 base_address: (u64, 16..24),
11 irq: (u16, 24..26),
12 dma: (u8, 26),
13 port: (u8, 27),
14});
15
16#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
17#[non_exhaustive]
18pub struct Map {
19 pub memory_start: u64,
20 pub memory_end: u64,
21 pub base_address: u64,
22 pub irq: u16,
23 pub dma: u8,
24 pub port: u8,
25}
26
27impl<T: AsRef<[u8]>> Parseable<MapBuffer<T>> for Map {
28 fn parse(buf: &MapBuffer<T>) -> Result<Self, DecodeError> {
29 Ok(Self {
30 memory_start: buf.memory_start(),
31 memory_end: buf.memory_end(),
32 base_address: buf.base_address(),
33 irq: buf.irq(),
34 dma: buf.dma(),
35 port: buf.port(),
36 })
37 }
38}
39
40impl Emitable for Map {
41 fn buffer_len(&self) -> usize {
42 LINK_MAP_LEN
43 }
44
45 fn emit(&self, buffer: &mut [u8]) {
46 let mut buffer = MapBuffer::new(buffer);
47 buffer.set_memory_start(self.memory_start);
48 buffer.set_memory_end(self.memory_end);
49 buffer.set_base_address(self.base_address);
50 buffer.set_irq(self.irq);
51 buffer.set_dma(self.dma);
52 buffer.set_port(self.port);
53 }
54}