Skip to main content

Module icmp

Module icmp 

Source
Available on crate feature icmp only.
Expand description

Passive ICMPv4 / ICMPv6 message parsing (plan 76).

IcmpParser is the integration point — a DatagramParser impl yielding a typed IcmpMessage stream. Pair it with the typed crate::driver::Driver (via datagram_on_ports), crate::pcap::datagram_messages, or netring’s datagram_stream.

The killer feature for network monitoring is IcmpInner: ICMP error messages (Destination Unreachable, Time Exceeded, Redirect, Packet Too Big, Parameter Problem) embed the original IP header + first 8 bytes of L4 payload. flowscope extracts the (src, dst, proto, src_port, dst_port) into IcmpInner so consumers can correlate the error back to the specific TCP/UDP flow it references — no separate lookup needed.

§Quick start (stateless message parsing)

use flowscope::icmp::{parse_v4, Icmpv4Type, IcmpType};

let payload: &[u8] = b"";  // your ICMPv4 L4 payload
match parse_v4(payload) {
    Ok(msg) => match msg.ty {
        IcmpType::V4(Icmpv4Type::EchoRequest { id, seq }) => {
            println!("ping id={id} seq={seq}");
        }
        _ => {}
    },
    Err(_) => {}  // malformed — ignore
}

§Scope

  • Decoded v4 types: EchoReply, EchoRequest, Destination Unreachable, Redirect, Time Exceeded, Parameter Problem, Timestamp / TimestampReply. Other types surface as Icmpv4Type::Other { raw_type, raw_code, raw_body } with the on-wire bytes preserved.
  • Decoded v6 types: EchoRequest, EchoReply, Destination Unreachable, Packet Too Big, Time Exceeded, Parameter Problem, Neighbor Solicitation, Neighbor Advertisement. Other types (Router Solicitation / Router Advertisement / Redirect / MLD) surface as Icmpv6Type::Other.
  • Embedded packet (IcmpInner): IP version detection, src/dst, protocol number, TCP/UDP src+dst ports. Anything malformed in the embed returns None (best-effort, never panics).

§Convenience accessors

§IcmpMessage

MethodReturnsNotes
is_errorbooltrue for Unreachable / Time Exceeded / Redirect / Parameter Problem
error_innerOption<(&str, &IcmpInner)>embedded (src, dst, proto, sport, dport)
short_kind&'static strlabel suitable for metric vocab

§IcmpType

MethodReturnsNotes
is_errorboolmirror of IcmpMessage::is_error
error_innerOption<(&str, &IcmpInner)>mirror
short_kind&'static strmirror

Re-exports§

pub use types::*;

Modules§

types
Type definitions for parsed ICMPv4 / ICMPv6 messages.

Structs§

IcmpParser
Stateless DatagramParser over ICMPv4 + ICMPv6 traffic.

Constants§

PARSER_KIND
Slug returned by IcmpParser’s parser_kind() — the ParserKind::Icmp slug.

Functions§

parse_v4
Parse a raw ICMPv4 payload into an IcmpMessage.
parse_v6
Parse a raw ICMPv6 payload into an IcmpMessage.