Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Dec 2012 15:36:33 +0000 (UTC)
From:      Vadim Goncharov <vadim_nuclight@mail.ru>
To:        freebsd-net@freebsd.org
Cc:        freebsd-ipfw@freebsd.org
Subject:   Re: [CFT] Virtual BPF interfaces
Message-ID:  <slrnkbpho3.2f5k.vadim_nuclight@kernblitz.nuclight.ipfw.ru>
References:  <4F96D11B.2060007@FreeBSD.org> <20120425.020518.406495893112283552.hrs@allbsd.org> <4F96E71B.9020405@FreeBSD.org> <20120427.084414.1142593201575277510.hrs@allbsd.org> <4FD4AD29.3040204@FreeBSD.org> <50BAA552.1010707@FreeBSD.org> <20121203081134.GO14202@glebius.int.ru> <50BC989E.3080303@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Alexander V. Chernikov! 

On Mon, 03 Dec 2012 16:18:38 +0400; Alexander V. Chernikov wrote about 'Re: [CFT] Virtual BPF interfaces':

> On 03.12.2012 12:11, Gleb Smirnoff wrote:
>> On Sun, Dec 02, 2012 at 04:48:18AM +0400, Alexander V. Chernikov wrote:
>> A> On 10.06.2012 18:20, Alexander V. Chernikov wrote:
>> A>> On 27.04.2012 03:44, Hiroki Sato wrote:
>> A>>> "Alexander V. Chernikov"<melifaro@FreeBSD.org> wrote
>> A>>> in<4F96E71B.9020405@FreeBSD.org>:
>> A>>>
>> A>>> me> On 24.04.2012 21:05, Hiroki Sato wrote:
>> A>>
>> A>> Proof-of-concept patch attached.
>> A>
>> A> Hopefully, libcap code is easily extendable.
>> A> New version attached:
>> A> * BPF code is now able to use 'virtual' interfaces without real ifnet
>> A> * New bpfattach3() / bpfdetach3() routines were added to attach virtual
>> A> ifaces
>> A> * New BIOCGIFLIST ioctl is added to permit userland to retrieve
>> A> available virtual interfaces
>> A> * freebsd-specific 'platform_finddevs' version is added to libpcap code
>> A> (new file)
>> A>
>> A> There are some rough edges (conditional code in pcap-bpf.c, lack of
>> A> documentation, maybe some style issues), but generally it seems to work
>> A> and does not interfere with contrib/ code much (from my point of view).
>> A>
>> A> ipfw log device was converted to use new bpf(4) api, see attached patch.
>>
>> Nice proof of concept, Alexander!
>>
>> What does prevent us from unifing all bpf providers to be "virtual" in
>> current terms? I think if we finish divorce between ifnet and bpf, the code
>> would get simplier and you can proceed further with reducing locking
>> overhead.

> We have to jump from ifnet to the list of per-ifnet BPF consumers 
> somehow, so I'm not sure if we can do much more here. BPF itself doesn't 
> require much from parent ifnet.

> What I really want to do next is the following:

> 1) Make BPF_PEERS_PRESENT(ifp) to be (ifp->if_bpf != NULL). This saves 
> some processing time and permits 'bpf_if' to be be totally opaque 
> without any hacks.
> 2) Set if_bpf pointer IFF there are some consumers (and set it back to 
> NULL when all consumers are detached). This should work well for 'main' 
> BPF DLT, but single (currently, 802.11) interface can hold more than one 
> DLTs. Probably we can save dst pointer passed to bpfattach2() to given 

There probably will be more of them when we will support tcpdump -i iggroupnam
as admin can decide to move to one group interfaces with defferent DLTs.

> bpf_if structure, and set this value instead of ->if_bpf.
> This, however, can lead to hard-to-find problems, since bpfattach[2] is 
> usually not called by driver directly.


-- 
WBR, Vadim Goncharov. ICQ#166852181       mailto:vadim_nuclight@mail.ru
[Anti-Greenpeace][Sober FreeBSD zealot][http://nuclight.livejournal.com]




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?slrnkbpho3.2f5k.vadim_nuclight>