#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ReceiveBurst
{
pub function: ReceiveBurstFunction,
pub data: ReceiveBurstFunctionData,
}
impl ReceiveBurst
{
pub fn new(ethernetPort: EthernetPort, receiveQueueIdentifier: QueueIdentifier) -> Self
{
let underlyingEthernetDevice = ethernetPort.underlyingEthernetDevice();
let data = unsafe
{
let ethernetDeviceData = *(underlyingEthernetDevice.data);
*(ethernetDeviceData.rx_queues.offset(receiveQueueIdentifier as isize))
};
Self
{
function: underlyingEthernetDevice.rx_pkt_burst.unwrap(),
data: data,
}
}
#[inline(always)]
pub fn receive(&self, queue: *mut *mut rte_mbuf, count: u16) -> u16
{
unsafe { (self.function)(self.data, queue, count) }
}
}