pub enum SessionRequest {
    Attach {
        port: PortId,
        rx_frames: Vec<FrameType>,
        responder: SessionAttachResponder,
    },
    Detach {
        port: PortId,
        responder: SessionDetachResponder,
    },
    Close {
        control_handle: SessionControlHandle,
    },
}
Expand description

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

Variants§

§

Attach

Attaches the session to port.

Once attached, the session starts to receive the subscribed frames over the data FIFOs and it may send frames destined to the specified port.

  • request port port to subscribe to.
  • request rx_frames Frame types of interest on the port.
  • error ZX_ERR_NOT_FOUND if port is not valid.
  • error ZX_ERR_INVALID_ARGS if rx_frames is not a subset of the port’s supported frames.
  • error ZX_ERR_ALREADY_BOUND if port is already attached.

Fields

§port: PortId
§rx_frames: Vec<FrameType>
§

Detach

Detaches the session from port.

Once detached, the session stops receiving frames from port. Frames sent to a detached port may be returned with an error. It is not necessary to call Detach on ports that are removed from the device, doing so causes ZX_ERR_NOT_FOUND to be returned.

  • request port port to subscribe to.
  • error ZX_ERR_NOT_FOUND if the session is not currently attached to the port.

Fields

§port: PortId
§

Close

Cleanly closes a session.

This will cause the session to send a ZX_ERR_CANCELLED epitaph and proceed to close the Session channel. Clients may only assume that they own all the buffers that are currently owned by the session (sent over either the rx or tx FIFOs) once the epitaph is received. Closing the rx or tx FIFO is equivalent to calling Close.

Fields

§control_handle: SessionControlHandle

Implementations§

source§

impl SessionRequest

source

pub fn into_attach( self ) -> Option<(PortId, Vec<FrameType>, SessionAttachResponder)>

source

pub fn into_detach(self) -> Option<(PortId, SessionDetachResponder)>

source

pub fn into_close(self) -> Option<SessionControlHandle>

source

pub fn method_name(&self) -> &'static str

Name of the method defined in FIDL

Trait Implementations§

source§

impl Debug for SessionRequest

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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> Encode<Ambiguous1> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _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> Encode<Ambiguous2> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

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<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<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more