flowparser_sflow/flow_records/
raw_packet_header.rs1use nom::IResult;
2use nom::bytes::complete::take;
3use nom::number::complete::be_u32;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct RawPacketHeader {
8 pub header_protocol: u32,
9 pub frame_length: u32,
10 pub stripped: u32,
11 pub header_length: u32,
12 pub header: Vec<u8>,
13}
14
15pub(crate) fn parse_raw_packet_header(input: &[u8]) -> IResult<&[u8], RawPacketHeader> {
16 let (input, header_protocol) = be_u32(input)?;
17 let (input, frame_length) = be_u32(input)?;
18 let (input, stripped) = be_u32(input)?;
19 let (input, header_length) = be_u32(input)?;
20 let (input, header) = take(header_length as usize)(input)?;
21 let padding = (4 - (header_length as usize % 4)) % 4;
23 let (input, _) = take(padding)(input)?;
24
25 Ok((
26 input,
27 RawPacketHeader {
28 header_protocol,
29 frame_length,
30 stripped,
31 header_length,
32 header: header.to_vec(),
33 },
34 ))
35}