Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Feb 2012 15:28:53 -0700
From:      Ian Lepore <freebsd@damnhippie.dyndns.org>
To:        Warren Block <wblock@wonkity.com>
Cc:        freebsd-rc@freebsd.org
Subject:   Re: dhclient SYNCDHCP messiness
Message-ID:  <1329949733.1063.6.camel@revolution.hippie.lan>
In-Reply-To: <alpine.BSF.2.00.1202221348360.79830@wonkity.com>
References:  <alpine.BSF.2.00.1202220923030.77675@wonkity.com> <1329938748.21804.8.camel@revolution.hippie.lan> <alpine.BSF.2.00.1202221348360.79830@wonkity.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2012-02-22 at 14:08 -0700, Warren Block wrote:
> On Wed, 22 Feb 2012, Ian Lepore wrote:
> 
> > On Wed, 2012-02-22 at 11:40 -0700, Warren Block wrote:
> >> In /etc/rc.conf:
> >>
> >>    ifconfig_em0="SYNCDHCP"
> >>
> >> dhclient runs on startup, then later tries to run again:
> >>
> >>    Starting dhclient.
> >>    em0: no link ...
> >>    .
> >>    .
> >>    got link
> >>    (...)
> >>    Starting Network: lo0 em0.
> >>    (...)
> >>    Starting devd.
> >>    Starting ums0 moused
> >>    .
> >>    dhclient already running? (pid=344).
> >>    Creating and/or trimming log files
> >>
> >> So is this from /etc/network.subr starting dhclient because the
> >> interface is set to DHCP, then /etc/rc.d/dhclient running directly
> >> later?
> >>
> >> This is with
> >>
> >> FreeBSD lightning 8.3-PRERELEASE FreeBSD 8.3-PRERELEASE #0: Tue Feb 21 22:25:30 MST 2012
> >> root@lightning:/usr/obj/usr/src/sys/LIGHTNING  i386
> >
> > From the sequence of things there it looks like the second invocation
> > may be from a devd rule, but I thought all the standard rules used
> > "dhclient quietstart" and that one of the effects of that was to supress
> > the "already running" warning.
> 
> The devd rule triggers on a link up event.  This is an em(4) card that 
> does not do the multiple up/down events on start like an re(4) card. 
> But easy to test.  ...And interestingly enough, commenting out lines 
> 51-56 of devd.conf stops the double call:
> 
>    DHCPREQUEST on em0 to 255.255.255.255 port 67
>    DHCPACK from 10.0.0.1
>    bound to 10.0.0.8 -- renewal in 300 seconds.
>    Starting Network: lo0 em0.
>    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
>            options=3<RXCSUM,TXCSUM>
>            inet 127.0.0.1 netmask 0xff000000
>    em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 9216
>            options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
>            ether 00:02:b3:a9:93:d7
>            inet 10.0.0.8 netmask 0xffffff00 broadcast 10.0.0.255
>            media: Ethernet autoselect (1000baseT <full-duplex>)
>            status: active
>    Starting devd.
>    Starting ums0 moused
>    .
>    Creating and/or trimming log files
> 
> For completeness, there's an unconnected re(4) card built into the 
> motherboard that shows "re0: link state changed to DOWN" immediately 
> after the "Starting devd." message.
> 
> AFAIK, it should happen like this:
> 
> ifconfig em0
> em0 changes to up
> dhclient em0 (sync)
> wait until em0 gets a DHCP lease or fails
> devd (em0 is already up, devd should do nothing)
> 
> So I guess the question is: why is devd seeing a link up event there?
> 
> > I updated a couple systems to 8.3-{PRERELEASE,BETA1} over the past few
> > days and I haven't seen such a glitch.  I don't think it should make a
> > difference, but I use synchronous_dhclient=YES and ifconfig_foo=DHCP
> 
> That's a good point: testing... nope, it does the same thing as 
> "SYNCDHCP".
> 
> 

First, let me correct myself:  I *am* seeing exactly this glitch, I just
hadn't noticed it until a few minutes ago when I rebooted and looked
much more closely.

Devd sees the link-up event because it sees all the events that happened
before it started (for some definition of "all"; there's probably some
reasonable list-length or buffer size limit somewhere).  I rebooted to
test my vague memory on this... boot into single-user mode and manually
run /sbin/devd -D and you'll see it processing the buffered events
before daemonizing.  For some reason I had to mount / writeable before
running devd in single-user or it failed.

I now suspect (but haven't tested to confirm) that this message may be a
side effect of r226345 which replaced some one-off pidfile logic in
rc.d/dhclient with use of the standard rc_pid scheme, which is what is
doing the whining.  I think the old one-off code to deal with the
pidfile avoided whining in the 'quietstart' case.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1329949733.1063.6.camel>