summaryrefslogtreecommitdiff
path: root/bfdd/bfd.c
diff options
context:
space:
mode:
authorAcee Lindem <acee@lindem.com>2025-03-03 22:46:01 +0000
committerAcee Lindem <acee@lindem.com>2025-03-03 22:46:01 +0000
commitaa50f5ebb88ef24cf1d95e0ce9061366d8ab37c5 (patch)
tree2c010bf6798ae8371a3c06603eb0432ec6405ab8 /bfdd/bfd.c
parent4b0aeb6b292b595d7a685ea7d1e3a20814b18b4d (diff)
bfdd: Add BFD "log-session-changes" feature.
Add the BFD "log-session-changes" via the YANG and northbound API. Also add the configured value to show and operational state. Signed-off-by: Acee Lindem <acee@lindem.com>
Diffstat (limited to 'bfdd/bfd.c')
-rw-r--r--bfdd/bfd.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c
index fade89d04f..8d5306aaaf 100644
--- a/bfdd/bfd.c
+++ b/bfdd/bfd.c
@@ -79,6 +79,7 @@ static void bfd_profile_set_default(struct bfd_profile *bp)
bp->detection_multiplier = BFD_DEFDETECTMULT;
bp->echo_mode = false;
bp->passive = false;
+ bp->log_session_changes = false;
bp->minimum_ttl = BFD_DEF_MHOP_TTL;
bp->min_echo_rx = BFD_DEF_REQ_MIN_ECHO_RX;
bp->min_echo_tx = BFD_DEF_DES_MIN_ECHO_TX;
@@ -210,6 +211,12 @@ void bfd_session_apply(struct bfd_session *bs)
else
bfd_set_shutdown(bs, bs->peer_profile.admin_shutdown);
+ /* Toggle 'no log-session-changes' if default value. */
+ if (bs->peer_profile.log_session_changes == false)
+ bfd_set_log_session_changes(bs, bp->log_session_changes);
+ else
+ bfd_set_log_session_changes(bs, bs->peer_profile.log_session_changes);
+
/* If session interval changed negotiate new timers. */
if (bs->ses_state == PTM_BFD_UP
&& (bs->timers.desired_min_tx != min_tx
@@ -574,6 +581,9 @@ void ptm_bfd_sess_up(struct bfd_session *bfd)
zlog_debug("state-change: [%s] %s -> %s",
bs_to_string(bfd), state_list[old_state].str,
state_list[bfd->ses_state].str);
+ if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES))
+ zlog_notice("Session-Change: [%s] %s -> %s", bs_to_string(bfd),
+ state_list[old_state].str, state_list[bfd->ses_state].str);
}
}
@@ -621,6 +631,11 @@ void ptm_bfd_sess_dn(struct bfd_session *bfd, uint8_t diag)
bs_to_string(bfd), state_list[old_state].str,
state_list[bfd->ses_state].str,
get_diag_str(bfd->local_diag));
+ if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES) &&
+ old_state == PTM_BFD_UP)
+ zlog_notice("Session-Change: [%s] %s -> %s reason:%s", bs_to_string(bfd),
+ state_list[old_state].str, state_list[bfd->ses_state].str,
+ get_diag_str(bfd->local_diag));
}
/* clear peer's mac address */
@@ -651,6 +666,9 @@ void ptm_sbfd_sess_up(struct bfd_session *bfd)
if (bglobal.debug_peer_event)
zlog_info("state-change: [%s] %s -> %s", bs_to_string(bfd),
state_list[old_state].str, state_list[bfd->ses_state].str);
+ if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES))
+ zlog_notice("Session-Change: [%s] %s -> %s", bs_to_string(bfd),
+ state_list[old_state].str, state_list[bfd->ses_state].str);
}
}
@@ -693,6 +711,11 @@ void ptm_sbfd_init_sess_dn(struct bfd_session *bfd, uint8_t diag)
zlog_debug("state-change: [%s] %s -> %s reason:%s", bs_to_string(bfd),
state_list[old_state].str, state_list[bfd->ses_state].str,
get_diag_str(bfd->local_diag));
+ if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES) &&
+ old_state == PTM_BFD_UP)
+ zlog_notice("Session-Change: [%s] %s -> %s reason:%s", bs_to_string(bfd),
+ state_list[old_state].str, state_list[bfd->ses_state].str,
+ get_diag_str(bfd->local_diag));
}
/* reset local address ,it might has been be changed after bfd is up*/
//memset(&bfd->local_address, 0, sizeof(bfd->local_address));
@@ -721,6 +744,11 @@ void ptm_sbfd_echo_sess_dn(struct bfd_session *bfd, uint8_t diag)
zlog_warn("state-change: [%s] %s -> %s reason:%s", bs_to_string(bfd),
state_list[old_state].str, state_list[bfd->ses_state].str,
get_diag_str(bfd->local_diag));
+ if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES) &&
+ old_state == PTM_BFD_UP)
+ zlog_notice("Session-Change: [%s] %s -> %s reason:%s", bs_to_string(bfd),
+ state_list[old_state].str, state_list[bfd->ses_state].str,
+ get_diag_str(bfd->local_diag));
}
}
@@ -944,6 +972,11 @@ static void _bfd_session_update(struct bfd_session *bs,
bs->peer_profile.echo_mode = bpc->bpc_echo;
bfd_set_echo(bs, bpc->bpc_echo);
+ if (bpc->bpc_log_session_changes)
+ SET_FLAG(bs->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES);
+ else
+ UNSET_FLAG(bs->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES);
+
/*
* Shutdown needs to be the last in order to avoid timers enable when
* the session is disabled.
@@ -1608,6 +1641,14 @@ void bfd_set_passive_mode(struct bfd_session *bs, bool passive)
}
}
+void bfd_set_log_session_changes(struct bfd_session *bs, bool log_session_changes)
+{
+ if (log_session_changes)
+ SET_FLAG(bs->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES);
+ else
+ UNSET_FLAG(bs->flags, BFD_SESS_FLAG_LOG_SESSION_CHANGES);
+}
+
/*
* Helper functions.
*/