Struct netstack3_ip::raw::RawIpSocketApi

source ·
pub struct RawIpSocketApi<I: Ip, C> { /* private fields */ }
Expand description

The raw IP socket API.

Implementations§

source§

impl<I: Ip, C> RawIpSocketApi<I, C>

source

pub fn new(ctx: C) -> Self

Constructs a new RAW IP socket API.

source§

impl<I: IpExt + DualStackIpExt, C> RawIpSocketApi<I, C>

source

pub fn create( &mut self, protocol: RawIpSocketProtocol<I>, external_state: <C::BindingsContext as RawIpSocketsBindingsTypes>::RawIpSocketState<I>, ) -> RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>

Creates a raw IP socket for the given protocol.

source

pub fn close( &mut self, id: RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> RemoveResourceResultWithContext<<C::BindingsContext as RawIpSocketsBindingsTypes>::RawIpSocketState<I>, C::BindingsContext>

Removes the raw IP socket from the system, returning its external state.

source

pub fn send_to<B: BufferMut>( &mut self, id: &RawIpSocketId<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<(), RawIpSocketSendToError>

Sends an IP packet on the raw IP socket to the provided destination.

The provided body is not expected to include an IP header; a system determined header will automatically be applied.

source

pub fn set_device( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, device: Option<&<C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>, ) -> Option<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>

Sets the socket’s bound device, returning the original value.

source

pub fn get_device( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> Option<<C::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId>

Gets the socket’s bound device,

source

pub fn set_icmp_filter( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, filter: Option<RawIpSocketIcmpFilter<I>>, ) -> Result<Option<RawIpSocketIcmpFilter<I>>, RawIpSocketIcmpFilterError>

Sets the socket’s ICMP filter, returning the original value.

Note, if the socket’s protocol is not compatible (e.g. ICMPv4 for an IPv4 socket, or ICMPv6 for an IPv6 socket), an error is returned.

source

pub fn get_icmp_filter( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> Result<Option<RawIpSocketIcmpFilter<I>>, RawIpSocketIcmpFilterError>

Gets the socket’s ICMP

Note, if the socket’s protocol is not compatible (e.g. ICMPv4 for an IPv4 socket, or ICMPv6 for an IPv6 socket), an error is returned.

source

pub fn set_unicast_hop_limit( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, new_limit: Option<NonZeroU8>, ) -> Option<NonZeroU8>

Sets the socket’s unicast hop limit, returning the original value.

If None is provided, the hop limit will be restored to the system default.

source

pub fn get_unicast_hop_limit( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> NonZeroU8

Gets the socket’s unicast hop limit, or the system default, if unset.

source

pub fn set_multicast_hop_limit( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, new_limit: Option<NonZeroU8>, ) -> Option<NonZeroU8>

Sets the socket’s multicast hop limit, returning the original value.

If None is provided, the hop limit will be restored to the system default.

source

pub fn get_multicast_hop_limit( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> NonZeroU8

Gets the socket’s multicast hop limit, or the system default, if unset.

source

pub fn set_multicast_loop( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, value: bool, ) -> bool

Sets multicast_loop on the socket, returning the original value.

When true, the socket will loop back all sent multicast traffic.

source

pub fn get_multicast_loop( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, ) -> bool

Gets the multicast_loop value on the socket.

source

pub fn set_mark( &mut self, id: &RawIpSocketId<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.

source

pub fn get_mark( &mut self, id: &RawIpSocketId<I, <<C as ContextPair>::CoreContext as DeviceIdContext<AnyDevice>>::WeakDeviceId, <C as ContextPair>::BindingsContext>, domain: MarkDomain, ) -> Mark

Gets the socket mark for the socket domain.

source

pub fn inspect<N>(&mut self, inspector: &mut N)

Provides inspect data for raw IP sockets.

Auto Trait Implementations§

§

impl<I, C> Freeze for RawIpSocketApi<I, C>
where C: Freeze,

§

impl<I, C> RefUnwindSafe for RawIpSocketApi<I, C>

§

impl<I, C> Send for RawIpSocketApi<I, C>
where C: Send,

§

impl<I, C> Sync for RawIpSocketApi<I, C>
where C: Sync,

§

impl<I, C> Unpin for RawIpSocketApi<I, C>
where C: Unpin, I: Unpin,

§

impl<I, C> UnwindSafe for RawIpSocketApi<I, C>
where C: UnwindSafe, I: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<CC, BC, Meta> RecvFrameContext<Meta, BC> for CC
where Meta: ReceivableFrameMeta<CC, BC>,

source§

fn receive_frame<B>(&mut self, bindings_ctx: &mut BC, metadata: Meta, frame: B)
where B: BufferMut + Debug,

Receive a frame. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<CC, BC, Meta> SendFrameContext<BC, Meta> for CC
where Meta: SendableFrameMeta<CC, BC>,

source§

fn send_frame<S>( &mut self, bindings_ctx: &mut BC, metadata: Meta, frame: S, ) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, S>>
where S: Serializer, <S as Serializer>::Buffer: BufferMut,

Send a frame. Read more
source§

impl<Id, CC, BC> TimerHandler<BC, Id> for CC
where BC: TimerBindingsTypes, Id: HandleableTimer<CC, BC>,

source§

fn handle_timer( &mut self, bindings_ctx: &mut BC, dispatch: Id, timer: <BC as TimerBindingsTypes>::UniqueTimerId, )

Handle a timer firing. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<L, T> UnlockedAccess<L> for T
where L: UnlockedAccessMarkerFor<T>,

§

type Data = <L as UnlockedAccessMarkerFor<T>>::Data

The type of state being accessed.
§

type Guard<'l> = &'l <L as UnlockedAccessMarkerFor<T>>::Data where T: 'l

A guard providing read access to the data.
§

fn access(&self) -> <T as UnlockedAccess<L>>::Guard<'_>

How to access the state.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,