#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum LinkSpeed
{
_10MbpsHalfDuplex = ::dpdk_sys::ETH_LINK_SPEED_10M_HD,
_10Mbps = ::dpdk_sys::ETH_LINK_SPEED_10M,
_100MbpsHalfDuplex = ::dpdk_sys::ETH_LINK_SPEED_100M_HD,
_100Mbps = ::dpdk_sys::ETH_LINK_SPEED_100M,
_1Gbps = ::dpdk_sys::ETH_LINK_SPEED_1G,
_2AndAHalfGbps = ::dpdk_sys::ETH_LINK_SPEED_2_5G,
_5Gbps = ::dpdk_sys::ETH_LINK_SPEED_5G,
_10Gbps = ::dpdk_sys::ETH_LINK_SPEED_10G,
_20Gbps = ::dpdk_sys::ETH_LINK_SPEED_20G,
_25Gbps = ::dpdk_sys::ETH_LINK_SPEED_25G,
_40Gbps = ::dpdk_sys::ETH_LINK_SPEED_40G,
_50Gbps = ::dpdk_sys::ETH_LINK_SPEED_50G,
_56Gbps = ::dpdk_sys::ETH_LINK_SPEED_56G,
_100Gbps = ::dpdk_sys::ETH_LINK_SPEED_100G,
}
impl LinkSpeed
{
#[inline(always)]
pub fn isHalfDuplex(&self) -> bool
{
match *self
{
LinkSpeed::_10MbpsHalfDuplex => true,
LinkSpeed::_100MbpsHalfDuplex => true,
_ => false,
}
}
#[inline(always)]
pub fn isFullDuplex(&self) -> bool
{
match *self
{
LinkSpeed::_10MbpsHalfDuplex => false,
LinkSpeed::_100MbpsHalfDuplex => false,
_ => true,
}
}
#[inline(always)]
pub fn fromLinkStatusPanicOnInvalidValue(linkSpeedInMbps: u32, isFullDuplex: bool, isUp: bool) -> Option<LinkSpeed>
{
match linkSpeedInMbps
{
ETH_SPEED_NUM_NONE =>
{
assert!(!isUp, "isUp is true for a linkSpeedInMbps '0'");
assert!(isFullDuplex, "isFullDuplex is false (ie half duplex) for a linkSpeedInMbps '0'");
None
},
ETH_SPEED_NUM_10M =>
{
assert!(isUp, "isUp is false for a linkSpeedInMbps '{}'", linkSpeedInMbps);
Some
(
if isFullDuplex
{
LinkSpeed::_10Mbps
}
else
{
LinkSpeed::_10MbpsHalfDuplex
}
)
},
ETH_SPEED_NUM_100M =>
{
assert!(isUp, "isUp is false for a linkSpeedInMbps '{}'", linkSpeedInMbps);
Some
(
if isFullDuplex
{
LinkSpeed::_100Mbps
}
else
{
LinkSpeed::_100MbpsHalfDuplex
}
)
}
_ =>
{
assert!(isUp, "isUp is false for a linkSpeedInMbps '{}'", linkSpeedInMbps);
assert!(isFullDuplex, "isFullDuplex is false (ie half duplex) for a linkSpeedInMbps of '{}'", linkSpeedInMbps);
Some
(
match linkSpeedInMbps
{
ETH_SPEED_NUM_1G => LinkSpeed::_1Gbps,
ETH_SPEED_NUM_2_5G => LinkSpeed::_2AndAHalfGbps,
ETH_SPEED_NUM_5G => LinkSpeed::_5Gbps,
ETH_SPEED_NUM_10G => LinkSpeed::_10Gbps,
ETH_SPEED_NUM_20G => LinkSpeed::_20Gbps,
ETH_SPEED_NUM_25G => LinkSpeed::_25Gbps,
ETH_SPEED_NUM_40G => LinkSpeed::_40Gbps,
ETH_SPEED_NUM_50G => LinkSpeed::_50Gbps,
ETH_SPEED_NUM_56G => LinkSpeed::_56Gbps,
ETH_SPEED_NUM_100G => LinkSpeed::_100Gbps,
_ => panic!("The linkSpeedInMbps '{}' is not a valid value", linkSpeedInMbps),
}
)
}
}
}
}