Fix RA when interface has more than one address on the same network.
diff --git a/CHANGELOG b/CHANGELOG
index 1358625..aa8c0d2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -18,6 +18,10 @@
Add --dns-rr, to allow arbitrary DNS resource records.
+ Fixed bug which broke RA scheduling when an interface had
+ two addresses in the same network. Thanks to Jim Bos for
+ his help nailing this.
+
version 2.61
Re-write interface discovery code on *BSD to use
diff --git a/src/radv.c b/src/radv.c
index 6ef0dc0..632e008 100644
--- a/src/radv.c
+++ b/src/radv.c
@@ -380,13 +380,6 @@
if (context->flags & CONTEXT_DEPRECATE)
deprecate = 1;
- /* subsequent prefixes on the same interface
- and subsequent instances of this prefix don't need timers */
- if (!param->first)
- context->ra_time = 0;
- param->first = 0;
- param->found_context = 1;
-
/* collect dhcp-range tags */
if (context->netid.next == &context->netid && context->netid.net)
{
@@ -394,11 +387,20 @@
param->tags = &context->netid;
}
+ /* subsequent prefixes on the same interface
+ and subsequent instances of this prefix don't need timers.
+ Be careful not to find the same prefix twice with different
+ addresses. */
if (!(context->flags & CONTEXT_RA_DONE))
{
+ if (!param->first)
+ context->ra_time = 0;
context->flags |= CONTEXT_RA_DONE;
do_prefix = 1;
}
+
+ param->first = 0;
+ param->found_context = 1;
}
if (do_prefix)