Package: radvd Version: 1:1.3-1.1 Severity: important Tags: patch A change from version 1.1 to 1.3 introduced a bug whereby router solicitations would be responded to with unicast replies instead of multicast, but the timer for multicast router advertisement broadcasts would also be reset, causing multicast RA starvation. A symptom of this is that eventually many IPv6 hosts would lose connectivity.
The attached patch corrects this problem. Note that the latest upstream release also appears to have corrected this problem. -- System Information: Debian Release: 5.0.3 APT prefers stable APT policy: (990, 'stable'), (500, 'testing') Architecture: i386 (i586) Kernel: Linux 2.6.30-net5501 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages radvd depends on: ii adduser 3.110 add and remove users and groups ii libc6 2.7-18 GNU C Library: Shared libraries radvd recommends no packages. radvd suggests no packages. -- no debconf information
>From b3a68c2c4e35daa54adbad4f1aff54967b18e9fd Mon Sep 17 00:00:00 2001 From: Rob Leslie <r...@mars.org> Date: Sun, 1 Nov 2009 14:06:12 -0800 Subject: [PATCH] Fix multicast RA starvation A change from version 1.1 to 1.3 introduced a bug whereby router solicitations would be responded to with unicast replies instead of multicast, but the timer for multicast router advertisement broadcasts would also be reset, causing multicast RA starvation. A symptom of this is that eventually many IPv6 hosts would lose connectivity. To fix, we restore RS replies to be multicast. --- process.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/process.c b/process.c index 491f796..077e94b 100644 --- a/process.c +++ b/process.c @@ -205,7 +205,7 @@ process_rs(int sock, struct Interface *iface, unsigned char *msg, int len, else { /* no RA sent in a while, send an immediate multicast reply */ clear_timer(&iface->tm); - send_ra_forall(sock, iface, &addr->sin6_addr); + send_ra_forall(sock, iface, NULL); next = rand_between(iface->MinRtrAdvInterval, iface->MaxRtrAdvInterval); set_timer(&iface->tm, next); -- 1.6.5.2