Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Apr 2004 23:40:06 -0700 (PDT)
From:      Gleb Smirnoff <glebius@cell.sick.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/63317: make ng_ether(4) support "lower" and "orphans"simultaneously
Message-ID:  <200404270640.i3R6e6Xt055791@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/63317; it has been noted by GNATS.

From: Gleb Smirnoff <glebius@cell.sick.ru>
To: Archie Cobbs <archie@dellroad.org>
Cc: Maxim Konovalov <maxim@macomnet.ru>,
	bzeeb-lists@lists.zabbadoz.net, FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: kern/63317: make ng_ether(4) support "lower" and "orphans"simultaneously
Date: Tue, 27 Apr 2004 10:33:34 +0400

 On Mon, Apr 26, 2004 at 04:49:48PM -0500, Archie Cobbs wrote:
 A> Gleb Smirnoff wrote:
 A> > A> Let me be more specific. Suppose both lower and orphans are connected.
 A> > A> A packet is received from the Ethernet hardware with ethertype
 A> > A> 0x1234 (i.e., unrecognized). Which hook(s) (lower and/or orphans)
 A> > A> does that packet get written to?
 A> > 
 A> > It'll be written to orphans surely.
 A> 
 A> OK, then this is a change in semantics: whereas before, connecting
 A> to lower meant always getting all packets, now connecting to lower
 A> means always getting all packets UNLESS somebody else is connected
 A> to orphans... could be a completely different and unknown process.
 
 It is said in current manpage, that ng_ether sends all packets to lower,
 however code reveals the truth. Here is a sniplet from ng_ether_input_orphan(),
 which is a hook called by ethernet stack:
 
         /* If "orphan" hook not connected, let packet continue */
         if (priv->lower == NULL || !priv->lowerOrphan) {
                 m_freem(m);
                 return;
         }
 
 To make sure, I've made an experiment. I have a notebook in a network where many IPX
 broadcasts live. So I typed:
 
 + mkpeer fxp0: etf lower downstream
 + name fxp0:lower etf
 + connect etf: dummy ipx
 + msg etf: setfilter { matchhook="ipx" ethertype=0x8137 }
 
 I've waited for half a minute, and no packets arrived. Then, I've typed:
 
 + shutdown etf:
 + shutdown fxp0:
 + mkpeer fxp0: etf orphans downstream
 + name fxp0:orphans etf
 + connect etf: dummy ipx
 + msg etf: setfilter { matchhook="ipx" ethertype=0x8137 }
 
 And I began receiving packets on dummy.
 
 A> To preserve the existing behavior, the node would need to duplicate
 A> the orphanable packets and send them to BOTH connected hooks.
 
 So behavior didn't change. Even we have found some inexactitude in
 manpage.
 
 A> Also, will this change cause packets to go up into the protocol
 A> stack that previously would not have? E.g., before, if lower were
 A> connected, then no packets ever reach the protocol stack... is that
 A> still going to be true?
 
 Yes, since "orphaned" packets won't reach it anyway.
 
 -- 
 Totus tuus, Glebius.
 GLEBIUS-RIPN GLEB-RIPE



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