Skip to main content

flowparser_sflow/flow_records/
extended_socket_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 ExtendedSocketIpv4 {
8    pub protocol: u32,
9    pub local_ip: Ipv4Addr,
10    pub remote_ip: Ipv4Addr,
11    pub local_port: u32,
12    pub remote_port: u32,
13}
14
15pub(crate) fn parse_extended_socket_ipv4(input: &[u8]) -> IResult<&[u8], ExtendedSocketIpv4> {
16    let (input, protocol) = be_u32(input)?;
17    let (input, local_ip_raw) = be_u32(input)?;
18    let (input, remote_ip_raw) = be_u32(input)?;
19    let (input, local_port) = be_u32(input)?;
20    let (input, remote_port) = be_u32(input)?;
21
22    Ok((
23        input,
24        ExtendedSocketIpv4 {
25            protocol,
26            local_ip: Ipv4Addr::from(local_ip_raw),
27            remote_ip: Ipv4Addr::from(remote_ip_raw),
28            local_port,
29            remote_port,
30        },
31    ))
32}