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 returnsNone(best-effort, never panics).
§Convenience accessors
§IcmpMessage
| Method | Returns | Notes |
|---|---|---|
is_error | bool | true for Unreachable / Time Exceeded / Redirect / Parameter Problem |
error_inner | Option<(&str, &IcmpInner)> | embedded (src, dst, proto, sport, dport) |
short_kind | &'static str | label suitable for metric vocab |
§IcmpType
| Method | Returns | Notes |
|---|---|---|
is_error | bool | mirror of IcmpMessage::is_error |
error_inner | Option<(&str, &IcmpInner)> | mirror |
short_kind | &'static str | mirror |
Re-exports§
pub use types::*;
Modules§
- types
- Type definitions for parsed ICMPv4 / ICMPv6 messages.
Structs§
- Icmp
Parser - Stateless
DatagramParserover ICMPv4 + ICMPv6 traffic.
Constants§
- PARSER_
KIND - Slug returned by
IcmpParser’sparser_kind()— theParserKind::Icmpslug.
Functions§
- parse_
v4 - Parse a raw ICMPv4 payload into an
IcmpMessage. - parse_
v6 - Parse a raw ICMPv6 payload into an
IcmpMessage.