Module capsules_extra::net::udp::udp_send
source · Expand description
This file contains the definition and implementation for a virtualized UDP
sending interface. The UDPSender trait provides
an interface for kernel capsules to send a UDP packet, and the
UDPSendClient trait is implemented by
upper layer clients to allow them to receive send_done
callbacks once
transmission has completed.
In order to virtualize between both apps and kernel capsules, this file
uses a MuxUdpSender which treats the userspace UDP driver as a kernel capsule
with a special capability that allows it to bind to arbitrary ports. Therefore
the correctness of port binding / packet transmission/delivery is also dependent
on the port binding logic in the driver being correct.
The MuxUdpSender acts as a FIFO queue for transmitted packets, with each capsule being allowed
a single outstanding / unsent packet at a time.
Because the userspace driver is viewed by the MuxUdpSender as being a single capsule,
the userspace driver must queue app packets on its own, as it can only pass a single
packet to the MuxUdpSender queue at a time.
Structs§
- This is a specific instantiation of the
UDPSender
trait. Note that this struct contains a reference to anIP6Sender
which it forwards packets to (and receives callbacks from).
Traits§
- The
send_done
function in this trait is invoked after the UDPSender has completed sending the requested packet. Note that theUDPSender::set_client
method must be called to set the client. - This trait represents the bulk of the UDP functionality. The two variants of sending a packet (either via the
send_to
orsend
methods) represent whether the caller wants to construct a customUDPHeader
or not. Callingsend_to
tells the UDP layer to construct a defaultUDPHeader
and forward the payload to the respective destination and port.