bitflags!
{
pub flags DeviceReceiveOffloadCapabilities: u32
{
const IpV4Checksum = DEV_RX_OFFLOAD_IPV4_CKSUM,
const OuterIpV4Checksum = DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM,
const QInQStrip = DEV_RX_OFFLOAD_QINQ_STRIP,
const TcpChecksum = DEV_RX_OFFLOAD_TCP_CKSUM,
const TcpLargeReceiveOffload = DEV_RX_OFFLOAD_TCP_LRO,
const UdpChecksum = DEV_RX_OFFLOAD_UDP_CKSUM,
const VlanStrip = DEV_RX_OFFLOAD_VLAN_STRIP,
}
}
impl Default for DeviceReceiveOffloadCapabilities
{
#[inline(always)]
fn default() -> Self
{
Self::empty()
}
}
impl DeviceReceiveOffloadCapabilities
{
#[inline(always)]
fn supports(&self, flag: DeviceReceiveOffloadCapabilities) -> bool
{
self.contains(flag)
}
#[inline(always)]
pub fn supportsTcpLargeReceiveOffload(&self) -> bool
{
self.supports(DeviceReceiveOffloadCapabilities::TcpLargeReceiveOffload)
}
#[inline(always)]
pub fn supportsIpV4TcpAndUdpChecksumOffload(&self) -> bool
{
self.supports(DeviceReceiveOffloadCapabilities::IpV4Checksum | DeviceReceiveOffloadCapabilities::TcpChecksum | DeviceReceiveOffloadCapabilities::UdpChecksum)
}
#[inline(always)]
pub fn supportsNoneOfIpV4TcpAndUdpChecksumOffload(&self) -> bool
{
!self.supports(DeviceReceiveOffloadCapabilities::IpV4Checksum) && !self.supports(DeviceReceiveOffloadCapabilities::TcpChecksum) && !self.supports(DeviceReceiveOffloadCapabilities::UdpChecksum)
}
#[inline(always)]
pub fn supportsVlanOrQinQStripping(&self) -> bool
{
self.supports(DeviceReceiveOffloadCapabilities::VlanStrip) || self.supports(DeviceReceiveOffloadCapabilities::QInQStrip)
}
}