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