diff options
| author | Acee Lindem <acee@lindem.com> | 2025-03-03 22:46:01 +0000 |
|---|---|---|
| committer | Acee Lindem <acee@lindem.com> | 2025-03-03 22:46:01 +0000 |
| commit | aa50f5ebb88ef24cf1d95e0ce9061366d8ab37c5 (patch) | |
| tree | 2c010bf6798ae8371a3c06603eb0432ec6405ab8 /bfdd/bfd.c | |
| parent | 4b0aeb6b292b595d7a685ea7d1e3a20814b18b4d (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.c | 41 |
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. */ |
