Date: Wed, 28 Apr 2004 09:00:28 -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: <200404281600.i3SG0S78093723@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: Wed, 28 Apr 2004 19:51:36 +0400 On Wed, Apr 28, 2004 at 10:20:37AM -0500, Archie Cobbs wrote: A> Now we're back to my original question :-) A> A> Ideally I think that we should duplicate packets when both hooks are connected. A> Here's the simple reason why: Today the following statements are true: A> A> 1. If you connect to lower, you get ALL packets A> 2. If you connect to orphans, you get ALL orphan packets A> A> We'd want both statements to continue to be true. Therefore, when both A> lower and orphans are connected, the node must duplicate orphan packets. A> A> Unfortunately doing this is probably tricky because the determination of A> whether a packet is an orphan is done in if_ethersubr.c, not ng_ether.c. A> Same thing applies to your proposal above. Moreover it is not only tricky, it is dangerous. If we use a 'pass thru' node on top of ng_ether, then an orphaned packet goes into infinite loop passing upper,ether_demux(),lower. I have tried it and got a freezed machine :) A> Remember that lower gets packets before they go through ether_demux(), A> while orphans gets them after. So there's two different places where A> packets are intercepted by ng_ether for lower vs. orphans. A> A> So I suggest a simpler (to implement) solution: A> A> - if lower is connected, send ALL packets to it (like now) A> - if orphans is connected send orphaned packets to it (like now) A> - if both are connected, send ALL packets to lower A> A> Note: in case #3 orhan packets written to upper will flow out of the A> orphans hook. So if the node connected to lower is a 'pass thru' to A> upper then the orphans hook will still see orphan packets! A> A> To implement this, we simply remove the restriction that both orpans A> and lower can't be connected at the same time and keep all the existing A> logic the same as it is. Exactly this does the original patch. :) And we should also add to manpage: Packets received on 'upper', and not recognized by upper level stack are send back out of 'orphans' hook if it exists. -- Totus tuus, Glebius. GLEBIUS-RIPN GLEB-RIPE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404281600.i3SG0S78093723>