[radvd-devel-l] [PATCH] Sending initial RAs in smaller intervals
Jirka Bohac
jbohac at suse.cz
Tue Feb 7 13:00:26 EST 2006
Hi,
RFC 2461, section 6.2.4 says:
For the first few advertisements (up to
MAX_INITIAL_RTR_ADVERTISEMENTS) sent from an interface when it
becomes an advertising interface, if the randomly chosen
interval is greater than MAX_INITIAL_RTR_ADVERT_INTERVAL, the
timer SHOULD be set to MAX_INITIAL_RTR_ADVERT_INTERVAL
instead. Using a smaller interval for the initial
advertisements increases the likelihood of a router being
discovered quickly when it first becomes available, in the
presence of possible packet loss.
radvd does not do this, even though the constants are already
defined in defaults.h.
The following patch fixes that:
diff -Naur radvd-0.9.1/radvd.c radvd-0.9.1-patched/radvd.c
--- radvd-0.9.1/radvd.c 2005-12-30 16:13:11.000000000 +0100
+++ radvd-0.9.1-patched/radvd.c 2006-02-07 18:44:09.000000000 +0100
@@ -302,6 +302,12 @@
send_ra(sock, iface, NULL);
next = rand_between(iface->MinRtrAdvInterval, iface->MaxRtrAdvInterval);
+ if (iface->InitialAdvLeft > 1) {
+ --iface->InitialAdvLeft;
+ if (next > MAX_INITIAL_RTR_ADVERT_INTERVAL)
+ next = MAX_INITIAL_RTR_ADVERT_INTERVAL;
+ }
+
set_timer(&iface->tm, next);
}
@@ -339,9 +345,11 @@
if (iface->AdvSendAdvert)
{
/* send an initial advertisement */
+ iface->InitialAdvLeft = MAX_INITIAL_RTR_ADVERTISEMENTS - 1;
send_ra(sock, iface, NULL);
- set_timer(&iface->tm, iface->MaxRtrAdvInterval);
+ set_timer(&iface->tm, iface->MaxRtrAdvInterval > MAX_INITIAL_RTR_ADVERT_INTERVAL ?
+ MAX_INITIAL_RTR_ADVERT_INTERVAL : iface->MaxRtrAdvInterval);
}
}
}
diff -Naur radvd-0.9.1/radvd.h radvd-0.9.1-patched/radvd.h
--- radvd-0.9.1/radvd.h 2005-12-30 17:12:23.000000000 +0100
+++ radvd-0.9.1-patched/radvd.h 2006-02-07 18:44:09.000000000 +0100
@@ -70,6 +70,7 @@
int AdvDefaultPreference;
int AdvSourceLLAddress;
int UnicastOnly;
+ int InitialAdvLeft;
/* Mobile IPv6 extensions */
int AdvIntervalOpt;
Please, is it possible to merge this?
Thanks,
--
Jirka Bohac <jbohac at suse.cz>
SUSE Labs, SUSE CR
More information about the radvd-devel-l
mailing list