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 ExtendedVlanTunnel {
    pub stack: Vec<u32>,
}

pub(crate) fn parse_extended_vlan_tunnel(input: &[u8]) -> IResult<&[u8], ExtendedVlanTunnel> {
    let (input, count) = be_u32(input)?;
    let cap = (count as usize).min(input.len() / 4);
    let mut stack = Vec::with_capacity(cap);
    let mut input = input;
    for _ in 0..count {
        let (rest, val) = be_u32(input)?;
        stack.push(val);
        input = rest;
    }

    Ok((input, ExtendedVlanTunnel { stack }))
}