Subject: Re: re-reading /etc/resolv.conf on change
To: NetBSD Userlevel Technical Discussion List <tech-userlevel@NetBSD.ORG>
From: Bruce J.A. Nourish <bjan+tech-userlevel@bjan.net>
List: tech-userlevel
Date: 01/02/2004 17:00:23
On Thu, Jan 01, 2004 at 03:12:39PM -0500, Greg A. Woods wrote:
> > > Then, if you alter resolv.conf, run a program announcing "I've altered
> > > resolv.conf" to the world and all will be well! :)
> >
> > This touches on a general problem that exists in all the free Unices:
> > user <-> kernel communication. There is simply no general, event based
> > infrastructure to communicate changes in the system state.
>
> Huh? /etc/resolv.conf edits are not kernel related. There's no kernel
> state change to communicate.
Granted. But it _is_ an important, system wide, change in state.
> This is only a userland to userland issue. SIGHUP is your friend.
SIGHUP is a blunt weapon: a process that recieves SIGHUP has no idea
what changed until it repolls all of it's configuration data.
Also, most interactive processes do not respond that way to SIGHUP at
all: they quit instead! I believe this is the historically correct way
to behave.
> [interesting piece on OS theory and ioctls()]
This is all true, but beside the point. What I'm advocating is something
like this:
A new char device, (say /dev/sysevent). An interested process open's
this and then select's on it (or uses kqueue). Then, when interesting
things happen (device add/remove, network link up/down, etc.), the
processes in question recieve a message telling them so, and they
take the appropriate action.
A process with sufficient priviliges would be able to write events to
the file, to notify of system-wide, non-kernel changes in state (like
/etc/resolv.conf changing).
We could then solve this specific problem by having the resolver use
kqueue to test /dev/sysevent for a new resolv.conf, and reload it
if so.
> Is [NIH syndrome] contagious or something?
NIH! NIH! NIH!
And besides, didn't I just read you vaguely complain about TNF's "ultra-
conservative approach to things like this?" Where "this" is an entirely
new regex library?
--
Bruce J.A. Nourish <bjan+public@bjan.net> http://bjan.freeshell.org