diff --git a/packages/base/any/onlp/src/sff/module/auto/sff.yml b/packages/base/any/onlp/src/sff/module/auto/sff.yml index 40e9472e..ae5a01d6 100644 --- a/packages/base/any/onlp/src/sff/module/auto/sff.yml +++ b/packages/base/any/onlp/src/sff/module/auto/sff.yml @@ -105,6 +105,8 @@ sff_module_types: &sff_module_types desc: "1GBASE-SX" - 1G_BASE_LX: desc: "1GBASE-LX" +- 1G_BASE_ZX: + desc: "1GBASE-ZX" - 1G_BASE_CX: desc: "1GBASE-CX" - 1G_BASE_T: diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/8472.h b/packages/base/any/onlp/src/sff/module/inc/sff/8472.h index 0e2f73d0..5a985f3b 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/8472.h +++ b/packages/base/any/onlp/src/sff/module/inc/sff/8472.h @@ -209,6 +209,9 @@ #define SFF8472_MEDIA_XGE_ER(idprom) \ ((idprom[3] & SFF8472_CC3_XGE_BASE_ER) != 0) +#define SFF8472_MEDIA_LENGTH_ZX(idprom) \ + (idprom[14] >= 70) + /* * some CR cables identify as infiniband copper * some CR cables identify as FC twinax diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff.h b/packages/base/any/onlp/src/sff/module/inc/sff/sff.h index 485bd38f..0101cfb3 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.h +++ b/packages/base/any/onlp/src/sff/module/inc/sff/sff.h @@ -128,6 +128,7 @@ typedef enum sff_module_type_e { SFF_MODULE_TYPE_10G_BASE_SRL, SFF_MODULE_TYPE_1G_BASE_SX, SFF_MODULE_TYPE_1G_BASE_LX, + SFF_MODULE_TYPE_1G_BASE_ZX, SFF_MODULE_TYPE_1G_BASE_CX, SFF_MODULE_TYPE_1G_BASE_T, SFF_MODULE_TYPE_100_BASE_LX, @@ -172,6 +173,7 @@ typedef enum sff_module_type_e { "10G_BASE_SRL", \ "1G_BASE_SX", \ "1G_BASE_LX", \ + "1G_BASE_ZX", \ "1G_BASE_CX", \ "1G_BASE_T", \ "100_BASE_LX", \ diff --git a/packages/base/any/onlp/src/sff/module/inc/sff/sff.x b/packages/base/any/onlp/src/sff/module/inc/sff/sff.x index 46cad1b8..0b211647 100644 --- a/packages/base/any/onlp/src/sff/module/inc/sff/sff.x +++ b/packages/base/any/onlp/src/sff/module/inc/sff/sff.x @@ -38,6 +38,7 @@ SFF_MEDIA_TYPE_ENTRY(10G_BASE_ZR, 10GBASE-ZR) SFF_MEDIA_TYPE_ENTRY(10G_BASE_SRL, 10GBASE-SRL) SFF_MEDIA_TYPE_ENTRY(1G_BASE_SX, 1GBASE-SX) SFF_MEDIA_TYPE_ENTRY(1G_BASE_LX, 1GBASE-LX) +SFF_MEDIA_TYPE_ENTRY(1G_BASE_ZX, 1GBASE-ZX) SFF_MEDIA_TYPE_ENTRY(1G_BASE_CX, 1GBASE-CX) SFF_MEDIA_TYPE_ENTRY(1G_BASE_T, 1GBASE-T) SFF_MEDIA_TYPE_ENTRY(100_BASE_LX, 100BASE-LX) @@ -88,6 +89,7 @@ SFF_MODULE_TYPE_ENTRY(10G_BASE_ZR, 10GBASE-ZR) SFF_MODULE_TYPE_ENTRY(10G_BASE_SRL, 10GBASE-SRL) SFF_MODULE_TYPE_ENTRY(1G_BASE_SX, 1GBASE-SX) SFF_MODULE_TYPE_ENTRY(1G_BASE_LX, 1GBASE-LX) +SFF_MODULE_TYPE_ENTRY(1G_BASE_ZX, 1GBASE-ZX) SFF_MODULE_TYPE_ENTRY(1G_BASE_CX, 1GBASE-CX) SFF_MODULE_TYPE_ENTRY(1G_BASE_T, 1GBASE-T) SFF_MODULE_TYPE_ENTRY(100_BASE_LX, 100BASE-LX) diff --git a/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py b/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py index 3b144ccc..bba20c17 100644 --- a/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py +++ b/packages/base/any/onlp/src/sff/module/python/onlp/sff/enums.py @@ -58,11 +58,12 @@ class SFF_MODULE_TYPE(Enumeration): _10G_BASE_SRL = 28 _1G_BASE_SX = 29 _1G_BASE_LX = 30 - _1G_BASE_CX = 31 - _1G_BASE_T = 32 - _100_BASE_LX = 33 - _100_BASE_FX = 34 - _4X_MUX = 35 + _1G_BASE_ZX = 31 + _1G_BASE_CX = 32 + _1G_BASE_T = 33 + _100_BASE_LX = 34 + _100_BASE_FX = 35 + _4X_MUX = 36 class SFF_SFP_TYPE(Enumeration): diff --git a/packages/base/any/onlp/src/sff/module/src/sff.c b/packages/base/any/onlp/src/sff/module/src/sff.c index 9a258d0d..fac75054 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff.c +++ b/packages/base/any/onlp/src/sff/module/src/sff.c @@ -213,8 +213,13 @@ sff_module_type_get(const uint8_t* eeprom) return SFF_MODULE_TYPE_1G_BASE_SX; if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_LX(eeprom)) - return SFF_MODULE_TYPE_1G_BASE_LX; + && SFF8472_MEDIA_GBE_LX(eeprom)) { + if (SFF8472_MEDIA_LENGTH_ZX(eeprom)) { + return SFF_MODULE_TYPE_1G_BASE_ZX; + } else { + return SFF_MODULE_TYPE_1G_BASE_LX; + } + } if (SFF8472_MODULE_SFP(eeprom) && SFF8472_MEDIA_GBE_CX(eeprom)) @@ -224,10 +229,6 @@ sff_module_type_get(const uint8_t* eeprom) && SFF8472_MEDIA_GBE_T(eeprom)) return SFF_MODULE_TYPE_1G_BASE_T; - if (SFF8472_MODULE_SFP(eeprom) - && SFF8472_MEDIA_GBE_LX(eeprom)) - return SFF_MODULE_TYPE_1G_BASE_LX; - if (SFF8472_MODULE_SFP(eeprom) && SFF8472_MEDIA_CBE_LX(eeprom)) return SFF_MODULE_TYPE_100_BASE_LX; @@ -289,6 +290,7 @@ sff_media_type_get(sff_module_type_t mt) case SFF_MODULE_TYPE_10G_BASE_SRL: case SFF_MODULE_TYPE_1G_BASE_SX: case SFF_MODULE_TYPE_1G_BASE_LX: + case SFF_MODULE_TYPE_1G_BASE_ZX: case SFF_MODULE_TYPE_100_BASE_LX: case SFF_MODULE_TYPE_100_BASE_FX: case SFF_MODULE_TYPE_4X_MUX: @@ -354,6 +356,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps) case SFF_MODULE_TYPE_1G_BASE_SX: case SFF_MODULE_TYPE_1G_BASE_LX: + case SFF_MODULE_TYPE_1G_BASE_ZX: case SFF_MODULE_TYPE_1G_BASE_CX: case SFF_MODULE_TYPE_1G_BASE_T: *caps |= SFF_MODULE_CAPS_F_1G; @@ -790,6 +793,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt, case SFF_MODULE_TYPE_1G_BASE_SX: case SFF_MODULE_TYPE_1G_BASE_LX: + case SFF_MODULE_TYPE_1G_BASE_ZX: info->sfp_type = SFF_SFP_TYPE_SFP; info->media_type = SFF_MEDIA_TYPE_FIBER; info->caps = SFF_MODULE_CAPS_F_1G; diff --git a/packages/base/any/onlp/src/sff/module/src/sff_enums.c b/packages/base/any/onlp/src/sff/module/src/sff_enums.c index ce013e7a..deeeb50d 100644 --- a/packages/base/any/onlp/src/sff/module/src/sff_enums.c +++ b/packages/base/any/onlp/src/sff/module/src/sff_enums.c @@ -162,6 +162,7 @@ aim_map_si_t sff_module_type_map[] = { "10G_BASE_SRL", SFF_MODULE_TYPE_10G_BASE_SRL }, { "1G_BASE_SX", SFF_MODULE_TYPE_1G_BASE_SX }, { "1G_BASE_LX", SFF_MODULE_TYPE_1G_BASE_LX }, + { "1G_BASE_ZX", SFF_MODULE_TYPE_1G_BASE_ZX }, { "1G_BASE_CX", SFF_MODULE_TYPE_1G_BASE_CX }, { "1G_BASE_T", SFF_MODULE_TYPE_1G_BASE_T }, { "100_BASE_LX", SFF_MODULE_TYPE_100_BASE_LX }, @@ -203,6 +204,7 @@ aim_map_si_t sff_module_type_desc_map[] = { "10GBASE-SRL", SFF_MODULE_TYPE_10G_BASE_SRL }, { "1GBASE-SX", SFF_MODULE_TYPE_1G_BASE_SX }, { "1GBASE-LX", SFF_MODULE_TYPE_1G_BASE_LX }, + { "1GBASE-ZX", SFF_MODULE_TYPE_1G_BASE_ZX }, { "1GBASE-CX", SFF_MODULE_TYPE_1G_BASE_CX }, { "1GBASE-T", SFF_MODULE_TYPE_1G_BASE_T }, { "100BASE-LX", SFF_MODULE_TYPE_100_BASE_LX },