summaryrefslogtreecommitdiffstats
path: root/ipv6.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2013-06-09 10:04:46 +0000
committerRoy Marples <roy@marples.name>2013-06-09 10:04:46 +0000
commitf3b4f2d63cdf644d400f4b194a6e7ddf5501472a (patch)
treedba7d3889934efed00317e54a6bfcfe3db9c9011 /ipv6.c
parent8a933951522cfcdeae43e967910bfafe5cd76fba (diff)
downloaddhcpcd-f3b4f2d63cdf644d400f4b194a6e7ddf5501472a.tar.xz
Only run LL callbacks from LL addresses
Diffstat (limited to 'ipv6.c')
-rw-r--r--ipv6.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/ipv6.c b/ipv6.c
index c295d3e5..e2eeb2c7 100644
--- a/ipv6.c
+++ b/ipv6.c
@@ -535,14 +535,17 @@ ipv6_handleifa(int cmd, struct if_head *ifs, const char *ifname,
TAILQ_INSERT_TAIL(&state->addrs,
ap, next);
- /* Now run any callbacks.
- * Typically IPv6RS or DHCPv6 */
- while ((cb = TAILQ_FIRST(&state->ll_callbacks)))
- {
- TAILQ_REMOVE(&state->ll_callbacks,
- cb, next);
- cb->callback(cb->arg);
- free(cb);
+ if (IN6_IS_ADDR_LINKLOCAL(&ap->addr)) {
+ /* Now run any callbacks.
+ * Typically IPv6RS or DHCPv6 */
+ while ((cb =
+ TAILQ_FIRST(&state->ll_callbacks)))
+ {
+ TAILQ_REMOVE(&state->ll_callbacks,
+ cb, next);
+ cb->callback(cb->arg);
+ free(cb);
+ }
}
}
break;