Subject: Re: Local IP addresses changing
To: Dennis Ferguson <dennis@juniper.net>
From: Andrew Brown <atatat@atatdot.net>
List: tech-net
Date: 08/25/2000 14:40:17
>> >This makes ntpd very unhappy, as it can't reach the remote servers anymore.
>> >As a workaround I'm killing and restarting ntpd in my ip-up script, but I'm
>> >wondering what the real solution would be.
>>
>> a better solution would be for ntpd use an ephemeral port for talking
>> to servers, just like ntpdate does, and then to close it after it's
>> done with a round of polling. just my opinion.
>
>No, that doesn't fix the problem ntpd has. ntpd's problem is that it
>needs to know the destination address in packets that it receives, and
>specify the source address for packets it sends. The NTP specification
>demands this because of how it identifies associations. ntpdate also
>strictly needs this information, but sleazes through without it since it
>doesn't maintain long-lived peer sessions. The daemon can't do this.
wouldn't a fresh udp-based socket() and connect() provide this
functionality to ntpd? as long as it made a new one each time it was
polling...
>The UDP system call interface has traditionally never provided a sensible
>way (like the sendmsg()/recvmsg() buffer) to learn destination addresses for
>incoming packets or to specify source addresses for outgoing packets. This
>forces the daemon to scan interface configuration to learn all possible
>addresses an incoming packet could be validly addressed to (for ntp this
>sometimes includes interface broadcast addresses and other grot) and then
>open a socket for each so you can deduce the packet's destination by the
>socket it arrives on. All of this is necessary only because the UDP
>implementation chucks the bit of information the daemon needs to know
>about a packet on the far side of the system call interface. Fix the
>latter, and the daemon could happily operate, for the most part, with
>just one socket and without looking at interface configuration at all.
>Changes to interface configuration would just work.
setsockopt(s, IPPROTO_IP, IP_RECVDSTADDR, ...) in conjunction with
recvmsg() works rather well. it did for me, at least. certainly,
scanning the configured interface list periodically and opening
sockets on each address is a little easier...maybe.
>> im(ns?)ho, ntpd should *also* periodically re-lookup the addresses for
>> hostnames that are its peers/servers. i have had several annoying
>> situations where a host's address changed, the ntp.conf was correct on
>> a client/peer, and the host's time slowly drifted *anyway*. ntpd just
>> needs to be restarted, but it's a pain.
>
>Essentially you are suggesting a hack to work around the problems of another
>hack implemented to work around the problems of the traditional BSD UDP
>system call interface. Fix the latter (if it isn't already), and fix
>ntpd to run with a single unbound socket, and all will be well.
no...i think you need to read what i said again. in plainer language,
in the ntp server on fribl.for.com is using sqab.trup.com as a peer or
a server, and sqab's ip address changes in the dns, sqab will
presumably be rebooted. fribl, on the other hand, will continue to
send polls to the *old* address, since ntpd has *no way of knowing*
that the address has changed. i was simply suggesting that it
re-lookup all server/peer addresses every now and then. once every
six hours...once ever day or so...something like that.
>I'm particularly sensitive about this since I've seen Unix boxes running
>as the host part of routers which have several thousand interfaces with
>several thousand local addresses. Having to have a daemon which sends
>and receives three packets per minute track the address configuration
>of several thousand interfaces and open (and poll) several thousand sockets
>so it can learn the destination address on those three packets it receives
>every minute is just dumb.
right. in this case, you would be much better off with an ntpd that
used IP_RECVDSTADDR in conjunction with recvmsg().
--
|-----< "CODE WARRIOR" >-----|
codewarrior@daemon.org * "ah! i see you have the internet
twofsonet@graffiti.com (Andrew Brown) that goes *ping*!"
andrew@crossbar.com * "information is power -- share the wealth."