flowparser-sflow 0.3.0

Parser for sFlow v5 datagrams
Documentation
use nom::IResult;
use nom::number::complete::be_u32;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EthernetInterface {
    pub dot3_stats_alignment_errors: u32,
    pub dot3_stats_fcs_errors: u32,
    pub dot3_stats_single_collision_frames: u32,
    pub dot3_stats_multiple_collision_frames: u32,
    pub dot3_stats_sqe_test_errors: u32,
    pub dot3_stats_deferred_transmissions: u32,
    pub dot3_stats_late_collisions: u32,
    pub dot3_stats_excessive_collisions: u32,
    pub dot3_stats_internal_mac_transmit_errors: u32,
    pub dot3_stats_carrier_sense_errors: u32,
    pub dot3_stats_frame_too_longs: u32,
    pub dot3_stats_internal_mac_receive_errors: u32,
    pub dot3_stats_symbol_errors: u32,
}

pub(crate) fn parse_ethernet_interface(input: &[u8]) -> IResult<&[u8], EthernetInterface> {
    let (input, dot3_stats_alignment_errors) = be_u32(input)?;
    let (input, dot3_stats_fcs_errors) = be_u32(input)?;
    let (input, dot3_stats_single_collision_frames) = be_u32(input)?;
    let (input, dot3_stats_multiple_collision_frames) = be_u32(input)?;
    let (input, dot3_stats_sqe_test_errors) = be_u32(input)?;
    let (input, dot3_stats_deferred_transmissions) = be_u32(input)?;
    let (input, dot3_stats_late_collisions) = be_u32(input)?;
    let (input, dot3_stats_excessive_collisions) = be_u32(input)?;
    let (input, dot3_stats_internal_mac_transmit_errors) = be_u32(input)?;
    let (input, dot3_stats_carrier_sense_errors) = be_u32(input)?;
    let (input, dot3_stats_frame_too_longs) = be_u32(input)?;
    let (input, dot3_stats_internal_mac_receive_errors) = be_u32(input)?;
    let (input, dot3_stats_symbol_errors) = be_u32(input)?;

    Ok((
        input,
        EthernetInterface {
            dot3_stats_alignment_errors,
            dot3_stats_fcs_errors,
            dot3_stats_single_collision_frames,
            dot3_stats_multiple_collision_frames,
            dot3_stats_sqe_test_errors,
            dot3_stats_deferred_transmissions,
            dot3_stats_late_collisions,
            dot3_stats_excessive_collisions,
            dot3_stats_internal_mac_transmit_errors,
            dot3_stats_carrier_sense_errors,
            dot3_stats_frame_too_longs,
            dot3_stats_internal_mac_receive_errors,
            dot3_stats_symbol_errors,
        },
    ))
}