aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-08-02 15:35:00 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2011-08-02 15:35:00 +0200
commitaff9e3e9c991544a8ade2b576da3690dc0dbb071 (patch)
treed19b417af5cf00fd6195fa55c3e48d9a0053eeee
parentaa424fea98fed25b3db5550738a01d53f534f177 (diff)
downloadpingu-aff9e3e9c991544a8ade2b576da3690dc0dbb071.tar.bz2
pingu-aff9e3e9c991544a8ade2b576da3690dc0dbb071.tar.xz
pingu_iface: init the sockets when init instead of when create
-rw-r--r--pingu_iface.c14
-rw-r--r--pingu_iface.h1
2 files changed, 9 insertions, 6 deletions
diff --git a/pingu_iface.c b/pingu_iface.c
index 6a87a24..85d2524 100644
--- a/pingu_iface.c
+++ b/pingu_iface.c
@@ -89,7 +89,7 @@ struct pingu_iface *pingu_iface_get_by_index(int index)
return NULL;
}
-struct pingu_iface *pingu_iface_new(struct ev_loop *loop, const char *name)
+struct pingu_iface *pingu_iface_new(const char *name)
{
struct pingu_iface *iface = pingu_iface_get_by_name(name);
if (iface != NULL)
@@ -104,10 +104,6 @@ struct pingu_iface *pingu_iface_new(struct ev_loop *loop, const char *name)
if (name != NULL)
strlcpy(iface->name, name, sizeof(iface->name));
- if (pingu_iface_init_socket(loop, iface) == -1) {
- free(iface);
- return NULL;
- }
list_init(&iface->ping_list);
list_init(&iface->gateway_list);
list_add(&iface->iface_list_entry, &iface_list);
@@ -266,13 +262,19 @@ int pingu_iface_init(struct ev_loop *loop, struct list_head *host_list)
list_for_each_entry(host, host_list, host_list_entry) {
iface = pingu_iface_get_by_name(host->interface);
if (iface == NULL) {
- iface = pingu_iface_new(loop, host->interface);
+ iface = pingu_iface_new(host->interface);
iface->route_table = autotbl++;
}
if (iface == NULL)
return -1;
host->iface = iface;
}
+
+ list_for_each_entry(iface, &iface_list, iface_list_entry) {
+ if (pingu_iface_init_socket(loop, iface) == -1)
+ return -1;
+ }
+
return 0;
}
diff --git a/pingu_iface.h b/pingu_iface.h
index d3a4988..68d4b32 100644
--- a/pingu_iface.h
+++ b/pingu_iface.h
@@ -37,6 +37,7 @@ struct pingu_iface {
struct pingu_iface *pingu_iface_get_by_name(const char *name);
struct pingu_iface *pingu_iface_get_by_index(int index);
+struct pingu_iface *pingu_iface_new(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);