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