Skip to content

Commit b88a5c2

Browse files
authored
[ssw][ha] introducing custom_bfd and BfdMonitorOrch to support primary/secondary NHG switchover (#3922)
What I did Today vnetorch only supports: custom monitoring sessions with primary & secondary NHG. bfd monitoring with primary NHG only. To make HA work we need bfd monitoring to support primary+secondary. This PR is to introduce a new monitoring type custom_bfd for that purpose. It will: create bfd sessions for both primary & secondary endpoints listen on state db for bfd session state update ignore update call from bfdorch switch and update nhg based on bfd session state It's not an elegant design to introduce a new bfd monitoring type. But the intention is to not break current functionality of vnetorch. Refactor of the code will be needed in future.
1 parent b75c13d commit b88a5c2

File tree

4 files changed

+385
-36
lines changed

4 files changed

+385
-36
lines changed

orchagent/orchdaemon.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Srv6Orch *gSrv6Orch;
6363
FlowCounterRouteOrch *gFlowCounterRouteOrch;
6464
DebugCounterOrch *gDebugCounterOrch;
6565
MonitorOrch *gMonitorOrch;
66+
BfdMonitorOrch *gBfdMonitorOrch;
6667
TunnelDecapOrch *gTunneldecapOrch;
6768
StpOrch *gStpOrch;
6869
MuxOrch *gMuxOrch;
@@ -260,6 +261,8 @@ bool OrchDaemon::init()
260261
gDirectory.set(vrf_orch);
261262
gMonitorOrch = new MonitorOrch(m_stateDb, STATE_VNET_MONITOR_TABLE_NAME);
262263
gDirectory.set(gMonitorOrch);
264+
gBfdMonitorOrch = new BfdMonitorOrch(m_stateDb, STATE_BFD_SESSION_TABLE_NAME);
265+
gDirectory.set(gBfdMonitorOrch);
263266

264267
const vector<string> chassis_frontend_tables = {
265268
CFG_PASS_THROUGH_ROUTE_TABLE_NAME,
@@ -471,7 +474,7 @@ bool OrchDaemon::init()
471474
* when iterating ConsumerMap. This is ensured implicitly by the order of keys in ordered map.
472475
* For cases when Orch has to process tables in specific order, like PortsOrch during warm start, it has to override Orch::doTask()
473476
*/
474-
m_orchList = { gSwitchOrch, gCrmOrch, gPortsOrch, gBufferOrch, gFlowCounterRouteOrch, gIntfsOrch, gNeighOrch, gNhgMapOrch, gNhgOrch, gCbfNhgOrch, gFgNhgOrch, gRouteOrch, gCoppOrch, gQosOrch, wm_orch, gPolicerOrch, gTunneldecapOrch, sflow_orch, gDebugCounterOrch, gMacsecOrch, bgp_global_state_orch, gBfdOrch, gIcmpOrch, gSrv6Orch, gMuxOrch, mux_cb_orch, gMonitorOrch, gStpOrch};
477+
m_orchList = { gSwitchOrch, gCrmOrch, gPortsOrch, gBufferOrch, gFlowCounterRouteOrch, gIntfsOrch, gNeighOrch, gNhgMapOrch, gNhgOrch, gCbfNhgOrch, gFgNhgOrch, gRouteOrch, gCoppOrch, gQosOrch, wm_orch, gPolicerOrch, gTunneldecapOrch, sflow_orch, gDebugCounterOrch, gMacsecOrch, bgp_global_state_orch, gBfdOrch, gIcmpOrch, gSrv6Orch, gMuxOrch, mux_cb_orch, gMonitorOrch, gBfdMonitorOrch, gStpOrch};
475478

476479
bool initialize_dtel = false;
477480
if (platform == BFN_PLATFORM_SUBSTRING || platform == VS_PLATFORM_SUBSTRING)

0 commit comments

Comments
 (0)