Skip to main content

flowparser_sflow/counter_records/
generic_interface.rs

1use nom::IResult;
2use nom::number::complete::{be_u32, be_u64};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6pub struct GenericInterface {
7    pub if_index: u32,
8    pub if_type: u32,
9    pub if_speed: u64,
10    pub if_direction: u32,
11    pub if_status: u32,
12    pub if_in_octets: u64,
13    pub if_in_ucast_pkts: u32,
14    pub if_in_multicast_pkts: u32,
15    pub if_in_broadcast_pkts: u32,
16    pub if_in_discards: u32,
17    pub if_in_errors: u32,
18    pub if_in_unknown_protos: u32,
19    pub if_out_octets: u64,
20    pub if_out_ucast_pkts: u32,
21    pub if_out_multicast_pkts: u32,
22    pub if_out_broadcast_pkts: u32,
23    pub if_out_discards: u32,
24    pub if_out_errors: u32,
25    pub if_promiscuous_mode: u32,
26}
27
28pub(crate) fn parse_generic_interface(input: &[u8]) -> IResult<&[u8], GenericInterface> {
29    let (input, if_index) = be_u32(input)?;
30    let (input, if_type) = be_u32(input)?;
31    let (input, if_speed) = be_u64(input)?;
32    let (input, if_direction) = be_u32(input)?;
33    let (input, if_status) = be_u32(input)?;
34    let (input, if_in_octets) = be_u64(input)?;
35    let (input, if_in_ucast_pkts) = be_u32(input)?;
36    let (input, if_in_multicast_pkts) = be_u32(input)?;
37    let (input, if_in_broadcast_pkts) = be_u32(input)?;
38    let (input, if_in_discards) = be_u32(input)?;
39    let (input, if_in_errors) = be_u32(input)?;
40    let (input, if_in_unknown_protos) = be_u32(input)?;
41    let (input, if_out_octets) = be_u64(input)?;
42    let (input, if_out_ucast_pkts) = be_u32(input)?;
43    let (input, if_out_multicast_pkts) = be_u32(input)?;
44    let (input, if_out_broadcast_pkts) = be_u32(input)?;
45    let (input, if_out_discards) = be_u32(input)?;
46    let (input, if_out_errors) = be_u32(input)?;
47    let (input, if_promiscuous_mode) = be_u32(input)?;
48
49    Ok((
50        input,
51        GenericInterface {
52            if_index,
53            if_type,
54            if_speed,
55            if_direction,
56            if_status,
57            if_in_octets,
58            if_in_ucast_pkts,
59            if_in_multicast_pkts,
60            if_in_broadcast_pkts,
61            if_in_discards,
62            if_in_errors,
63            if_in_unknown_protos,
64            if_out_octets,
65            if_out_ucast_pkts,
66            if_out_multicast_pkts,
67            if_out_broadcast_pkts,
68            if_out_discards,
69            if_out_errors,
70            if_promiscuous_mode,
71        },
72    ))
73}