1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 #include "pal_config.h"
6 #include "pal_maphardwaretype.h"
7 
8 #include <sys/socket.h>
9 #include <sys/types.h>
10 
11 #if defined(AF_PACKET)
12 #include <linux/if_packet.h>
13 #include <linux/if_arp.h>
14 #elif defined(AF_LINK)
15 #include <net/if_dl.h>
16 #include <net/if_types.h>
17 #else
18 #error System must have AF_PACKET or AF_LINK.
19 #endif
20 
MapHardwareType(uint16_t nativeType)21 enum NetworkInterfaceType MapHardwareType(uint16_t nativeType)
22 {
23 #if defined(AF_PACKET)
24     switch (nativeType)
25     {
26         case ARPHRD_ETHER:
27         case ARPHRD_EETHER:
28             return NetworkInterfaceType_Ethernet;
29         case ARPHRD_PRONET:
30             return NetworkInterfaceType_TokenRing;
31         case ARPHRD_ATM:
32             return NetworkInterfaceType_Atm;
33         case ARPHRD_SLIP:
34         case ARPHRD_CSLIP:
35         case ARPHRD_SLIP6:
36         case ARPHRD_CSLIP6:
37             return NetworkInterfaceType_Slip;
38         case ARPHRD_PPP:
39             return NetworkInterfaceType_Ppp;
40         case ARPHRD_TUNNEL:
41         case ARPHRD_TUNNEL6:
42             return NetworkInterfaceType_Tunnel;
43         case ARPHRD_LOOPBACK:
44             return NetworkInterfaceType_Loopback;
45         case ARPHRD_FDDI:
46             return NetworkInterfaceType_Fddi;
47         case ARPHRD_IEEE80211:
48         case ARPHRD_IEEE80211_PRISM:
49         case ARPHRD_IEEE80211_RADIOTAP:
50             return NetworkInterfaceType_Wireless80211;
51         default:
52             return NetworkInterfaceType_Unknown;
53     }
54 #elif defined(AF_LINK)
55     switch (nativeType)
56     {
57         case IFT_ETHER:
58             return NetworkInterfaceType_Ethernet;
59         case IFT_ISO88025:
60             return NetworkInterfaceType_TokenRing;
61         case IFT_FDDI:
62             return NetworkInterfaceType_Fddi;
63         case IFT_ISDNBASIC:
64             return NetworkInterfaceType_Isdn;
65         case IFT_ISDNPRIMARY:
66             return NetworkInterfaceType_PrimaryIsdn;
67         case IFT_PPP:
68             return NetworkInterfaceType_Ppp;
69         case IFT_LOOP:
70             return NetworkInterfaceType_Loopback;
71         case IFT_XETHER:
72             return NetworkInterfaceType_Ethernet3Megabit;
73         case IFT_SLIP:
74             return NetworkInterfaceType_Slip;
75         case IFT_ATM:
76             return NetworkInterfaceType_Atm;
77         case IFT_MODEM:
78             return NetworkInterfaceType_GenericModem;
79         case IFT_IEEE1394:
80             return NetworkInterfaceType_HighPerformanceSerialBus;
81         default:
82             return NetworkInterfaceType_Unknown;
83     }
84 #endif
85 }
86