diff --git a/orchagent/p4orch/tests/fake_portorch.cpp b/orchagent/p4orch/tests/fake_portorch.cpp index f16ff2409a..379e99bc86 100644 --- a/orchagent/p4orch/tests/fake_portorch.cpp +++ b/orchagent/p4orch/tests/fake_portorch.cpp @@ -623,7 +623,7 @@ void PortsOrch::updateDbPortOperSpeed(Port &port, sai_uint32_t speed) { } -void PortsOrch::getPortSerdesVal(const std::string &s, std::vector &lane_values) +void PortsOrch::getPortSerdesVal(const std::string &s, std::vector &lane_values, int base) { } diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index 5cd16df6b4..b2ec952a59 100755 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -6789,7 +6789,8 @@ void PortsOrch::removePortSerdesAttribute(sai_object_id_t port_id) } void PortsOrch::getPortSerdesVal(const std::string& val_str, - std::vector &lane_values) + std::vector &lane_values, + int base) { SWSS_LOG_ENTER(); @@ -6799,23 +6800,7 @@ void PortsOrch::getPortSerdesVal(const std::string& val_str, while (std::getline(iss, lane_str, ',')) { - lane_val = (uint32_t)std::stoul(lane_str, NULL, 16); - lane_values.push_back(lane_val); - } -} - -void PortsOrch::getPortSerdesValBase10(const std::string& val_str, - std::vector &lane_values) -{ - SWSS_LOG_ENTER(); - - uint32_t lane_val; - std::string lane_str; - std::istringstream iss(val_str); - - while (std::getline(iss, lane_str, ',')) - { - lane_val = (uint32_t)std::stoul(lane_str, NULL, 10); + lane_val = (uint32_t)std::stoul(lane_str, NULL, base); lane_values.push_back(lane_val); } } @@ -7199,7 +7184,7 @@ bool PortsOrch::initGearboxPort(Port &port) for (auto pair: tx_fir_strings_system_side) { if (m_gearboxInterfaceMap[port.m_index].tx_firs.find(pair.first) != m_gearboxInterfaceMap[port.m_index].tx_firs.end() ) { attr_val.clear(); - getPortSerdesValBase10(m_gearboxInterfaceMap[port.m_index].tx_firs[pair.first], attr_val); + getPortSerdesVal(m_gearboxInterfaceMap[port.m_index].tx_firs[pair.first], attr_val, 10); serdes_attr.insert(serdes_attr_pair(pair.second, attr_val)); } } @@ -7219,7 +7204,7 @@ bool PortsOrch::initGearboxPort(Port &port) for (auto pair: tx_fir_strings_line_side) { if (m_gearboxInterfaceMap[port.m_index].tx_firs.find(pair.first) != m_gearboxInterfaceMap[port.m_index].tx_firs.end() ) { attr_val.clear(); - getPortSerdesValBase10(m_gearboxInterfaceMap[port.m_index].tx_firs[pair.first], attr_val); + getPortSerdesVal(m_gearboxInterfaceMap[port.m_index].tx_firs[pair.first], attr_val, 10); serdes_attr.insert(serdes_attr_pair(pair.second, attr_val)); } } diff --git a/orchagent/portsorch.h b/orchagent/portsorch.h index cdc78f881a..dfa1cd0687 100755 --- a/orchagent/portsorch.h +++ b/orchagent/portsorch.h @@ -406,8 +406,7 @@ class PortsOrch : public Orch, public Subject void refreshPortStateAutoNeg(const Port &port); void refreshPortStateLinkTraining(const Port &port); - void getPortSerdesVal(const std::string& s, std::vector &lane_values); - void getPortSerdesValBase10(const std::string& s, std::vector &lane_values); + void getPortSerdesVal(const std::string& s, std::vector &lane_values, int base = 16); bool getPortAdvSpeedsVal(const std::string &s, std::vector &speed_values); bool getPortInterfaceTypeVal(const std::string &s, sai_port_interface_type_t &interface_type); bool getPortAdvInterfaceTypesVal(const std::string &s, std::vector &type_values); diff --git a/tests/test_gearbox.py b/tests/test_gearbox.py index 10e10ed43b..6707213990 100644 --- a/tests/test_gearbox.py +++ b/tests/test_gearbox.py @@ -104,8 +104,10 @@ def __init__(self, db_id: int, connector: str, gearbox: Gearbox): ("SAI_PORT_SERDES_ATTR_TX_FIR_MAIN", "tx_fir_main"), ("SAI_PORT_SERDES_ATTR_TX_FIR_PRE1", "tx_fir_pre1"), ("SAI_PORT_SERDES_ATTR_TX_FIR_PRE2", "tx_fir_pre2"), + ("SAI_PORT_SERDES_ATTR_TX_FIR_PRE3", "tx_fir_pre3"), ("SAI_PORT_SERDES_ATTR_TX_FIR_POST1", "tx_fir_post1"), ("SAI_PORT_SERDES_ATTR_TX_FIR_POST2", "tx_fir_post2"), + ("SAI_PORT_SERDES_ATTR_TX_FIR_POST3", "tx_fir_post3"), ]: if asic_db_key not in fvs: continue