pub struct Session;Expand description
The type corresponding to the Session protocol. Represents a session with a Network device.
A session has a data plane and a control plane. The Session protocol
represents the control plane of the session and the FIFOs and VMOs exchanged
during the [Device.OpenSession] call are the data plane. Lifetime of the
session is controlled by a Session protocol handle.
Sessions must attach to ports of interest to start receiving and sending data. Sessions are always created with no ports attached.
If a port is destroyed from the underlying device, it is automatically detached from the session.
Inbound traffic is dispatched to all open sessions. Devices typically
operate with a single primary session, see [SessionFlags.PRIMARY]. Each
additional open session to the same device causes data copy overhead on the
device’s data path.
The session is closed with an error epitaph if an invalid buffer descriptor
is sent over either the tx or rx FIFOs. Invalid descriptors include:
- Descriptor index larger than [SessionInfo.descriptor_count].
- Descriptor chains larger than MAX_DESCRIPTOR_CHAIN.
- rx buffers smaller than [Info.min_rx_buffer_length].
- tx buffers smaller than [Info.min_tx_buffer_length].
- tx buffers not respecting [Info.min_tx_buffer_head] or
[Info.min_tx_buffer_tail].
Trait Implementations§
Source§impl<___H, ___T> DispatchClientMessage<___H, ___T> for Sessionwhere
___H: SessionClientHandler<___T> + Send,
___T: Transport,
impl<___H, ___T> DispatchClientMessage<___H, ___T> for Sessionwhere
___H: SessionClientHandler<___T> + Send,
___T: Transport,
Source§impl<___H, ___T> DispatchLocalClientMessage<___H, ___T> for Sessionwhere
___H: SessionLocalClientHandler<___T>,
___T: Transport,
impl<___H, ___T> DispatchLocalClientMessage<___H, ___T> for Sessionwhere
___H: SessionLocalClientHandler<___T>,
___T: Transport,
Source§impl<___H, ___T> DispatchLocalServerMessage<___H, ___T> for Sessionwhere
___H: SessionLocalServerHandler<___T>,
___T: Transport,
for<'de> SessionAttachRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionDetachRequest: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionRegisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionUnregisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
impl<___H, ___T> DispatchLocalServerMessage<___H, ___T> for Sessionwhere
___H: SessionLocalServerHandler<___T>,
___T: Transport,
for<'de> SessionAttachRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionDetachRequest: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionRegisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionUnregisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
Source§impl<___H, ___T> DispatchServerMessage<___H, ___T> for Sessionwhere
___H: SessionServerHandler<___T> + Send,
___T: Transport,
for<'de> SessionAttachRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionDetachRequest: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionRegisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionUnregisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
impl<___H, ___T> DispatchServerMessage<___H, ___T> for Sessionwhere
___H: SessionServerHandler<___T> + Send,
___T: Transport,
for<'de> SessionAttachRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionDetachRequest: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionRegisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
for<'de> SessionUnregisterForTxRequest<'de>: Decode<<<___T as Transport>::RecvBuffer as AsDecoder<'de>>::Decoder, Constraint = ()>,
impl StructuralPartialEq for Session
Auto Trait Implementations§
impl Freeze for Session
impl RefUnwindSafe for Session
impl Send for Session
impl Sync for Session
impl Unpin for Session
impl UnsafeUnpin for Session
impl UnwindSafe for Session
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> InstanceFromServiceTransport<T> for T
impl<T> InstanceFromServiceTransport<T> for T
§fn from_service_transport(handle: T) -> T
fn from_service_transport(handle: T) -> T
T to [Self]