#ifndef _NET_IF_MEDIA_H_
#define _NET_IF_MEDIA_H_
#define IFM_AVALID 0x00000001
#define IFM_ACTIVE 0x00000002
#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_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(dt, t) \
(IFM_TYPE(dt) == 0 || IFM_TYPE(dt) == IFM_TYPE(t))
#define IFM_TYPE_SUBTYPE_MATCH(dt, t) \
(IFM_TYPE(dt) == IFM_TYPE(t) && IFM_SUBTYPE(dt) == IFM_SUBTYPE(t))
#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_INST_ANY ((u_int) -1)
#define IFM_STATUS_VALID IFM_AVALID
#define IFM_STATUS_VALID_LIST { \
IFM_AVALID, \
0, \
}
#define IFM_MAKEWORD(type, subtype, options, instance) \
((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
#define IFM_MAKEMODE(mode) \
(((mode) << IFM_MSHIFT) & IFM_MMASK)
#define IFM_GENERIC 0x00000000
#define IFM_ETHER 0x00000020
#define IFM_TOKEN 0x00000040
#define IFM_FDDI 0x00000060
#define IFM_IEEE80211 0x00000080
#define IFM_CARP 0x000000c0
#define IFM_NMIN IFM_ETHER
#define IFM_NMAX IFM_NMASK
#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_ETHER_SUBTYPE(x) (((x) & IFM_TMASK) | \
(((x) & (_IFM_ETH_XTMASK >> IFM_ETH_XSHIFT)) << IFM_ETH_XSHIFT))
#define IFM_ETHER_SUBTYPE_GET(x) ((x) & (IFM_TMASK | _IFM_ETH_XTMASK))
#define _IFM_EX(x) IFM_ETHER_SUBTYPE(x)
#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_1000_BX10 22
#define IFM_10G_TWINAX 23
#define IFM_10G_TWINAX_LONG 24
#define IFM_10G_LRM 25
#define IFM_10G_T 26
#define IFM_1000_KX 27
#define IFM_2500_KX 28
#define IFM_2500_T 29
#define IFM_5000_T 30
#define IFM_OTHER 31
#define IFM_1000_SGMII _IFM_EX(32)
#define IFM_5000_KR _IFM_EX(33)
#define IFM_10G_AOC _IFM_EX(34)
#define IFM_10G_CR1 _IFM_EX(35)
#define IFM_10G_ER _IFM_EX(36)
#define IFM_10G_KR _IFM_EX(37)
#define IFM_10G_KX4 _IFM_EX(38)
#define IFM_10G_LX4 _IFM_EX(39)
#define IFM_10G_SFI _IFM_EX(40)
#define IFM_10G_ZR _IFM_EX(41)
#define IFM_20G_KR2 _IFM_EX(42)
#define IFM_25G_AOC _IFM_EX(43)
#define IFM_25G_AUI _IFM_EX(44)
#define IFM_25G_CR _IFM_EX(45)
#define IFM_25G_ACC _IFM_EX(46)
#define IFM_25G_CR_S _IFM_EX(47)
#define IFM_25G_ER _IFM_EX(48)
#define IFM_25G_KR _IFM_EX(49)
#define IFM_25G_KR_S _IFM_EX(50)
#define IFM_25G_LR _IFM_EX(51)
#define IFM_25G_SR _IFM_EX(52)
#define IFM_25G_T _IFM_EX(53)
#define IFM_40G_AOC _IFM_EX(54)
#define IFM_40G_CR4 _IFM_EX(55)
#define IFM_40G_ER4 _IFM_EX(56)
#define IFM_40G_FR _IFM_EX(57)
#define IFM_40G_KR4 _IFM_EX(58)
#define IFM_40G_LR4 _IFM_EX(59)
#define IFM_40G_SR4 _IFM_EX(60)
#define IFM_40G_T _IFM_EX(61)
#define IFM_40G_XLPPI _IFM_EX(62)
#define IFM_50G_AUI1 _IFM_EX(63)
#define IFM_50G_AUI2 _IFM_EX(64)
#define IFM_50G_CR _IFM_EX(65)
#define IFM_50G_CR2 _IFM_EX(66)
#define IFM_50G_FR _IFM_EX(67)
#define IFM_50G_KR _IFM_EX(68)
#define IFM_50G_KR2 _IFM_EX(69)
#define IFM_50G_LAUI2 _IFM_EX(70)
#define IFM_50G_LR _IFM_EX(71)
#define IFM_50G_SR _IFM_EX(73)
#define IFM_50G_SR2 _IFM_EX(74)
#define IFM_56G_R4 _IFM_EX(75)
#define IFM_100G_CR2 _IFM_EX(76)
#define IFM_100G_CR4 _IFM_EX(77)
#define IFM_100G_CR10 _IFM_EX(78)
#define IFM_100G_DR _IFM_EX(79)
#define IFM_100G_ER4 _IFM_EX(80)
#define IFM_100G_KP4 _IFM_EX(81)
#define IFM_100G_KR2 _IFM_EX(82)
#define IFM_100G_KR4 _IFM_EX(83)
#define IFM_100G_LR4 _IFM_EX(84)
#define IFM_100G_SR2 _IFM_EX(85)
#define IFM_100G_SR4 _IFM_EX(86)
#define IFM_100G_SR10 _IFM_EX(87)
#define IFM_200G_CR2 _IFM_EX(88)
#define IFM_200G_CR4 _IFM_EX(89)
#define IFM_200G_DR4 _IFM_EX(90)
#define IFM_200G_FR4 _IFM_EX(91)
#define IFM_200G_KR2 _IFM_EX(92)
#define IFM_200G_KR4 _IFM_EX(93)
#define IFM_200G_LR4 _IFM_EX(94)
#define IFM_200G_SR4 _IFM_EX(95)
#define IFM_400G_CR4 _IFM_EX(96)
#define IFM_400G_DR4 _IFM_EX(97)
#define IFM_400G_FR8 _IFM_EX(98)
#define IFM_400G_KR4 _IFM_EX(99)
#define IFM_400G_LR8 _IFM_EX(100)
#define IFM_400G_SR16 _IFM_EX(101)
#define IFM_100G_ACC _IFM_EX(102)
#define IFM_100G_AOC _IFM_EX(103)
#define IFM_100G_FR _IFM_EX(104)
#define IFM_100G_LR _IFM_EX(105)
#define IFM_200G_ER4 _IFM_EX(106)
#define IFM_400G_ER8 _IFM_EX(107)
#define IFM_400G_FR4 _IFM_EX(108)
#define IFM_400G_LR4 _IFM_EX(109)
#define IFM_400G_SR4_2 _IFM_EX(110)
#define IFM_400G_SR8 _IFM_EX(111)
#define IFM_ETH_MASTER 0x00000100
#define IFM_ETH_RXPAUSE 0x00000200
#define IFM_ETH_TXPAUSE 0x00000400
#define _IFM_ETH_XTMASK 0x0000e000
#define IFM_ETH_XSHIFT (13 - 5)
#define IFM_ETH_FMASK (IFM_FLOW | IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE)
#define IFM_TOK_STP4 3
#define IFM_TOK_STP16 4
#define IFM_TOK_UTP4 5
#define IFM_TOK_UTP16 6
#define IFM_TOK_ETR 0x00000200
#define IFM_TOK_SRCRT 0x00000400
#define IFM_TOK_ALLR 0x00000800
#define IFM_FDDI_SMF 3
#define IFM_FDDI_MMF 4
#define IFM_FDDI_UTP 5
#define IFM_FDDI_DA 0x00000100
#define IFM_IEEE80211_FH1 3
#define IFM_IEEE80211_FH2 4
#define IFM_IEEE80211_DS2 5
#define IFM_IEEE80211_DS5 6
#define IFM_IEEE80211_DS11 7
#define IFM_IEEE80211_DS1 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_VHT 25
#define IFM_IEEE80211_ADHOC 0x00000100
#define IFM_IEEE80211_HOSTAP 0x00000200
#define IFM_IEEE80211_MONITOR 0x00000400
#define IFM_IEEE80211_TURBO 0x00000800
#define IFM_IEEE80211_IBSS 0x00001000
#define IFM_IEEE80211_WDS 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_IEEE80211_11AC 0x00070000
struct ifmedia_description {
int ifmt_word;
const char *ifmt_string;
};
#define IFM_TYPE_DESCRIPTIONS { \
{ IFM_ETHER, "Ethernet" }, \
{ IFM_ETHER, "ether" }, \
{ IFM_TOKEN, "TokenRing" }, \
{ IFM_TOKEN, "token" }, \
{ IFM_FDDI, "FDDI" }, \
{ IFM_IEEE80211, "IEEE802.11" }, \
{ IFM_CARP, "CARP" }, \
{ 0, NULL }, \
}
#define IFM_SUBTYPE_DESCRIPTIONS { \
{ IFM_AUTO, "autoselect" }, \
{ IFM_AUTO, "auto" }, \
{ IFM_MANUAL, "manual" }, \
{ IFM_NONE, "none" }, \
\
{ IFM_ETHER | IFM_10_T, "10baseT" }, \
{ IFM_ETHER | IFM_10_T, "10baseT/UTP" }, \
{ IFM_ETHER | IFM_10_T, "UTP" }, \
{ IFM_ETHER | IFM_10_T, "10UTP" }, \
{ IFM_ETHER | IFM_10_T, "10BASE-T" }, \
{ IFM_ETHER | IFM_10_2, "10base2" }, \
{ IFM_ETHER | IFM_10_2, "10base2/BNC" }, \
{ IFM_ETHER | IFM_10_2, "BNC" }, \
{ IFM_ETHER | IFM_10_2, "10BNC" }, \
{ IFM_ETHER | IFM_10_2, "10BASE2" }, \
{ IFM_ETHER | IFM_10_5, "10base5" }, \
{ IFM_ETHER | IFM_10_5, "10base5/AUI" }, \
{ IFM_ETHER | IFM_10_5, "AUI" }, \
{ IFM_ETHER | IFM_10_5, "10AUI" }, \
{ IFM_ETHER | IFM_10_5, "10BASE5" }, \
{ IFM_ETHER | IFM_100_TX, "100baseTX" }, \
{ IFM_ETHER | IFM_100_TX, "100TX" }, \
{ IFM_ETHER | IFM_100_TX, "100BASE-TX" }, \
{ IFM_ETHER | IFM_100_FX, "100baseFX" }, \
{ IFM_ETHER | IFM_100_FX, "100FX" }, \
{ IFM_ETHER | IFM_100_FX, "100BASE-FX" }, \
{ IFM_ETHER | IFM_100_T4, "100baseT4" }, \
{ IFM_ETHER | IFM_100_T4, "100T4" }, \
{ IFM_ETHER | IFM_100_T4, "100BASE-T4" }, \
{ IFM_ETHER | IFM_100_VG, "100baseVG" }, \
{ IFM_ETHER | IFM_100_VG, "100VG" }, \
{ IFM_ETHER | IFM_100_VG, "100VG-AnyLAN" }, \
{ IFM_ETHER | IFM_100_T2, "100baseT2" }, \
{ IFM_ETHER | IFM_100_T2, "100T2" }, \
{ IFM_ETHER | IFM_100_T2, "100BASE-T2" }, \
{ IFM_ETHER | IFM_1000_SX, "1000baseSX" }, \
{ IFM_ETHER | IFM_1000_SX, "1000SX" }, \
{ IFM_ETHER | IFM_1000_SX, "1000BASE-SX" }, \
{ IFM_ETHER | IFM_10_STP, "10baseSTP" }, \
{ IFM_ETHER | IFM_10_STP, "STP" }, \
{ IFM_ETHER | IFM_10_STP, "10STP" }, \
{ IFM_ETHER | IFM_10_STP, "10BASE-STP" }, \
{ IFM_ETHER | IFM_10_FL, "10baseFL" }, \
{ IFM_ETHER | IFM_10_FL, "FL" }, \
{ IFM_ETHER | IFM_10_FL, "10FL" }, \
{ IFM_ETHER | IFM_10_FL, "10BASE-FL" }, \
{ IFM_ETHER | IFM_1000_LX, "1000baseLX" }, \
{ IFM_ETHER | IFM_1000_LX, "1000LX" }, \
{ IFM_ETHER | IFM_1000_LX, "1000BASE-LX" }, \
{ IFM_ETHER | IFM_1000_CX, "1000baseCX" }, \
{ IFM_ETHER | IFM_1000_CX, "1000CX" }, \
{ IFM_ETHER | IFM_1000_CX, "1000BASE-CX" }, \
{ IFM_ETHER | IFM_1000_BX10, "1000BASE-BX10" }, \
{ IFM_ETHER | IFM_1000_KX, "1000BASE-KX" }, \
{ IFM_ETHER | IFM_1000_KX, "1000baseKX" }, \
{ IFM_ETHER | IFM_1000_T, "1000baseT" }, \
{ IFM_ETHER | IFM_1000_T, "1000T" }, \
{ IFM_ETHER | IFM_1000_T, "1000BASE-T" }, \
{ IFM_ETHER | IFM_HPNA_1, "HomePNA1" }, \
{ IFM_ETHER | IFM_HPNA_1, "HPNA1" }, \
{ IFM_ETHER | IFM_2500_KX | IFM_FDX, "2500BASE-KX" }, \
{ IFM_ETHER | IFM_2500_KX | IFM_FDX, "2500baseKX" }, \
{ IFM_ETHER | IFM_2500_T | IFM_FDX, "2.5GBASE-T" }, \
{ IFM_ETHER | IFM_2500_T | IFM_FDX, "2500baseT" }, \
{ IFM_ETHER | IFM_5000_T | IFM_FDX, "5GBASE-T" }, \
{ IFM_ETHER | IFM_5000_T | IFM_FDX, "5GbaseT" }, \
{ IFM_ETHER | IFM_OTHER, "Other" }, \
{ IFM_ETHER | IFM_10G_LR | IFM_FDX, "10GbaseLR" }, \
{ IFM_ETHER | IFM_10G_LR | IFM_FDX, "10GLR" }, \
{ IFM_ETHER | IFM_10G_LR | IFM_FDX, "10GBASE-LR" }, \
{ IFM_ETHER | IFM_10G_SR | IFM_FDX, "10GbaseSR" }, \
{ IFM_ETHER | IFM_10G_SR | IFM_FDX, "10GSR" }, \
{ IFM_ETHER | IFM_10G_SR | IFM_FDX, "10GBASE-SR" }, \
{ IFM_ETHER | IFM_10G_LRM | IFM_FDX, "10Gbase-LRM" }, \
{ IFM_ETHER | IFM_10G_TWINAX | IFM_FDX, "10Gbase-Twinax" }, \
{ IFM_ETHER | IFM_10G_TWINAX_LONG | IFM_FDX, "10Gbase-Twinax-Long" },\
{ IFM_ETHER | IFM_10G_T | IFM_FDX, "10Gbase-T" }, \
{ IFM_ETHER | IFM_10G_CX4 | IFM_FDX, "10GbaseCX4" }, \
{ IFM_ETHER | IFM_10G_CX4 | IFM_FDX, "10GCX4" }, \
{ IFM_ETHER | IFM_10G_CX4 | IFM_FDX, "10GBASE-CX4" }, \
{ IFM_ETHER | IFM_2500_SX | IFM_FDX, "2500baseSX" }, \
{ IFM_ETHER | IFM_2500_SX | IFM_FDX, "2500SX" }, \
{ IFM_ETHER | IFM_1000_SGMII | IFM_FDX, "1000BASE-SGMII" }, \
{ IFM_ETHER | IFM_5000_KR | IFM_FDX, "5GBASE-KR" }, \
{ IFM_ETHER | IFM_10G_AOC | IFM_FDX, "10GBASE-AOC" }, \
{ IFM_ETHER | IFM_10G_CR1 | IFM_FDX, "10GBASE-CR1" }, \
{ IFM_ETHER | IFM_10G_ER | IFM_FDX, "10GBASE-ER" }, \
{ IFM_ETHER | IFM_10G_KR | IFM_FDX, "10GBASE-KR" }, \
{ IFM_ETHER | IFM_10G_KX4 | IFM_FDX, "10GBASE-KX4" }, \
{ IFM_ETHER | IFM_10G_LX4 | IFM_FDX, "10GBASE-LX4" }, \
{ IFM_ETHER | IFM_10G_SFI | IFM_FDX, "10GBASE-SFI" }, \
{ IFM_ETHER | IFM_10G_ZR | IFM_FDX, "10GBASE-ZR" }, \
{ IFM_ETHER | IFM_20G_KR2 | IFM_FDX, "20GBASE-KR2" }, \
{ IFM_ETHER | IFM_25G_ACC | IFM_FDX, "25GBASE-ACC" }, \
{ IFM_ETHER | IFM_25G_AOC | IFM_FDX, "25GBASE-AOC" }, \
{ IFM_ETHER | IFM_25G_AUI | IFM_FDX, "25G-AUI" }, \
{ IFM_ETHER | IFM_25G_CR | IFM_FDX, "25GBASE-CR" }, \
{ IFM_ETHER | IFM_25G_CR_S | IFM_FDX, "25GBASE-CR-S" }, \
{ IFM_ETHER | IFM_25G_ER | IFM_FDX, "25GBASE-ER" }, \
{ IFM_ETHER | IFM_25G_KR | IFM_FDX, "25GBASE-KR" }, \
{ IFM_ETHER | IFM_25G_KR_S | IFM_FDX, "25GBASE-KR-S" }, \
{ IFM_ETHER | IFM_25G_LR | IFM_FDX, "25GBASE-LR" }, \
{ IFM_ETHER | IFM_25G_SR | IFM_FDX, "25GBASE-SR" }, \
{ IFM_ETHER | IFM_25G_T | IFM_FDX, "25GBASE-T" }, \
{ IFM_ETHER | IFM_40G_AOC | IFM_FDX, "40GBASE-AOC" }, \
{ IFM_ETHER | IFM_40G_CR4 | IFM_FDX, "40GBASE-CR4" }, \
{ IFM_ETHER | IFM_40G_ER4 | IFM_FDX, "40GBASE-ER4" }, \
{ IFM_ETHER | IFM_40G_FR | IFM_FDX, "40GBASE-FR" }, \
{ IFM_ETHER | IFM_40G_KR4 | IFM_FDX, "40GBASE-KR4" }, \
{ IFM_ETHER | IFM_40G_LR4 | IFM_FDX, "40GBASE-LR4" }, \
{ IFM_ETHER | IFM_40G_SR4 | IFM_FDX, "40GBASE-SR4" }, \
{ IFM_ETHER | IFM_40G_T | IFM_FDX, "40GBASE-T" }, \
{ IFM_ETHER | IFM_40G_XLPPI | IFM_FDX, "40G-XLPPI" }, \
{ IFM_ETHER | IFM_50G_AUI1 | IFM_FDX, "50GAUI-1" }, \
{ IFM_ETHER | IFM_50G_AUI2 | IFM_FDX, "50GAUI-2" }, \
{ IFM_ETHER | IFM_50G_CR | IFM_FDX, "50GBASE-CR" }, \
{ IFM_ETHER | IFM_50G_CR2 | IFM_FDX, "50GBASE-CR2" }, \
{ IFM_ETHER | IFM_50G_FR | IFM_FDX, "50GBASE-FR" }, \
{ IFM_ETHER | IFM_50G_KR | IFM_FDX, "50GBASE-KR" }, \
{ IFM_ETHER | IFM_50G_KR2 | IFM_FDX, "50GBASE-KR2" }, \
{ IFM_ETHER | IFM_50G_LAUI2 | IFM_FDX, "50GLAUI-2" }, \
{ IFM_ETHER | IFM_50G_LR | IFM_FDX, "50GBASE-LR" }, \
{ IFM_ETHER | IFM_50G_SR | IFM_FDX, "50GBASE-SR" }, \
{ IFM_ETHER | IFM_50G_SR2 | IFM_FDX, "50GBASE-SR2" }, \
{ IFM_ETHER | IFM_56G_R4 | IFM_FDX, "56GBASE-R4" }, \
{ IFM_ETHER | IFM_100G_ACC | IFM_FDX, "100GBASE-ACC" }, \
{ IFM_ETHER | IFM_100G_AOC | IFM_FDX, "100GBASE-AOC" }, \
{ IFM_ETHER | IFM_100G_CR2 | IFM_FDX, "100GBASE-CR2" }, \
{ IFM_ETHER | IFM_100G_CR4 | IFM_FDX, "100GBASE-CR4" }, \
{ IFM_ETHER | IFM_100G_CR10 | IFM_FDX, "100GBASE-CR10" }, \
{ IFM_ETHER | IFM_100G_DR | IFM_FDX, "100GBASE-DR" }, \
{ IFM_ETHER | IFM_100G_ER4 | IFM_FDX, "100GBASE-ER4" }, \
{ IFM_ETHER | IFM_100G_FR | IFM_FDX, "100GBASE-FR" }, \
{ IFM_ETHER | IFM_100G_KP4 | IFM_FDX, "100GBASE-KP4" }, \
{ IFM_ETHER | IFM_100G_KR2 | IFM_FDX, "100GBASE-KR2" }, \
{ IFM_ETHER | IFM_100G_KR4 | IFM_FDX, "100GBASE-KR4" }, \
{ IFM_ETHER | IFM_100G_LR | IFM_FDX, "100GBASE-LR" }, \
{ IFM_ETHER | IFM_100G_LR4 | IFM_FDX, "100GBASE-LR4" }, \
{ IFM_ETHER | IFM_100G_SR2 | IFM_FDX, "100GBASE-SR2" }, \
{ IFM_ETHER | IFM_100G_SR4 | IFM_FDX, "100GBASE-SR4" }, \
{ IFM_ETHER | IFM_100G_SR10 | IFM_FDX, "100GBASE-SR10" }, \
{ IFM_ETHER | IFM_200G_CR2 | IFM_FDX, "200GBASE-CR2" }, \
{ IFM_ETHER | IFM_200G_CR4 | IFM_FDX, "200GBASE-CR4" }, \
{ IFM_ETHER | IFM_200G_DR4 | IFM_FDX, "200GBASE-DR4" }, \
{ IFM_ETHER | IFM_200G_ER4 | IFM_FDX, "200GBASE-ER4" }, \
{ IFM_ETHER | IFM_200G_FR4 | IFM_FDX, "200GBASE-FR4" }, \
{ IFM_ETHER | IFM_200G_KR2 | IFM_FDX, "200GBASE-KR2" }, \
{ IFM_ETHER | IFM_200G_KR4 | IFM_FDX, "200GBASE-KR4" }, \
{ IFM_ETHER | IFM_200G_LR4 | IFM_FDX, "200GBASE-LR4" }, \
{ IFM_ETHER | IFM_200G_SR4 | IFM_FDX, "200GBASE-SR4" }, \
{ IFM_ETHER | IFM_400G_CR4 | IFM_FDX, "400GBASE-CR4" }, \
{ IFM_ETHER | IFM_400G_DR4 | IFM_FDX, "400GBASE-DR4" }, \
{ IFM_ETHER | IFM_400G_ER8 | IFM_FDX, "400GBASE-ER8" }, \
{ IFM_ETHER | IFM_400G_FR4 | IFM_FDX, "400GBASE-FR4" }, \
{ IFM_ETHER | IFM_400G_FR8 | IFM_FDX, "400GBASE-FR8" }, \
{ IFM_ETHER | IFM_400G_KR4 | IFM_FDX, "400GBASE-KR4" }, \
{ IFM_ETHER | IFM_400G_LR4 | IFM_FDX, "400GBASE-LR4" }, \
{ IFM_ETHER | IFM_400G_LR8 | IFM_FDX, "400GBASE-LR8" }, \
{ IFM_ETHER | IFM_400G_SR4_2 | IFM_FDX, "400GBASE-SR4.2" }, \
{ IFM_ETHER | IFM_400G_SR8 | IFM_FDX, "400GBASE-SR8" }, \
{ IFM_ETHER | IFM_400G_SR16 | IFM_FDX, "400GBASE-SR16" }, \
\
{ IFM_TOKEN | IFM_TOK_STP4, "DB9/4Mbit" }, \
{ IFM_TOKEN | IFM_TOK_STP4, "4STP" }, \
{ IFM_TOKEN | IFM_TOK_STP16, "DB9/16Mbit" }, \
{ IFM_TOKEN | IFM_TOK_STP16, "16STP" }, \
{ IFM_TOKEN | IFM_TOK_UTP4, "UTP/4Mbit" }, \
{ IFM_TOKEN | IFM_TOK_UTP4, "4UTP" }, \
{ IFM_TOKEN | IFM_TOK_UTP16, "UTP/16Mbit" }, \
{ IFM_TOKEN | IFM_TOK_UTP16, "16UTP" }, \
\
{ IFM_FDDI | IFM_FDDI_SMF, "Single-mode" }, \
{ IFM_FDDI | IFM_FDDI_SMF, "SMF" }, \
{ IFM_FDDI | IFM_FDDI_MMF, "Multi-mode" }, \
{ IFM_FDDI | IFM_FDDI_MMF, "MMF" }, \
{ IFM_FDDI | IFM_FDDI_UTP, "UTP" }, \
{ IFM_FDDI | IFM_FDDI_UTP, "CDDI" }, \
\
\
{ IFM_ETHER | IFM_10_T | IFM_FDX, "10baseT-FDX" }, \
{ IFM_ETHER | IFM_10_T | IFM_FDX, "10BASE-T-FDX" }, \
{ IFM_ETHER | IFM_100_TX | IFM_FDX, "100baseTX-FDX" }, \
{ IFM_ETHER | IFM_100_TX | IFM_FDX, "100BASE-TX-FDX" }, \
{ IFM_ETHER | IFM_1000_T | IFM_FDX, "1000baseT-FDX" }, \
\
\
{ IFM_IEEE80211 | IFM_IEEE80211_FH1, "FH1" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_FH2, "FH2" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS1, "DS1" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS2, "DS2" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS5, "DS5" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS11, "DS11" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS22, "DS22" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM6, "OFDM6" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM9, "OFDM9" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM12, "OFDM12" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM18, "OFDM18" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM24, "OFDM24" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM36, "OFDM36" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM48, "OFDM48" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM54, "OFDM54" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM72, "OFDM72" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS354k, "DS/354Kbps" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_DS512k, "DS/512Kbps" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM3, "OFDM/3Mbps" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM4, "OFDM/4.5Mbps" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_OFDM27, "OFDM/27Mbps" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_MCS, "HT" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_VHT, "VHT" }, \
\
{ 0, NULL }, \
}
#define IFM_MODE_DESCRIPTIONS { \
{ IFM_AUTO, "autoselect" }, \
{ IFM_AUTO, "auto" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11A, "11a" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11B, "11b" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11G, "11g" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_FH, "fh" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11NA, "11na" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11NG, "11ng" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_11AC, "11ac" }, \
{ 0, NULL }, \
}
#define IFM_OPTION_DESCRIPTIONS { \
{ IFM_FDX, "full-duplex" }, \
{ IFM_FDX, "fdx" }, \
{ IFM_HDX, "half-duplex" }, \
{ IFM_HDX, "hdx" }, \
{ IFM_FLOW, "flowcontrol" }, \
{ IFM_FLOW, "flow" }, \
{ IFM_FLAG0, "flag0" }, \
{ IFM_FLAG1, "flag1" }, \
{ IFM_FLAG2, "flag2" }, \
{ IFM_LOOP, "loopback" }, \
{ IFM_LOOP, "hw-loopback"}, \
{ IFM_LOOP, "loop" }, \
\
{ IFM_ETHER | IFM_ETH_MASTER, "master" }, \
{ IFM_ETHER | IFM_ETH_RXPAUSE, "rxpause" }, \
{ IFM_ETHER | IFM_ETH_TXPAUSE, "txpause" }, \
\
{ IFM_TOKEN | IFM_TOK_ETR, "EarlyTokenRelease" }, \
{ IFM_TOKEN | IFM_TOK_ETR, "ETR" }, \
{ IFM_TOKEN | IFM_TOK_SRCRT, "SourceRouting" }, \
{ IFM_TOKEN | IFM_TOK_SRCRT, "SRCRT" }, \
{ IFM_TOKEN | IFM_TOK_ALLR, "AllRoutes" }, \
{ IFM_TOKEN | IFM_TOK_ALLR, "ALLR" }, \
\
{ IFM_FDDI | IFM_FDDI_DA, "dual-attach" }, \
{ IFM_FDDI | IFM_FDDI_DA, "das" }, \
\
{ IFM_IEEE80211 | IFM_IEEE80211_ADHOC, "adhoc" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_HOSTAP, "hostap" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_MONITOR,"monitor" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_TURBO, "turbo" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_IBSS, "ibss" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_WDS, "wds" }, \
{ IFM_IEEE80211 | IFM_IEEE80211_MBSS, "mesh" }, \
\
{ 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_1000_BX10, IF_Mbps(1000ULL) }, \
{ IFM_ETHER | IFM_10G_TWINAX, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_TWINAX_LONG, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_LRM, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_T, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_1000_KX, IF_Mbps(1000ULL) }, \
{ IFM_ETHER | IFM_2500_KX, IF_Mbps(2500ULL) }, \
{ IFM_ETHER | IFM_2500_T, IF_Mbps(2500ULL) }, \
{ IFM_ETHER | IFM_5000_T, IF_Gbps(5) }, \
{ IFM_ETHER | IFM_1000_SGMII, IF_Gbps(1) }, \
{ IFM_ETHER | IFM_5000_KR, IF_Gbps(5) }, \
{ IFM_ETHER | IFM_10G_AOC, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_CR1, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_ER, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_KR, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_KX4, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_LX4, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_SFI, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_10G_ZR, IF_Gbps(10) }, \
{ IFM_ETHER | IFM_20G_KR2, IF_Gbps(20) }, \
{ IFM_ETHER | IFM_25G_ACC, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_AOC, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_AUI, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_CR, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_CR_S, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_ER, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_KR, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_KR_S, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_LR, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_SR, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_25G_T, IF_Gbps(25) }, \
{ IFM_ETHER | IFM_40G_AOC, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_CR4, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_ER4, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_FR, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_KR4, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_LR4, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_SR4, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_T, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_40G_XLPPI, IF_Gbps(40) }, \
{ IFM_ETHER | IFM_50G_AUI1, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_AUI2, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_CR, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_CR2, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_FR, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_KR, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_KR2, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_LAUI2, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_LR, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_SR, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_50G_SR2, IF_Gbps(50) }, \
{ IFM_ETHER | IFM_56G_R4, IF_Gbps(56) }, \
{ IFM_ETHER | IFM_100G_ACC, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_AOC, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_CR2, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_CR4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_CR10, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_DR, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_ER4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_FR, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_KP4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_KR2, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_KR4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_LR, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_LR4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_SR2, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_SR4, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_100G_SR10, IF_Gbps(100) }, \
{ IFM_ETHER | IFM_200G_CR2, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_CR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_DR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_ER4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_FR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_KR2, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_KR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_LR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_200G_SR4, IF_Gbps(200) }, \
{ IFM_ETHER | IFM_400G_CR4, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_DR4, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_ER8, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_FR4, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_FR8, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_KR4, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_LR4, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_LR8, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_SR4_2, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_SR8, IF_Gbps(400) }, \
{ IFM_ETHER | IFM_400G_SR16, IF_Gbps(400) }, \
\
{ IFM_TOKEN | IFM_TOK_STP4, IF_Mbps(4) }, \
{ IFM_TOKEN | IFM_TOK_STP16, IF_Mbps(16) }, \
{ IFM_TOKEN | IFM_TOK_UTP4, IF_Mbps(4) }, \
{ IFM_TOKEN | IFM_TOK_UTP16, IF_Mbps(16) }, \
\
{ IFM_FDDI | IFM_FDDI_SMF, IF_Mbps(100) }, \
{ IFM_FDDI | IFM_FDDI_MMF, IF_Mbps(100) }, \
{ IFM_FDDI | IFM_FDDI_UTP, IF_Mbps(100) }, \
\
{ IFM_IEEE80211 | IFM_IEEE80211_FH1, IF_Mbps(1) }, \
{ IFM_IEEE80211 | IFM_IEEE80211_FH2, IF_Mbps(2) }, \
{ 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_DS1, IF_Mbps(1) }, \
{ 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 }, \
}
struct ifmedia_status_description {
int ifms_type;
int ifms_valid;
int ifms_bit;
const char *ifms_string[2];
};
#define IFM_STATUS_DESC(ifms, bit) \
(ifms)->ifms_string[((ifms)->ifms_bit & (bit)) ? 1 : 0]
#define IFM_STATUS_DESCRIPTIONS { \
{ IFM_GENERIC, IFM_AVALID, IFM_ACTIVE, \
{ "no network", "active" } }, \
\
{ IFM_ETHER, IFM_AVALID, IFM_ACTIVE, \
{ "no carrier", "active" } }, \
\
{ IFM_FDDI, IFM_AVALID, IFM_ACTIVE, \
{ "no ring", "inserted" } }, \
\
{ IFM_TOKEN, IFM_AVALID, IFM_ACTIVE, \
{ "no ring", "inserted" } }, \
\
{ IFM_IEEE80211, IFM_AVALID, IFM_ACTIVE, \
{ "no network", "active" } }, \
\
{ IFM_CARP, IFM_AVALID, IFM_ACTIVE, \
{ "backup", "master" } }, \
\
{ 0, 0, 0, \
{ NULL, NULL } }, \
}
#ifdef _KERNEL
#include <sys/mutex.h>
#include <sys/queue.h>
typedef int (*ifm_change_cb_t)(struct ifnet *);
typedef void (*ifm_stat_cb_t)(struct ifnet *, struct ifmediareq *);
struct ifmedia_entry {
TAILQ_ENTRY(ifmedia_entry) ifm_list;
u_int ifm_media;
u_int ifm_data;
void *ifm_aux;
};
struct ifmedia {
kmutex_t *ifm_lock;
u_int ifm_mask;
u_int ifm_media;
struct ifmedia_entry *ifm_cur;
TAILQ_HEAD(, ifmedia_entry) ifm_list;
ifm_change_cb_t ifm_change;
ifm_stat_cb_t ifm_status;
uintptr_t ifm_legacy;
};
#define ifmedia_lock(ifm) mutex_enter((ifm)->ifm_lock)
#define ifmedia_unlock(ifm) mutex_exit((ifm)->ifm_lock)
#define ifmedia_locked(ifm) mutex_owned((ifm)->ifm_lock)
#ifdef __IFMEDIA_PRIVATE
#define ifmedia_islegacy(ifm) ((ifm)->ifm_legacy)
void ifmedia_lock_for_legacy(struct ifmedia *);
void ifmedia_unlock_for_legacy(struct ifmedia *);
#define IFMEDIA_LOCK_FOR_LEGACY(ifm) \
do { \
if (ifmedia_islegacy(ifm)) \
ifmedia_lock_for_legacy(ifm); \
} while (0)
#define IFMEDIA_UNLOCK_FOR_LEGACY(ifm) \
do { \
if (ifmedia_islegacy(ifm)) \
ifmedia_unlock_for_legacy(ifm); \
} while (0)
#endif
void ifmedia_init(struct ifmedia *, int, ifm_change_cb_t, ifm_stat_cb_t);
void ifmedia_init_with_lock(struct ifmedia *, int, ifm_change_cb_t,
ifm_stat_cb_t, kmutex_t *);
void ifmedia_fini(struct ifmedia *);
void ifmedia_add(struct ifmedia *, int, int, void *);
void ifmedia_list_add(struct ifmedia *, struct ifmedia_entry *, int);
void ifmedia_set(struct ifmedia *ifm, int mword);
int ifmedia_ioctl(struct ifnet *, struct ifreq *, struct ifmedia *, u_long);
struct ifmedia_entry *ifmedia_match(struct ifmedia *, u_int, u_int);
void ifmedia_delete_instance(struct ifmedia *, u_int);
void ifmedia_removeall(struct ifmedia *);
uint64_t ifmedia_baudrate(int);
int ifmedia_change(struct ifmedia *, struct ifnet *);
#else
const char *get_media_type_string(int);
const char *get_media_subtype_string(int);
const char *get_media_mode_string(int);
const char *get_media_option_string(int *);
int get_media_mode(int, const char *);
int get_media_subtype(int, const char *);
int get_media_options(int, const char *, char **);
int lookup_media_word(struct ifmedia_description *, int, const char *);
#endif
#endif