Index: sys/dev/virtio/network/if_vtnet.c =================================================================== --- sys/dev/virtio/network/if_vtnet.c +++ sys/dev/virtio/network/if_vtnet.c @@ -938,6 +938,7 @@ ifmedia_init(&sc->vtnet_media, IFM_IMASK, vtnet_ifmedia_upd, vtnet_ifmedia_sts); ifmedia_add(&sc->vtnet_media, VTNET_MEDIATYPE, 0, NULL); + ifmedia_add(&sc->vtnet_media, IFM_ETHER_SUBTYPE_SET(IFM_VFAST), 0, NULL); ifmedia_set(&sc->vtnet_media, VTNET_MEDIATYPE); /* Read (or generate) the MAC address for the adapter. */ Index: sys/net/ieee8023ad_lacp.c =================================================================== --- sys/net/ieee8023ad_lacp.c +++ sys/net/ieee8023ad_lacp.c @@ -1072,6 +1072,9 @@ case IFM_1000_LX: case IFM_1000_CX: case IFM_1000_T: + case IFM_1000_KX: + case IFM_1000_SGMII: + case IFM_1000_CX_SGMII: key = IFM_1000_SX; break; case IFM_10G_LR: @@ -1081,15 +1084,44 @@ case IFM_10G_TWINAX_LONG: case IFM_10G_LRM: case IFM_10G_T: + case IFM_10G_KX4: + case IFM_10G_KR: + case IFM_10G_CR1: + case IFM_10G_ER: + case IFM_10G_SFI: key = IFM_10G_LR; break; + case IFM_20G_KR2: + key = IFM_20G_KR2; + break; + case IFM_2500_KX: + case IFM_2500_T: + key = IFM_2500_KX; + break; + case IFM_5000_T: + key = IFM_5000_T; + break; + case IFM_50G_PCIE: + key = IFM_50G_PCIE; + break; + case IFM_25G_PCIE: + key = IFM_25G_PCIE; + break; case IFM_40G_CR4: case IFM_40G_SR4: case IFM_40G_LR4: + case IFM_40G_XLPPI: + case IFM_40G_KR4: key = IFM_40G_CR4; break; + case IFM_100G_CR4: + case IFM_100G_SR4: + case IFM_100G_KR4: + key = IFM_100G_CR4; + break; default: key = subtype; + break; } /* bit 5..14: (some bits of) if_index of lagg device */ key |= 0x7fe0 & ((sc->sc_ifp->if_index) << 5); Index: sys/net/if_media.h =================================================================== --- sys/net/if_media.h +++ sys/net/if_media.h @@ -129,6 +129,8 @@ * Ethernet */ #define IFM_ETHER 0x00000020 +#define IFM_ETHER_SUBTYPE_SET(x) (((x) & 0x1f) | (((x) & 0x1e0) << 6) | IFM_ETHER) +#define IFM_ETHER_SUBTYPE_GET(x) (((x) & 0x1f) | (((x) & 0x7800) >> 6)) #define IFM_10_T 3 /* 10BaseT - RJ45 */ #define IFM_10_2 4 /* 10Base2 - Thinnet */ #define IFM_10_5 5 /* 10Base5 - AUI */ @@ -156,11 +158,40 @@ #define IFM_40G_CR4 27 /* 40GBase-CR4 */ #define IFM_40G_SR4 28 /* 40GBase-SR4 */ #define IFM_40G_LR4 29 /* 40GBase-LR4 */ +#define IFM_VFAST 30 /* test "V.fast" */ +#define IFM_1000_KX 31 /* 1000Base-KX backplane */ +#define IFM_10G_KX4 32 /* 10GBase-KX4 backplane */ +#define IFM_10G_KR 33 /* 10GBase-KR backplane */ +#define IFM_10G_CR1 34 /* 10GBase-CR1 Twinax splitter */ +#define IFM_20G_KR2 35 /* 20GBase-KR2 backplane */ +#define IFM_2500_KX 36 /* 2500Base-KX backplane */ +#define IFM_2500_T 37 /* 2500Base-T - RJ45 (NBaseT) */ +#define IFM_5000_T 38 /* 5000Base-T - RJ45 (NBaseT) */ +#define IFM_50G_PCIE 39 /* 50G Ethernet over PCIE */ +#define IFM_25G_PCIE 40 /* 25G Ethernet over PCIE */ +#define IFM_1000_SGMII 41 /* 1G media interface */ +#define IFM_10G_SFI 42 /* 10G media interface */ +#define IFM_40G_XLPPI 43 /* 40G media interface */ +#define IFM_1000_CX_SGMII 44 /* 1000Base-CX-SGMII */ +#define IFM_40G_KR4 45 /* 40GBase-KR4 */ +#define IFM_10G_ER 46 /* 10GBase-ER */ +#define IFM_100G_CR4 47 /* 100GBase-CR4 */ +#define IFM_100G_SR4 48 /* 100GBase-SR4 */ +#define IFM_100G_KR4 49 /* 100GBase-KR4 */ +#define IFM_100G_LR4 50 /* 100GBase-LR4 */ +#define IFM_56G_R4 51 /* 56GBase-R4 */ +#define IFM_100_T 52 /* 100BaseT - RJ45 */ +#define IFM_25G_CR 53 /* 25GBase-CR */ +#define IFM_25G_KR 54 /* 25GBase-KR */ +#define IFM_25G_SR 55 /* 25GBase-SR */ +#define IFM_50G_CR2 56 /* 50GBase-CR2 */ +#define IFM_50G_KR2 57 /* 50GBase-KR2 */ + /* * Please update ieee8023ad_lacp.c:lacp_compose_key() * after adding new Ethernet media types. */ -/* note 31 is the max! */ +/* Note 0x1ff is the max! */ #define IFM_ETH_MASTER 0x00000100 /* master mode (1000baseT) */ #define IFM_ETH_RXPAUSE 0x00000200 /* receive PAUSE frames */ @@ -307,7 +338,10 @@ * Macros to extract various bits of information from the media word. */ #define IFM_TYPE(x) ((x) & IFM_NMASK) -#define IFM_SUBTYPE(x) ((x) & IFM_TMASK) +#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)) @@ -372,6 +406,38 @@ { IFM_40G_CR4, "40Gbase-CR4" }, \ { IFM_40G_SR4, "40Gbase-SR4" }, \ { IFM_40G_LR4, "40Gbase-LR4" }, \ + { IFM_VFAST, "V.fast" }, \ + { IFM_1000_KX, "1000Base-KX" }, \ + { IFM_10G_KX4, "10GBase-KX4" }, \ + { IFM_10G_KR, "10GBase-KR" }, \ + { IFM_10G_CR1, "10GBase-CR1" }, \ + { IFM_20G_KR2, "20GBase-KR2" }, \ + { IFM_2500_KX, "2500Base-KX" }, \ + { IFM_2500_T, "2500Base-T" }, \ + { IFM_5000_T, "5000Base-T" }, \ + { IFM_50G_PCIE, "PCIExpress-50G" }, \ + { IFM_25G_PCIE, "PCIExpress-25G" }, \ + { IFM_1000_SGMII, "1000Base-SGMII" }, \ + { IFM_10G_SFI, "10GBase-SFI" }, \ + { IFM_40G_XLPPI, "40GBase-XLPPI" }, \ + { IFM_1000_CX_SGMII, "1000Base-CX-SGMII" }, \ + { IFM_40G_KR4, "40GBase-KR4" }, \ + { IFM_10G_ER, "10GBase-ER" }, \ + { IFM_100G_CR4, "100GBase-CR4" }, \ + { IFM_100G_SR4, "100GBase-SR4" }, \ + { IFM_100G_KR4, "100GBase-KR4" }, \ + { IFM_10G_ER, "10GBase-ER" }, \ + { IFM_100G_CR4, "100GBase-CR4" }, \ + { IFM_100G_SR4, "100GBase-SR4" }, \ + { IFM_100G_KR4, "100GBase-KR4" }, \ + { IFM_100G_LR4, "100GBase-LR4" }, \ + { IFM_56G_R4, "56GBase-R4" }, \ + { IFM_100_T, "100BaseT" }, \ + { IFM_25G_CR, "25GBase-CR" }, \ + { IFM_25G_KR, "25GBase-KR" }, \ + { IFM_25G_SR, "25GBase-SR" }, \ + { IFM_50G_CR2, "50GBase-CR2" }, \ + { IFM_50G_KR2, "50GBase-KR2" }, \ { 0, NULL }, \ } @@ -673,6 +739,34 @@ { 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_SUBTYPE_SET(IFM_VFAST), IF_Gbps(40ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_1000_KX), IF_Mbps(1000) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_10G_KX4), IF_Gbps(10ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_10G_KR), IF_Gbps(10ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_10G_CR1), IF_Gbps(10ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_20G_KR2), IF_Gbps(20ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_2500_KX), IF_Mbps(2500) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_2500_T), IF_Mbps(2500) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_5000_T), IF_Mbps(5000) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_50G_PCIE), IF_Gbps(50ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_25G_PCIE), IF_Gbps(25ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_1000_SGMII), IF_Mbps(1000) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_10G_SFI), IF_Gbps(10ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_40G_XLPPI), IF_Gbps(40ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_1000_CX_SGMII), IF_Mbps(1000) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_40G_KR4), IF_Gbps(40ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_10G_ER), IF_Gbps(10ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_100G_CR4), IF_Gbps(100ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_100G_SR4), IF_Gbps(100ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_100G_KR4), IF_Gbps(100ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_100G_LR4), IF_Gbps(100ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_56G_R4), IF_Gbps(56ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_100_T), IF_Mbps(100ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_25G_CR), IF_Gbps(25ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_25G_KR), IF_Gbps(25ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_25G_SR), IF_Gbps(25ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_50G_CR2), IF_Gbps(50ULL) }, \ + { IFM_ETHER_SUBTYPE_SET(IFM_50G_KR2), IF_Gbps(50ULL) }, \ \ { IFM_TOKEN | IFM_TOK_STP4, IF_Mbps(4) }, \ { IFM_TOKEN | IFM_TOK_STP16, IF_Mbps(16) }, \ Index: sys/net/if_media.c =================================================================== --- sys/net/if_media.c +++ sys/net/if_media.c @@ -354,8 +354,7 @@ int i; for (i = 0; ifmedia_baudrate_descriptions[i].ifmb_word != 0; i++) { - if ((mword & (IFM_NMASK|IFM_TMASK)) == - ifmedia_baudrate_descriptions[i].ifmb_word) + if (IFM_TYPE_MATCH(mword, ifmedia_baudrate_descriptions[i].ifmb_word)) return (ifmedia_baudrate_descriptions[i].ifmb_baudrate); }