On 2016/09/26 20:14, Florian Obser wrote:
> On Wed, Sep 21, 2016 at 01:23:25PM +0100, Stuart Henderson wrote:
> 
> > There's a problem with this: we lose the exponential backoff for the
> > quick timer. Say you have v6 at home and enable autoconf on your laptop
> > then move to a network without v6 - this results in you spamming the
> > network with a multicast frame every second, which does not make you
> > a good network citizen especially if that's on a wireless lan.
> > 
> [...]
> > I think the current state is quite a lot worse than the previous one
> > (even though it's better on networks that *do* have v6), so I'm wondering
> > if it might be better to revert if it's complicated to fix here (there
> > was a different plan for sending RS in the future anyway wasn't there?)
> 
> does this help?
> If not, I guess we should back it out
> 
> diff --git nd6_rtr.c nd6_rtr.c
> index a7529c9..3c23365 100644
> --- nd6_rtr.c
> +++ nd6_rtr.c
> @@ -328,7 +328,8 @@ nd6_rs_output_timo(void *ignored_arg)
>                       t = nd6_rs_next_pltime_timo(ifp);
>                       if (t == ND6_INFINITE_LIFETIME || t <
>                           ND6_RS_OUTPUT_INTERVAL) {
> -                             timeout = ND6_RS_OUTPUT_QUICK_INTERVAL;
> +                             if (t == ND6_INFINITE_LIFETIME)
> +                                     timeout = ND6_RS_OUTPUT_QUICK_INTERVAL;
>                               ia6 = in6ifa_ifpforlinklocal(ifp,
>                                   IN6_IFF_TENTATIVE);
>                               if (ia6 != NULL)

Same behaviour with this. The problem is that it's just setting
to a fixed ND6_RS_OUTPUT_QUICK_INTERVAL which isn't getting backed
off anywhere. To fix it I think we'd at least need another global
(if not a per-interface variable) that can be used as the "current
quick_timeout" and back that off or reset it as necessary, but
my attempts to do that thus far haven't been successful.

Reply via email to