From: Alan T. DeKok Date: Tue, 14 Mar 2023 21:28:28 +0000 (-0400) Subject: go to admin-down on routing errors X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d04fb2a3e716691aeca2a126bd2b01c3b654b677;p=thirdparty%2Ffreeradius-server.git go to admin-down on routing errors --- diff --git a/src/listen/bfd/proto_bfd_udp.c b/src/listen/bfd/proto_bfd_udp.c index 28936784ac6..9c0ca0836f7 100644 --- a/src/listen/bfd/proto_bfd_udp.c +++ b/src/listen/bfd/proto_bfd_udp.c @@ -221,7 +221,8 @@ static ssize_t mod_write(fr_listen_t *li, void *packet_ctx, UNUSED fr_time_t req (struct sockaddr *) &session->remote_sockaddr, session->remote_salen); if (rcode < 0) { ERROR("Failed sending packet: %s", fr_syserror(errno)); - fr_assert(0); + bfd_session_admin_down(session); + return 0; } return rcode; diff --git a/src/listen/bfd/session.c b/src/listen/bfd/session.c index a9860f9b349..5fd047d9a14 100644 --- a/src/listen/bfd/session.c +++ b/src/listen/bfd/session.c @@ -47,7 +47,6 @@ static void bfd_start_control(bfd_session_t *session); static int bfd_stop_control(bfd_session_t *session); static void bfd_set_timeout(bfd_session_t *session, fr_time_t when); - /* * Wrapper to run a trigger. * @@ -73,6 +72,15 @@ static void bfd_trigger(UNUSED bfd_session_t *session, UNUSED bfd_state_change_t #endif } +void bfd_session_admin_down(bfd_session_t *session) +{ + bfd_stop_control(session); + + session->session_state = BFD_STATE_ADMIN_DOWN; + bfd_trigger(session, BFD_STATE_CHANGE_ADMIN_DOWN); +} + + /* * Stop polling for packets. */ @@ -132,7 +140,7 @@ static void bfd_poll_response(bfd_session_t *session) (struct sockaddr *) &session->local_sockaddr, session->local_salen, (struct sockaddr *) &session->remote_sockaddr, session->remote_salen) < 0) { ERROR("Failed sending packet: %s", fr_syserror(errno)); - fr_assert(0); + bfd_session_admin_down(session); } } @@ -755,7 +763,7 @@ static void bfd_send_packet(UNUSED fr_event_list_t *el, UNUSED fr_time_t now, vo (struct sockaddr *) &session->local_sockaddr, session->local_salen, (struct sockaddr *) &session->remote_sockaddr, session->remote_salen) < 0) { ERROR("Failed sending packet: %s", fr_syserror(errno)); - fr_assert(0); + bfd_session_admin_down(session); } } @@ -1031,7 +1039,7 @@ static void bfd_start_control(bfd_session_t *session) if ((session->remote_disc == 0) && session->passive) return; /* - * We were asked to go "up" when we were alread "up" + * We were asked to go "up" when we were already "up" */ if (session->remote_demand_mode && (session->session_state == BFD_STATE_UP) && @@ -1039,8 +1047,7 @@ static void bfd_start_control(bfd_session_t *session) !session->doing_poll) { DEBUG("BFD %s peer %s warning: asked to start UP / UP ?", session->server_name, session->client.shortname); - fr_assert(0 == 1); - bfd_stop_control(session); + bfd_session_admin_down(session); return; } diff --git a/src/listen/bfd/session.h b/src/listen/bfd/session.h index b223d6bea23..80ddbffa1f8 100644 --- a/src/listen/bfd/session.h +++ b/src/listen/bfd/session.h @@ -149,4 +149,6 @@ int bfd_session_init(bfd_session_t *session); void bfd_session_start(bfd_session_t *session); +void bfd_session_admin_down(bfd_session_t *session); + bfd_state_change_t bfd_session_process(bfd_session_t *session, bfd_packet_t *bfd);