netlink_packet_route/rule/
uid_range.rs

1// SPDX-License-Identifier: MIT
2
3use crate::rule::RuleError;
4use netlink_packet_utils::Emitable;
5
6const RULE_UID_RANGE_LEN: usize = 8;
7
8#[derive(Clone, Eq, PartialEq, Debug, Copy)]
9pub struct RuleUidRange {
10    pub start: u32,
11    pub end: u32,
12}
13
14impl RuleUidRange {
15    pub(crate) fn parse(buf: &[u8]) -> Result<Self, RuleError> {
16        if buf.len() == RULE_UID_RANGE_LEN {
17            Ok(Self {
18                start: u32::from_ne_bytes([buf[0], buf[1], buf[2], buf[3]]),
19                end: u32::from_ne_bytes([buf[4], buf[5], buf[6], buf[7]]),
20            })
21        } else {
22            Err(RuleError::ParseUidRange { expected: RULE_UID_RANGE_LEN, got: buf.len() })
23        }
24    }
25}
26
27impl Emitable for RuleUidRange {
28    fn buffer_len(&self) -> usize {
29        RULE_UID_RANGE_LEN
30    }
31
32    fn emit(&self, buffer: &mut [u8]) {
33        buffer[0..4].copy_from_slice(&self.start.to_ne_bytes());
34        buffer[4..8].copy_from_slice(&self.end.to_ne_bytes());
35    }
36}