network interface monitoring?
Pyun YongHyeon
pyunyh at gmail.com
Sun Jan 27 22:09:02 PST 2008
On Fri, Jan 25, 2008 at 10:41:34AM -0500, Yousif Hassan wrote:
> Hi Pyun YongHyeon,
>
> First, I'd like to say thank you for sending this and trying to resolve
> my (and others') problems with bfe driver.
>
> First the good news - your patch appears to solve nearly all of the
> issues I've discovered and/or reported. After installing the kernel
> with your patch, under normal circumstances, link up and down events are
> detected automatically by the kernel now, and passed to userland. I
> tested this with some customd devd scripts to make sure the devd
> notification from if_net.c was ok, and it was. This is greatly improved
> behavior!
>
> A couple minor nits -
>
> First: The first hunk out of the first file in the patch didn't apply
> cleanly for me but it could be because I'm on a different file revision?
> I'll attach the .rej file. It's no big deal, because it was trivial to
> adjust it by hand, then I was able to compile.
>
> Second: There's one last remaining issue. If I set the bfe0_enable
> parameter in rc.conf to "DHCP NOAUTO" (so that it doesn't try to do
> anything on boot, because it can slow the process down while it's
> negotiating an address), then the link state changes get queued up (as
> before) until I manually run ifconfig once. After that one time,
> everything from that point on is fine (meaning your changes are
> working). For all I know, this might be unrelated to your driver patch,
> but it was interesting. Setting the bfe0_enable to "DHCP" meant
> everything worked fine from the start. Setting it to "UP" also was fine
> in terms of your link state changes working (although in this
> case /etc/rc.d/dhclient script won't work because the interface needs to
> be configured in rc.conf to use DHCP; I must run "/sbin/dhclient bfe0"
> manually in that case).
>
I guess that is not related with link state handling of bfe(4).
I'll commit the change to HEAD.
> In all cases, THANK YOU - this is much much much better than before and
> I can live with using bfe0_enable="DHCP" instead of "DHCP NOAUTO". Feel
> free to ask me for more testing if you want to try and investigate the
> one remaining queue issue.
>
Thanks for testing and feedback!
> --Yousif
>
> On Fri, 2008-01-25 at 14:10 +0900, Pyun YongHyeon wrote:
> > On Thu, Jan 24, 2008 at 01:07:22PM -0500, Yousif Hassan wrote:
> > > On Thu, 2008-01-24 at 10:36 -0600, Brooks Davis wrote:
> > > > On Thu, Jan 24, 2008 at 10:58:33AM -0500, Yousif Hassan wrote:
> > > > > Thank you to all who responded.
> > > > >
> > > > > The suggestion was made to use devd or ifstated. Both sound like
> > > > > excellent tools, but I'm currently being tripped up by a core problem -
> > > > > both tools rely on the kernel to notify userland of link state changes
> > > > > (which makes complete sense!). This is all well and good - but the
> > > > > current issue I'm seeing is that the link state doesn't get updated
> > > > > without running "ifconfig" again - is this by design? A known "issue?"
> > > > >
> > > > > An example:
> > > > > 1. Unplug network cable from bfe0
> > > > > 2. I run ifconfig
> > > > > 3. I see that interface bfe0's status is "no carrier". Good.
> > > > > 4. I plug the cable into bfe0
> > > > > 5. Wait... wait... look in /var/log/messages... wait more.. NO STATE
> > > > > CHANGE - the longest I've waited was 2 minutes, which is already too
> > > > > long
> > > > > 6. run "ifconfig" again
> > > > > 7. Link state immediately changes, logs to /var/log/messages, devd
> > > > > scripts run
> > > > >
> > > > > Is this a known behavior? It seems like the link state changes should
> > > > > happen automatically, without something to "trigger" them. Isn't there
> > > > > some kind of poll or interrupt sequence? I'm on 6.3 RC2 (will upgrade
> > > > > to 6.3-RELEASE imminently) but can't imagine this code changed? Does
> > > > > this work differently/better in 7.0?
> > > >
> > > > It's known but not well understood and is a driver bug.
> > >
> > > I was afraid you'd say that. Thanks for the info.
> > >
> > > I found PR kern/109733: [bge] bge link state issues (regression)
> > > which, while referring to a different driver, has some of the same
> > > symptoms.
> > >
> > > In the meantime, I scripted something that calls ifconfig every 30
> > > seconds or so, redirected its output to null, and put it in the
> > > background and nice'd it; this seems to do the trick, albeit via a
> > > horrid hack. Due to the bug you mentioned, sometimes link state events
> > > queue up, too, and get passed to userland at once, which is no kind of
> > > fun, but the script still works.
> > >
> >
> > Try attached patch. I don't know whether it works or not but it
> > seems that link state was not correctly tracked down by stock bfe(4).
> > The attached patch does the following.
> > - conversion to callout(9) API.
> > - added missing lock in bfe_ifmedia_sts().
> > - implemented miibus_statchg method to track link state.
> > - use our callout to drive watchdog timer.
> > - restart Tx routine if pending queued packets are present in
> > watchdog handler.
> > - fixed blindly resetting watchdog timer in bfe_txeof().
> >
> > I guess the above is minimal patch to get correct link state.
> > If I had the hardware I would have rewritten bfe_encap/bfe_newbuf
> > to use bus_dmamap_load_mbuf_sg(9). :(
> >
--
Regards,
Pyun YongHyeon
More information about the freebsd-net
mailing list