]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
allow for and initialize retries
authorAlan T. DeKok <aland@freeradius.org>
Mon, 16 Jan 2023 13:26:34 +0000 (08:26 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 16 Jan 2023 13:26:34 +0000 (08:26 -0500)
src/modules/rlm_tacacs/rlm_tacacs.c
src/modules/rlm_tacacs/rlm_tacacs.h
src/modules/rlm_tacacs/rlm_tacacs_tcp.c

index efbfc754cc310c23c67752dbd128a4e996eb4c23..471b00d4f995a87f60f183cf767c81dce94e2ba1 100644 (file)
@@ -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
 };
 
index 5807f9ed74da1c9ad7bd0d22966efd4753c12bb2..0bf7005d211619a6be81ef92f2c480613d2ab701 100644 (file)
@@ -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
index a506e68a84fecb206613bf26c8ddfe64521fdd0c..5e52496ed1e54edd6c39863e6ed94c69484e1878 100644 (file)
@@ -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)));