Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: error from ntpd upon IPv6 address receipt/bind
Hi.
Until a DAD completes, the address is marked as "tentative(IN6_IFF_TENTATIVE)"
and bind() with the address fails. This is the reason why ntpd sometimes
complains about an address.
Some daemon programs check the routing socket and do bind() after getting
RTM_NEWADDR. For IPv4, it's no problem. For IPv6, if a daemon do the same
thing like IPv4, it may fail. It depends on the timing.
And, perhaps all *BSD's routing socket's implement don't have the way to
inform the changing from tentative to preferred (== DAD completed and OK to
use).
To do this, there are 3 (or more?) solutions:
A) Make a new routing message (RTM_ADDRINFO?) for a transistion from
tentative to preferred.
If we have this message, bind()ing after getting the new message
solves the problem.
B) Don't send RTM_NEWADDR when an address is added as tentative and send
it after transistion from tentative to preferred.
C) Send RTM_NEWADDR for both timing.
none->tentative tentative->preferred
current RTM_NEWADDR -
A) RTM_NEWADDR RTM_ADDRINFO
B) - RTM_NEWADDR
C) RTM_NEWADDR RTM_NEWADDR
I think B) and C) is not good because the timing is not the time WHEN
A NEW ADDRESS IS ASSIGNED.
If we choice A) some programs that strictly check incoming routing messages
may crash e.g.:
switch(rtm->rtm_type) {
case RTM_NEWADDR:
case RTM_DELADDR:
case RTM_ADD:
.
.
.
break;
deafult:
perror("damn");
exit(1);
}
How should we solve it?
----------------------------------------------------------
SAITOH Masanobu (masanobu%iij.ad.jp@localhost
msaitoh%netbsd.org@localhost)
Home |
Main Index |
Thread Index |
Old Index