Struct netstack3_device::DeviceApi

source ·
pub struct DeviceApi<D, C>(/* private fields */);
Expand description

The device API.

Implementations§

source§

impl<D, C> DeviceApi<D, C>

source

pub fn new(ctx: C) -> Self

Creates a new DeviceApi from ctx.

source§

impl<D, C> DeviceApi<D, C>
where D: Device + DeviceStateSpec + DeviceReceiveFrameSpec, C: ContextPair, C::CoreContext: DeviceApiCoreContext<D, C::BindingsContext>, C::BindingsContext: DeviceApiBindingsContext,

source

pub fn add_device( &mut self, bindings_id: <C::BindingsContext as DeviceLayerStateTypes>::DeviceIdentifier, properties: D::CreationProperties, metric: RawMetric, external_state: D::External<C::BindingsContext>, ) -> <C::CoreContext as DeviceIdContext<D>>::DeviceId
where C::CoreContext: DeviceApiIpLayerCoreContext<D, C::BindingsContext>,

Adds a new device to the stack and returns its identifier.

§Panics

Panics if more than 1 loopback device is added to the stack.

source

pub fn remove_device( &mut self, device: BaseDeviceId<D, C::BindingsContext>, ) -> RemoveResourceResultWithContext<D::External<C::BindingsContext>, C::BindingsContext>
where BaseDeviceId<D, C::BindingsContext>: Into<DeviceId<C::BindingsContext>>, C::CoreContext: IpDeviceConfigurationContext<Ipv4, C::BindingsContext> + Ipv6DeviceConfigurationContext<C::BindingsContext> + DeviceIdContext<AnyDevice, DeviceId = DeviceId<C::BindingsContext>>, C::BindingsContext: IpDeviceBindingsContext<Ipv4, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId> + IpDeviceBindingsContext<Ipv6, <C::CoreContext as DeviceIdContext<AnyDevice>>::DeviceId>,

Removes device from the stack.

If the return value is RemoveDeviceResult::Removed the device is immediately removed from the stack, otherwise RemoveDeviceResult::Deferred indicates that the device was marked for destruction but there are still references to it. It carries a ReferenceReceiver from the bindings context that can be awaited on until removal is complete.

§Panics

Panics if the device is not currently in the stack.

source

pub fn receive_frame<B: BufferMut + Debug>( &mut self, meta: D::FrameMetadata<BaseDeviceId<D, C::BindingsContext>>, frame: B, )

Receive a device layer frame from the network.

source

pub fn apply_configuration( &mut self, pending: PendingDeviceConfigurationUpdate<'_, BaseDeviceId<D, C::BindingsContext>>, ) -> DeviceConfigurationUpdate

Applies the configuration and returns a DeviceConfigurationUpdate with the previous values for all configurations for all Some fields.

Note that even if the previous value matched the requested value, it is still populated in the returned DeviceConfigurationUpdate.

source

pub fn new_configuration_update<'a>( &mut self, device: &'a BaseDeviceId<D, C::BindingsContext>, config: DeviceConfigurationUpdate, ) -> Result<PendingDeviceConfigurationUpdate<'a, BaseDeviceId<D, C::BindingsContext>>, DeviceConfigurationUpdateError>

Creates a new device configuration update for the given device.

This method only validates that config is valid for device. [DeviceApi::apply] must be called to apply the configuration.

source

pub fn get_configuration( &mut self, device: &BaseDeviceId<D, C::BindingsContext>, ) -> DeviceConfiguration

Returns a snapshot of the given device’s configuration.

source

pub fn inspect<N: Inspector>( &mut self, device: &BaseDeviceId<D, C::BindingsContext>, inspector: &mut N, )

Exports state for device into inspector.

Auto Trait Implementations§

§

impl<D, C> Freeze for DeviceApi<D, C>
where C: Freeze,

§

impl<D, C> RefUnwindSafe for DeviceApi<D, C>

§

impl<D, C> Send for DeviceApi<D, C>
where C: Send, D: Send,

§

impl<D, C> Sync for DeviceApi<D, C>
where C: Sync, D: Sync,

§

impl<D, C> Unpin for DeviceApi<D, C>
where C: Unpin, D: Unpin,

§

impl<D, C> UnwindSafe for DeviceApi<D, C>
where C: UnwindSafe, D: 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>,