Get the virtual address and length of
the next buffer in packet
Is the NIC enabled to send packets?
Does the NIC have enough free
send BD's to send the packet?
Get the virtual address and length of the
first buffer in packet
Fill out a Send BD with the info (address,
length, flags) that corresponds to this
physical host fragment
Update the Send Producer Index. This tells
the HW that a new packet is ready to be
transmitted
Examine packet (if necessary) and decide
which send ring to use.
Is this the last virtual buffer
for this packet?
Set BD_FLAG_END bit in send BD
Make OS call to lock down the virtual buffer
in host memory and get the corresponding
physical address(es)
Queue packet for later transmission.
Return appropriate status code to OS
Return appropriate error code to OS.
Allocate the next available send BD from a
free list of pre-allocated send BDs for a
given send ring
OS asks NIC Driver to send a packet
Yes
No
No
Yes
No
Yes
Is this the last physical fragment
of the virtual buffer?
Yes
Get the physical address and length of
the next physical fragment for the
virtual buffer
No