#[derive(Debug, Clone)]
pub struct DeviceConfiguration
{
pub deviceOffloadingIsActive: bool,
pub localSocketAddresses: IpV4AndOrIpV6<AddressWithListOfOpenLocalLayer4Ports<Ipv4Addr>, AddressWithListOfOpenLocalLayer4Ports<Ipv6Addr>>
}
impl DeviceConfiguration
{
#[inline(always)]
pub fn offloading(&self, layer4Protocol: Layer4Protocol) -> (DeviceReceiveOffloadCapabilities, DeviceTransmitOffloadCapabilities)
{
if self.deviceOffloadingIsActive
{
let (receiveOffload, transmitOffload) = match layer4Protocol
{
Layer4Protocol::Udp => (DeviceReceiveOffloadCapabilities::UdpChecksum, DeviceTransmitOffloadCapabilities::UdpChecksum | DeviceTransmitOffloadCapabilities::UdpSegmentationOffload),
Layer4Protocol::Tcp => (DeviceReceiveOffloadCapabilities::TcpChecksum | DeviceReceiveOffloadCapabilities::TcpLargeReceiveOffload, DeviceTransmitOffloadCapabilities::TcpChecksum | DeviceTransmitOffloadCapabilities::TcpSegmentationOffload),
};
(receiveOffload | DeviceReceiveOffloadCapabilities::IpV4Checksum, transmitOffload | DeviceTransmitOffloadCapabilities::IpV4Checksum)
}
else
{
(DeviceReceiveOffloadCapabilities::empty(), DeviceTransmitOffloadCapabilities::empty())
}
}
#[inline(always)]
pub fn supportsIpV4(&self) -> bool
{
self.localSocketAddresses.hasIpV4()
}
#[inline(always)]
pub fn supportsIpV6(&self) -> bool
{
self.localSocketAddresses.hasIpV6()
}
#[inline(always)]
pub fn ipV4BlockedPortsForTldk(&self) -> TldkBlockedPortsList
{
if let Some(ipV4) = self.localSocketAddresses.ipV4()
{
ipV4.blockedPortsForTldk()
}
else
{
Vec::new()
}
}
#[inline(always)]
pub fn ipV6BlockedPortsForTldk(&self) -> TldkBlockedPortsList
{
if let Some(ipV6) = self.localSocketAddresses.ipV6()
{
ipV6.blockedPortsForTldk()
}
else
{
Vec::new()
}
}
#[inline(always)]
pub fn in_addr(&self) -> in_addr
{
if let Some(ipV4) = self.localSocketAddresses.ipV4()
{
ipV4.in_addr()
}
else
{
unsafe { zeroed() }
}
}
#[inline(always)]
pub fn in6_addr(&self) -> in6_addr
{
if let Some(ipV6) = self.localSocketAddresses.ipV6()
{
ipV6.in6_addr()
}
else
{
unsafe { zeroed() }
}
}
}