DeviceApi

Struct 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 add_device_with_default_state( &mut self, properties: D::CreationProperties, metric: RawMetric, ) -> <C::CoreContext as DeviceIdContext<D>>::DeviceId

Like DeviceApi::add_device but using default values for bindings_id and external_state.

This is provided as a convenience method for tests with faked bindings contexts that have simple implementations for bindings state.

Source

pub fn remove_device( &mut self, device: BaseDeviceId<D, C::BindingsContext>, ) -> RemoveResourceResultWithContext<D::External<C::BindingsContext>, C::BindingsContext>

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 get_counters<'a>( &'a mut self, device: &'a BaseDeviceId<D, C::BindingsContext>, ) -> &'a DeviceCounters

Returns a borrow to the DeviceCounters structure for device.

Source

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

Exports state for device into inspector.

Trait Implementations§

Source§

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

Source§

type From = C

Source§

fn ref_cast(_from: &Self::From) -> &Self

Source§

fn ref_cast_mut(_from: &mut Self::From) -> &mut Self

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
§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. 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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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

Source§

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>>

Send a frame. Read more
Source§

impl<BC, S, Meta, DeviceId> SendableFrameMeta<FakeCoreCtx<S, Meta, DeviceId>, BC> for Meta

Source§

fn send_meta<SS>( self, core_ctx: &mut FakeCoreCtx<S, Meta, DeviceId>, bindings_ctx: &mut BC, frame: SS, ) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, SS>>
where SS: Serializer, <SS as Serializer>::Buffer: BufferMut,

Sends this frame metadata to the provided contexts.
Source§

impl<Meta, BC> SendableFrameMeta<FakeFrameCtx<Meta>, BC> for Meta

Source§

fn send_meta<S>( self, core_ctx: &mut FakeFrameCtx<Meta>, _bindings_ctx: &mut BC, frame: S, ) -> Result<(), ErrorAndSerializer<SendFrameErrorReason, S>>

Sends this frame metadata to the provided contexts.
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>,

Source§

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>,

Source§

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.
Source§

impl<L, T> UnlockedAccess<L> for T

Source§

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

The type of state being accessed.
Source§

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

A guard providing read access to the data.
Source§

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

Source§

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