Skip to content

Commit 6565b50

Browse files
authored
Revert "[portsorch] Expose supported FEC modes to STABE_DB and check whether FEC mode is supported before setting it (#2333)" (#2396)
This reverts commit dc8bc1c. *Revert "[portsorch] Expose supported FEC modes to STABE_DB and check whether FEC mode is supported before setting it"
1 parent dc8bc1c commit 6565b50

File tree

3 files changed

+12
-342
lines changed

3 files changed

+12
-342
lines changed

orchagent/portsorch.cpp

+11-108
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,6 @@ static map<string, sai_port_fec_mode_t> fec_mode_map =
7777
{ "fc", SAI_PORT_FEC_MODE_FC }
7878
};
7979

80-
static map<sai_port_fec_mode_t, string> fec_mode_reverse_map =
81-
{
82-
{ SAI_PORT_FEC_MODE_NONE, "none" },
83-
{ SAI_PORT_FEC_MODE_RS, "rs" },
84-
{ SAI_PORT_FEC_MODE_FC, "fc" }
85-
};
86-
8780
static map<string, sai_port_priority_flow_control_mode_t> pfc_asym_map =
8881
{
8982
{ "on", SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_SEPARATE },
@@ -1195,39 +1188,27 @@ bool PortsOrch::setPortTpid(sai_object_id_t id, sai_uint16_t tpid)
11951188
return true;
11961189
}
11971190

