#ifndef _NET_IF_MEDIA_H_
#define _NET_IF_MEDIA_H_
#ifndef _SYS_TYPES_H_
#include <sys/types.h>
#endif
#ifdef _KERNEL
#ifndef _SYS_QUEUE_H_
#include <sys/queue.h>
#endif
struct ifnet;
struct ifreq;
struct ifmediareq;
typedef int (*ifm_change_cb_t)(struct ifnet *ifp);
typedef void (*ifm_stat_cb_t)(struct ifnet *ifp, struct ifmediareq *req);
struct ifmedia_entry {
LIST_ENTRY(ifmedia_entry) ifm_list;
int ifm_media;
int ifm_data;
void *ifm_aux;
};
struct ifmedia {
int ifm_mask;
int ifm_media;
struct ifmedia_entry *ifm_cur;
LIST_HEAD(, ifmedia_entry) ifm_list;
ifm_change_cb_t ifm_change;
ifm_stat_cb_t ifm_status;
};
void ifmedia_init(struct ifmedia *ifm, int dontcare_mask,
ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback);
void ifmedia_removeall( struct ifmedia *ifm);
void ifmedia_add(struct ifmedia *ifm, int mword, int data, void *aux);
int ifmedia_add_nodup(struct ifmedia *ifm, int mword, int data, void *aux);
void ifmedia_list_add(struct ifmedia *mp, struct ifmedia_entry *lp,
int count);
void ifmedia_set(struct ifmedia *ifm, int mword);
int ifmedia_tryset(struct ifmedia *ifm, int mword);
int ifmedia_ioctl(struct ifnet *ifp, struct ifreq *ifr,
struct ifmedia *ifm, u_long cmd);
uint64_t ifmedia_baudrate(int);
#endif
#define IFM_ETHER 0x00000020
#define IFM_ETHER_SUBTYPE(x) (((x) & IFM_TMASK) | \
(((x) & (IFM_ETH_XTYPE >> IFM_ETH_XSHIFT)) << IFM_ETH_XSHIFT))
#define IFM_X(x) IFM_ETHER_SUBTYPE(x)
#define IFM_ETHER_SUBTYPE_SET(x) (IFM_ETHER_SUBTYPE(x) | IFM_ETHER)
#define IFM_ETHER_SUBTYPE_GET(x) ((x) & (IFM_TMASK | IFM_ETH_XTYPE))
#define IFM_ETHER_IS_EXTENDED(x) ((x) & IFM_ETH_XTYPE)
#define IFM_10_T 3
#define IFM_10_2 4
#define IFM_10_5 5
#define IFM_100_TX 6
#define IFM_100_FX 7
#define IFM_100_T4 8
#define IFM_100_VG 9
#define IFM_100_T2 10
#define IFM_1000_SX 11
#define IFM_10_STP 12
#define IFM_10_FL 13
#define IFM_1000_LX 14
#define IFM_1000_CX 15
#define IFM_1000_T 16
#define IFM_HPNA_1 17
#define IFM_10G_LR 18
#define IFM_10G_SR 19
#define IFM_10G_CX4 20
#define IFM_2500_SX 21
#define IFM_10G_TWINAX 22
#define IFM_10G_TWINAX_LONG 23
#define IFM_10G_LRM 24
#define IFM_UNKNOWN 25
#define IFM_10G_T 26
#define IFM_40G_CR4 27
#define IFM_40G_SR4 28
#define IFM_40G_LR4 29
#define IFM_1000_KX 30
#define IFM_OTHER 31
#define IFM_10G_KX4 IFM_X(32)
#define IFM_10G_KR IFM_X(33)
#define IFM_10G_CR1 IFM_X(34)
#define IFM_20G_KR2 IFM_X(35)
#define IFM_2500_KX IFM_X(36)
#define IFM_2500_T IFM_X(37)
#define IFM_5000_T IFM_X(38)
#define IFM_50G_PCIE IFM_X(39)
#define IFM_25G_PCIE IFM_X(40)
#define IFM_1000_SGMII IFM_X(41)
#define IFM_10G_SFI IFM_X(42)
#define IFM_40G_XLPPI IFM_X(43)
#define IFM_1000_CX_SGMII IFM_X(44)
#define IFM_40G_KR4 IFM_X(45)
#define IFM_10G_ER IFM_X(46)
#define IFM_100G_CR4 IFM_X(47)
#define IFM_100G_SR4 IFM_X(48)
#define IFM_100G_KR4 IFM_X(49)
#define IFM_100G_LR4 IFM_X(50)
#define IFM_56G_R4 IFM_X(51)
#define IFM_100_T IFM_X(52)
#define IFM_25G_CR IFM_X(53)
#define IFM_25G_KR IFM_X(54)
#define IFM_25G_SR IFM_X(55)
#define IFM_50G_CR2 IFM_X(56)
#define IFM_50G_KR2 IFM_X(57)
#define IFM_ETH_MASTER 0x00000100
#define IFM_ETH_RXPAUSE 0x00000200
#define IFM_ETH_TXPAUSE 0x00000400
#define IFM_ETH_FORCEPAUSE 0x00000800
#define IFM_ETH_XTYPE 0x00007000
#define IFM_ETH_XSHIFT 7
#define IFM_IEEE80211 0x00000080
#define IFM_IEEE80211_FH1 3
#define IFM_IEEE80211_FH2 4
#define IFM_IEEE80211_DS1 5
#define IFM_IEEE80211_DS2 6
#define IFM_IEEE80211_DS5 7
#define IFM_IEEE80211_DS11 8
#define IFM_IEEE80211_DS22 9
#define IFM_IEEE80211_OFDM6 10
#define IFM_IEEE80211_OFDM9 11
#define IFM_IEEE80211_OFDM12 12
#define IFM_IEEE80211_OFDM18 13
#define IFM_IEEE80211_OFDM24 14
#define IFM_IEEE80211_OFDM36 15
#define IFM_IEEE80211_OFDM48 16
#define IFM_IEEE80211_OFDM54 17
#define IFM_IEEE80211_OFDM72 18
#define IFM_IEEE80211_DS354k 19
#define IFM_IEEE80211_DS512k 20
#define IFM_IEEE80211_OFDM3 21
#define IFM_IEEE80211_OFDM4 22
#define IFM_IEEE80211_OFDM27 23
#define IFM_IEEE80211_MCS 24
#define IFM_IEEE80211_ADHOC 0x00000100
#define IFM_IEEE80211_HOSTAP 0x00000200
#define IFM_IEEE80211_IBSS 0x00000400
#define IFM_IEEE80211_WDS 0x00000800
#define IFM_IEEE80211_TURBO 0x00001000
#define IFM_IEEE80211_MONITOR 0x00002000
#define IFM_IEEE80211_MBSS 0x00004000
#define IFM_IEEE80211_11A 0x00010000
#define IFM_IEEE80211_11B 0x00020000
#define IFM_IEEE80211_11G 0x00030000
#define IFM_IEEE80211_FH 0x00040000
#define IFM_IEEE80211_11NA 0x00050000
#define IFM_IEEE80211_11NG 0x00060000
#define IFM_ATM 0x000000a0
#define IFM_ATM_UNKNOWN 3
#define IFM_ATM_UTP_25 4
#define IFM_ATM_TAXI_100 5
#define IFM_ATM_TAXI_140 6
#define IFM_ATM_MM_155 7
#define IFM_ATM_SM_155 8
#define IFM_ATM_UTP_155 9
#define IFM_ATM_MM_622 10
#define IFM_ATM_SM_622 11
#define IFM_ATM_VIRTUAL 12
#define IFM_ATM_SDH 0x00000100
#define IFM_ATM_NOSCRAMB 0x00000200
#define IFM_ATM_UNASSIGNED 0x00000400
#define IFM_CARP 0x000000c0
#define IFM_AUTO 0
#define IFM_MANUAL 1
#define IFM_NONE 2
#define IFM_FDX 0x00100000
#define IFM_HDX 0x00200000
#define IFM_FLOW 0x00400000
#define IFM_FLAG0 0x01000000
#define IFM_FLAG1 0x02000000
#define IFM_FLAG2 0x04000000
#define IFM_LOOP 0x08000000
#define IFM_NMASK 0x000000e0
#define IFM_TMASK 0x0000001f
#define IFM_IMASK 0xf0000000
#define IFM_ISHIFT 28
#define IFM_OMASK 0x0000ff00
#define IFM_MMASK 0x00070000
#define IFM_MSHIFT 16
#define IFM_GMASK 0x0ff00000
#define IFM_ETH_FCMASK (IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE | IFM_ETH_FORCEPAUSE)
#define IFM_ETH_FMASK (IFM_FLOW | IFM_ETH_FCMASK)
#define IFM_NMIN IFM_ETHER
#define IFM_NMAX IFM_NMASK
#define IFM_AVALID 0x00000001
#define IFM_ACTIVE 0x00000002
#define IFM_TYPE(x) ((x) & IFM_NMASK)
#define IFM_SUBTYPE(x) \
(IFM_TYPE(x) == IFM_ETHER ? \
IFM_ETHER_SUBTYPE_GET(x) : ((x) & IFM_TMASK))
#define IFM_TYPE_MATCH(x,y) \
(IFM_TYPE(x) == IFM_TYPE(y) && IFM_SUBTYPE(x) == IFM_SUBTYPE(y))
#define IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK)
#define IFM_INST(x) (((x) & IFM_IMASK) >> IFM_ISHIFT)
#define IFM_OPTIONS(x) ((x) & (IFM_OMASK|IFM_GMASK))
#define IFM_MODE(x) ((x) & IFM_MMASK)
#define IFM_INST_MAX IFM_INST(IFM_IMASK)
#define IFM_MAKEWORD(type, subtype, options, instance) \
((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
#define IFM_MAKEMODE(mode) \
(((mode) << IFM_MSHIFT) & IFM_MMASK)
struct ifmedia_description {
int ifmt_word;
const char *ifmt_string;
};
#define IFM_TYPE_DESCRIPTIONS { \
{ IFM_ETHER, "Ethernet" }, \
{ IFM_IEEE80211, "IEEE 802.11 Wireless Ethernet" }, \
{ IFM_CARP, "Common Address Redundancy Protocol" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_ETHERNET_DESCRIPTIONS { \
{ IFM_10_T, "10baseT/UTP" }, \
{ IFM_10_2, "10base2/BNC" }, \
{ IFM_10_5, "10base5/AUI" }, \
{ IFM_100_TX, "100baseTX" }, \
{ IFM_100_FX, "100baseFX" }, \
{ IFM_100_T4, "100baseT4" }, \
{ IFM_100_VG, "100baseVG" }, \
{ IFM_100_T2, "100baseT2" }, \
{ IFM_1000_SX, "1000baseSX" }, \
{ IFM_10_STP, "10baseSTP" }, \
{ IFM_10_FL, "10baseFL" }, \
{ IFM_1000_LX, "1000baseLX" }, \
{ IFM_1000_CX, "1000baseCX" }, \
{ IFM_1000_T, "1000baseT" }, \
{ IFM_HPNA_1, "homePNA" }, \
{ IFM_10G_LR, "10GbaseLR" }, \
{ IFM_10G_SR, "10GbaseSR" }, \
{ IFM_10G_CX4, "10GbaseCX4" }, \
{ IFM_2500_SX, "2500baseSX" }, \
{ IFM_10G_TWINAX, "10GbaseTwinax" }, \
{ IFM_10G_TWINAX_LONG, "10GbaseTwinax-Long" }, \
{ IFM_10G_LRM, "10GbaseLRM" }, \
{ IFM_UNKNOWN, "Unknown" }, \
{ IFM_10G_T, "10GbaseT" }, \
{ IFM_40G_CR4, "40GbaseCR4" }, \
{ IFM_40G_SR4, "40GbaseSR4" }, \
{ IFM_40G_LR4, "40GbaseLR4" }, \
{ IFM_1000_KX, "1000baseKX" }, \
{ IFM_OTHER, "Other" }, \
{ IFM_10G_KX4, "10GbaseKX4" }, \
{ IFM_10G_KR, "10GbaseKR" }, \
{ IFM_10G_CR1, "10GbaseCR1" }, \
{ IFM_20G_KR2, "20GbaseKR2" }, \
{ IFM_2500_KX, "2500baseKX" }, \
{ IFM_2500_T, "2500baseT" }, \
{ IFM_5000_T, "5000baseT" }, \
{ IFM_50G_PCIE, "PCIExpress-50G" }, \
{ IFM_25G_PCIE, "PCIExpress-25G" }, \
{ IFM_1000_SGMII, "1000baseSGMII" }, \
{ IFM_10G_SFI, "10GbaseSFI" }, \
{ IFM_40G_XLPPI, "40GbaseXLPPI" }, \
{ IFM_1000_CX_SGMII, "1000baseCX-SGMII" }, \
{ IFM_40G_KR4, "40GbaseKR4" }, \
{ IFM_10G_ER, "10GbaseER" }, \
{ IFM_100G_CR4, "100GbaseCR4" }, \
{ IFM_100G_SR4, "100GbaseSR4" }, \
{ IFM_100G_KR4, "100GbaseKR4" }, \
{ IFM_100G_LR4, "100GbaseLR4" }, \
{ IFM_56G_R4, "56GbaseR4" }, \
{ IFM_100_T, "100baseT" }, \
{ IFM_25G_CR, "25GbaseCR" }, \
{ IFM_25G_KR, "25GbaseKR" }, \
{ IFM_25G_SR, "25GbaseSR" }, \
{ IFM_50G_CR2, "50GbaseCR2" }, \
{ IFM_50G_KR2, "50GbaseKR2" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_ETHERNET_ALIASES { \
{ IFM_10_T, "UTP" }, \
{ IFM_10_T, "10UTP" }, \
{ IFM_10_2, "BNC" }, \
{ IFM_10_2, "10BNC" }, \
{ IFM_10_5, "AUI" }, \
{ IFM_10_5, "10AUI" }, \
{ IFM_100_TX, "100TX" }, \
{ IFM_100_FX, "100FX" }, \
{ IFM_100_T4, "100T4" }, \
{ IFM_100_VG, "100VG" }, \
{ IFM_100_T2, "100T2" }, \
{ IFM_10_STP, "10STP" }, \
{ IFM_10_FL, "10FL" }, \
{ IFM_1000_SX, "1000SX" }, \
{ IFM_1000_LX, "1000LX" }, \
{ IFM_1000_CX, "1000CX" }, \
{ IFM_1000_T, "1000T" }, \
{ IFM_2500_SX, "2500SX" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS { \
{ IFM_ETH_MASTER, "master" }, \
{ IFM_ETH_RXPAUSE, "rxpause" }, \
{ IFM_ETH_TXPAUSE, "txpause" }, \
{ IFM_ETH_FORCEPAUSE, "forcepause" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_ETHERNET_OPTION_ALIAS { \
{ IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE, "flowcontrol" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_IEEE80211_DESCRIPTIONS { \
{ IFM_IEEE80211_FH1, "FH/1Mbps" }, \
{ IFM_IEEE80211_FH2, "FH/2Mbps" }, \
{ IFM_IEEE80211_DS1, "DS/1Mbps" }, \
{ IFM_IEEE80211_DS2, "DS/2Mbps" }, \
{ IFM_IEEE80211_DS5, "DS/5.5Mbps" }, \
{ IFM_IEEE80211_DS11, "DS/11Mbps" }, \
{ IFM_IEEE80211_DS22, "DS/22Mbps" }, \
{ IFM_IEEE80211_OFDM6, "OFDM/6Mbps" }, \
{ IFM_IEEE80211_OFDM9, "OFDM/9Mbps" }, \
{ IFM_IEEE80211_OFDM12, "OFDM/12Mbps" }, \
{ IFM_IEEE80211_OFDM18, "OFDM/18Mbps" }, \
{ IFM_IEEE80211_OFDM24, "OFDM/24Mbps" }, \
{ IFM_IEEE80211_OFDM36, "OFDM/36Mbps" }, \
{ IFM_IEEE80211_OFDM48, "OFDM/48Mbps" }, \
{ IFM_IEEE80211_OFDM54, "OFDM/54Mbps" }, \
{ IFM_IEEE80211_OFDM72, "OFDM/72Mbps" }, \
{ IFM_IEEE80211_DS354k, "DS/354Kbps" }, \
{ IFM_IEEE80211_DS512k, "DS/512Kbps" }, \
{ IFM_IEEE80211_OFDM3, "OFDM/3Mbps" }, \
{ IFM_IEEE80211_OFDM4, "OFDM/4.5Mbps" }, \
{ IFM_IEEE80211_OFDM27, "OFDM/27Mbps" }, \
{ IFM_IEEE80211_MCS, "MCS" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_IEEE80211_ALIASES { \
{ IFM_IEEE80211_FH1, "FH1" }, \
{ IFM_IEEE80211_FH2, "FH2" }, \
{ IFM_IEEE80211_FH1, "FrequencyHopping/1Mbps" }, \
{ IFM_IEEE80211_FH2, "FrequencyHopping/2Mbps" }, \
{ IFM_IEEE80211_DS1, "DS1" }, \
{ IFM_IEEE80211_DS2, "DS2" }, \
{ IFM_IEEE80211_DS5, "DS5.5" }, \
{ IFM_IEEE80211_DS11, "DS11" }, \
{ IFM_IEEE80211_DS22, "DS22" }, \
{ IFM_IEEE80211_DS1, "DirectSequence/1Mbps" }, \
{ IFM_IEEE80211_DS2, "DirectSequence/2Mbps" }, \
{ IFM_IEEE80211_DS5, "DirectSequence/5.5Mbps" }, \
{ IFM_IEEE80211_DS11, "DirectSequence/11Mbps" }, \
{ IFM_IEEE80211_DS22, "DirectSequence/22Mbps" }, \
{ IFM_IEEE80211_OFDM6, "OFDM6" }, \
{ IFM_IEEE80211_OFDM9, "OFDM9" }, \
{ IFM_IEEE80211_OFDM12, "OFDM12" }, \
{ IFM_IEEE80211_OFDM18, "OFDM18" }, \
{ IFM_IEEE80211_OFDM24, "OFDM24" }, \
{ IFM_IEEE80211_OFDM36, "OFDM36" }, \
{ IFM_IEEE80211_OFDM48, "OFDM48" }, \
{ IFM_IEEE80211_OFDM54, "OFDM54" }, \
{ IFM_IEEE80211_OFDM72, "OFDM72" }, \
{ IFM_IEEE80211_DS1, "CCK1" }, \
{ IFM_IEEE80211_DS2, "CCK2" }, \
{ IFM_IEEE80211_DS5, "CCK5.5" }, \
{ IFM_IEEE80211_DS11, "CCK11" }, \
{ IFM_IEEE80211_DS354k, "DS354K" }, \
{ IFM_IEEE80211_DS354k, "DirectSequence/354Kbps" }, \
{ IFM_IEEE80211_DS512k, "DS512K" }, \
{ IFM_IEEE80211_DS512k, "DirectSequence/512Kbps" }, \
{ IFM_IEEE80211_OFDM3, "OFDM3" }, \
{ IFM_IEEE80211_OFDM4, "OFDM4.5" }, \
{ IFM_IEEE80211_OFDM27, "OFDM27" }, \
{ IFM_IEEE80211_MCS, "MCS" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_IEEE80211_OPTION_DESCRIPTIONS { \
{ IFM_IEEE80211_ADHOC, "adhoc" }, \
{ IFM_IEEE80211_HOSTAP, "hostap" }, \
{ IFM_IEEE80211_IBSS, "ibss" }, \
{ IFM_IEEE80211_WDS, "wds" }, \
{ IFM_IEEE80211_TURBO, "turbo" }, \
{ IFM_IEEE80211_MONITOR, "monitor" }, \
{ IFM_IEEE80211_MBSS, "mesh" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_IEEE80211_MODE_DESCRIPTIONS { \
{ IFM_AUTO, "autoselect" }, \
{ IFM_IEEE80211_11A, "11a" }, \
{ IFM_IEEE80211_11B, "11b" }, \
{ IFM_IEEE80211_11G, "11g" }, \
{ IFM_IEEE80211_FH, "fh" }, \
{ IFM_IEEE80211_11NA, "11na" }, \
{ IFM_IEEE80211_11NG, "11ng" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_IEEE80211_MODE_ALIASES { \
{ IFM_AUTO, "auto" }, \
{ 0, NULL }, \
}
# define IFM_SUBTYPE_ATM_DESCRIPTIONS { \
{ IFM_ATM_UNKNOWN, "Unknown" }, \
{ IFM_ATM_UTP_25, "UTP/25.6MBit" }, \
{ IFM_ATM_TAXI_100, "Taxi/100MBit" }, \
{ IFM_ATM_TAXI_140, "Taxi/140MBit" }, \
{ IFM_ATM_MM_155, "Multi-mode/155MBit" }, \
{ IFM_ATM_SM_155, "Single-mode/155MBit" }, \
{ IFM_ATM_UTP_155, "UTP/155MBit" }, \
{ IFM_ATM_MM_622, "Multi-mode/622MBit" }, \
{ IFM_ATM_SM_622, "Single-mode/622MBit" }, \
{ IFM_ATM_VIRTUAL, "Virtual" }, \
{ 0, NULL }, \
}
# define IFM_SUBTYPE_ATM_ALIASES { \
{ IFM_ATM_UNKNOWN, "UNKNOWN" }, \
{ IFM_ATM_UTP_25, "UTP-25" }, \
{ IFM_ATM_TAXI_100, "TAXI-100" }, \
{ IFM_ATM_TAXI_140, "TAXI-140" }, \
{ IFM_ATM_MM_155, "MM-155" }, \
{ IFM_ATM_SM_155, "SM-155" }, \
{ IFM_ATM_UTP_155, "UTP-155" }, \
{ IFM_ATM_MM_622, "MM-622" }, \
{ IFM_ATM_SM_622, "SM-622" }, \
{ IFM_ATM_VIRTUAL, "VIRTUAL" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_ATM_OPTION_DESCRIPTIONS { \
{ IFM_ATM_SDH, "SDH" }, \
{ IFM_ATM_NOSCRAMB, "Noscramb" }, \
{ IFM_ATM_UNASSIGNED, "Unassigned" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_SHARED_DESCRIPTIONS { \
{ IFM_AUTO, "autoselect" }, \
{ IFM_MANUAL, "manual" }, \
{ IFM_NONE, "none" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_SHARED_ALIASES { \
{ IFM_AUTO, "auto" }, \
{ 0, NULL }, \
}
#define IFM_SHARED_OPTION_DESCRIPTIONS { \
{ IFM_FDX, "full-duplex" }, \
{ IFM_HDX, "half-duplex" }, \
{ IFM_FLAG0, "flag0" }, \
{ IFM_FLAG1, "flag1" }, \
{ IFM_FLAG2, "flag2" }, \
{ IFM_LOOP, "hw-loopback" }, \
{ 0, NULL }, \
}
struct ifmedia_baudrate {
int ifmb_word;
uint64_t ifmb_baudrate;
};
#define IFM_BAUDRATE_DESCRIPTIONS { \
{ IFM_ETHER|IFM_10_T, IF_Mbps(10) }, \
{ IFM_ETHER|IFM_10_2, IF_Mbps(10) }, \
{ IFM_ETHER|IFM_10_5, IF_Mbps(10) }, \
{ IFM_ETHER|IFM_100_TX, IF_Mbps(100) }, \
{ IFM_ETHER|IFM_100_FX, IF_Mbps(100) }, \
{ IFM_ETHER|IFM_100_T4, IF_Mbps(100) }, \
{ IFM_ETHER|IFM_100_VG, IF_Mbps(100) }, \
{ IFM_ETHER|IFM_100_T2, IF_Mbps(100) }, \
{ IFM_ETHER|IFM_1000_SX, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_10_STP, IF_Mbps(10) }, \
{ IFM_ETHER|IFM_10_FL, IF_Mbps(10) }, \
{ IFM_ETHER|IFM_1000_LX, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_1000_CX, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_1000_T, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_HPNA_1, IF_Mbps(1) }, \
{ IFM_ETHER|IFM_10G_LR, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_SR, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_CX4, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_2500_SX, IF_Mbps(2500ULL) }, \
{ IFM_ETHER|IFM_10G_TWINAX, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_TWINAX_LONG,IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_LRM, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_T, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_40G_CR4, IF_Gbps(40ULL) }, \
{ IFM_ETHER|IFM_40G_SR4, IF_Gbps(40ULL) }, \
{ IFM_ETHER|IFM_40G_LR4, IF_Gbps(40ULL) }, \
{ IFM_ETHER|IFM_1000_KX, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_10G_KX4, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_KR, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_10G_CR1, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_20G_KR2, IF_Gbps(20ULL) }, \
{ IFM_ETHER|IFM_2500_KX, IF_Mbps(2500ULL) }, \
{ IFM_ETHER|IFM_2500_T, IF_Mbps(2500ULL) }, \
{ IFM_ETHER|IFM_5000_T, IF_Mbps(5000ULL) }, \
{ IFM_ETHER|IFM_50G_PCIE, IF_Gbps(50ULL) }, \
{ IFM_ETHER|IFM_25G_PCIE, IF_Gbps(25ULL) }, \
{ IFM_ETHER|IFM_1000_SGMII, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_10G_SFI, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_40G_XLPPI, IF_Gbps(40ULL) }, \
{ IFM_ETHER|IFM_1000_CX_SGMII, IF_Mbps(1000) }, \
{ IFM_ETHER|IFM_40G_KR4, IF_Gbps(40ULL) }, \
{ IFM_ETHER|IFM_10G_ER, IF_Gbps(10ULL) }, \
{ IFM_ETHER|IFM_100G_CR4, IF_Gbps(100ULL) }, \
{ IFM_ETHER|IFM_100G_SR4, IF_Gbps(100ULL) }, \
{ IFM_ETHER|IFM_100G_KR4, IF_Gbps(100ULL) }, \
{ IFM_ETHER|IFM_100G_LR4, IF_Gbps(100ULL) }, \
{ IFM_ETHER|IFM_56G_R4, IF_Gbps(56ULL) }, \
{ IFM_ETHER|IFM_100_T, IF_Mbps(100ULL) }, \
{ IFM_ETHER|IFM_25G_CR, IF_Gbps(25ULL) }, \
{ IFM_ETHER|IFM_25G_KR, IF_Gbps(25ULL) }, \
{ IFM_ETHER|IFM_25G_SR, IF_Gbps(25ULL) }, \
{ IFM_ETHER|IFM_50G_CR2, IF_Gbps(50ULL) }, \
{ IFM_ETHER|IFM_50G_KR2, IF_Gbps(50ULL) }, \
\
{ IFM_IEEE80211|IFM_IEEE80211_FH1, IF_Mbps(1) }, \
{ IFM_IEEE80211|IFM_IEEE80211_FH2, IF_Mbps(2) }, \
{ IFM_IEEE80211|IFM_IEEE80211_DS1, IF_Mbps(1) }, \
{ IFM_IEEE80211|IFM_IEEE80211_DS2, IF_Mbps(2) }, \
{ IFM_IEEE80211|IFM_IEEE80211_DS5, IF_Kbps(5500) }, \
{ IFM_IEEE80211|IFM_IEEE80211_DS11, IF_Mbps(11) }, \
{ IFM_IEEE80211|IFM_IEEE80211_DS22, IF_Mbps(22) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM6, IF_Mbps(6) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM9, IF_Mbps(9) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM12, IF_Mbps(12) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM18, IF_Mbps(18) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM24, IF_Mbps(24) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM36, IF_Mbps(36) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM48, IF_Mbps(48) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM54, IF_Mbps(54) }, \
{ IFM_IEEE80211|IFM_IEEE80211_OFDM72, IF_Mbps(72) }, \
\
{ 0, 0 }, \
}
#ifdef _KERNEL
#define IFM_ETH_FC_STRLEN 16
#define IFM_ETH_FC_FULL "full"
#define IFM_ETH_FC_RXPAUSE "rxpause"
#define IFM_ETH_FC_TXPAUSE "txpause"
#define IFM_ETH_FC_NONE "none"
#define IFM_ETH_FC_FORCE_FULL "force-full"
#define IFM_ETH_FC_FORCE_RXPAUSE "force-rxpause"
#define IFM_ETH_FC_FORCE_TXPAUSE "force-txpause"
#define IFM_ETH_FC_FORCE_NONE "force-none"
int ifmedia_str2ethfc(const char *);
#endif
#endif