#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TransmitBurst
{
function: TransmitBurstFunction,
data: TransmitBurstFunctionData,
}
impl TransmitBurst
{
pub fn new(ethernetPort: EthernetPort, transmitQueueIdentifier: QueueIdentifier) -> Self
{
let underlyingEthernetDevice = ethernetPort.underlyingEthernetDevice();
let data = unsafe
{
let ethernetDeviceData = *(underlyingEthernetDevice.data);
*(ethernetDeviceData.tx_queues.offset(transmitQueueIdentifier as isize))
};
Self
{
function: underlyingEthernetDevice.tx_pkt_burst.unwrap(),
data: data,
}
}
#[inline(always)]
pub fn transmit(&self, queue: *mut *mut rte_mbuf, count: usize) -> usize
{
let numberTransmitted = unsafe { (self.function)(self.data, queue, count as u16) } as usize;
debug_assert!(numberTransmitted <= count, "transmitBurstFunction transmitted more '{}' than was possible, '{}'", numberTransmitted, count);
numberTransmitted
}
}