diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-06 10:30:10 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-06 10:30:10 +0200 |
commit | 9e4c8217d3f2c7490eb6a26a49e67aeac96ca7c2 (patch) | |
tree | 25f27e08015dd9ac45cdfea85f578937982f7c16 /pingu_iface.c | |
parent | 91774e47e23c83aa3df901adc167ab4592f87a22 (diff) | |
download | pingu-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.c | 5 |
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)); } |