blob: 2f89ce488906b6803ab5f22d843ee64ddba9ac73 [file] [log] [blame]
/// Represents an ARP protocol hardware identifier.
///
/// You can access the underlying `u16` value by using `.0` and any `u16`
/// can be converted to an `ArpHardwareId`:
///
/// ```
/// use etherparse::ArpHardwareId;
///
/// assert_eq!(ArpHardwareId::ETHER.0, 0x0001);
/// assert_eq!(ArpHardwareId::ETHER, ArpHardwareId(0x0001));
///
/// // convert to ArpHardwareId using the from & into trait
/// let arp_hrd_id: ArpHardwareId = 0x0001.into();
/// assert_eq!(ArpHardwareId::ETHER, arp_hrd_id);
///
/// // convert to u16 using the from & into trait
/// let num: u16 = ArpHardwareId::ETHER.into();
/// assert_eq!(0x0001, num);
/// ```
///
#[derive(Clone, Copy, Eq, PartialEq, Default, Hash)]
pub struct ArpHardwareId(pub u16);
impl ArpHardwareId {
// Numbers sourced from https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/include/uapi/linux/if_arp.h?id=e33c4963bf536900f917fb65a687724d5539bc21
pub const NETROM: ArpHardwareId = Self(0);
pub const ETHER: ArpHardwareId = Self(1);
pub const EETHER: ArpHardwareId = Self(2);
pub const AX25: ArpHardwareId = Self(3);
pub const PRONET: ArpHardwareId = Self(4);
pub const CHAOS: ArpHardwareId = Self(5);
pub const IEEE802: ArpHardwareId = Self(6);
pub const ARCNET: ArpHardwareId = Self(7);
pub const APPLETLK: ArpHardwareId = Self(8);
pub const DLCI: ArpHardwareId = Self(15);
pub const ATM: ArpHardwareId = Self(19);
pub const METRICOM: ArpHardwareId = Self(23);
pub const IEEE1394: ArpHardwareId = Self(24);
pub const EUI64: ArpHardwareId = Self(27);
pub const INFINIBAND: ArpHardwareId = Self(32);
pub const SLIP: ArpHardwareId = Self(256);
pub const CSLIP: ArpHardwareId = Self(257);
pub const SLIP6: ArpHardwareId = Self(258);
pub const CSLIP6: ArpHardwareId = Self(259);
pub const RSRVD: ArpHardwareId = Self(260);
pub const ADAPT: ArpHardwareId = Self(264);
pub const ROSE: ArpHardwareId = Self(270);
pub const X25: ArpHardwareId = Self(271);
pub const HWX25: ArpHardwareId = Self(272);
pub const CAN: ArpHardwareId = Self(280);
pub const PPP: ArpHardwareId = Self(512);
pub const CISCO_HDLC: ArpHardwareId = Self(513);
pub const LAPB: ArpHardwareId = Self(516);
pub const DDCMP: ArpHardwareId = Self(517);
pub const RAWHDLC: ArpHardwareId = Self(518);
pub const RAWIP: ArpHardwareId = Self(519);
pub const TUNNEL: ArpHardwareId = Self(768);
pub const TUNNEL6: ArpHardwareId = Self(769);
pub const FRAD: ArpHardwareId = Self(770);
pub const SKIP: ArpHardwareId = Self(771);
pub const LOOPBACK: ArpHardwareId = Self(772);
pub const LOCALTLK: ArpHardwareId = Self(773);
pub const FDDI: ArpHardwareId = Self(774);
pub const BIF: ArpHardwareId = Self(775);
pub const SIT: ArpHardwareId = Self(776);
pub const IPDDP: ArpHardwareId = Self(777);
pub const IPGRE: ArpHardwareId = Self(778);
pub const PIMREG: ArpHardwareId = Self(779);
pub const HIPPI: ArpHardwareId = Self(780);
pub const ASH: ArpHardwareId = Self(781);
pub const ECONET: ArpHardwareId = Self(782);
pub const IRDA: ArpHardwareId = Self(783);
pub const FCPP: ArpHardwareId = Self(784);
pub const FCAL: ArpHardwareId = Self(785);
pub const FCPL: ArpHardwareId = Self(786);
pub const FCFABRIC: ArpHardwareId = Self(787);
pub const IEEE802_TR: ArpHardwareId = Self(800);
pub const IEEE80211: ArpHardwareId = Self(801);
pub const IEEE80211_PRISM: ArpHardwareId = Self(802);
pub const IEEE80211_RADIOTAP: ArpHardwareId = Self(803);
pub const IEEE802154: ArpHardwareId = Self(804);
pub const IEEE802154_MONITOR: ArpHardwareId = Self(805);
pub const PHONET: ArpHardwareId = Self(820);
pub const PHONET_PIPE: ArpHardwareId = Self(821);
pub const CAIF: ArpHardwareId = Self(822);
pub const IP6GRE: ArpHardwareId = Self(823);
pub const NETLINK: ArpHardwareId = Self(824);
pub const IPV6LOWPAN: ArpHardwareId = Self(825);
pub const VSOCKMON: ArpHardwareId = Self(826);
pub const VOID: ArpHardwareId = Self(0xFFFF);
pub const NONE: ArpHardwareId = Self(0xFFFE);
}
impl From<u16> for ArpHardwareId {
#[inline]
fn from(val: u16) -> Self {
ArpHardwareId(val)
}
}
impl From<ArpHardwareId> for u16 {
#[inline]
fn from(val: ArpHardwareId) -> Self {
val.0
}
}
impl core::fmt::Display for ArpHardwareId {
// Names sourced from https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/include/uapi/linux/if_arp.h?id=e33c4963bf536900f917fb65a687724d5539bc21
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match *self {
Self::NETROM => write!(f, "{} (from KA9Q: NET/ROM pseudo)", self.0),
Self::ETHER => write!(f, "{} (Ethernet 10Mbps)", self.0),
Self::EETHER => write!(f, "{} (Experimental Ethernet)", self.0),
Self::AX25 => write!(f, "{} (AX.25 Level 2)", self.0),
Self::PRONET => write!(f, "{} (PROnet token ring)", self.0),
Self::CHAOS => write!(f, "{} (Chaosnet)", self.0),
Self::IEEE802 => write!(f, "{} (IEEE 802.2 Ethernet/TR/TB)", self.0),
Self::ARCNET => write!(f, "{} (ARCnet)", self.0),
Self::APPLETLK => write!(f, "{} (APPLEtalk)", self.0),
Self::DLCI => write!(f, "{} (Frame Relay DLCI)", self.0),
Self::ATM => write!(f, "{} (ATM)", self.0),
Self::METRICOM => write!(f, "{} (Metricom STRIP (new IANA id))", self.0),
Self::IEEE1394 => write!(f, "{} (IEEE 1394 IPv4 - RFC 2734)", self.0),
Self::EUI64 => write!(f, "{} (EUI-64)", self.0),
Self::INFINIBAND => write!(f, "{} (InfiniBand)", self.0),
Self::SLIP => write!(f, "{} (SLIP)", self.0),
Self::CSLIP => write!(f, "{} (CSLIP)", self.0),
Self::SLIP6 => write!(f, "{} (SLIP6)", self.0),
Self::CSLIP6 => write!(f, "{} (CSLIP6)", self.0),
Self::RSRVD => write!(f, "{} (Notional KISS type)", self.0),
Self::ADAPT => write!(f, "{} (ADAPT)", self.0),
Self::ROSE => write!(f, "{} (ROSE)", self.0),
Self::X25 => write!(f, "{} (CCITT X.25)", self.0),
Self::HWX25 => write!(f, "{} (Boards with X.25 in firmware)", self.0),
Self::CAN => write!(f, "{} (Controller Area Network)", self.0),
Self::PPP => write!(f, "{} (PPP)", self.0),
Self::CISCO_HDLC => write!(f, "{} (Cisco HDLC)", self.0),
Self::LAPB => write!(f, "{} (LAPB)", self.0),
Self::DDCMP => write!(f, "{} (Digital's DDCMP protocol)", self.0),
Self::RAWHDLC => write!(f, "{} (Raw HDLC)", self.0),
Self::RAWIP => write!(f, "{} (Raw IP)", self.0),
Self::TUNNEL => write!(f, "{} (IPIP tunnel)", self.0),
Self::TUNNEL6 => write!(f, "{} (IP6IP6 tunnel)", self.0),
Self::FRAD => write!(f, "{} (Frame Relay Access Device)", self.0),
Self::SKIP => write!(f, "{} (SKIP vif)", self.0),
Self::LOOPBACK => write!(f, "{} (Loopback device)", self.0),
Self::LOCALTLK => write!(f, "{} (Localtalk device)", self.0),
Self::FDDI => write!(f, "{} (Fiber Distributed Data Interface)", self.0),
Self::BIF => write!(f, "{} (AP1000 BIF)", self.0),
Self::SIT => write!(f, "{} (sit0 device - IPv6-in-IPv4)", self.0),
Self::IPDDP => write!(f, "{} (IP over DDP tunneller)", self.0),
Self::IPGRE => write!(f, "{} (GRE over IP)", self.0),
Self::PIMREG => write!(f, "{} (PIMSM register interface)", self.0),
Self::HIPPI => write!(f, "{} (High Performance Parallel Interface)", self.0),
Self::ASH => write!(f, "{} (Nexus 64Mbps Ash)", self.0),
Self::ECONET => write!(f, "{} (Acorn Econet)", self.0),
Self::IRDA => write!(f, "{} (Linux-IrDA)", self.0),
Self::FCPP => write!(f, "{} (Point to point fibrechannel)", self.0),
Self::FCAL => write!(f, "{} (Fibrechannel arbitrated loop)", self.0),
Self::FCPL => write!(f, "{} (Fibrechannel public loop)", self.0),
Self::FCFABRIC => write!(f, "{} (Fibrechannel fabric)", self.0),
Self::IEEE802_TR => write!(f, "{} (Magic type ident for TR)", self.0),
Self::IEEE80211 => write!(f, "{} (IEEE 802.11)", self.0),
Self::IEEE80211_PRISM => write!(f, "{} (IEEE 802.11 + Prism2 header)", self.0),
Self::IEEE80211_RADIOTAP => write!(f, "{} (IEEE 802.11 + radiotap header)", self.0),
Self::IEEE802154 => write!(f, "{} (IEEE 802.15.4)", self.0),
Self::IEEE802154_MONITOR => write!(f, "{} (IEEE 802.15.4 network monitor)", self.0),
Self::PHONET => write!(f, "{} (PhoNet media type)", self.0),
Self::PHONET_PIPE => write!(f, "{} (PhoNet pipe header)", self.0),
Self::CAIF => write!(f, "{} (CAIF media type)", self.0),
Self::IP6GRE => write!(f, "{} (GRE over IPv6)", self.0),
Self::NETLINK => write!(f, "{} (Netlink header)", self.0),
Self::IPV6LOWPAN => write!(f, "{} (IPv6 over LoWPAN)", self.0),
Self::VSOCKMON => write!(f, "{} (Vsock monitor header)", self.0),
Self::VOID => write!(f, "{:#06X} (Void type, nothing is known)", self.0),
Self::NONE => write!(f, "{:#06X} (zero header length)", self.0),
_ => write!(f, "{:#06X}", self.0),
}
}
}
impl core::fmt::Debug for ArpHardwareId {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
core::fmt::Display::fmt(&self, f)
}
}
#[cfg(test)]
mod test {
use super::*;
use alloc::format;
#[test]
fn to_u16() {
assert_eq!(0, u16::from(ArpHardwareId::NETROM));
assert_eq!(1, u16::from(ArpHardwareId::ETHER));
assert_eq!(2, u16::from(ArpHardwareId::EETHER));
assert_eq!(3, u16::from(ArpHardwareId::AX25));
assert_eq!(4, u16::from(ArpHardwareId::PRONET));
assert_eq!(5, u16::from(ArpHardwareId::CHAOS));
assert_eq!(6, u16::from(ArpHardwareId::IEEE802));
assert_eq!(7, u16::from(ArpHardwareId::ARCNET));
assert_eq!(8, u16::from(ArpHardwareId::APPLETLK));
assert_eq!(15, u16::from(ArpHardwareId::DLCI));
assert_eq!(19, u16::from(ArpHardwareId::ATM));
assert_eq!(23, u16::from(ArpHardwareId::METRICOM));
assert_eq!(24, u16::from(ArpHardwareId::IEEE1394));
assert_eq!(27, u16::from(ArpHardwareId::EUI64));
assert_eq!(32, u16::from(ArpHardwareId::INFINIBAND));
assert_eq!(256, u16::from(ArpHardwareId::SLIP));
assert_eq!(257, u16::from(ArpHardwareId::CSLIP));
assert_eq!(258, u16::from(ArpHardwareId::SLIP6));
assert_eq!(259, u16::from(ArpHardwareId::CSLIP6));
assert_eq!(260, u16::from(ArpHardwareId::RSRVD));
assert_eq!(264, u16::from(ArpHardwareId::ADAPT));
assert_eq!(270, u16::from(ArpHardwareId::ROSE));
assert_eq!(271, u16::from(ArpHardwareId::X25));
assert_eq!(272, u16::from(ArpHardwareId::HWX25));
assert_eq!(280, u16::from(ArpHardwareId::CAN));
assert_eq!(512, u16::from(ArpHardwareId::PPP));
assert_eq!(513, u16::from(ArpHardwareId::CISCO_HDLC));
assert_eq!(516, u16::from(ArpHardwareId::LAPB));
assert_eq!(517, u16::from(ArpHardwareId::DDCMP));
assert_eq!(518, u16::from(ArpHardwareId::RAWHDLC));
assert_eq!(519, u16::from(ArpHardwareId::RAWIP));
assert_eq!(768, u16::from(ArpHardwareId::TUNNEL));
assert_eq!(769, u16::from(ArpHardwareId::TUNNEL6));
assert_eq!(770, u16::from(ArpHardwareId::FRAD));
assert_eq!(771, u16::from(ArpHardwareId::SKIP));
assert_eq!(772, u16::from(ArpHardwareId::LOOPBACK));
assert_eq!(773, u16::from(ArpHardwareId::LOCALTLK));
assert_eq!(774, u16::from(ArpHardwareId::FDDI));
assert_eq!(775, u16::from(ArpHardwareId::BIF));
assert_eq!(776, u16::from(ArpHardwareId::SIT));
assert_eq!(777, u16::from(ArpHardwareId::IPDDP));
assert_eq!(778, u16::from(ArpHardwareId::IPGRE));
assert_eq!(779, u16::from(ArpHardwareId::PIMREG));
assert_eq!(780, u16::from(ArpHardwareId::HIPPI));
assert_eq!(781, u16::from(ArpHardwareId::ASH));
assert_eq!(782, u16::from(ArpHardwareId::ECONET));
assert_eq!(783, u16::from(ArpHardwareId::IRDA));
assert_eq!(784, u16::from(ArpHardwareId::FCPP));
assert_eq!(785, u16::from(ArpHardwareId::FCAL));
assert_eq!(786, u16::from(ArpHardwareId::FCPL));
assert_eq!(787, u16::from(ArpHardwareId::FCFABRIC));
assert_eq!(800, u16::from(ArpHardwareId::IEEE802_TR));
assert_eq!(801, u16::from(ArpHardwareId::IEEE80211));
assert_eq!(802, u16::from(ArpHardwareId::IEEE80211_PRISM));
assert_eq!(803, u16::from(ArpHardwareId::IEEE80211_RADIOTAP));
assert_eq!(804, u16::from(ArpHardwareId::IEEE802154));
assert_eq!(805, u16::from(ArpHardwareId::IEEE802154_MONITOR));
assert_eq!(820, u16::from(ArpHardwareId::PHONET));
assert_eq!(821, u16::from(ArpHardwareId::PHONET_PIPE));
assert_eq!(822, u16::from(ArpHardwareId::CAIF));
assert_eq!(823, u16::from(ArpHardwareId::IP6GRE));
assert_eq!(824, u16::from(ArpHardwareId::NETLINK));
assert_eq!(825, u16::from(ArpHardwareId::IPV6LOWPAN));
assert_eq!(826, u16::from(ArpHardwareId::VSOCKMON));
assert_eq!(0xFFFF, u16::from(ArpHardwareId::VOID));
assert_eq!(0xFFFE, u16::from(ArpHardwareId::NONE));
}
#[test]
fn from_u16() {
assert_eq!(ArpHardwareId::from(0), ArpHardwareId::NETROM);
assert_eq!(ArpHardwareId::from(1), ArpHardwareId::ETHER);
assert_eq!(ArpHardwareId::from(2), ArpHardwareId::EETHER);
assert_eq!(ArpHardwareId::from(3), ArpHardwareId::AX25);
assert_eq!(ArpHardwareId::from(4), ArpHardwareId::PRONET);
assert_eq!(ArpHardwareId::from(5), ArpHardwareId::CHAOS);
assert_eq!(ArpHardwareId::from(6), ArpHardwareId::IEEE802);
assert_eq!(ArpHardwareId::from(7), ArpHardwareId::ARCNET);
assert_eq!(ArpHardwareId::from(8), ArpHardwareId::APPLETLK);
assert_eq!(ArpHardwareId::from(15), ArpHardwareId::DLCI);
assert_eq!(ArpHardwareId::from(19), ArpHardwareId::ATM);
assert_eq!(ArpHardwareId::from(23), ArpHardwareId::METRICOM);
assert_eq!(ArpHardwareId::from(24), ArpHardwareId::IEEE1394);
assert_eq!(ArpHardwareId::from(27), ArpHardwareId::EUI64);
assert_eq!(ArpHardwareId::from(32), ArpHardwareId::INFINIBAND);
assert_eq!(ArpHardwareId::from(256), ArpHardwareId::SLIP);
assert_eq!(ArpHardwareId::from(257), ArpHardwareId::CSLIP);
assert_eq!(ArpHardwareId::from(258), ArpHardwareId::SLIP6);
assert_eq!(ArpHardwareId::from(259), ArpHardwareId::CSLIP6);
assert_eq!(ArpHardwareId::from(260), ArpHardwareId::RSRVD);
assert_eq!(ArpHardwareId::from(264), ArpHardwareId::ADAPT);
assert_eq!(ArpHardwareId::from(270), ArpHardwareId::ROSE);
assert_eq!(ArpHardwareId::from(271), ArpHardwareId::X25);
assert_eq!(ArpHardwareId::from(272), ArpHardwareId::HWX25);
assert_eq!(ArpHardwareId::from(280), ArpHardwareId::CAN);
assert_eq!(ArpHardwareId::from(512), ArpHardwareId::PPP);
assert_eq!(ArpHardwareId::from(513), ArpHardwareId::CISCO_HDLC);
assert_eq!(ArpHardwareId::from(516), ArpHardwareId::LAPB);
assert_eq!(ArpHardwareId::from(517), ArpHardwareId::DDCMP);
assert_eq!(ArpHardwareId::from(518), ArpHardwareId::RAWHDLC);
assert_eq!(ArpHardwareId::from(519), ArpHardwareId::RAWIP);
assert_eq!(ArpHardwareId::from(768), ArpHardwareId::TUNNEL);
assert_eq!(ArpHardwareId::from(769), ArpHardwareId::TUNNEL6);
assert_eq!(ArpHardwareId::from(770), ArpHardwareId::FRAD);
assert_eq!(ArpHardwareId::from(771), ArpHardwareId::SKIP);
assert_eq!(ArpHardwareId::from(772), ArpHardwareId::LOOPBACK);
assert_eq!(ArpHardwareId::from(773), ArpHardwareId::LOCALTLK);
assert_eq!(ArpHardwareId::from(774), ArpHardwareId::FDDI);
assert_eq!(ArpHardwareId::from(775), ArpHardwareId::BIF);
assert_eq!(ArpHardwareId::from(776), ArpHardwareId::SIT);
assert_eq!(ArpHardwareId::from(777), ArpHardwareId::IPDDP);
assert_eq!(ArpHardwareId::from(778), ArpHardwareId::IPGRE);
assert_eq!(ArpHardwareId::from(779), ArpHardwareId::PIMREG);
assert_eq!(ArpHardwareId::from(780), ArpHardwareId::HIPPI);
assert_eq!(ArpHardwareId::from(781), ArpHardwareId::ASH);
assert_eq!(ArpHardwareId::from(782), ArpHardwareId::ECONET);
assert_eq!(ArpHardwareId::from(783), ArpHardwareId::IRDA);
assert_eq!(ArpHardwareId::from(784), ArpHardwareId::FCPP);
assert_eq!(ArpHardwareId::from(785), ArpHardwareId::FCAL);
assert_eq!(ArpHardwareId::from(786), ArpHardwareId::FCPL);
assert_eq!(ArpHardwareId::from(787), ArpHardwareId::FCFABRIC);
assert_eq!(ArpHardwareId::from(800), ArpHardwareId::IEEE802_TR);
assert_eq!(ArpHardwareId::from(801), ArpHardwareId::IEEE80211);
assert_eq!(ArpHardwareId::from(802), ArpHardwareId::IEEE80211_PRISM);
assert_eq!(ArpHardwareId::from(803), ArpHardwareId::IEEE80211_RADIOTAP);
assert_eq!(ArpHardwareId::from(804), ArpHardwareId::IEEE802154);
assert_eq!(ArpHardwareId::from(805), ArpHardwareId::IEEE802154_MONITOR);
assert_eq!(ArpHardwareId::from(820), ArpHardwareId::PHONET);
assert_eq!(ArpHardwareId::from(821), ArpHardwareId::PHONET_PIPE);
assert_eq!(ArpHardwareId::from(822), ArpHardwareId::CAIF);
assert_eq!(ArpHardwareId::from(823), ArpHardwareId::IP6GRE);
assert_eq!(ArpHardwareId::from(824), ArpHardwareId::NETLINK);
assert_eq!(ArpHardwareId::from(825), ArpHardwareId::IPV6LOWPAN);
assert_eq!(ArpHardwareId::from(826), ArpHardwareId::VSOCKMON);
assert_eq!(ArpHardwareId::from(0xFFFF), ArpHardwareId::VOID);
assert_eq!(ArpHardwareId::from(0xFFFE), ArpHardwareId::NONE);
}
#[test]
fn display_dbg() {
let pairs = &[
(ArpHardwareId::NETROM, "0 (from KA9Q: NET/ROM pseudo)"),
(ArpHardwareId::ETHER, "1 (Ethernet 10Mbps)"),
(ArpHardwareId::EETHER, "2 (Experimental Ethernet)"),
(ArpHardwareId::AX25, "3 (AX.25 Level 2)"),
(ArpHardwareId::PRONET, "4 (PROnet token ring)"),
(ArpHardwareId::CHAOS, "5 (Chaosnet)"),
(ArpHardwareId::IEEE802, "6 (IEEE 802.2 Ethernet/TR/TB)"),
(ArpHardwareId::ARCNET, "7 (ARCnet)"),
(ArpHardwareId::APPLETLK, "8 (APPLEtalk)"),
(ArpHardwareId::DLCI, "15 (Frame Relay DLCI)"),
(ArpHardwareId::ATM, "19 (ATM)"),
(ArpHardwareId::METRICOM, "23 (Metricom STRIP (new IANA id))"),
(ArpHardwareId::IEEE1394, "24 (IEEE 1394 IPv4 - RFC 2734)"),
(ArpHardwareId::EUI64, "27 (EUI-64)"),
(ArpHardwareId::INFINIBAND, "32 (InfiniBand)"),
(ArpHardwareId::SLIP, "256 (SLIP)"),
(ArpHardwareId::CSLIP, "257 (CSLIP)"),
(ArpHardwareId::SLIP6, "258 (SLIP6)"),
(ArpHardwareId::CSLIP6, "259 (CSLIP6)"),
(ArpHardwareId::RSRVD, "260 (Notional KISS type)"),
(ArpHardwareId::ADAPT, "264 (ADAPT)"),
(ArpHardwareId::ROSE, "270 (ROSE)"),
(ArpHardwareId::X25, "271 (CCITT X.25)"),
(ArpHardwareId::HWX25, "272 (Boards with X.25 in firmware)"),
(ArpHardwareId::CAN, "280 (Controller Area Network)"),
(ArpHardwareId::PPP, "512 (PPP)"),
(ArpHardwareId::CISCO_HDLC, "513 (Cisco HDLC)"),
(ArpHardwareId::LAPB, "516 (LAPB)"),
(ArpHardwareId::DDCMP, "517 (Digital's DDCMP protocol)"),
(ArpHardwareId::RAWHDLC, "518 (Raw HDLC)"),
(ArpHardwareId::RAWIP, "519 (Raw IP)"),
(ArpHardwareId::TUNNEL, "768 (IPIP tunnel)"),
(ArpHardwareId::TUNNEL6, "769 (IP6IP6 tunnel)"),
(ArpHardwareId::FRAD, "770 (Frame Relay Access Device)"),
(ArpHardwareId::SKIP, "771 (SKIP vif)"),
(ArpHardwareId::LOOPBACK, "772 (Loopback device)"),
(ArpHardwareId::LOCALTLK, "773 (Localtalk device)"),
(
ArpHardwareId::FDDI,
"774 (Fiber Distributed Data Interface)",
),
(ArpHardwareId::BIF, "775 (AP1000 BIF)"),
(ArpHardwareId::SIT, "776 (sit0 device - IPv6-in-IPv4)"),
(ArpHardwareId::IPDDP, "777 (IP over DDP tunneller)"),
(ArpHardwareId::IPGRE, "778 (GRE over IP)"),
(ArpHardwareId::PIMREG, "779 (PIMSM register interface)"),
(
ArpHardwareId::HIPPI,
"780 (High Performance Parallel Interface)",
),
(ArpHardwareId::ASH, "781 (Nexus 64Mbps Ash)"),
(ArpHardwareId::ECONET, "782 (Acorn Econet)"),
(ArpHardwareId::IRDA, "783 (Linux-IrDA)"),
(ArpHardwareId::FCPP, "784 (Point to point fibrechannel)"),
(ArpHardwareId::FCAL, "785 (Fibrechannel arbitrated loop)"),
(ArpHardwareId::FCPL, "786 (Fibrechannel public loop)"),
(ArpHardwareId::FCFABRIC, "787 (Fibrechannel fabric)"),
(ArpHardwareId::IEEE802_TR, "800 (Magic type ident for TR)"),
(ArpHardwareId::IEEE80211, "801 (IEEE 802.11)"),
(
ArpHardwareId::IEEE80211_PRISM,
"802 (IEEE 802.11 + Prism2 header)",
),
(
ArpHardwareId::IEEE80211_RADIOTAP,
"803 (IEEE 802.11 + radiotap header)",
),
(ArpHardwareId::IEEE802154, "804 (IEEE 802.15.4)"),
(
ArpHardwareId::IEEE802154_MONITOR,
"805 (IEEE 802.15.4 network monitor)",
),
(ArpHardwareId::PHONET, "820 (PhoNet media type)"),
(ArpHardwareId::PHONET_PIPE, "821 (PhoNet pipe header)"),
(ArpHardwareId::CAIF, "822 (CAIF media type)"),
(ArpHardwareId::IP6GRE, "823 (GRE over IPv6)"),
(ArpHardwareId::NETLINK, "824 (Netlink header)"),
(ArpHardwareId::IPV6LOWPAN, "825 (IPv6 over LoWPAN)"),
(ArpHardwareId::VSOCKMON, "826 (Vsock monitor header)"),
(ArpHardwareId::VOID, "0xFFFF (Void type, nothing is known)"),
(ArpHardwareId::NONE, "0xFFFE (zero header length)"),
(ArpHardwareId::from(0x1234), "0x1234"),
];
for (ether_type, str_value) in pairs {
assert_eq!(str_value, &format!("{}", ether_type));
assert_eq!(str_value, &format!("{:?}", ether_type));
}
}
#[test]
fn default() {
let value: ArpHardwareId = Default::default();
assert_eq!(ArpHardwareId(0), value);
}
#[test]
fn clone_eq() {
let values = &[
ArpHardwareId::NETROM,
ArpHardwareId::ETHER,
ArpHardwareId::EETHER,
ArpHardwareId::AX25,
ArpHardwareId::PRONET,
ArpHardwareId::CHAOS,
ArpHardwareId::IEEE802,
ArpHardwareId::ARCNET,
ArpHardwareId::APPLETLK,
ArpHardwareId::DLCI,
ArpHardwareId::ATM,
ArpHardwareId::METRICOM,
ArpHardwareId::IEEE1394,
ArpHardwareId::EUI64,
ArpHardwareId::INFINIBAND,
ArpHardwareId::SLIP,
ArpHardwareId::CSLIP,
ArpHardwareId::SLIP6,
ArpHardwareId::CSLIP6,
ArpHardwareId::RSRVD,
ArpHardwareId::ADAPT,
ArpHardwareId::ROSE,
ArpHardwareId::X25,
ArpHardwareId::HWX25,
ArpHardwareId::CAN,
ArpHardwareId::PPP,
ArpHardwareId::CISCO_HDLC,
ArpHardwareId::LAPB,
ArpHardwareId::DDCMP,
ArpHardwareId::RAWHDLC,
ArpHardwareId::RAWIP,
ArpHardwareId::TUNNEL,
ArpHardwareId::TUNNEL6,
ArpHardwareId::FRAD,
ArpHardwareId::SKIP,
ArpHardwareId::LOOPBACK,
ArpHardwareId::LOCALTLK,
ArpHardwareId::FDDI,
ArpHardwareId::BIF,
ArpHardwareId::SIT,
ArpHardwareId::IPDDP,
ArpHardwareId::IPGRE,
ArpHardwareId::PIMREG,
ArpHardwareId::HIPPI,
ArpHardwareId::ASH,
ArpHardwareId::ECONET,
ArpHardwareId::IRDA,
ArpHardwareId::FCPP,
ArpHardwareId::FCAL,
ArpHardwareId::FCPL,
ArpHardwareId::FCFABRIC,
ArpHardwareId::IEEE802_TR,
ArpHardwareId::IEEE80211,
ArpHardwareId::IEEE80211_PRISM,
ArpHardwareId::IEEE80211_RADIOTAP,
ArpHardwareId::IEEE802154,
ArpHardwareId::IEEE802154_MONITOR,
ArpHardwareId::PHONET,
ArpHardwareId::PHONET_PIPE,
ArpHardwareId::CAIF,
ArpHardwareId::IP6GRE,
ArpHardwareId::NETLINK,
ArpHardwareId::IPV6LOWPAN,
ArpHardwareId::VSOCKMON,
ArpHardwareId::VOID,
ArpHardwareId::NONE,
];
// clone
for v in values {
assert_eq!(v, &v.clone());
}
// eq
for (a_pos, a) in values.iter().enumerate() {
for (b_pos, b) in values.iter().enumerate() {
assert_eq!(a_pos == b_pos, a == b);
assert_eq!(a_pos != b_pos, a != b);
}
}
}
}