Skip to content

Commit 6ee6444

Browse files
authored
Update to support SAI BFD_SESSION_OFFLOAD_TYPE. (#1546)
Adding support for SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE and SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE in vslib. This is needed by BfdOrch in sonic-swss to choose between software BFD or regular (offloaded) BFD. Default will be to return SAI_BFD_SESSION_OFFLOAD_TYPE_FULL, as this was the default behavior previously when this value was not checked. Added capability to return SAI_BFD_SESSION_OFFLOAD_TYPE_NONE by setting SAI_VS_BFD_OFFLOAD_SUPPORTED=false in sai.profile for testing and in cases where software BFD is desired.
1 parent 68a3c0c commit 6ee6444

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

vslib/Sai.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ sai_status_t Sai::apiInitialize(
152152

153153
auto useTapDevice = SwitchConfig::parseBool(use_tap_dev);
154154

155+
const char *bfd_offload_supported = service_method_table->profile_get_value(0, SAI_KEY_VS_BFD_OFFLOAD_SUPPORTED);
156+
auto bfdOffloadSupported = SwitchConfig::parseBfdOffloadSupported(bfd_offload_supported);
157+
155158
SWSS_LOG_NOTICE("hostif use TAP device: %s", (useTapDevice ? "true" : "false"));
156159

157160
const char *use_configured_speed_as_oper_speed = service_method_table->profile_get_value(0, SAI_KEY_VS_USE_CONFIGURED_SPEED_AS_OPER_SPEED);
@@ -226,6 +229,7 @@ sai_status_t Sai::apiInitialize(
226229
sc->m_useTapDevice = useTapDevice;
227230
sc->m_useConfiguredSpeedAsOperSpeed = useConfiguredSpeedAsOperSpeed;
228231
sc->m_laneMap = m_laneMapContainer->getLaneMap(sc->m_switchIndex);
232+
sc->m_bfdOffload = bfdOffloadSupported;
229233

230234
if (sc->m_laneMap == nullptr)
231235
{

vslib/SwitchConfig.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ SwitchConfig::SwitchConfig(
1818
m_switchIndex(switchIndex),
1919
m_hardwareInfo(hwinfo),
2020
m_useTapDevice(false),
21+
m_bfdOffload(true),
2122
m_useConfiguredSpeedAsOperSpeed(false)
2223
{
2324
SWSS_LOG_ENTER();
@@ -154,3 +155,16 @@ bool SwitchConfig::parseBool(
154155

155156
return false;
156157
}
158+
159+
bool SwitchConfig::parseBfdOffloadSupported(
160+
_In_ const char* bfdOffloadSupportedStr)
161+
{
162+
SWSS_LOG_ENTER();
163+
164+
if (bfdOffloadSupportedStr)
165+
{
166+
return strcmp(bfdOffloadSupportedStr, "true") == 0;
167+
}
168+
169+
return true;
170+
}

vslib/SwitchConfig.h

+5
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ namespace saivs
6767
static bool parseBool(
6868
_In_ const char* boolStr);
6969

70+
static bool parseBfdOffloadSupported(
71+
_In_ const char* bfdOffloadSupportedStr);
72+
7073
public:
7174

7275
sai_switch_type_t m_saiSwitchType;
@@ -81,6 +84,8 @@ namespace saivs
8184

8285
bool m_useTapDevice;
8386

87+
bool m_bfdOffload;
88+
8489
bool m_useConfiguredSpeedAsOperSpeed;
8590

8691
std::shared_ptr<LaneMap> m_laneMap;

vslib/SwitchStateBase.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,24 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
10551055

10561056
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
10571057

1058+
attr.id = SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE;
1059+
uint32_t list[1] = { SAI_BFD_SESSION_OFFLOAD_TYPE_FULL };
1060+
1061+
if(!m_switchConfig->m_bfdOffload) {
1062+
list[0] = SAI_BFD_SESSION_OFFLOAD_TYPE_NONE;
1063+
}
1064+
1065+
attr.value.u32list.count = 1;
1066+
attr.value.u32list.list = list;
1067+
1068+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
1069+
1070+
attr.id = SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE;
1071+
attr.value.u32list.count = 1;
1072+
attr.value.u32list.list = list;
1073+
1074+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
1075+
10581076
return set_switch_supported_object_types();
10591077
}
10601078

@@ -2480,6 +2498,10 @@ sai_status_t SwitchStateBase::refresh_read_only(
24802498
case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY:
24812499
return SAI_STATUS_SUCCESS;
24822500

2501+
case SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE:
2502+
case SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE:
2503+
return SAI_STATUS_SUCCESS;
2504+
24832505
case SAI_SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS:
24842506
case SAI_SWITCH_ATTR_SYSTEM_PORT_LIST:
24852507
return refresh_system_port_list(meta);

vslib/saivs.h

+13
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,19 @@ extern "C" {
5656
*/
5757
#define SAI_KEY_VS_HOSTIF_USE_TAP_DEVICE "SAI_VS_HOSTIF_USE_TAP_DEVICE"
5858

59+
/**
60+
* @def SAI_KEY_VS_BFD_OFFLOAD_SUPPORTED
61+
*
62+
* Bool flag, (true/false). If set to false, then platform will be configured
63+
* to return SAI_BFD_SESSION_OFFLOAD_TYPE_NONE for
64+
* SAI_SWITCH_ATTR_SUPPORTED_IPV4_BFD_SESSION_OFFLOAD_TYPE and
65+
* SAI_SWITCH_ATTR_SUPPORTED_IPV6_BFD_SESSION_OFFLOAD_TYPE calls; otherwise
66+
* SAI_BFD_SESSION_OFFLOAD_TYPE_FULL will be set.
67+
*
68+
* By default this flag is set to true.
69+
*/
70+
#define SAI_KEY_VS_BFD_OFFLOAD_SUPPORTED "SAI_VS_BFD_OFFLOAD_SUPPORTED"
71+
5972
/**
6073
* @def SAI_KEY_VS_USE_CONFIGURED_SPEED_AS_OPER_SPEED
6174
*

0 commit comments

Comments
 (0)