flowparser-sflow 0.3.0

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

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Extended80211Payload {
    pub cipher_suite: u32,
    pub data: Vec<u8>,
}

pub(crate) fn parse_extended_80211_payload(
    input: &[u8],
) -> IResult<&[u8], Extended80211Payload> {
    let (input, cipher_suite) = be_u32(input)?;
    let (input, length) = be_u32(input)?;
    let (input, bytes) = take(length as usize)(input)?;
    let padding = (4 - (length as usize % 4)) % 4;
    let (input, _) = take(padding)(input)?;

    Ok((
        input,
        Extended80211Payload {
            cipher_suite,
            data: bytes.to_vec(),
        },
    ))
}