Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Aug 2007 08:59:29 -0500
From:      "Christian S.J. Peron" <csjp@FreeBSD.org>
To:        "Bruce M. Simpson" <bms@FreeBSD.org>
Cc:        FreeBSD Current <current@freebsd.org>, Andrew Thompson <thompsa@FreeBSD.org>
Subject:   Re: multicast packets from bpf
Message-ID:  <20070828135929.GA2305@sub.vaned.net>
In-Reply-To: <46D3C9F3.2010802@FreeBSD.org>
References:  <20070828040026.GB42201@heff.fud.org.nz> <46D3C9F3.2010802@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Aug 28, 2007 at 08:08:35AM +0100, Bruce M. Simpson wrote:
[..]
> 
> I favour the first approach, however, it may make more sense to put the 
> logic into bpf_movein() as it already builds a sockaddr based on the header 
> data provided to bpf during a write.
> 
> For the first patch: I previously fixed tapwrite() to check injected frames 
> in the same way, as this was causing a problem with my own use of 
> if_bridge. There is no way that I see for bpf to be able to tell if a frame 
> is link-layer multicast or not, and checking at that layer does introduce a 
> little pollution. Ethernet is the most common case so it could be argued 
> that's OK, as we have ethernet-specific fields in struct mbuf now. Your 
> change is the parallel change in the bpfwrite path to what I have in the 
> tapwrite path.
> 

I think that tap(4) is a bit different since the only kind of frames it
handles are Ethernet.  This is not the case for bpf(4).  I wonder if it
makes sense to add this check into ether_output()? IIRC bpf will call
the network interface's output routine, in the Ethernet/bridge case it
should be ether_output().

Thoughts?

-- 
Christian S.J. Peron
csjp@FreeBSD.ORG
FreeBSD Committer



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