pub trait InnerIcmpContext<I, BC>: IpSocketHandler<I, BC>where
I: IpLayerIpExt,
BC: IcmpBindingsTypes,{
type EchoTransportContext: IpTransportContext<I, BC, Self> + EchoTransportContextMarker;
// Required method
fn receive_icmp_error(
&mut self,
bindings_ctx: &mut BC,
device: &Self::DeviceId,
original_src_ip: Option<SpecifiedAddr<I::Addr>>,
original_dst_ip: SpecifiedAddr<I::Addr>,
original_proto: I::Proto,
original_body: &[u8],
err: I::ErrorCode,
);
}Expand description
The execution context shared by ICMP(v4) and ICMPv6 for the internal operations of the IP stack.
Required Associated Types§
Sourcetype EchoTransportContext: IpTransportContext<I, BC, Self> + EchoTransportContextMarker
type EchoTransportContext: IpTransportContext<I, BC, Self> + EchoTransportContextMarker
A type implementing IpTransportContext that handles ICMP Echo
replies.
Required Methods§
Sourcefn receive_icmp_error(
&mut self,
bindings_ctx: &mut BC,
device: &Self::DeviceId,
original_src_ip: Option<SpecifiedAddr<I::Addr>>,
original_dst_ip: SpecifiedAddr<I::Addr>,
original_proto: I::Proto,
original_body: &[u8],
err: I::ErrorCode,
)
fn receive_icmp_error( &mut self, bindings_ctx: &mut BC, device: &Self::DeviceId, original_src_ip: Option<SpecifiedAddr<I::Addr>>, original_dst_ip: SpecifiedAddr<I::Addr>, original_proto: I::Proto, original_body: &[u8], err: I::ErrorCode, )
Receives an ICMP error message and demultiplexes it to a transport layer protocol.
All arguments beginning with original_ are fields from the IP packet
that triggered the error. The original_body is provided here so that
the error can be associated with a transport-layer socket. device
identifies the device on which the packet was received.
While ICMPv4 error messages are supposed to contain the first 8 bytes of
the body of the offending packet, and ICMPv6 error messages are supposed
to contain as much of the offending packet as possible without violating
the IPv6 minimum MTU, the caller does NOT guarantee that either of these
hold. It is receive_icmp_error’s responsibility to handle any length
of original_body, and to perform any necessary validation.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.