etherparse/net/
arp_hardware_id.rs

1/// Represents an ARP protocol hardware identifier.
2///
3/// You can access the underlying `u16` value by using `.0` and any `u16`
4/// can be converted to an `ArpHardwareId`:
5///
6/// ```
7/// use etherparse::ArpHardwareId;
8///
9/// assert_eq!(ArpHardwareId::ETHERNET.0, 0x0001);
10/// assert_eq!(ArpHardwareId::ETHERNET, ArpHardwareId(0x0001));
11///
12/// // convert to ArpHardwareId using the from & into trait
13/// let arp_hrd_id: ArpHardwareId = 0x0001.into();
14/// assert_eq!(ArpHardwareId::ETHERNET, arp_hrd_id);
15///
16/// // convert to u16 using the from & into trait
17/// let num: u16 = ArpHardwareId::ETHERNET.into();
18/// assert_eq!(0x0001, num);
19/// ```
20///
21#[derive(Clone, Copy, Eq, PartialEq, Default, Ord, PartialOrd, Hash)]
22pub struct ArpHardwareId(pub u16);
23
24impl ArpHardwareId {
25    // Numbers sourced from
26    // * https://www.iana.org/assignments/arp-parameters/arp-parameters.xhtml
27    // * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/include/uapi/linux/if_arp.h?id=e33c4963bf536900f917fb65a687724d5539bc21
28
29    /// Reserved
30    pub const NETROM: ArpHardwareId = Self(0);
31
32    /// Ethernet (10Mb)
33    pub const ETHERNET: ArpHardwareId = Self(1);
34
35    /// Deprecated use [`ArpHardwareId::ETHERNET`] instead
36    #[deprecated(since = "0.17.0", note = "Use `ArpHardwareId::ETHERNET` instead")]
37    pub const ETHER: ArpHardwareId = Self(1);
38
39    /// Experimental Ethernet (3Mb)
40    pub const EETHER: ArpHardwareId = Self(2);
41
42    /// Amateur Radio AX.25
43    pub const AX25: ArpHardwareId = Self(3);
44
45    /// Proteon ProNET Token Ring
46    pub const PRONET: ArpHardwareId = Self(4);
47
48    /// Chaos
49    pub const CHAOS: ArpHardwareId = Self(5);
50
51    /// IEEE 802 Networks
52    pub const IEEE802: ArpHardwareId = Self(6);
53
54    /// ARCNET
55    pub const ARCNET: ArpHardwareId = Self(7);
56
57    /// Hyperchannel
58    pub const HYPERCHANNEL: ArpHardwareId = Self(8);
59
60    /// APPLEtalk
61    pub const APPLETLK: ArpHardwareId = Self(8);
62
63    /// Lanstar
64    pub const LANSTAR: ArpHardwareId = Self(9);
65
66    /// Autonet Short Address
67    pub const AUTONET_SHORT_ADDRESS: ArpHardwareId = Self(10);
68
69    /// LocalTalk
70    pub const LOCAL_TALK: ArpHardwareId = Self(11);
71
72    /// LocalNet (IBM PCNet or SYTEK LocalNET)
73    pub const LOCAL_NET: ArpHardwareId = Self(12);
74
75    /// Ultra link
76    pub const ULTRA_LINK: ArpHardwareId = Self(13);
77
78    /// SMDS
79    pub const SMDS: ArpHardwareId = Self(14);
80
81    /// DLCI (alias for [`ArpHardwareId::FRAME_RELAY`])
82    pub const DLCI: ArpHardwareId = Self(15);
83
84    /// Frame Relay (alias for [`ArpHardwareId::DLCI`])
85    pub const FRAME_RELAY: ArpHardwareId = Self(15);
86
87    /// Asynchronous Transmission Mode (ATM) \[JXB2\]
88    pub const ATM_JXB2: ArpHardwareId = Self(16);
89
90    /// HDLC
91    pub const HDLC: ArpHardwareId = Self(17);
92
93    /// Fibre Channel
94    pub const FIBRE_CHANNEL: ArpHardwareId = Self(18);
95
96    /// Asynchronous Transmission Mode (ATM) \[RFC2225\]
97    pub const ATM: ArpHardwareId = Self(19);
98
99    /// Serial Line
100    pub const SERIAL_LINE: ArpHardwareId = Self(20);
101
102    /// Asynchronous Transmission Mode (ATM) \[Mike_Burrows\]
103    pub const ATM_21: ArpHardwareId = Self(21);
104
105    /// MIL-STD-188-220
106    pub const MIL_STD_188_220: ArpHardwareId = Self(22);
107
108    /// Metricom
109    pub const METRICOM: ArpHardwareId = Self(23);
110
111    /// IEEE 1394.1995
112    pub const IEEE1394: ArpHardwareId = Self(24);
113
114    /// MAPOS
115    pub const MAPOS: ArpHardwareId = Self(25);
116
117    /// Twinaxial
118    pub const TWINAXIAL: ArpHardwareId = Self(26);
119
120    /// EUI-64
121    pub const EUI64: ArpHardwareId = Self(27);
122
123    /// HIPARP
124    pub const HIPARP: ArpHardwareId = Self(28);
125
126    /// IP and ARP over ISO 7816-3
127    pub const IP_AND_ARP_OVER_ISO_7816_3: ArpHardwareId = Self(29);
128
129    /// ARPSec
130    pub const ARPSEC: ArpHardwareId = Self(30);
131
132    /// IPsec tunnel
133    pub const IPSEC_TUNNEL: ArpHardwareId = Self(31);
134
135    /// InfiniBand
136    pub const INFINIBAND: ArpHardwareId = Self(32);
137
138    /// TIA-102 Project 25 Common Air Interface (CAI)
139    pub const CAI: ArpHardwareId = Self(33);
140
141    /// Wiegand Interface
142    pub const WIEGAND_INTERFACE: ArpHardwareId = Self(34);
143
144    /// Pure IP
145    pub const PURE_IP: ArpHardwareId = Self(35);
146
147    /// HW_EXP1
148    pub const HW_EXP1: ArpHardwareId = Self(36);
149
150    /// HFI
151    pub const HFI: ArpHardwareId = Self(37);
152
153    /// Unified Bus (UB)
154    pub const UNIFIED_BUS: ArpHardwareId = Self(38);
155
156    pub const SLIP: ArpHardwareId = Self(256);
157    pub const CSLIP: ArpHardwareId = Self(257);
158    pub const SLIP6: ArpHardwareId = Self(258);
159    pub const CSLIP6: ArpHardwareId = Self(259);
160    pub const RSRVD: ArpHardwareId = Self(260);
161    pub const ADAPT: ArpHardwareId = Self(264);
162    pub const ROSE: ArpHardwareId = Self(270);
163    pub const X25: ArpHardwareId = Self(271);
164    pub const HWX25: ArpHardwareId = Self(272);
165    pub const CAN: ArpHardwareId = Self(280);
166    pub const PPP: ArpHardwareId = Self(512);
167    pub const CISCO_HDLC: ArpHardwareId = Self(513);
168    pub const LAPB: ArpHardwareId = Self(516);
169    pub const DDCMP: ArpHardwareId = Self(517);
170    pub const RAWHDLC: ArpHardwareId = Self(518);
171    pub const RAWIP: ArpHardwareId = Self(519);
172    pub const TUNNEL: ArpHardwareId = Self(768);
173    pub const TUNNEL6: ArpHardwareId = Self(769);
174    pub const FRAD: ArpHardwareId = Self(770);
175    pub const SKIP: ArpHardwareId = Self(771);
176    pub const LOOPBACK: ArpHardwareId = Self(772);
177    pub const LOCALTLK: ArpHardwareId = Self(773);
178    pub const FDDI: ArpHardwareId = Self(774);
179    pub const BIF: ArpHardwareId = Self(775);
180    pub const SIT: ArpHardwareId = Self(776);
181    pub const IPDDP: ArpHardwareId = Self(777);
182    pub const IPGRE: ArpHardwareId = Self(778);
183    pub const PIMREG: ArpHardwareId = Self(779);
184    pub const HIPPI: ArpHardwareId = Self(780);
185    pub const ASH: ArpHardwareId = Self(781);
186    pub const ECONET: ArpHardwareId = Self(782);
187    pub const IRDA: ArpHardwareId = Self(783);
188    pub const FCPP: ArpHardwareId = Self(784);
189    pub const FCAL: ArpHardwareId = Self(785);
190    pub const FCPL: ArpHardwareId = Self(786);
191    pub const FCFABRIC: ArpHardwareId = Self(787);
192    pub const IEEE802_TR: ArpHardwareId = Self(800);
193    pub const IEEE80211: ArpHardwareId = Self(801);
194    pub const IEEE80211_PRISM: ArpHardwareId = Self(802);
195    pub const IEEE80211_RADIOTAP: ArpHardwareId = Self(803);
196    pub const IEEE802154: ArpHardwareId = Self(804);
197    pub const IEEE802154_MONITOR: ArpHardwareId = Self(805);
198    pub const PHONET: ArpHardwareId = Self(820);
199    pub const PHONET_PIPE: ArpHardwareId = Self(821);
200    pub const CAIF: ArpHardwareId = Self(822);
201    pub const IP6GRE: ArpHardwareId = Self(823);
202    pub const NETLINK: ArpHardwareId = Self(824);
203    pub const IPV6LOWPAN: ArpHardwareId = Self(825);
204    pub const VSOCKMON: ArpHardwareId = Self(826);
205    pub const VOID: ArpHardwareId = Self(0xFFFF);
206    pub const NONE: ArpHardwareId = Self(0xFFFE);
207}
208
209impl From<u16> for ArpHardwareId {
210    #[inline]
211    fn from(val: u16) -> Self {
212        ArpHardwareId(val)
213    }
214}
215
216impl From<ArpHardwareId> for u16 {
217    #[inline]
218    fn from(val: ArpHardwareId) -> Self {
219        val.0
220    }
221}
222
223impl core::fmt::Debug for ArpHardwareId {
224    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
225        match *self {
226            Self::NETROM => write!(f, "{} (from KA9Q: NET/ROM pseudo)", self.0),
227            Self::ETHERNET => write!(f, "{} (Ethernet)", self.0),
228            Self::EETHER => write!(f, "{} (Experimental Ethernet)", self.0),
229            Self::AX25 => write!(f, "{} (AX.25 Level 2)", self.0),
230            Self::PRONET => write!(f, "{} (PROnet token ring)", self.0),
231            Self::CHAOS => write!(f, "{} (Chaosnet)", self.0),
232            Self::IEEE802 => write!(f, "{} (IEEE 802.2 Ethernet/TR/TB)", self.0),
233            Self::ARCNET => write!(f, "{} (ARCnet)", self.0),
234            Self::APPLETLK => write!(f, "{} (APPLEtalk or Hyperchannel)", self.0),
235            Self::LANSTAR => write!(f, "{} (Lanstar)", self.0),
236            Self::AUTONET_SHORT_ADDRESS => write!(f, "{} (Autonet Short Address)", self.0),
237            Self::LOCAL_TALK => write!(f, "{} (LocalTalk)", self.0),
238            Self::LOCAL_NET => write!(f, "{} (LocalNet)", self.0),
239            Self::ULTRA_LINK => write!(f, "{} (Ultra link)", self.0),
240            Self::SMDS => write!(f, "{} (SMDS)", self.0),
241            Self::DLCI => write!(f, "{} (Frame Relay DLCI)", self.0),
242            Self::ATM_JXB2 => write!(f, "{} (Asynchronous Transmission Mode (ATM) JXB2)", self.0),
243            Self::HDLC => write!(f, "{} (HDLC)", self.0),
244            Self::FIBRE_CHANNEL => write!(f, "{} (Fibre Channel)", self.0),
245            Self::ATM => write!(f, "{} (ATM)", self.0),
246            Self::SERIAL_LINE => write!(f, "{} (Serial Line)", self.0),
247            Self::ATM_21 => write!(f, "{} (Asynchronous Transmission Mode (ATM))", self.0),
248            Self::MIL_STD_188_220 => write!(f, "{} (MIL-STD-188-220)", self.0),
249            Self::METRICOM => write!(f, "{} (Metricom STRIP (new IANA id))", self.0),
250            Self::IEEE1394 => write!(f, "{} (IEEE 1394 IPv4 - RFC 2734)", self.0),
251            Self::MAPOS => write!(f, "{} (MAPOS)", self.0),
252            Self::TWINAXIAL => write!(f, "{} (Twinaxial)", self.0),
253            Self::EUI64 => write!(f, "{} (EUI-64)", self.0),
254            Self::HIPARP => write!(f, "{} (HIPARP)", self.0),
255            Self::IP_AND_ARP_OVER_ISO_7816_3 => {
256                write!(f, "{} (IP and ARP over ISO 7816-3)", self.0)
257            }
258            Self::ARPSEC => write!(f, "{} (ARPSec)", self.0),
259            Self::IPSEC_TUNNEL => write!(f, "{} (IPsec tunnel)", self.0),
260            Self::INFINIBAND => write!(f, "{} (InfiniBand)", self.0),
261            Self::CAI => write!(
262                f,
263                "{} (TIA-102 Project 25 Common Air Interface (CAI))",
264                self.0
265            ),
266            Self::WIEGAND_INTERFACE => write!(f, "{} (Wiegand Interface)", self.0),
267            Self::PURE_IP => write!(f, "{} (Pure IP)", self.0),
268            Self::HW_EXP1 => write!(f, "{} (HW_EXP1)", self.0),
269            Self::HFI => write!(f, "{} (HFI)", self.0),
270            Self::UNIFIED_BUS => write!(f, "{} (Unified Bus (UB))", self.0),
271            Self::SLIP => write!(f, "{} (SLIP)", self.0),
272            Self::CSLIP => write!(f, "{} (CSLIP)", self.0),
273            Self::SLIP6 => write!(f, "{} (SLIP6)", self.0),
274            Self::CSLIP6 => write!(f, "{} (CSLIP6)", self.0),
275            Self::RSRVD => write!(f, "{} (Notional KISS type)", self.0),
276            Self::ADAPT => write!(f, "{} (ADAPT)", self.0),
277            Self::ROSE => write!(f, "{} (ROSE)", self.0),
278            Self::X25 => write!(f, "{} (CCITT X.25)", self.0),
279            Self::HWX25 => write!(f, "{} (Boards with X.25 in firmware)", self.0),
280            Self::CAN => write!(f, "{} (Controller Area Network)", self.0),
281            Self::PPP => write!(f, "{} (PPP)", self.0),
282            Self::CISCO_HDLC => write!(f, "{} (Cisco HDLC)", self.0),
283            Self::LAPB => write!(f, "{} (LAPB)", self.0),
284            Self::DDCMP => write!(f, "{} (Digital's DDCMP protocol)", self.0),
285            Self::RAWHDLC => write!(f, "{} (Raw HDLC)", self.0),
286            Self::RAWIP => write!(f, "{} (Raw IP)", self.0),
287            Self::TUNNEL => write!(f, "{} (IPIP tunnel)", self.0),
288            Self::TUNNEL6 => write!(f, "{} (IP6IP6 tunnel)", self.0),
289            Self::FRAD => write!(f, "{} (Frame Relay Access Device)", self.0),
290            Self::SKIP => write!(f, "{} (SKIP vif)", self.0),
291            Self::LOOPBACK => write!(f, "{} (Loopback device)", self.0),
292            Self::LOCALTLK => write!(f, "{} (Localtalk device)", self.0),
293            Self::FDDI => write!(f, "{} (Fiber Distributed Data Interface)", self.0),
294            Self::BIF => write!(f, "{} (AP1000 BIF)", self.0),
295            Self::SIT => write!(f, "{} (sit0 device - IPv6-in-IPv4)", self.0),
296            Self::IPDDP => write!(f, "{} (IP over DDP tunneller)", self.0),
297            Self::IPGRE => write!(f, "{} (GRE over IP)", self.0),
298            Self::PIMREG => write!(f, "{} (PIMSM register interface)", self.0),
299            Self::HIPPI => write!(f, "{} (High Performance Parallel Interface)", self.0),
300            Self::ASH => write!(f, "{} (Nexus 64Mbps Ash)", self.0),
301            Self::ECONET => write!(f, "{} (Acorn Econet)", self.0),
302            Self::IRDA => write!(f, "{} (Linux-IrDA)", self.0),
303            Self::FCPP => write!(f, "{} (Point to point fibrechannel)", self.0),
304            Self::FCAL => write!(f, "{} (Fibrechannel arbitrated loop)", self.0),
305            Self::FCPL => write!(f, "{} (Fibrechannel public loop)", self.0),
306            Self::FCFABRIC => write!(f, "{} (Fibrechannel fabric)", self.0),
307            Self::IEEE802_TR => write!(f, "{} (Magic type ident for TR)", self.0),
308            Self::IEEE80211 => write!(f, "{} (IEEE 802.11)", self.0),
309            Self::IEEE80211_PRISM => write!(f, "{} (IEEE 802.11 + Prism2 header)", self.0),
310            Self::IEEE80211_RADIOTAP => write!(f, "{} (IEEE 802.11 + radiotap header)", self.0),
311            Self::IEEE802154 => write!(f, "{} (IEEE 802.15.4)", self.0),
312            Self::IEEE802154_MONITOR => write!(f, "{} (IEEE 802.15.4 network monitor)", self.0),
313            Self::PHONET => write!(f, "{} (PhoNet media type)", self.0),
314            Self::PHONET_PIPE => write!(f, "{} (PhoNet pipe header)", self.0),
315            Self::CAIF => write!(f, "{} (CAIF media type)", self.0),
316            Self::IP6GRE => write!(f, "{} (GRE over IPv6)", self.0),
317            Self::NETLINK => write!(f, "{} (Netlink header)", self.0),
318            Self::IPV6LOWPAN => write!(f, "{} (IPv6 over LoWPAN)", self.0),
319            Self::VSOCKMON => write!(f, "{} (Vsock monitor header)", self.0),
320            Self::VOID => write!(f, "{:#06X} (Void type, nothing is known)", self.0),
321            Self::NONE => write!(f, "{:#06X} (zero header length)", self.0),
322            _ => write!(f, "{:#06X}", self.0),
323        }
324    }
325}
326
327#[cfg(test)]
328mod test {
329    use super::*;
330    use alloc::format;
331
332    #[test]
333    fn to_u16() {
334        assert_eq!(0, u16::from(ArpHardwareId::NETROM));
335        assert_eq!(1, u16::from(ArpHardwareId::ETHERNET));
336        assert_eq!(2, u16::from(ArpHardwareId::EETHER));
337        assert_eq!(3, u16::from(ArpHardwareId::AX25));
338        assert_eq!(4, u16::from(ArpHardwareId::PRONET));
339        assert_eq!(5, u16::from(ArpHardwareId::CHAOS));
340        assert_eq!(6, u16::from(ArpHardwareId::IEEE802));
341        assert_eq!(7, u16::from(ArpHardwareId::ARCNET));
342        assert_eq!(8, u16::from(ArpHardwareId::APPLETLK));
343        assert_eq!(15, u16::from(ArpHardwareId::DLCI));
344        assert_eq!(19, u16::from(ArpHardwareId::ATM));
345        assert_eq!(23, u16::from(ArpHardwareId::METRICOM));
346        assert_eq!(24, u16::from(ArpHardwareId::IEEE1394));
347        assert_eq!(27, u16::from(ArpHardwareId::EUI64));
348        assert_eq!(32, u16::from(ArpHardwareId::INFINIBAND));
349
350        assert_eq!(256, u16::from(ArpHardwareId::SLIP));
351        assert_eq!(257, u16::from(ArpHardwareId::CSLIP));
352        assert_eq!(258, u16::from(ArpHardwareId::SLIP6));
353        assert_eq!(259, u16::from(ArpHardwareId::CSLIP6));
354        assert_eq!(260, u16::from(ArpHardwareId::RSRVD));
355        assert_eq!(264, u16::from(ArpHardwareId::ADAPT));
356        assert_eq!(270, u16::from(ArpHardwareId::ROSE));
357        assert_eq!(271, u16::from(ArpHardwareId::X25));
358        assert_eq!(272, u16::from(ArpHardwareId::HWX25));
359        assert_eq!(280, u16::from(ArpHardwareId::CAN));
360        assert_eq!(512, u16::from(ArpHardwareId::PPP));
361        assert_eq!(513, u16::from(ArpHardwareId::CISCO_HDLC));
362        assert_eq!(516, u16::from(ArpHardwareId::LAPB));
363        assert_eq!(517, u16::from(ArpHardwareId::DDCMP));
364        assert_eq!(518, u16::from(ArpHardwareId::RAWHDLC));
365        assert_eq!(519, u16::from(ArpHardwareId::RAWIP));
366
367        assert_eq!(768, u16::from(ArpHardwareId::TUNNEL));
368        assert_eq!(769, u16::from(ArpHardwareId::TUNNEL6));
369        assert_eq!(770, u16::from(ArpHardwareId::FRAD));
370        assert_eq!(771, u16::from(ArpHardwareId::SKIP));
371        assert_eq!(772, u16::from(ArpHardwareId::LOOPBACK));
372        assert_eq!(773, u16::from(ArpHardwareId::LOCALTLK));
373        assert_eq!(774, u16::from(ArpHardwareId::FDDI));
374        assert_eq!(775, u16::from(ArpHardwareId::BIF));
375        assert_eq!(776, u16::from(ArpHardwareId::SIT));
376        assert_eq!(777, u16::from(ArpHardwareId::IPDDP));
377        assert_eq!(778, u16::from(ArpHardwareId::IPGRE));
378        assert_eq!(779, u16::from(ArpHardwareId::PIMREG));
379        assert_eq!(780, u16::from(ArpHardwareId::HIPPI));
380        assert_eq!(781, u16::from(ArpHardwareId::ASH));
381        assert_eq!(782, u16::from(ArpHardwareId::ECONET));
382        assert_eq!(783, u16::from(ArpHardwareId::IRDA));
383
384        assert_eq!(784, u16::from(ArpHardwareId::FCPP));
385        assert_eq!(785, u16::from(ArpHardwareId::FCAL));
386        assert_eq!(786, u16::from(ArpHardwareId::FCPL));
387        assert_eq!(787, u16::from(ArpHardwareId::FCFABRIC));
388
389        assert_eq!(800, u16::from(ArpHardwareId::IEEE802_TR));
390        assert_eq!(801, u16::from(ArpHardwareId::IEEE80211));
391        assert_eq!(802, u16::from(ArpHardwareId::IEEE80211_PRISM));
392        assert_eq!(803, u16::from(ArpHardwareId::IEEE80211_RADIOTAP));
393        assert_eq!(804, u16::from(ArpHardwareId::IEEE802154));
394        assert_eq!(805, u16::from(ArpHardwareId::IEEE802154_MONITOR));
395
396        assert_eq!(820, u16::from(ArpHardwareId::PHONET));
397        assert_eq!(821, u16::from(ArpHardwareId::PHONET_PIPE));
398        assert_eq!(822, u16::from(ArpHardwareId::CAIF));
399        assert_eq!(823, u16::from(ArpHardwareId::IP6GRE));
400        assert_eq!(824, u16::from(ArpHardwareId::NETLINK));
401        assert_eq!(825, u16::from(ArpHardwareId::IPV6LOWPAN));
402        assert_eq!(826, u16::from(ArpHardwareId::VSOCKMON));
403
404        assert_eq!(0xFFFF, u16::from(ArpHardwareId::VOID));
405        assert_eq!(0xFFFE, u16::from(ArpHardwareId::NONE));
406    }
407
408    #[test]
409    fn from_u16() {
410        assert_eq!(ArpHardwareId::from(0), ArpHardwareId::NETROM);
411        assert_eq!(ArpHardwareId::from(1), ArpHardwareId::ETHERNET);
412        assert_eq!(ArpHardwareId::from(2), ArpHardwareId::EETHER);
413        assert_eq!(ArpHardwareId::from(3), ArpHardwareId::AX25);
414        assert_eq!(ArpHardwareId::from(4), ArpHardwareId::PRONET);
415        assert_eq!(ArpHardwareId::from(5), ArpHardwareId::CHAOS);
416        assert_eq!(ArpHardwareId::from(6), ArpHardwareId::IEEE802);
417        assert_eq!(ArpHardwareId::from(7), ArpHardwareId::ARCNET);
418        assert_eq!(ArpHardwareId::from(8), ArpHardwareId::APPLETLK);
419        assert_eq!(ArpHardwareId::from(15), ArpHardwareId::DLCI);
420        assert_eq!(ArpHardwareId::from(19), ArpHardwareId::ATM);
421        assert_eq!(ArpHardwareId::from(23), ArpHardwareId::METRICOM);
422        assert_eq!(ArpHardwareId::from(24), ArpHardwareId::IEEE1394);
423        assert_eq!(ArpHardwareId::from(27), ArpHardwareId::EUI64);
424        assert_eq!(ArpHardwareId::from(32), ArpHardwareId::INFINIBAND);
425
426        assert_eq!(ArpHardwareId::from(256), ArpHardwareId::SLIP);
427        assert_eq!(ArpHardwareId::from(257), ArpHardwareId::CSLIP);
428        assert_eq!(ArpHardwareId::from(258), ArpHardwareId::SLIP6);
429        assert_eq!(ArpHardwareId::from(259), ArpHardwareId::CSLIP6);
430        assert_eq!(ArpHardwareId::from(260), ArpHardwareId::RSRVD);
431        assert_eq!(ArpHardwareId::from(264), ArpHardwareId::ADAPT);
432        assert_eq!(ArpHardwareId::from(270), ArpHardwareId::ROSE);
433        assert_eq!(ArpHardwareId::from(271), ArpHardwareId::X25);
434        assert_eq!(ArpHardwareId::from(272), ArpHardwareId::HWX25);
435        assert_eq!(ArpHardwareId::from(280), ArpHardwareId::CAN);
436        assert_eq!(ArpHardwareId::from(512), ArpHardwareId::PPP);
437        assert_eq!(ArpHardwareId::from(513), ArpHardwareId::CISCO_HDLC);
438        assert_eq!(ArpHardwareId::from(516), ArpHardwareId::LAPB);
439        assert_eq!(ArpHardwareId::from(517), ArpHardwareId::DDCMP);
440        assert_eq!(ArpHardwareId::from(518), ArpHardwareId::RAWHDLC);
441        assert_eq!(ArpHardwareId::from(519), ArpHardwareId::RAWIP);
442
443        assert_eq!(ArpHardwareId::from(768), ArpHardwareId::TUNNEL);
444        assert_eq!(ArpHardwareId::from(769), ArpHardwareId::TUNNEL6);
445        assert_eq!(ArpHardwareId::from(770), ArpHardwareId::FRAD);
446        assert_eq!(ArpHardwareId::from(771), ArpHardwareId::SKIP);
447        assert_eq!(ArpHardwareId::from(772), ArpHardwareId::LOOPBACK);
448        assert_eq!(ArpHardwareId::from(773), ArpHardwareId::LOCALTLK);
449        assert_eq!(ArpHardwareId::from(774), ArpHardwareId::FDDI);
450        assert_eq!(ArpHardwareId::from(775), ArpHardwareId::BIF);
451        assert_eq!(ArpHardwareId::from(776), ArpHardwareId::SIT);
452        assert_eq!(ArpHardwareId::from(777), ArpHardwareId::IPDDP);
453        assert_eq!(ArpHardwareId::from(778), ArpHardwareId::IPGRE);
454        assert_eq!(ArpHardwareId::from(779), ArpHardwareId::PIMREG);
455        assert_eq!(ArpHardwareId::from(780), ArpHardwareId::HIPPI);
456        assert_eq!(ArpHardwareId::from(781), ArpHardwareId::ASH);
457        assert_eq!(ArpHardwareId::from(782), ArpHardwareId::ECONET);
458        assert_eq!(ArpHardwareId::from(783), ArpHardwareId::IRDA);
459
460        assert_eq!(ArpHardwareId::from(784), ArpHardwareId::FCPP);
461        assert_eq!(ArpHardwareId::from(785), ArpHardwareId::FCAL);
462        assert_eq!(ArpHardwareId::from(786), ArpHardwareId::FCPL);
463        assert_eq!(ArpHardwareId::from(787), ArpHardwareId::FCFABRIC);
464
465        assert_eq!(ArpHardwareId::from(800), ArpHardwareId::IEEE802_TR);
466        assert_eq!(ArpHardwareId::from(801), ArpHardwareId::IEEE80211);
467        assert_eq!(ArpHardwareId::from(802), ArpHardwareId::IEEE80211_PRISM);
468        assert_eq!(ArpHardwareId::from(803), ArpHardwareId::IEEE80211_RADIOTAP);
469        assert_eq!(ArpHardwareId::from(804), ArpHardwareId::IEEE802154);
470        assert_eq!(ArpHardwareId::from(805), ArpHardwareId::IEEE802154_MONITOR);
471
472        assert_eq!(ArpHardwareId::from(820), ArpHardwareId::PHONET);
473        assert_eq!(ArpHardwareId::from(821), ArpHardwareId::PHONET_PIPE);
474        assert_eq!(ArpHardwareId::from(822), ArpHardwareId::CAIF);
475        assert_eq!(ArpHardwareId::from(823), ArpHardwareId::IP6GRE);
476        assert_eq!(ArpHardwareId::from(824), ArpHardwareId::NETLINK);
477        assert_eq!(ArpHardwareId::from(825), ArpHardwareId::IPV6LOWPAN);
478        assert_eq!(ArpHardwareId::from(826), ArpHardwareId::VSOCKMON);
479
480        assert_eq!(ArpHardwareId::from(0xFFFF), ArpHardwareId::VOID);
481        assert_eq!(ArpHardwareId::from(0xFFFE), ArpHardwareId::NONE);
482    }
483
484    #[test]
485    fn display_dbg() {
486        let pairs = &[
487            (ArpHardwareId::NETROM, "0 (from KA9Q: NET/ROM pseudo)"),
488            (ArpHardwareId::ETHERNET, "1 (Ethernet)"),
489            (ArpHardwareId::EETHER, "2 (Experimental Ethernet)"),
490            (ArpHardwareId::AX25, "3 (AX.25 Level 2)"),
491            (ArpHardwareId::PRONET, "4 (PROnet token ring)"),
492            (ArpHardwareId::CHAOS, "5 (Chaosnet)"),
493            (ArpHardwareId::IEEE802, "6 (IEEE 802.2 Ethernet/TR/TB)"),
494            (ArpHardwareId::ARCNET, "7 (ARCnet)"),
495            (ArpHardwareId::APPLETLK, "8 (APPLEtalk or Hyperchannel)"),
496            (ArpHardwareId::LANSTAR, "9 (Lanstar)"),
497            (
498                ArpHardwareId::AUTONET_SHORT_ADDRESS,
499                "10 (Autonet Short Address)",
500            ),
501            (ArpHardwareId::LOCAL_TALK, "11 (LocalTalk)"),
502            (ArpHardwareId::LOCAL_NET, "12 (LocalNet)"),
503            (ArpHardwareId::ULTRA_LINK, "13 (Ultra link)"),
504            (ArpHardwareId::SMDS, "14 (SMDS)"),
505            (ArpHardwareId::DLCI, "15 (Frame Relay DLCI)"),
506            (
507                ArpHardwareId::ATM_JXB2,
508                "16 (Asynchronous Transmission Mode (ATM) JXB2)",
509            ),
510            (ArpHardwareId::HDLC, "17 (HDLC)"),
511            (ArpHardwareId::FIBRE_CHANNEL, "18 (Fibre Channel)"),
512            (ArpHardwareId::ATM, "19 (ATM)"),
513            (ArpHardwareId::SERIAL_LINE, "20 (Serial Line)"),
514            (
515                ArpHardwareId::ATM_21,
516                "21 (Asynchronous Transmission Mode (ATM))",
517            ),
518            (ArpHardwareId::MIL_STD_188_220, "22 (MIL-STD-188-220)"),
519            (ArpHardwareId::METRICOM, "23 (Metricom STRIP (new IANA id))"),
520            (ArpHardwareId::IEEE1394, "24 (IEEE 1394 IPv4 - RFC 2734)"),
521            (ArpHardwareId::MAPOS, "25 (MAPOS)"),
522            (ArpHardwareId::TWINAXIAL, "26 (Twinaxial)"),
523            (ArpHardwareId::EUI64, "27 (EUI-64)"),
524            (ArpHardwareId::HIPARP, "28 (HIPARP)"),
525            (
526                ArpHardwareId::IP_AND_ARP_OVER_ISO_7816_3,
527                "29 (IP and ARP over ISO 7816-3)",
528            ),
529            (ArpHardwareId::ARPSEC, "30 (ARPSec)"),
530            (ArpHardwareId::IPSEC_TUNNEL, "31 (IPsec tunnel)"),
531            (ArpHardwareId::INFINIBAND, "32 (InfiniBand)"),
532            (
533                ArpHardwareId::CAI,
534                "33 (TIA-102 Project 25 Common Air Interface (CAI))",
535            ),
536            (ArpHardwareId::WIEGAND_INTERFACE, "34 (Wiegand Interface)"),
537            (ArpHardwareId::PURE_IP, "35 (Pure IP)"),
538            (ArpHardwareId::HW_EXP1, "36 (HW_EXP1)"),
539            (ArpHardwareId::HFI, "37 (HFI)"),
540            (ArpHardwareId::UNIFIED_BUS, "38 (Unified Bus (UB))"),
541            (ArpHardwareId::SLIP, "256 (SLIP)"),
542            (ArpHardwareId::CSLIP, "257 (CSLIP)"),
543            (ArpHardwareId::SLIP6, "258 (SLIP6)"),
544            (ArpHardwareId::CSLIP6, "259 (CSLIP6)"),
545            (ArpHardwareId::RSRVD, "260 (Notional KISS type)"),
546            (ArpHardwareId::ADAPT, "264 (ADAPT)"),
547            (ArpHardwareId::ROSE, "270 (ROSE)"),
548            (ArpHardwareId::X25, "271 (CCITT X.25)"),
549            (ArpHardwareId::HWX25, "272 (Boards with X.25 in firmware)"),
550            (ArpHardwareId::CAN, "280 (Controller Area Network)"),
551            (ArpHardwareId::PPP, "512 (PPP)"),
552            (ArpHardwareId::CISCO_HDLC, "513 (Cisco HDLC)"),
553            (ArpHardwareId::LAPB, "516 (LAPB)"),
554            (ArpHardwareId::DDCMP, "517 (Digital's DDCMP protocol)"),
555            (ArpHardwareId::RAWHDLC, "518 (Raw HDLC)"),
556            (ArpHardwareId::RAWIP, "519 (Raw IP)"),
557            (ArpHardwareId::TUNNEL, "768 (IPIP tunnel)"),
558            (ArpHardwareId::TUNNEL6, "769 (IP6IP6 tunnel)"),
559            (ArpHardwareId::FRAD, "770 (Frame Relay Access Device)"),
560            (ArpHardwareId::SKIP, "771 (SKIP vif)"),
561            (ArpHardwareId::LOOPBACK, "772 (Loopback device)"),
562            (ArpHardwareId::LOCALTLK, "773 (Localtalk device)"),
563            (
564                ArpHardwareId::FDDI,
565                "774 (Fiber Distributed Data Interface)",
566            ),
567            (ArpHardwareId::BIF, "775 (AP1000 BIF)"),
568            (ArpHardwareId::SIT, "776 (sit0 device - IPv6-in-IPv4)"),
569            (ArpHardwareId::IPDDP, "777 (IP over DDP tunneller)"),
570            (ArpHardwareId::IPGRE, "778 (GRE over IP)"),
571            (ArpHardwareId::PIMREG, "779 (PIMSM register interface)"),
572            (
573                ArpHardwareId::HIPPI,
574                "780 (High Performance Parallel Interface)",
575            ),
576            (ArpHardwareId::ASH, "781 (Nexus 64Mbps Ash)"),
577            (ArpHardwareId::ECONET, "782 (Acorn Econet)"),
578            (ArpHardwareId::IRDA, "783 (Linux-IrDA)"),
579            (ArpHardwareId::FCPP, "784 (Point to point fibrechannel)"),
580            (ArpHardwareId::FCAL, "785 (Fibrechannel arbitrated loop)"),
581            (ArpHardwareId::FCPL, "786 (Fibrechannel public loop)"),
582            (ArpHardwareId::FCFABRIC, "787 (Fibrechannel fabric)"),
583            (ArpHardwareId::IEEE802_TR, "800 (Magic type ident for TR)"),
584            (ArpHardwareId::IEEE80211, "801 (IEEE 802.11)"),
585            (
586                ArpHardwareId::IEEE80211_PRISM,
587                "802 (IEEE 802.11 + Prism2 header)",
588            ),
589            (
590                ArpHardwareId::IEEE80211_RADIOTAP,
591                "803 (IEEE 802.11 + radiotap header)",
592            ),
593            (ArpHardwareId::IEEE802154, "804 (IEEE 802.15.4)"),
594            (
595                ArpHardwareId::IEEE802154_MONITOR,
596                "805 (IEEE 802.15.4 network monitor)",
597            ),
598            (ArpHardwareId::PHONET, "820 (PhoNet media type)"),
599            (ArpHardwareId::PHONET_PIPE, "821 (PhoNet pipe header)"),
600            (ArpHardwareId::CAIF, "822 (CAIF media type)"),
601            (ArpHardwareId::IP6GRE, "823 (GRE over IPv6)"),
602            (ArpHardwareId::NETLINK, "824 (Netlink header)"),
603            (ArpHardwareId::IPV6LOWPAN, "825 (IPv6 over LoWPAN)"),
604            (ArpHardwareId::VSOCKMON, "826 (Vsock monitor header)"),
605            (ArpHardwareId::VOID, "0xFFFF (Void type, nothing is known)"),
606            (ArpHardwareId::NONE, "0xFFFE (zero header length)"),
607            (ArpHardwareId::from(0x1234), "0x1234"),
608        ];
609
610        for (arp_hw_id, str_value) in pairs {
611            assert_eq!(str_value, &format!("{:?}", arp_hw_id));
612        }
613    }
614
615    #[test]
616    fn default() {
617        let value: ArpHardwareId = Default::default();
618        assert_eq!(ArpHardwareId(0), value);
619    }
620
621    #[test]
622    fn clone_eq() {
623        let values = &[
624            ArpHardwareId::NETROM,
625            ArpHardwareId::ETHERNET,
626            ArpHardwareId::EETHER,
627            ArpHardwareId::AX25,
628            ArpHardwareId::PRONET,
629            ArpHardwareId::CHAOS,
630            ArpHardwareId::IEEE802,
631            ArpHardwareId::ARCNET,
632            ArpHardwareId::APPLETLK,
633            ArpHardwareId::DLCI,
634            ArpHardwareId::ATM,
635            ArpHardwareId::METRICOM,
636            ArpHardwareId::IEEE1394,
637            ArpHardwareId::EUI64,
638            ArpHardwareId::INFINIBAND,
639            ArpHardwareId::SLIP,
640            ArpHardwareId::CSLIP,
641            ArpHardwareId::SLIP6,
642            ArpHardwareId::CSLIP6,
643            ArpHardwareId::RSRVD,
644            ArpHardwareId::ADAPT,
645            ArpHardwareId::ROSE,
646            ArpHardwareId::X25,
647            ArpHardwareId::HWX25,
648            ArpHardwareId::CAN,
649            ArpHardwareId::PPP,
650            ArpHardwareId::CISCO_HDLC,
651            ArpHardwareId::LAPB,
652            ArpHardwareId::DDCMP,
653            ArpHardwareId::RAWHDLC,
654            ArpHardwareId::RAWIP,
655            ArpHardwareId::TUNNEL,
656            ArpHardwareId::TUNNEL6,
657            ArpHardwareId::FRAD,
658            ArpHardwareId::SKIP,
659            ArpHardwareId::LOOPBACK,
660            ArpHardwareId::LOCALTLK,
661            ArpHardwareId::FDDI,
662            ArpHardwareId::BIF,
663            ArpHardwareId::SIT,
664            ArpHardwareId::IPDDP,
665            ArpHardwareId::IPGRE,
666            ArpHardwareId::PIMREG,
667            ArpHardwareId::HIPPI,
668            ArpHardwareId::ASH,
669            ArpHardwareId::ECONET,
670            ArpHardwareId::IRDA,
671            ArpHardwareId::FCPP,
672            ArpHardwareId::FCAL,
673            ArpHardwareId::FCPL,
674            ArpHardwareId::FCFABRIC,
675            ArpHardwareId::IEEE802_TR,
676            ArpHardwareId::IEEE80211,
677            ArpHardwareId::IEEE80211_PRISM,
678            ArpHardwareId::IEEE80211_RADIOTAP,
679            ArpHardwareId::IEEE802154,
680            ArpHardwareId::IEEE802154_MONITOR,
681            ArpHardwareId::PHONET,
682            ArpHardwareId::PHONET_PIPE,
683            ArpHardwareId::CAIF,
684            ArpHardwareId::IP6GRE,
685            ArpHardwareId::NETLINK,
686            ArpHardwareId::IPV6LOWPAN,
687            ArpHardwareId::VSOCKMON,
688            ArpHardwareId::VOID,
689            ArpHardwareId::NONE,
690        ];
691
692        // clone
693        for v in values {
694            assert_eq!(v, &v.clone());
695        }
696
697        // eq
698        for (a_pos, a) in values.iter().enumerate() {
699            for (b_pos, b) in values.iter().enumerate() {
700                assert_eq!(a_pos == b_pos, a == b);
701                assert_eq!(a_pos != b_pos, a != b);
702            }
703        }
704    }
705}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy