Hi,

On Tue, Mar 27, 2001 at 12:40:11PM -0800, Archie Cobbs wrote:
> Mike Tancsa writes:
> > >Not sure why this hasn't been detected before though. Below is
> > >a possible patch.
> > 
> > It has been at http://www.freebsd.org/cgi/query-pr.cgi?pr=25478 and 
> > discussed a few times in freebsd-net.
> 
> Here is the better (?) patch. I'd like to commit this if nobody
> objects..

Please take a careful look at the frames 6 through 9 of the stack
trace in PR#25478, so you may notice that your patch happens to do
nothing about the broblem.  You are going to add a check for IFF_UP
to ether_output_frame() while that function is just a bottom half
of ether_output(), which does do the check at its very beginning.

The real problem is that ethernet card drivers rely on ether_output()
making sure they are up before calling their if_output()s. AFAIK
the vlan driver is the only piece of code where the standard
ether_output()->if_output() order is bypassed, and an if_output()
routine of an ethernet card is called directly. Therefore, the
IFF_UP check should be in the vlan code, and I'm going to commit
a corresponding fix (PR: kern/22179). Any objections?

> Luigi: would you mind reviewing this for possible BRIDGE problems?
> 
> -Archie
> 
> __________________________________________________________________________
> Archie Cobbs     *     Packet Design     *     http://www.packetdesign.com
> 
> Index: if_ethersubr.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/net/if_ethersubr.c,v
> retrieving revision 1.70.2.15
> diff -u -r1.70.2.15 if_ethersubr.c
> --- if_ethersubr.c    2001/03/13 22:00:32     1.70.2.15
> +++ if_ethersubr.c    2001/03/27 20:39:38
> @@ -366,6 +366,11 @@
>  {
>       int s, error = 0;
>  
> +     if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING)) {
> +             m_freem(m);
> +             return (ENETDOWN);
> +     }
> +
>  #ifdef BRIDGE
>       if (do_bridge && BDG_USED(ifp) ) {
>               struct ether_header *eh; /* a ptr suffices */

SY, Yar

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-stable" in the body of the message

Reply via email to