flowparser-sflow 0.3.0

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

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VgCounters {
    pub in_high_priority_frames: u32,
    pub in_high_priority_octets: u64,
    pub in_norm_priority_frames: u32,
    pub in_norm_priority_octets: u64,
    pub in_ipm_errors: u32,
    pub in_oversize_frame_errors: u32,
    pub in_data_errors: u32,
    pub in_null_addressed_frames: u32,
    pub out_high_priority_frames: u32,
    pub out_high_priority_octets: u64,
    pub out_norm_priority_frames: u32,
    pub out_norm_priority_octets: u64,
    pub in_hc_high_priority_octets: u64,
    pub in_hc_norm_priority_octets: u64,
    pub out_hc_high_priority_octets: u64,
    pub out_hc_norm_priority_octets: u64,
}

pub(crate) fn parse_vg_counters(input: &[u8]) -> IResult<&[u8], VgCounters> {
    let (input, in_high_priority_frames) = be_u32(input)?;
    let (input, in_high_priority_octets) = be_u64(input)?;
    let (input, in_norm_priority_frames) = be_u32(input)?;
    let (input, in_norm_priority_octets) = be_u64(input)?;
    let (input, in_ipm_errors) = be_u32(input)?;
    let (input, in_oversize_frame_errors) = be_u32(input)?;
    let (input, in_data_errors) = be_u32(input)?;
    let (input, in_null_addressed_frames) = be_u32(input)?;
    let (input, out_high_priority_frames) = be_u32(input)?;
    let (input, out_high_priority_octets) = be_u64(input)?;
    let (input, out_norm_priority_frames) = be_u32(input)?;
    let (input, out_norm_priority_octets) = be_u64(input)?;
    let (input, in_hc_high_priority_octets) = be_u64(input)?;
    let (input, in_hc_norm_priority_octets) = be_u64(input)?;
    let (input, out_hc_high_priority_octets) = be_u64(input)?;
    let (input, out_hc_norm_priority_octets) = be_u64(input)?;

    Ok((
        input,
        VgCounters {
            in_high_priority_frames,
            in_high_priority_octets,
            in_norm_priority_frames,
            in_norm_priority_octets,
            in_ipm_errors,
            in_oversize_frame_errors,
            in_data_errors,
            in_null_addressed_frames,
            out_high_priority_frames,
            out_high_priority_octets,
            out_norm_priority_frames,
            out_norm_priority_octets,
            in_hc_high_priority_octets,
            in_hc_norm_priority_octets,
            out_hc_high_priority_octets,
            out_hc_norm_priority_octets,
        },
    ))
}