1198-
bool PortsOrch::setPortFec(Port &port, string &mode)
1191+
1192+
bool PortsOrch::setPortFec(Port &port, sai_port_fec_mode_t mode)
11991193
{
12001194
SWSS_LOG_ENTER();
12011195

1202-
auto searchRef = m_portSupportedFecModes.find(port.m_port_id);
1203-
if (searchRef != m_portSupportedFecModes.end())
1204-
{
1205-
auto &supportedFecModes = searchRef->second;
1206-
if (!supportedFecModes.empty() && (supportedFecModes.find(mode) == supportedFecModes.end()))
1207-
{
1208-
SWSS_LOG_ERROR("Unsupported mode %s on port %s", mode.c_str(), port.m_alias.c_str());
1209-
// We return true becase the caller will keep the item in m_toSync and retry it later if we return false
1210-
// As the FEC mode is not supported it doesn't make sense to retry.
1211-
return true;
1212-
}
1213-
}
1214-
12151196
sai_attribute_t attr;
12161197
attr.id = SAI_PORT_ATTR_FEC_MODE;
1217-
attr.value.s32 = port.m_fec_mode;
1198+
attr.value.s32 = mode;
12181199

12191200
sai_status_t status = sai_port_api->set_port_attribute(port.m_port_id, &attr);
12201201
if (status != SAI_STATUS_SUCCESS)
12211202
{
1222-
SWSS_LOG_ERROR("Failed to set FEC mode %s to port %s", mode.c_str(), port.m_alias.c_str());
1203+
SWSS_LOG_ERROR("Failed to set fec mode %d to port pid:%" PRIx64, mode, port.m_port_id);
12231204
task_process_status handle_status = handleSaiSetStatus(SAI_API_PORT, status);
12241205
if (handle_status != task_success)
12251206
{
12261207
return parseHandleSaiStatusFailure(handle_status);
12271208
}
12281209
}
12291210

1230-
SWSS_LOG_NOTICE("Set port %s FEC mode %s", port.m_alias.c_str(), mode.c_str());
1211+
SWSS_LOG_INFO("Set fec mode %d to port pid:%" PRIx64, mode, port.m_port_id);
12311212

12321213
setGearboxPortsAttr(port, SAI_PORT_ATTR_FEC_MODE, &mode);
12331214

@@ -2004,87 +1985,6 @@ void PortsOrch::initPortSupportedSpeeds(const std::string& alias, sai_object_id_
20041985
m_portStateTable.set(alias, v);
20051986
}
20061987

2007-
void PortsOrch::getPortSupportedFecModes(const std::string& alias, sai_object_id_t port_id, PortSupportedFecModes &supported_fecmodes)
2008-
{
2009-
sai_attribute_t attr;
2010-
sai_status_t status;
2011-
vector<sai_int32_t> fecModes(fec_mode_reverse_map.size());
2012-
2013-
attr.id = SAI_PORT_ATTR_SUPPORTED_FEC_MODE;
2014-
attr.value.s32list.count = static_cast<uint32_t>(fecModes.size());
2015-
attr.value.s32list.list = fecModes.data();
2016-
2017-
status = sai_port_api->get_port_attribute(port_id, 1, &attr);
2018-
fecModes.resize(attr.value.s32list.count);
2019-
if (status == SAI_STATUS_SUCCESS)
2020-
{
2021-
if (fecModes.empty())
2022-
{
2023-
supported_fecmodes.insert("N/A");
2024-
}
2025-
else
2026-
{
2027-
for(auto fecMode : fecModes)
2028-
{
2029-
supported_fecmodes.insert(fec_mode_reverse_map[static_cast<sai_port_fec_mode_t>(fecMode)]);
2030-
}
2031-
}
2032-
}
2033-
else
2034-
{
2035-
if (SAI_STATUS_IS_ATTR_NOT_SUPPORTED(status) ||
2036-
SAI_STATUS_IS_ATTR_NOT_IMPLEMENTED(status) ||
2037-
status == SAI_STATUS_NOT_IMPLEMENTED)
2038-
{
2039-
// unable to validate FEC mode if attribute is not supported on platform
2040-
SWSS_LOG_NOTICE("Unable to validate FEC mode for port %s id=%" PRIx64 " due to unsupported by platform",
2041-
alias.c_str(), port_id);
2042-
}
2043-
else
2044-
{
2045-
SWSS_LOG_ERROR("Failed to get a list of supported FEC modes for port %s id=%" PRIx64 ". Error=%d",
2046-
alias.c_str(), port_id, status);
2047-
}
2048-
2049-
supported_fecmodes.clear(); // return empty
2050-
}
2051-
}
2052-
2053-
void PortsOrch::initPortSupportedFecModes(const std::string& alias, sai_object_id_t port_id)
2054-
{
2055-
// If port supported speeds map already contains the information, save the SAI call
2056-
if (m_portSupportedFecModes.count(port_id))
2057-
{
2058-
return;
2059-
}
2060-
PortSupportedFecModes supported_fec_modes;
2061-
getPortSupportedFecModes(alias, port_id, supported_fec_modes);
2062-
m_portSupportedFecModes[port_id] = supported_fec_modes;
2063-
2064-
if (supported_fec_modes.empty())
2065-
{
2066-
// Do not expose "supported_fecs" in case fetching FEC modes is not supported by the vendor
2067-
SWSS_LOG_INFO("No supported_fecs exposed to STATE_DB for port %s since fetching supported FEC modes is not supported by the vendor",
2068-
alias.c_str());
2069-
return;
2070-
}
2071-
2072-
vector<FieldValueTuple> v;
2073-
std::string supported_fec_modes_str;
2074-
bool first = true;
2075-
for(auto fec : supported_fec_modes)
2076-
{
2077-
if (first)
2078-
first = false;
2079-
else
2080-
supported_fec_modes_str += ',';
2081-
supported_fec_modes_str += fec;
2082-
}
2083-
2084-
v.emplace_back(std::make_pair("supported_fecs", supported_fec_modes_str));
2085-
m_portStateTable.set(alias, v);
2086-
}
2087-
20881988
/*
20891989
* If Gearbox is enabled and this is a Gearbox port then set the attributes accordingly.
20901990
*/
@@ -3078,7 +2978,6 @@ void PortsOrch::doPortTask(Consumer &consumer)
30782978
}
30792979

30802980
initPortSupportedSpeeds(get<0>(it->second), m_portListLaneMap[it->first]);
3081-
initPortSupportedFecModes(get<0>(it->second), m_portListLaneMap[it->first]);
30822981
it++;
30832982
}
30842983

