Skip to content

Commit

Permalink
add revive_interval
Browse files Browse the repository at this point in the history
  • Loading branch information
alandekok committed Feb 7, 2020
1 parent 7a62211 commit 93aac9e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/modules/rlm_radius/rlm_radius.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ static CONF_PARSER const module_config[] = {

{ FR_CONF_OFFSET("zombie_period", FR_TYPE_TIME_DELTA, rlm_radius_t, zombie_period), .dflt = STRINGIFY(40) },

{ FR_CONF_OFFSET("revive_interval", FR_TYPE_TIME_DELTA, rlm_radius_t, revive_interval) },

{ FR_CONF_OFFSET("trunk", FR_TYPE_SUBSECTION, rlm_radius_t, trunk_conf), .subcs = (void const *) fr_trunk_config, },

CONF_PARSER_TERMINATOR
Expand Down Expand Up @@ -544,6 +546,11 @@ static int mod_bootstrap(void *instance, CONF_SECTION *conf)
FR_TIME_DELTA_BOUND_CHECK("zombie_period", inst->zombie_period, >=, fr_time_delta_from_sec(1));
FR_TIME_DELTA_BOUND_CHECK("zombie_period", inst->zombie_period, <=, fr_time_delta_from_sec(120));

if (!inst->status_check) {
FR_TIME_DELTA_BOUND_CHECK("revive_interval", inst->revive_interval, >=, fr_time_delta_from_sec(10));
FR_TIME_DELTA_BOUND_CHECK("revive_interval", inst->revive_interval, <=, fr_time_delta_from_sec(3600));
}

num_types = talloc_array_length(inst->types);
rad_assert(num_types > 0);

Expand Down
1 change: 1 addition & 0 deletions src/modules/rlm_radius/rlm_radius.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ struct rlm_radius_s {
char const *name; //!< Module instance name.

fr_time_delta_t zombie_period;
fr_time_delta_t revive_interval;

bool replicate; //!< are we ignoring responses?
bool synchronous; //!< are we doing synchronous proxying?
Expand Down
27 changes: 25 additions & 2 deletions src/modules/rlm_radius/rlm_radius_udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,18 @@ static int encode(REQUEST *request, udp_request_t *u, udp_handle_t *h)
}


/** Revive a connection after "revive_interval"
*
*/
static void revive_timer(UNUSED fr_event_list_t *el, UNUSED fr_time_t now, void *uctx)
{
udp_handle_t *h = talloc_get_type_abort(uctx, udp_handle_t);

DEBUG("Shutting down and reviving connection %s", h->name);
fr_trunk_connection_signal_reconnect(h->c->tconn, FR_CONNECTION_FAILED);
}


/** Run the status check timers.
*
*/
Expand Down Expand Up @@ -1016,8 +1028,19 @@ static void check_for_zombie(fr_event_list_t *el, udp_handle_t *h, fr_time_t now
* connection.
*/
if (!h->inst->parent->status_check) {
DEBUG2("No status_check configured, closing connection %s", h->name);
fr_trunk_connection_signal_reconnect(h->c->tconn, FR_CONNECTION_FAILED);
uint32_t msec = fr_time_delta_to_msec(h->inst->parent->revive_interval);
fr_time_t when;

DEBUG("Connection failed. Reviving it in %u.%03us",
msec / 1000, msec % 1000);
fr_trunk_connection_signal_inactive(h->c->tconn);

when = now + h->inst->parent->revive_interval;
if (fr_event_timer_at(h, el, &h->zombie_ev, when, revive_timer, h) < 0) {
fr_trunk_connection_signal_reconnect(h->c->tconn, FR_CONNECTION_FAILED);
return;
}

return;
}

Expand Down

0 comments on commit 93aac9e

Please sign in to comment.