diff --git a/fboss/qsfp_service/if/transceiver.thrift b/fboss/qsfp_service/if/transceiver.thrift index 9c2d30bb1ce22..ca4c1ee5cc0bf 100644 --- a/fboss/qsfp_service/if/transceiver.thrift +++ b/fboss/qsfp_service/if/transceiver.thrift @@ -245,6 +245,7 @@ enum MediaInterfaceCode { DR4_800G_GEARBOX = 35, // 8x800G over DR4: 4 banks, each a 2x800G-DR4 DR4_8x800G = 36, + FR2_200G = 37, } // The extended specification compliance code of the transceiver module. @@ -316,6 +317,7 @@ enum SMFMediaInterfaceCode { ZR_OROADM_FLEXO_4E_DO_400G = 0x64, ZR_OPENZRP_OFEC_400G = 0x36, FR4_800G = 0x79, + FR2_200G = 0xC0, FR2_400G = 0xC2, FR1_200G = 0xC4, ZR_VENDOR_CUSTOM = 0xF7, diff --git a/fboss/qsfp_service/module/properties/TransceiverPropertiesDefault.h b/fboss/qsfp_service/module/properties/TransceiverPropertiesDefault.h index de45269782096..0dc1cc7f6d5de 100644 --- a/fboss/qsfp_service/module/properties/TransceiverPropertiesDefault.h +++ b/fboss/qsfp_service/module/properties/TransceiverPropertiesDefault.h @@ -208,12 +208,22 @@ constexpr auto kDefaultTransceiverPropertiesJson = R"({ "ports": [ {"speed": 800000, "hostLanes": {"start": 0, "count": 8}, "mediaLanes": {"start": 0, "count": 8}, "mediaLaneCode": {"smfCode": 0xC1}, "mediaInterfaceCode": 15} ] + }, + { + "combinationName": "4x200G-FR4", + "ports": [ + {"speed": 200000, "hostLanes": {"start": 0, "count": 2}, "mediaLanes": {"start": 0, "count": 2}, "mediaLaneCode": {"smfCode": 0xC0}, "mediaInterfaceCode": 37}, + {"speed": 200000, "hostLanes": {"start": 2, "count": 2}, "mediaLanes": {"start": 2, "count": 2}, "mediaLaneCode": {"smfCode": 0xC0}, "mediaInterfaceCode": 37}, + {"speed": 200000, "hostLanes": {"start": 4, "count": 2}, "mediaLanes": {"start": 4, "count": 2}, "mediaLaneCode": {"smfCode": 0xC0}, "mediaInterfaceCode": 37}, + {"speed": 200000, "hostLanes": {"start": 6, "count": 2}, "mediaLanes": {"start": 6, "count": 2}, "mediaLaneCode": {"smfCode": 0xC0}, "mediaInterfaceCode": 37} + ] } ], "speedChangeTransitions": [ ["2x400G-FR4", "2x200G-FR4"], ["2x400G-FR4", "400G-FR4+200G-FR4"], ["2x400G-FR4", "200G-FR4+400G-FR4"], + ["2x400G-FR4", "4x200G-FR4"], ] }, "13": { diff --git a/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp b/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp index fbf5f5391ab1d..e6c698bd4a7aa 100644 --- a/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp +++ b/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp @@ -506,13 +506,15 @@ void HwTransceiverUtils::verify200gProfile( *mediaId.media()->smfCode() == SMFMediaInterfaceCode::LR4_200G || *mediaId.media()->smfCode() == SMFMediaInterfaceCode::DR2_200G || *mediaId.media()->smfCode() == SMFMediaInterfaceCode::DR1_200G || - *mediaId.media()->smfCode() == SMFMediaInterfaceCode::FR1_200G); + *mediaId.media()->smfCode() == SMFMediaInterfaceCode::FR1_200G || + *mediaId.media()->smfCode() == SMFMediaInterfaceCode::FR2_200G); EXPECT_TRUE( *mediaId.code() == MediaInterfaceCode::FR4_200G || *mediaId.code() == MediaInterfaceCode::LR4_200G || *mediaId.code() == MediaInterfaceCode::DR2_200G || *mediaId.code() == MediaInterfaceCode::DR1_200G || - *mediaId.code() == MediaInterfaceCode::FR1_200G); + *mediaId.code() == MediaInterfaceCode::FR1_200G || + *mediaId.code() == MediaInterfaceCode::FR2_200G); } }