@@ -3427,12 +3326,14 @@ void PortsOrch::doPortTask(Consumer &consumer)
34273326
p.m_fec_mode = fec_mode_map[fec_mode];
34283327
p.m_fec_cfg = true;
34293328

3430-
if (setPortFec(p, fec_mode))
3329+
if (setPortFec(p, p.m_fec_mode))
34313330
{
34323331
m_portList[alias] = p;
3332+
SWSS_LOG_NOTICE("Set port %s fec to %s", alias.c_str(), fec_mode.c_str());
34333333
}
34343334
else
34353335
{
3336+
SWSS_LOG_ERROR("Failed to set port %s fec to %s", alias.c_str(), fec_mode.c_str());
34363337
it++;
34373338
continue;
34383339
}
@@ -3442,12 +3343,14 @@ void PortsOrch::doPortTask(Consumer &consumer)
34423343
/* Port is already down, setting fec mode*/
34433344
p.m_fec_mode = fec_mode_map[fec_mode];
34443345
p.m_fec_cfg = true;
3445-
if (setPortFec(p, fec_mode))
3346+
if (setPortFec(p, p.m_fec_mode))
34463347
{
34473348
m_portList[alias] = p;
3349+
SWSS_LOG_NOTICE("Set port %s fec to %s", alias.c_str(), fec_mode.c_str());
34483350
}
34493351
else
34503352
{
3353+
SWSS_LOG_ERROR("Failed to set port %s fec to %s", alias.c_str(), fec_mode.c_str());
34513354
it++;
34523355
continue;
34533356
}

orchagent/portsorch.h

+1-7
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#define PG_DROP_STAT_COUNTER_FLEX_COUNTER_GROUP "PG_DROP_STAT_COUNTER"
2828

2929
typedef std::vector<sai_uint32_t> PortSupportedSpeeds;
30-
typedef std::set<std::string> PortSupportedFecModes;
3130

3231
static const map<sai_port_oper_status_t, string> oper_status_strings =
3332
{
@@ -210,8 +209,6 @@ class PortsOrch : public Orch, public Subject
210209
unique_ptr<Table> m_gbcounterTable;
211210

212211
std::map<sai_object_id_t, PortSupportedSpeeds> m_portSupportedSpeeds;
213-
// Supported FEC modes on the system side.
214-
std::map<sai_object_id_t, PortSupportedFecModes> m_portSupportedFecModes;
215212

216213
bool m_initDone = false;
217214
Port m_cpuPort;
@@ -308,7 +305,7 @@ class PortsOrch : public Orch, public Subject
308305
bool setPortTpid(sai_object_id_t id, sai_uint16_t tpid);
309306
bool setPortPvid (Port &port, sai_uint32_t pvid);
310307
bool getPortPvid(Port &port, sai_uint32_t &pvid);
311-
bool setPortFec(Port &port, std::string &mode);
308+
bool setPortFec(Port &port, sai_port_fec_mode_t mode);
312309
bool setPortPfcAsym(Port &port, string pfc_asym);
313310
bool getDestPortId(sai_object_id_t src_port_id, dest_port_type_t port_type, sai_object_id_t &des_port_id);
314311

@@ -317,9 +314,6 @@ class PortsOrch : public Orch, public Subject
317314
bool isSpeedSupported(const std::string& alias, sai_object_id_t port_id, sai_uint32_t speed);
318315
void getPortSupportedSpeeds(const std::string& alias, sai_object_id_t port_id, PortSupportedSpeeds &supported_speeds);
319316
void initPortSupportedSpeeds(const std::string& alias, sai_object_id_t port_id);
320-
// Get supported FEC modes on system side
321-
void getPortSupportedFecModes(const std::string& alias, sai_object_id_t port_id, PortSupportedFecModes &supported_fecmodes);
322-
void initPortSupportedFecModes(const std::string& alias, sai_object_id_t port_id);
323317
task_process_status setPortSpeed(Port &port, sai_uint32_t speed);
324318
bool getPortSpeed(sai_object_id_t id, sai_uint32_t &speed);
325319
bool setGearboxPortsAttr(Port &port, sai_port_attr_t id, void *value);

0 commit comments

Comments
 (0)