Skip to content

Commit

Permalink
Correct handling of trunk enqueue responses
Browse files Browse the repository at this point in the history
  • Loading branch information
ndptech committed Oct 18, 2023
1 parent 1db39f9 commit dbb0fac
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/modules/rlm_radius/rlm_radius_udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2706,7 +2706,6 @@ static unlang_action_t mod_enqueue(rlm_rcode_t *p_result, void **rctx_out, void
udp_result_t *r;
udp_request_t *u;
fr_trunk_request_t *treq;
fr_trunk_enqueue_t q;

fr_assert(request->packet->code > 0);
fr_assert(request->packet->code < FR_RADIUS_CODE_MAX);
Expand Down Expand Up @@ -2751,21 +2750,25 @@ static unlang_action_t mod_enqueue(rlm_rcode_t *p_result, void **rctx_out, void
pair_delete_request(attr_message_authenticator);
}

q = fr_trunk_request_enqueue(&treq, t->trunk, request, u, r);
if (q < 0) {
switch(fr_trunk_request_enqueue(&treq, t->trunk, request, u, r)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
break;

case FR_TRUNK_ENQUEUE_NO_CAPACITY:
REDEBUG("Unable to queue packet - connections at maximum capacity");
fail:
fr_assert(!u->rr && !u->packet); /* Should not have been fed to the muxer */
fr_trunk_request_free(&treq); /* Return to the free list */
fail:
talloc_free(r);
RETURN_MODULE_FAIL;
}

/*
* All destinations are down.
*/
if (q == FR_TRUNK_ENQUEUE_IN_BACKLOG) {
RDEBUG("All destinations are down - cannot send packet");
fr_trunk_request_signal_cancel(treq);
case FR_TRUNK_ENQUEUE_DST_UNAVAILABLE:
REDEBUG("All destinations are down - cannot send packet");
goto fail;

case FR_TRUNK_ENQUEUE_FAIL:
REDEBUG("Unable to queue packet");
goto fail;
}

Expand Down

0 comments on commit dbb0fac

Please sign in to comment.