vslib/SwitchConfig.cpp (125 lines of code) (raw):
#include "saivs.h"
#include "SwitchConfig.h"
#include "swss/logger.h"
#include <boost/algorithm/string/join.hpp>
#include <cstring>
using namespace saivs;
SwitchConfig::SwitchConfig(
_In_ uint32_t switchIndex,
_In_ const std::string& hwinfo):
m_saiSwitchType(SAI_SWITCH_TYPE_NPU),
m_switchType(SAI_VS_SWITCH_TYPE_NONE),
m_bootType(SAI_VS_BOOT_TYPE_COLD),
m_switchIndex(switchIndex),
m_hardwareInfo(hwinfo),
m_useTapDevice(false),
m_useConfiguredSpeedAsOperSpeed(false)
{
SWSS_LOG_ENTER();
// empty
}
bool SwitchConfig::parseSaiSwitchType(
_In_ const char* saiSwitchTypeStr,
_Out_ sai_switch_type_t& saiSwitchType)
{
SWSS_LOG_ENTER();
std::string st = (saiSwitchTypeStr == NULL) ? "unknown" : saiSwitchTypeStr;
if (st == SAI_VALUE_SAI_SWITCH_TYPE_NPU)
{
saiSwitchType = SAI_SWITCH_TYPE_NPU;
}
else if (st == SAI_VALUE_SAI_SWITCH_TYPE_PHY)
{
saiSwitchType = SAI_SWITCH_TYPE_PHY;
}
else
{
SWSS_LOG_ERROR("unknown SAI switch type: '%s', expected (%s|%s)",
saiSwitchTypeStr,
SAI_VALUE_SAI_SWITCH_TYPE_NPU,
SAI_VALUE_SAI_SWITCH_TYPE_PHY);
return false;
}
return true;
}
bool SwitchConfig::parseSwitchType(
_In_ const char* switchTypeStr,
_Out_ sai_vs_switch_type_t& switchType)
{
SWSS_LOG_ENTER();
std::string st = (switchTypeStr == NULL) ? "unknown" : switchTypeStr;
if (st == SAI_VALUE_VS_SWITCH_TYPE_BCM56850)
{
switchType = SAI_VS_SWITCH_TYPE_BCM56850;
}
else if (st == SAI_VALUE_VS_SWITCH_TYPE_BCM56971B0)
{
switchType = SAI_VS_SWITCH_TYPE_BCM56971B0;
}
else if (st == SAI_VALUE_VS_SWITCH_TYPE_BCM81724)
{
switchType = SAI_VS_SWITCH_TYPE_BCM81724;
}
else if (st == SAI_VALUE_VS_SWITCH_TYPE_MLNX2700)
{
switchType = SAI_VS_SWITCH_TYPE_MLNX2700;
}
else if (st == SAI_VALUE_VS_SWITCH_TYPE_NVDA_MBF2H536C)
{
switchType = SAI_VS_SWITCH_TYPE_NVDA_MBF2H536C;
}
else if (st == SAI_VALUE_VS_SWITCH_TYPE_DPU_SIMU_2P)
{
/*
* TODO: Temporarily set switchType to SAI_VS_SWITCH_TYPE_NVDA_MBF2H536C
* for 2-port DPU. This will need to be revisited when there are other
* DPU types.
*/
switchType = SAI_VS_SWITCH_TYPE_NVDA_MBF2H536C;
}
else
{
std::vector<std::string> vals {
SAI_VALUE_VS_SWITCH_TYPE_BCM81724,
SAI_VALUE_VS_SWITCH_TYPE_BCM56850,
SAI_VALUE_VS_SWITCH_TYPE_BCM56971B0,
SAI_VALUE_VS_SWITCH_TYPE_MLNX2700,
SAI_VALUE_VS_SWITCH_TYPE_NVDA_MBF2H536C,
SAI_VALUE_VS_SWITCH_TYPE_DPU_SIMU_2P
};
SWSS_LOG_ERROR("unknown switch type: '%s', expected (%s)",
switchTypeStr,
boost::algorithm::join(vals, "|").c_str());
return false;
}
return true;
}
bool SwitchConfig::parseBootType(
_In_ const char* bootTypeStr,
_Out_ sai_vs_boot_type_t& bootType)
{
SWSS_LOG_ENTER();
std::string bt = (bootTypeStr == NULL) ? "cold" : bootTypeStr;
if (bt == "cold" || bt == SAI_VALUE_VS_BOOT_TYPE_COLD)
{
bootType = SAI_VS_BOOT_TYPE_COLD;
}
else if (bt == "warm" || bt == SAI_VALUE_VS_BOOT_TYPE_WARM)
{
bootType = SAI_VS_BOOT_TYPE_WARM;
}
else if (bt == "fast" || bt == SAI_VALUE_VS_BOOT_TYPE_FAST)
{
bootType = SAI_VS_BOOT_TYPE_FAST;
}
else
{
SWSS_LOG_ERROR("unknown boot type: '%s', expected (cold|warm|fast)", bootTypeStr);
return false;
}
return true;
}
bool SwitchConfig::parseBool(
_In_ const char* str)
{
SWSS_LOG_ENTER();
if (str)
{
return strcmp(str, "true") == 0;
}
return false;
}