From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59716) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZIrfk-0006mw-VF for qemu-devel@nongnu.org; Sat, 25 Jul 2015 01:06:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZIrff-00008o-SA for qemu-devel@nongnu.org; Sat, 25 Jul 2015 01:06:56 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:39456) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZIrff-00006V-5I for qemu-devel@nongnu.org; Sat, 25 Jul 2015 01:06:51 -0400 References: <1437735359-17415-1-git-send-email-yanghy@cn.fujitsu.com> From: zhanghailiang Message-ID: <55B31954.9000406@huawei.com> Date: Sat, 25 Jul 2015 13:06:28 +0800 MIME-Version: 1.0 In-Reply-To: <1437735359-17415-1-git-send-email-yanghy@cn.fujitsu.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 0/9] For QEMU 2.5: Add a net filter and a netbuffer plugin based on the filter List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Yang Hongyang , qemu-devel@nongnu.org Cc: thuth@redhat.com, jasowang@redhat.com, peter.huangpeng@huawei.com, mrhines@linux.vnet.ibm.com, stefanha@redhat.com On 2015/7/24 18:55, Yang Hongyang wrote: > This patch add a net filter between network backend and NIC devices. > All packets will pass by this filter. > Also implement a netbuffer plugin for example, the netbuffer plugin > could be used by VM FT solutions like Macrocheckpointing, > to buffer/release packets. > Based on this, dump plugin could be easily implemented. > > I've done some simple tests on this series, > backend, tap,user > NIC, e1000,virtio-net > > There's still some missing functions to be done, I've posted this > early in order to gain more comments, thank you! > > TODO: > multiqueue support. > > +--------------+ +-------------+ > +----------+ | filter | |frontend(NIC)| > | peer+--> | | | > | network <--+backend <-------+ peer | > | backend | | peer +-------> | > +----------+ +--------------+ +-------------+ > > Usage: > -netdev tap,id=bn0 # you can use whatever backend as needed > -netdev filter,id=f0,backend=bn0 > -netdev filter-,id=p0,filter=f0 > -device e1000,netdev=f0 Have you considered Daniel's suggestion ? Using the bellow style: -netfilter id=f0,plugin=dump -netdev tap,id=bn0,filter=f0 -device e1000,netdev=bn0 Considering the filter as a new 'netdev' seems to be unreasonable, Whenever we add a new plugin, we have to add a new member to 'NetClientOptions', there will be lots of 'filter' objects in NetClientOptions area. Besides when we want to describe a net device with several filter plugin for VM, it will become like: -netdev tap,id=bn0 -netdev filter,id=f0,backend=bn0 -netdev filter-,id=p0,filter=f0 -netdev filter-,id=p1,filter=f1 ... ... -device e1000,netdev=f0 Which is a little verbose for 'netdev' option. We'd better come to an agreement on the command line style for net filter :) Cc: Daniel P. Berrange Thanks, zhanghailiang > NOTE: > You can attach multiple plugins to the filter, dynamically add/remove > filter and filter-. > > The netbuffer plugin: > Usage: > -netdev tap,id=bn0 # you can use whatever backend as needed > -netdev filter,id=f0,backend=bn0 > -netdev filter-buffer,id=p0,filter=f0 > -device e1000,netdev=f0 > > Will supply a public API to release the buffer. But there's no > callers currently. > To test this feature, it's quite simple, just use > netdev_add filter-buffer,id=p0,filter=f0 > to buffer packets, > netdev_del p0 > will release packets. > > You can also implement whatever plugin you needed based on this filter. > > Yang Hongyang (9): > netdev: Add a net filter > virtio-net: add filter support > filter: remove plugins when remove filter > filter: remove filter before remove network backend > filter: add netbuffer plugin > introduce qemu_find_net_clients_by_model > net/queue: export qemu_net_queue_append > move out net queue structs define > add a public api to release buffer > > hw/net/virtio-net.c | 17 ++- > include/net/filter.h | 21 ++++ > include/net/net.h | 5 + > include/net/queue.h | 26 ++++ > net/Makefile.objs | 2 + > net/clients.h | 6 + > net/filter-buffer.c | 185 ++++++++++++++++++++++++++++ > net/filter.c | 331 +++++++++++++++++++++++++++++++++++++++++++++++++++ > net/net.c | 51 +++++++- > net/queue.c | 31 +---- > qapi-schema.json | 40 ++++++- > 11 files changed, 679 insertions(+), 36 deletions(-) > create mode 100644 include/net/filter.h > create mode 100644 net/filter-buffer.c > create mode 100644 net/filter.c >