Skip to main content

flowparser_sflow/flow_records/
sampled_ipv4.rs

1use nom::IResult;
2use nom::number::complete::be_u32;
3use serde::{Deserialize, Serialize};
4use std::net::Ipv4Addr;
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct SampledIpv4 {
8    pub length: u32,
9    pub protocol: u32,
10    pub src_ip: Ipv4Addr,
11    pub dst_ip: Ipv4Addr,
12    pub src_port: u32,
13    pub dst_port: u32,
14    pub tcp_flags: u32,
15    pub tos: u32,
16}
17
18pub(crate) fn parse_sampled_ipv4(input: &[u8]) -> IResult<&[u8], SampledIpv4> {
19    let (input, length) = be_u32(input)?;
20    let (input, protocol) = be_u32(input)?;
21    let (input, src_ip_raw) = be_u32(input)?;
22    let (input, dst_ip_raw) = be_u32(input)?;
23    let (input, src_port) = be_u32(input)?;
24    let (input, dst_port) = be_u32(input)?;
25    let (input, tcp_flags) = be_u32(input)?;
26    let (input, tos) = be_u32(input)?;
27
28    Ok((
29        input,
30        SampledIpv4 {
31            length,
32            protocol,
33            src_ip: Ipv4Addr::from(src_ip_raw),
34            dst_ip: Ipv4Addr::from(dst_ip_raw),
35            src_port,
36            dst_port,
37            tcp_flags,
38            tos,
39        },
40    ))
41}