aboutsummaryrefslogtreecommitdiffstats
path: root/pingu_host.c
diff options
context:
space:
mode:
Diffstat (limited to 'pingu_host.c')
-rw-r--r--pingu_host.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pingu_host.c b/pingu_host.c
index ed07487..fae9a0e 100644
--- a/pingu_host.c
+++ b/pingu_host.c
@@ -213,16 +213,18 @@ static void execute_action(const char *action)
}
}
-void pingu_host_set_status(struct pingu_host *host, int status)
+int pingu_host_set_status(struct pingu_host *host, int status)
{
const char *action;
host->burst.active = 0;
if (host->status == status) {
- log_debug("%s: status is still %i", host->host, status);
- return;
+ log_debug("%s: %s: status is still %i",
+ host->iface->name, host->host, status);
+ return status;
}
host->status = status;
- log_info("%s: new status: %i", host->host, status);
+ log_info("%s: %s: new status: %i",
+ host->iface->name, host->host, status);
switch (host->status) {
case 0:
action = host->down_action;
@@ -234,6 +236,7 @@ void pingu_host_set_status(struct pingu_host *host, int status)
if (action != NULL)
execute_action(action);
exec_route_change();
+ return status;
}
int pingu_host_verify_status(struct ev_loop *loop, struct pingu_host *host)
@@ -243,7 +246,7 @@ int pingu_host_verify_status(struct ev_loop *loop, struct pingu_host *host)
} else if (host->burst.pings_sent >= host->max_retries) {
pingu_host_set_status(host, 0);
} else
- pingu_ping_send(loop, host);
+ pingu_ping_send(loop, host, 1);
return 0;
}
@@ -257,6 +260,8 @@ int pingu_host_init(struct ev_loop *loop, const char *config)
return -1;
list_for_each_entry(host, &host_list, host_list_entry) {
+ if (host->iface->name[0] != '\0' && !host->iface->has_binding)
+ pingu_host_set_status(host, 0);
ev_timer_init(&host->burst_timeout_watcher,
pingu_burst_timeout_cb, 0, host->burst_interval);
ev_timer_start(loop, &host->burst_timeout_watcher);