HOME_STATE_CONNECTION_FAIL,
} home_state_t;
+#define HOME_SERVER_IS_DEAD(_x) (((_x)->state == HOME_STATE_IS_DEAD) || ((_x)->state == HOME_STATE_ADMIN_DOWN) || ((_x)->state == HOME_STATE_CONNECTION_FAIL))
+
typedef struct fr_socket_limit_t {
uint32_t max_connections;
uint32_t num_connections;
if (request->home_server && request->home_server->virtual_server) goto req_finished;
if (request->home_pool && request->home_server &&
- (request->home_server->state >= HOME_STATE_IS_DEAD)) {
+ HOME_SERVER_IS_DEAD(request->home_server)) {
VALUE_PAIR *vp;
REALM *realm = NULL;
home_server_t *home = NULL;
* The home server is alive (or may be alive).
* Send the packet to the IP.
*/
- if (home->state < HOME_STATE_IS_DEAD) goto do_home;
+ if (!HOME_SERVER_IS_DEAD(home)) goto do_home;
/*
* The home server is dead. If you wanted
* The home server is alive (or may be alive).
* Send the packet to the IP.
*/
- if (home->state < HOME_STATE_IS_DEAD) goto do_home;
+ if (!HOME_SERVER_IS_DEAD(home)) goto do_home;
/*
* The home server is dead. If you wanted
*
* If it's zombie, we mark it alive immediately.
*/
- if ((home->state >= HOME_STATE_IS_DEAD) &&
+ if (HOME_SERVER_IS_DEAD(home) &&
(home->num_received_pings < home->num_pings_to_alive)) {
return;
}
* If the listener is known or frozen, use it for
* retransmits.
*/
- if ((home->state >= HOME_STATE_IS_DEAD) ||
+ if (HOME_SERVER_IS_DEAD(home) ||
!request->proxy_listener ||
(request->proxy_listener->status >= RAD_LISTEN_STATUS_EOL)) {
request_proxy_anew(request);
* Don't do fail-over. This is a 3.1 feature.
*/
if (!request->home_server ||
- (request->home_server->state >= HOME_STATE_IS_DEAD) ||
+ HOME_SERVER_IS_DEAD(request->home_server) ||
request->proxy_reply ||
!request->proxy_listener ||
(request->proxy_listener->status >= RAD_LISTEN_STATUS_EOL)) {
* Home servers that are unknown, alive, or zombie
* are used for proxying.
*/
- if (home->state >= HOME_STATE_IS_DEAD) {
+ if (HOME_SERVER_IS_DEAD(home)) {
continue;
}
if (!home) continue;
- if ((home->state >= HOME_STATE_IS_DEAD) &&
+ if (HOME_SERVER_IS_DEAD(home) &&
(home->ping_check == HOME_PING_CHECK_NONE)) {
home->state = HOME_STATE_ALIVE;
home->response_timeouts = 0;