From: Alan T. DeKok Date: Mon, 16 Jan 2023 13:26:34 +0000 (-0500) Subject: allow for and initialize retries X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0269e69fb589eb372aea3988b3739bb16aa3cf6e;p=thirdparty%2Ffreeradius-server.git allow for and initialize retries --- diff --git a/src/modules/rlm_tacacs/rlm_tacacs.c b/src/modules/rlm_tacacs/rlm_tacacs.c index efbfc754cc3..471b00d4f99 100644 --- a/src/modules/rlm_tacacs/rlm_tacacs.c +++ b/src/modules/rlm_tacacs/rlm_tacacs.c @@ -31,6 +31,18 @@ RCSID("$Id$") #include "rlm_tacacs.h" static int type_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, CONF_PARSER const *rule); + +/* + * Retransmission intervals for the packets we support. + */ +static CONF_PARSER retry_config[] = { + { FR_CONF_OFFSET("initial_rtx_time", FR_TYPE_TIME_DELTA, fr_retry_config_t, irt), .dflt = STRINGIFY(2) }, + { FR_CONF_OFFSET("max_rtx_time", FR_TYPE_TIME_DELTA, fr_retry_config_t, mrt), .dflt = STRINGIFY(16) }, + { FR_CONF_OFFSET("max_rtx_count", FR_TYPE_UINT32, fr_retry_config_t, mrc), .dflt = STRINGIFY(5) }, + { FR_CONF_OFFSET("max_rtx_duration", FR_TYPE_TIME_DELTA, fr_retry_config_t, mrd), .dflt = STRINGIFY(30) }, + CONF_PARSER_TERMINATOR +}; + /* * A mapping of configuration file names to internal variables. */ @@ -48,6 +60,8 @@ static CONF_PARSER const module_config[] = { { FR_CONF_OFFSET("pool", FR_TYPE_SUBSECTION, rlm_tacacs_t, trunk_conf), .subcs = (void const *) fr_trunk_config, }, + { FR_CONF_OFFSET("retry", FR_TYPE_SUBSECTION, rlm_tacacs_t, retry), .subcs = (void const *) retry_config }, + CONF_PARSER_TERMINATOR }; diff --git a/src/modules/rlm_tacacs/rlm_tacacs.h b/src/modules/rlm_tacacs/rlm_tacacs.h index 5807f9ed74d..0bf7005d211 100644 --- a/src/modules/rlm_tacacs/rlm_tacacs.h +++ b/src/modules/rlm_tacacs/rlm_tacacs.h @@ -52,6 +52,8 @@ struct rlm_tacacs_s { uint32_t *types; //!< array of allowed packet types + fr_retry_config_t retry; //!< retries shared by all packet types + bool allowed[FR_TAC_PLUS_MAX]; fr_trunk_conf_t trunk_conf; //!< trunk configuration diff --git a/src/modules/rlm_tacacs/rlm_tacacs_tcp.c b/src/modules/rlm_tacacs/rlm_tacacs_tcp.c index a506e68a84f..5e52496ed1e 100644 --- a/src/modules/rlm_tacacs/rlm_tacacs_tcp.c +++ b/src/modules/rlm_tacacs/rlm_tacacs_tcp.c @@ -822,8 +822,7 @@ static void request_mux(fr_event_list_t *el, /* * Start retransmissions from when the socket is writable. */ - // @todo - initialize the retry -// (void) fr_retry_init(&u->retry, fr_time(), &h->inst->parent->retry[u->code]); + (void) fr_retry_init(&u->retry, fr_time(), &h->inst->parent->retry); fr_assert(fr_time_delta_ispos(u->retry.rt)); fr_assert(fr_time_gt(u->retry.next, fr_time_wrap(0)));