flowparser_sflow/flow_records/
sampled_ipv4.rs1use 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}