pub trait DeviceLayerEventDispatcher:
Sized
+ DeviceLayerTypes
+ ReceiveQueueBindingsContext<BaseDeviceId<LoopbackDevice, Self>>
+ TransmitQueueBindingsContext<BaseDeviceId<EthernetLinkDevice, Self>>
+ TransmitQueueBindingsContext<BaseDeviceId<LoopbackDevice, Self>>
+ TransmitQueueBindingsContext<BaseDeviceId<PureIpDevice, Self>> {
type DequeueContext;
// Required methods
fn send_ethernet_frame(
&mut self,
device: &BaseDeviceId<EthernetLinkDevice, Self>,
frame: Buf<Vec<u8>>,
dequeue_context: Option<&mut Self::DequeueContext>,
) -> Result<(), DeviceSendFrameError>;
fn send_ip_packet(
&mut self,
device: &BaseDeviceId<PureIpDevice, Self>,
packet: Buf<Vec<u8>>,
ip_version: IpVersion,
dequeue_context: Option<&mut Self::DequeueContext>,
) -> Result<(), DeviceSendFrameError>;
}Expand description
An event dispatcher for the device layer.
Required Associated Types§
Sourcetype DequeueContext
type DequeueContext
The transmit queue dequeueing context used by bindings.
DequeueContext is a passthrough type from bindings (i.e. entirely
opaque to core) when using TransmitQueueApi to trigger the transmit
queue to send frames to the underlying devices.
Required Methods§
Sourcefn send_ethernet_frame(
&mut self,
device: &BaseDeviceId<EthernetLinkDevice, Self>,
frame: Buf<Vec<u8>>,
dequeue_context: Option<&mut Self::DequeueContext>,
) -> Result<(), DeviceSendFrameError>
fn send_ethernet_frame( &mut self, device: &BaseDeviceId<EthernetLinkDevice, Self>, frame: Buf<Vec<u8>>, dequeue_context: Option<&mut Self::DequeueContext>, ) -> Result<(), DeviceSendFrameError>
Send a frame to an Ethernet device driver.
See DeviceSendFrameError for the ways this call may fail; all other
errors are silently ignored and reported as success. Implementations are
expected to gracefully handle non-conformant but correctable input, e.g.
by padding too-small frames.
dequeue_context is Some iff this is called from the context of
operating the transmit queue via TransmitQueueApi.
Sourcefn send_ip_packet(
&mut self,
device: &BaseDeviceId<PureIpDevice, Self>,
packet: Buf<Vec<u8>>,
ip_version: IpVersion,
dequeue_context: Option<&mut Self::DequeueContext>,
) -> Result<(), DeviceSendFrameError>
fn send_ip_packet( &mut self, device: &BaseDeviceId<PureIpDevice, Self>, packet: Buf<Vec<u8>>, ip_version: IpVersion, dequeue_context: Option<&mut Self::DequeueContext>, ) -> Result<(), DeviceSendFrameError>
Send an IP packet to an IP device driver.
See DeviceSendFrameError for the ways this call may fail; all other
errors are silently ignored and reported as success. Implementations are
expected to gracefully handle non-conformant but correctable input, e.g.
by padding too-small frames.
dequeue_context is Some iff this is called from the context of
operating the transmit queue via TransmitQueueApi.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.