From: Alan T. DeKok Date: Tue, 14 Mar 2023 21:04:39 +0000 (-0400) Subject: process sending BFD packets X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d9b4603b177ddeafb1b590caa61b6695fccb3c3e;p=thirdparty%2Ffreeradius-server.git process sending BFD packets where we don't have a request, but we do have a reply --- diff --git a/src/process/bfd/all.mk b/src/process/bfd/all.mk index 2c41aadd3eb..e3eea5eb51a 100644 --- a/src/process/bfd/all.mk +++ b/src/process/bfd/all.mk @@ -5,6 +5,6 @@ TARGET := $(TARGETNAME)$(L) endif SOURCES := base.c +SRC_CFLAGS := -I$(top_builddir)/src/listen TGT_PREREQS := libfreeradius-bfd$(L) - diff --git a/src/process/bfd/base.c b/src/process/bfd/base.c index 0080feb8d00..af4207ebf1a 100644 --- a/src/process/bfd/base.c +++ b/src/process/bfd/base.c @@ -24,6 +24,7 @@ #include #include #include +#include "bfd/session.h" static fr_dict_t const *dict_bfd; @@ -226,6 +227,7 @@ static fr_process_state_t const process_state_reply[] = { static unlang_action_t mod_process(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { fr_process_state_t const *state; + bfd_wrapper_t const *wrapper; PROCESS_TRACE; @@ -234,8 +236,25 @@ static unlang_action_t mod_process(rlm_rcode_t *p_result, module_ctx_t const *mc request->component = "bfd"; request->module = NULL; + fr_assert(request->dict == dict_bfd); + wrapper = (bfd_wrapper_t const *) request->packet->data; + + /* + * If there's no packet, we must be calling the "send" routine + */ + if (wrapper->type == BFD_WRAPPER_SEND_PACKET) { + fr_assert(wrapper->type == BFD_WRAPPER_SEND_PACKET); + + UPDATE_STATE(reply); + + bfd_packet_debug(request, request->reply, &request->reply_pairs, false); + return state->send(p_result, mctx, request); + } + + fr_assert(wrapper->type == BFD_WRAPPER_RECV_PACKET); + UPDATE_STATE(packet); bfd_packet_debug(request, request->packet, &request->request_pairs, true);