aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-07-13 21:12:33 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2011-07-13 21:12:33 +0200
commit3ecfe5167a484563ac50f03948685ee0708f5d7e (patch)
tree68033d1e4bede7f2023a282cc6dc0da42066b2e5
parent42409f7f228083dad788efd4ed3cc96d26712c6f (diff)
downloadpingu-3ecfe5167a484563ac50f03948685ee0708f5d7e.tar.bz2
pingu-3ecfe5167a484563ac50f03948685ee0708f5d7e.tar.xz
pingu_iface: implement pingu_iface_usable()
To test if we can use socket.
-rw-r--r--pingu_host.c2
-rw-r--r--pingu_iface.c7
-rw-r--r--pingu_iface.h1
-rw-r--r--pingu_ping.c2
4 files changed, 10 insertions, 2 deletions
diff --git a/pingu_host.c b/pingu_host.c
index fae9a0e..c0ec966 100644
--- a/pingu_host.c
+++ b/pingu_host.c
@@ -260,7 +260,7 @@ 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)
+ if (!pingu_iface_usable(host->iface))
pingu_host_set_status(host, 0);
ev_timer_init(&host->burst_timeout_watcher,
pingu_burst_timeout_cb, 0, host->burst_interval);
diff --git a/pingu_iface.c b/pingu_iface.c
index 868c60e..dbd0e9d 100644
--- a/pingu_iface.c
+++ b/pingu_iface.c
@@ -56,6 +56,13 @@ static int pingu_iface_init_socket(struct ev_loop *loop,
return 0;
}
+int pingu_iface_usable(struct pingu_iface *iface)
+{
+ if (iface->name[0] == '\0')
+ return 1;
+ return iface->has_binding;
+}
+
struct pingu_iface *pingu_iface_find(const char *name)
{
struct pingu_iface *iface;
diff --git a/pingu_iface.h b/pingu_iface.h
index 5bdc587..baf3b35 100644
--- a/pingu_iface.h
+++ b/pingu_iface.h
@@ -17,6 +17,7 @@ struct pingu_iface {
struct pingu_iface *pingu_iface_find(const char *name);
struct pingu_iface *pingu_iface_find_or_create(struct ev_loop *loop, const char *name);
int pingu_iface_bind_socket(struct pingu_iface *iface, int log_error);
+int pingu_iface_usable(struct pingu_iface *iface);
int pingu_iface_init(struct ev_loop *loop, struct list_head *host_list);
#endif
diff --git a/pingu_ping.c b/pingu_ping.c
index 037fb44..5e5ef84 100644
--- a/pingu_ping.c
+++ b/pingu_ping.c
@@ -106,7 +106,7 @@ int pingu_ping_send(struct ev_loop *loop, struct pingu_host *host,
struct pingu_ping *ping;
int seq, r;
- if ((host->iface->name[0] != '\0') && !host->iface->has_binding)
+ if (!pingu_iface_usable(host->iface))
return pingu_host_set_status(host, 0) - 1;
seq = pingu_ping_get_seq();