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

Reply via email to