From owner-freebsd-hackers Wed Jan 29 18:01:02 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id SAA10037 for hackers-outgoing; Wed, 29 Jan 1997 18:01:02 -0800 (PST) Received: from cheops.anu.edu.au (avalon@cheops.anu.edu.au [150.203.76.24]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id SAA10010 for ; Wed, 29 Jan 1997 18:00:54 -0800 (PST) Message-Id: <199701300200.SAA10010@freefall.freebsd.org> Received: by cheops.anu.edu.au (1.37.109.16/16.2) id AA019119490; Thu, 30 Jan 1997 12:58:10 +1100 From: Darren Reed Subject: Re: ipdivert & masqd To: archie@whistle.com (Archie Cobbs) Date: Thu, 30 Jan 1997 12:58:10 +1100 (EDT) Cc: avalon@coombs.anu.edu.au, archie@whistle.com, terry@lambert.org, ari.suutari@ps.carel.fi, brian@awfulhak.demon.co.uk, hackers@FreeBSD.ORG, cmott@srv.net In-Reply-To: <199701292246.OAA24842@bubba.whistle.com> from "Archie Cobbs" at Jan 29, 97 02:46:19 pm X-Mailer: ELM [version 2.4 PL23] Content-Type: text Sender: owner-hackers@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk In some mail from Archie Cobbs, sie said: > > > > > The theory was that this loop avoidance was working too well, and > > > seemed to be applying to packets other than the one that it was > > > supposed to. What I'm trying to prove to myself is that this can't > > > be happening. > > > > Does ip_divert_flag get set/reset inside or outside the loop in > > ip_input() which dequeues packets ? (src isn't handy) > > Ah.. well, it doesn't get reset until ip_input() returns. Perhaps > this is the problem... certainly if calling ip_input() with one > packet can trigger the ipfw processing of other packets, that would > be bad. > > [ checking source .. ] > > >From my reading it doesn't seem like this can happen. Packet fragments > are queued up and then merged when the last packet arrives, but sending > ip_input() a whole separate packet shouldn't trigger this. Not what I meant...the ethernet drivers queue up packets using IF_ENQUEUE() (right ?) and ip_input() picks them off using IF_DEQUEUE()...or is there an external loop calling ip_input() now that does the IF_DEQUEUE() ? Darren