pub struct IcmpEchoSocketApi<I: Ip, C>(/* private fields */);
Expand description
The ICMP Echo sockets API.
Implementations§
Source§impl<I: Ip, C> IcmpEchoSocketApi<I, C>
impl<I: Ip, C> IcmpEchoSocketApi<I, C>
Source§impl<I, C> IcmpEchoSocketApi<I, C>where
I: IpExt,
C: ContextPair,
C::CoreContext: IcmpEchoStateContext<I, C::BindingsContext> + DatagramStateContext<I, C::BindingsContext, Icmp<C::BindingsContext>>,
C::BindingsContext: IcmpEchoBindingsContext<I, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>,
impl<I, C> IcmpEchoSocketApi<I, C>where
I: IpExt,
C: ContextPair,
C::CoreContext: IcmpEchoStateContext<I, C::BindingsContext> + DatagramStateContext<I, C::BindingsContext, Icmp<C::BindingsContext>>,
C::BindingsContext: IcmpEchoBindingsContext<I, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>,
Sourcepub fn create(
&mut self,
) -> IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>
pub fn create( &mut self, ) -> IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>
Creates a new unbound ICMP socket with default external data.
Sourcepub fn create_with(
&mut self,
external_data: <C::BindingsContext as IcmpEchoBindingsTypes>::ExternalData<I>,
) -> IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>
pub fn create_with( &mut self, external_data: <C::BindingsContext as IcmpEchoBindingsTypes>::ExternalData<I>, ) -> IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>
Creates a new unbound ICMP socket with provided external data.
Sourcepub fn connect(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
remote_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>,
remote_id: u16,
) -> Result<(), ConnectError>
pub fn connect( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, remote_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>, remote_id: u16, ) -> Result<(), ConnectError>
Connects an ICMP socket to remote IP.
If the socket is never bound, an local ID will be allocated.
Sourcepub fn bind(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
local_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>,
icmp_id: Option<NonZeroU16>,
) -> Result<(), Either<ExpectedUnboundError, LocalAddressError>>
pub fn bind( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, local_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>, icmp_id: Option<NonZeroU16>, ) -> Result<(), Either<ExpectedUnboundError, LocalAddressError>>
Binds an ICMP socket to a local IP address and a local ID.
Both the IP and the ID are optional. When IP is missing, the “any” IP is assumed; When the ID is missing, it will be allocated.
Sourcepub fn get_info(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> SocketInfo<I::Addr, <C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>
pub fn get_info( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> SocketInfo<I::Addr, <C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>
Gets the information about an ICMP socket.
Sourcepub fn set_device(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
device_id: Option<&<C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>,
) -> Result<(), SocketError>
pub fn set_device( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, device_id: Option<&<C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>, ) -> Result<(), SocketError>
Sets the bound device for a socket.
Sets the device to be used for sending and receiving packets for a socket. If the socket is not currently bound to a local address and port, the device will be used when binding.
Sourcepub fn get_bound_device(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> Option<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>
pub fn get_bound_device( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> Option<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>
Gets the device the specified socket is bound to.
Sourcepub fn disconnect(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> Result<(), ExpectedConnError>
pub fn disconnect( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> Result<(), ExpectedConnError>
Disconnects an ICMP socket.
Sourcepub fn shutdown(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
shutdown_type: ShutdownType,
) -> Result<(), ExpectedConnError>
pub fn shutdown( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, shutdown_type: ShutdownType, ) -> Result<(), ExpectedConnError>
Shuts down an ICMP socket.
Sourcepub fn get_shutdown(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> Option<ShutdownType>
pub fn get_shutdown( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> Option<ShutdownType>
Gets the current shutdown state of an ICMP socket.
Sourcepub fn close(
&mut self,
id: IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> RemoveResourceResultWithContext<<C::BindingsContext as IcmpEchoBindingsTypes>::ExternalData<I>, C::BindingsContext>
pub fn close( &mut self, id: IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> RemoveResourceResultWithContext<<C::BindingsContext as IcmpEchoBindingsTypes>::ExternalData<I>, C::BindingsContext>
Closes an ICMP socket.
Sourcepub fn get_unicast_hop_limit(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> NonZeroU8
pub fn get_unicast_hop_limit( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> NonZeroU8
Gets unicast IP hop limit for ICMP sockets.
Sourcepub fn get_multicast_hop_limit(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> NonZeroU8
pub fn get_multicast_hop_limit( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> NonZeroU8
Gets multicast IP hop limit for ICMP sockets.
Sourcepub fn set_unicast_hop_limit(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
hop_limit: Option<NonZeroU8>,
)
pub fn set_unicast_hop_limit( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, hop_limit: Option<NonZeroU8>, )
Sets unicast IP hop limit for ICMP sockets.
Sourcepub fn set_multicast_hop_limit(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
hop_limit: Option<NonZeroU8>,
)
pub fn set_multicast_hop_limit( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, hop_limit: Option<NonZeroU8>, )
Sets multicast IP hop limit for ICMP sockets.
Sourcepub fn get_multicast_loop(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
) -> bool
pub fn get_multicast_loop( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> bool
Gets the loopback multicast option.
Sourcepub fn set_multicast_loop(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
value: bool,
)
pub fn set_multicast_loop( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, value: bool, )
Sets the loopback multicast option.
Sourcepub fn set_mark(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
domain: MarkDomain,
mark: Mark,
)
pub fn set_mark( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, domain: MarkDomain, mark: Mark, )
Sets the socket mark for the socket domain.
Sourcepub fn get_mark(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
domain: MarkDomain,
) -> Mark
pub fn get_mark( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, domain: MarkDomain, ) -> Mark
Gets the socket mark for the socket domain.
Sourcepub fn send<B: BufferMut>(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
body: B,
) -> Result<(), SendError<ParseError>>
pub fn send<B: BufferMut>( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, body: B, ) -> Result<(), SendError<ParseError>>
Sends an ICMP packet through a connection.
The socket must be connected in order for the operation to succeed.
Sourcepub fn send_to<B: BufferMut>(
&mut self,
id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>,
remote_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>,
body: B,
) -> Result<(), Either<LocalAddressError, SendToError<ParseError>>>
pub fn send_to<B: BufferMut>( &mut self, id: &IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, remote_ip: Option<ZonedAddr<SpecifiedAddr<I::Addr>, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>>, body: B, ) -> Result<(), Either<LocalAddressError, SendToError<ParseError>>>
Sends an ICMP packet with an remote address.
The socket doesn’t need to be connected.
Sourcepub fn collect_all_sockets(
&mut self,
) -> Vec<IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>>
pub fn collect_all_sockets( &mut self, ) -> Vec<IcmpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>>
Collects all currently opened sockets, returning a cloned reference for each one.
Sourcepub fn inspect<N>(&mut self, inspector: &mut N)where
N: Inspector + InspectorDeviceExt<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>,
pub fn inspect<N>(&mut self, inspector: &mut N)where
N: Inspector + InspectorDeviceExt<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>,
Provides inspect data for ICMP echo sockets.