On 08/10/13 12:09, Vladislav Grishenko wrote:
From: Simon Kelley
Sent: Tuesday, October 08, 2013 4:20 PM
On 06/10/13 11:32, Vladislav Grishenko wrote:
Hi, RFC4861 says:
A router might want to send Router Advertisements without
advertising
itself as a default router. For instance, a router might advertise
prefixes for stateless address autoconfiguration while not wishing
to
forward packets. Such a router sets the Router Lifetime field in
outgoing advertisements to zero.
is it possible to tell dnsmasq not to announce itself as router?
So , yes, it's theoretically possible.
That's good information, thanks. In answer to the next question, no, it's
not
possible to configure dnsmasq to send Router Lifetime == 0.
The lifetime, in dhcp-range is used to calculate the lifetimes for
prefixes, no
the router lifetime. In fact the router lifetime is always advertised as
1800
seconds, I think.
Since this is a per-broadcast domain thing, and not per prefix thing, it
needs
to be associated with an interface.
Simplest would be
no-router-interface=<interface>[,<interface>,....]
to set the interfaces that get router lifetime of zero.
More complex would be to allow explict setting of the router lifetime per
interface, that would have to be linked to the RA frequency: you wouldn't
want a router expiring before it could be re-advertised.
No-router-interface is simplest, and adds more option to control RA.
Currently we have already:
--dhcp-range=...ra-only|slaac|ra-names...
--enable-ra
--force-fast-ra
What if to logically split options to dhcp*-related and to slaac-related?
--dhcp-range=
Sets only DHCP range/RA prefix parameters (including
lease/prefix/rdnss/domain lifetimes), but not RA timeouts
--enable-ra=<interface>[,<interface>,...][,AdvDefaultLifetime][,MinRtrAdvInt
erval,MaxRtrAdvInterval]
Sets only RA timouts, if params absent - use defaults, 600 as max, 1/3*600
as min.
With this, both min& max can be configured,
As per RFC,
max should be in range 4-1800 secodns, default 600
min should be in range 3-3/4*max, default 1/3*max, if max>=9,
otherwise equal to max
With this approach, --no-router-interface will be alias of
--enable-ra=interface,0
And --force-fast-ra will be an alias of --enable-ra=interface,1800,5,20
Also, current code uses 600 as max, and 3/4*max as min ra intervals, what
fits RFC, bit, guessб isn't optimal, too big min delay.
As for startup advertisements and force-fast-ra, interval is 5-20, but can
be limited to range MIN_DELAY_BETWEEN_RAS-MAX_INITIAL_RTR_ADVERT_INTERVAL, 3
and 16 respectively as RFC suggests
Since RA can be very frequent, is it ever worth to log with LOG_INFO level
every unsolicited RTR-ADVERT? It just floods syslog and has no other meaning
in my opinion.
Best Regards, Vladislav Grishenko
OK, I just committed my take on this, which is --ra-param option, and
removed --force-fast-ra
--ra-param=<interface>,[high|low],[[<ra-interval>],<router
lifetime>]
Set non-default values for router advertisements sent
via an interface. The priority field for the router
may be altered from the default of medium with eg
--ra-param=eth0,high. The interval between router
advertisements may be set (in seconds) with --ra-
param=eth0,60. The lifetime of the route may be
changed or set to zero, which allows a router to
advertise prefixes but not a route via itself. --ra-
parm=eth0,0,0 (A value of zero for the interval means
the default value.) All three parameters may be set at
once. --ra-param=low,60,1200 The interface field may
include a wildcard.
I even added control of router priority as a bonus!
Cheers,
Simon.
_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss