Struct netstack3_base::socket::BoundSocketMap

source ·
pub struct BoundSocketMap<I: Ip, D: DeviceIdentifier, A: SocketMapAddrSpec, S: SocketMapStateSpec> { /* private fields */ }
Expand description

A map from socket addresses to sockets.

The types of keys and IDs is determined by the SocketMapStateSpec parameter. Each listener and connected socket stores additional state. Listener and connected sockets are keyed independently, but share the same address vector space. Conflicts are detected on attempted insertion of new sockets.

Listener addresses map to listener-address-specific state, and likewise with connected addresses. Depending on protocol (determined by the SocketMapStateSpec protocol), these address states can hold one or more socket identifiers (e.g. UDP sockets with SO_REUSEPORT set can share an address).

Implementations§

source§

impl<I: Ip, D: DeviceIdentifier, A: SocketMapAddrSpec, S: SocketMapStateSpec> BoundSocketMap<I, D, A, S>

source

pub fn len(&self) -> usize

Returns the number of entries in the map.

source§

impl<I: Ip, D: DeviceIdentifier, A: SocketMapAddrSpec, S> BoundSocketMap<I, D, A, S>

source

pub fn listeners( &self, ) -> Sockets<&SocketMap<AddrVec<I, D, A>, Bound<S>>, Listener>

Returns an iterator over the listeners on the socket map.

source

pub fn listeners_mut( &mut self, ) -> Sockets<&mut SocketMap<AddrVec<I, D, A>, Bound<S>>, Listener>

Returns a mutable iterator over the listeners on the socket map.

source

pub fn conns( &self, ) -> Sockets<&SocketMap<AddrVec<I, D, A>, Bound<S>>, Connection>

Returns an iterator over the connections on the socket map.

source

pub fn conns_mut( &mut self, ) -> Sockets<&mut SocketMap<AddrVec<I, D, A>, Bound<S>>, Connection>

Returns a mutable iterator over the connections on the socket map.

source

pub fn get_shadower_counts(&self, addr: &AddrVec<I, D, A>) -> usize

Gets the number of shadower entries for addr.

source§

impl<I, D, A, S> BoundSocketMap<I, D, A, S>

source

pub fn iter_receivers( &self, (src_ip, src_port): (Option<SocketIpAddr<I::Addr>>, Option<A::RemoteIdentifier>), (dst_ip, dst_port): (SocketIpAddr<I::Addr>, A::LocalIdentifier), device: D, broadcast: Option<I::BroadcastMarker>, ) -> Option<FoundSockets<AddrEntry<'_, I, D, A, S>, impl Iterator<Item = AddrEntry<'_, I, D, A, S>> + '_>>

Finds the socket(s) that should receive an incoming packet.

Uses the provided addresses and receiving device to look up sockets that should receive a matching incoming packet. Returns None if no sockets were found, or the results of the lookup.

Trait Implementations§

source§

impl<I: Ip, D: DeviceIdentifier, A: SocketMapAddrSpec, S: SocketMapStateSpec> Default for BoundSocketMap<I, D, A, S>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<I, D, A, S> Freeze for BoundSocketMap<I, D, A, S>

§

impl<I, D, A, S> RefUnwindSafe for BoundSocketMap<I, D, A, S>

§

impl<I, D, A, S> Send for BoundSocketMap<I, D, A, S>

§

impl<I, D, A, S> Sync for BoundSocketMap<I, D, A, S>

§

impl<I, D, A, S> Unpin for BoundSocketMap<I, D, A, S>

§

impl<I, D, A, S> UnwindSafe for BoundSocketMap<I, D, A, S>

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<O, BC> BuildableCoreContext<BC> for O
where O: Default,

§

type Builder = ()

The builder type that can build this core context.
source§

fn build(_bindings_ctx: &mut BC, _: ()) -> O

Consumes this builder and returns the context.
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<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>,