aboutsummaryrefslogtreecommitdiffstats
path: root/pingu_iface.c
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-09-06 10:30:10 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2011-09-06 10:30:10 +0200
commit9e4c8217d3f2c7490eb6a26a49e67aeac96ca7c2 (patch)
tree25f27e08015dd9ac45cdfea85f578937982f7c16 /pingu_iface.c
parent91774e47e23c83aa3df901adc167ab4592f87a22 (diff)
downloadpingu-9e4c8217d3f2c7490eb6a26a49e67aeac96ca7c2.tar.bz2
pingu-9e4c8217d3f2c7490eb6a26a49e67aeac96ca7c2.tar.xz
pingu: only create/lose binding when we get/lose address
We don't need to rebind every burst. We only bind when we get an address and we only lose the binding when the address is lost.
Diffstat (limited to 'pingu_iface.c')
-rw-r--r--pingu_iface.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pingu_iface.c b/pingu_iface.c
index 6905844..00cb1ca 100644
--- a/pingu_iface.c
+++ b/pingu_iface.c
@@ -67,7 +67,7 @@ int pingu_iface_usable(struct pingu_iface *iface)
{
if (iface->name[0] == '\0')
return 1;
- return iface->has_link && iface->has_binding;
+ return iface->has_link && iface->has_address && iface->has_binding;
}
struct pingu_iface *pingu_iface_get_by_name(const char *name)
@@ -120,10 +120,13 @@ void pingu_iface_set_addr(struct pingu_iface *iface, int family,
{
sockaddr_init(&iface->primary_addr, family, data);
if (len <= 0 || data == NULL) {
+ iface->has_address = 0;
+ iface->has_binding = 0;
pingu_gateway_del_all(&iface->gateway_list);
log_debug("%s: address removed", iface->name);
return;
}
+ iface->has_address = 1;
log_debug("%s: new address: %s", iface->name,
inet_ntoa(iface->primary_addr.sin.sin_addr));
}