From: Yang Hongyang <yanghy@cn.fujitsu.com>
To: Stefan Hajnoczi <stefanha@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Andreas Faerber <afaerber@suse.de>
Cc: thuth@redhat.com, zhang.zhanghailiang@huawei.com,
lizhijian@cn.fujitsu.com, jasowang@redhat.com,
qemu-devel@nongnu.org, mrhines@linux.vnet.ibm.com,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v9 01/10] net: add a new object netfilter
Date: Wed, 2 Sep 2015 09:39:11 +0800 [thread overview]
Message-ID: <55E6533F.30600@cn.fujitsu.com> (raw)
In-Reply-To: <20150901143622.GC2407@stefanha-thinkpad.redhat.com>
Hi Stefan,
On 09/01/2015 10:36 PM, Stefan Hajnoczi wrote:
> On Tue, Sep 01, 2015 at 05:06:14PM +0800, Yang Hongyang wrote:
>> Add the framework for a new netfilter object and a new
>> -netfilter CLI option as a basis for the following patches.
>> Note that the new added document in qemu-options.hx indicate that
>> there's a buffer filter. This type of filter will be implemented
>> in the following patches.
>
> Adding Markus and Andreas for the command-line and QAPI perspective on
> adding a new type of object to QEMU.
I think I've already addressed Markus's comment of QAPI part on v8 :)
Thanks!
>
> It seems you have followed how the net subsystem adds -netdev. I think
Yes, but for v9, it's different, we now use flat union instead of simple union
as in -netdev. According to Markus's comment.
> that approach is not the preferred way of adding new types of objects...
>
>>
>> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
>> CC: Paolo Bonzini <pbonzini@redhat.com>
>> CC: Eric Blake <eblake@redhat.com>
>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>> ---
>> v9: Add documentation of buffer filter which will be implemented later
>> in this series.
>> ---
>> include/net/filter.h | 15 +++++++++++++++
>> include/sysemu/sysemu.h | 1 +
>> net/Makefile.objs | 1 +
>> net/filter.c | 27 +++++++++++++++++++++++++++
>> qemu-options.hx | 21 +++++++++++++++++++++
>> vl.c | 13 +++++++++++++
>> 6 files changed, 78 insertions(+)
>> create mode 100644 include/net/filter.h
>> create mode 100644 net/filter.c
>>
>> diff --git a/include/net/filter.h b/include/net/filter.h
>> new file mode 100644
>> index 0000000..4242ded
>> --- /dev/null
>> +++ b/include/net/filter.h
>> @@ -0,0 +1,15 @@
>> +/*
>> + * Copyright (c) 2015 FUJITSU LIMITED
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * later. See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef QEMU_NET_FILTER_H
>> +#define QEMU_NET_FILTER_H
>> +
>> +#include "qemu-common.h"
>> +
>> +int net_init_filters(void);
>> +
>> +#endif /* QEMU_NET_FILTER_H */
>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>> index 44570d1..15d6d00 100644
>> --- a/include/sysemu/sysemu.h
>> +++ b/include/sysemu/sysemu.h
>> @@ -212,6 +212,7 @@ extern QemuOptsList qemu_chardev_opts;
>> extern QemuOptsList qemu_device_opts;
>> extern QemuOptsList qemu_netdev_opts;
>> extern QemuOptsList qemu_net_opts;
>> +extern QemuOptsList qemu_netfilter_opts;
>> extern QemuOptsList qemu_global_opts;
>> extern QemuOptsList qemu_mon_opts;
>>
>> diff --git a/net/Makefile.objs b/net/Makefile.objs
>> index ec19cb3..914aec0 100644
>> --- a/net/Makefile.objs
>> +++ b/net/Makefile.objs
>> @@ -13,3 +13,4 @@ common-obj-$(CONFIG_HAIKU) += tap-haiku.o
>> common-obj-$(CONFIG_SLIRP) += slirp.o
>> common-obj-$(CONFIG_VDE) += vde.o
>> common-obj-$(CONFIG_NETMAP) += netmap.o
>> +common-obj-y += filter.o
>> diff --git a/net/filter.c b/net/filter.c
>> new file mode 100644
>> index 0000000..4e40f08
>> --- /dev/null
>> +++ b/net/filter.c
>> @@ -0,0 +1,27 @@
>> +/*
>> + * Copyright (c) 2015 FUJITSU LIMITED
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * later. See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "qemu-common.h"
>> +#include "net/filter.h"
>> +
>> +int net_init_filters(void)
>> +{
>> + return 0;
>> +}
>> +
>> +QemuOptsList qemu_netfilter_opts = {
>> + .name = "netfilter",
>> + .implied_opt_name = "type",
>> + .head = QTAILQ_HEAD_INITIALIZER(qemu_netfilter_opts.head),
>> + .desc = {
>> + /*
>> + * no elements => accept any params
>> + * validation will happen later
>> + */
>> + { /* end of list */ }
>> + },
>> +};
>
> ...because catch-alls like this make introspection impossible.
>
>> diff --git a/qemu-options.hx b/qemu-options.hx
>> index 77f5853..f1d42a1 100644
>> --- a/qemu-options.hx
>> +++ b/qemu-options.hx
>> @@ -1991,6 +1991,27 @@ override the default configuration (@option{-net nic -net user}) which
>> is activated if no @option{-net} options are provided.
>> ETEXI
>>
>> +DEF("netfilter", HAS_ARG, QEMU_OPTION_netfilter,
>> + "-netfilter buffer,id=str,netdev=str[,chain=in|out|all,interval=t]\n"
>> + " buffer network packets on netdev. if interval provided, will release\n"
>> + " packets by interval. Interval scale: microsecond\n", QEMU_ARCH_ALL)
>
> Perhaps the -object option should be used:
>
> -object netfilter-buffer,id=str,netdev=str[,chain=in|out|all,interval=t]
>
> That is how IOThread and memory backends were recently added.
>
> They are QOM objects (see include/qom/object.h) and eliminate the need
> to write boilerplate code that adds new command-line options and
> instantiates objects.
I thought -netfilter is more obvious for an object name, -object is kind of
abstract name... but I'm not maintainer, if you think it's really need to
change to -object, I can do that.
Thanks!
>
>> +STEXI
>> +@item -netfilter buffer,id=@var{id},netdev=@var{netdevid}[,chain=@var{in/out/all}][,interval=@var{t}]
>> +Buffer network packets on netdev @var{netdevid}.
>> +If interval @var{t} provided, will release packets by interval. Interval scale: microsecond.
>> +If interval @var{t} not provided, you have to make sure the packets can be released,
>> +either by manually remove this filter or call the release buffer API, otherwise,
>> +the packets will be buffered forever. Use with caution.
>> +
>> +chain @var{in/out/all} is an option that can be applied to any netfilter, default is @option{all}.
>> +
>> +@option{in} means this filter will receive packets sent to the netdev
>> +
>> +@option{out} means this filter will receive packets sent from the netdev
>> +
>> +@option{all} means this filter will receive packets both sent to/from the netdev
>> +ETEXI
>> +
>> STEXI
>> @end table
>> ETEXI
>> diff --git a/vl.c b/vl.c
>> index 584ca88..aee931a 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -75,6 +75,7 @@ int main(int argc, char **argv)
>> #include "monitor/qdev.h"
>> #include "sysemu/bt.h"
>> #include "net/net.h"
>> +#include "net/filter.h"
>> #include "net/slirp.h"
>> #include "monitor/monitor.h"
>> #include "ui/console.h"
>> @@ -2998,6 +2999,7 @@ int main(int argc, char **argv, char **envp)
>> qemu_add_opts(&qemu_device_opts);
>> qemu_add_opts(&qemu_netdev_opts);
>> qemu_add_opts(&qemu_net_opts);
>> + qemu_add_opts(&qemu_netfilter_opts);
>> qemu_add_opts(&qemu_rtc_opts);
>> qemu_add_opts(&qemu_global_opts);
>> qemu_add_opts(&qemu_mon_opts);
>> @@ -3284,6 +3286,13 @@ int main(int argc, char **argv, char **envp)
>> exit(1);
>> }
>> break;
>> + case QEMU_OPTION_netfilter:
>> + opts = qemu_opts_parse_noisily(qemu_find_opts("netfilter"),
>> + optarg, true);
>> + if (!opts) {
>> + exit(1);
>> + }
>> + break;
>> #ifdef CONFIG_LIBISCSI
>> case QEMU_OPTION_iscsi:
>> opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"),
>> @@ -4413,6 +4422,10 @@ int main(int argc, char **argv, char **envp)
>> exit(1);
>> }
>>
>> + if (net_init_filters() < 0) {
>> + exit(1);
>> + }
>> +
>> #ifdef CONFIG_TPM
>> if (tpm_init() < 0) {
>> exit(1);
>> --
>> 1.9.1
>>
> .
>
--
Thanks,
Yang.
next prev parent reply other threads:[~2015-09-02 1:39 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-01 9:06 [Qemu-devel] [PATCH v9 00/10] Add a netfilter object and netbuffer filter Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 01/10] net: add a new object netfilter Yang Hongyang
2015-09-01 14:36 ` Stefan Hajnoczi
2015-09-02 1:39 ` Yang Hongyang [this message]
2015-09-02 12:58 ` Stefan Hajnoczi
2015-09-02 13:04 ` Daniel P. Berrange
2015-09-02 13:06 ` Stefan Hajnoczi
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 02/10] init/cleanup of netfilter object Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 03/10] netfilter: add netfilter_{add|del} commands Yang Hongyang
2015-09-01 14:37 ` Stefan Hajnoczi
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 04/10] netfilter: hook packets before net queue send Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 05/10] move out net queue structs define Yang Hongyang
2015-09-01 14:43 ` Stefan Hajnoczi
2015-09-02 1:49 ` Yang Hongyang
2015-09-02 13:02 ` Stefan Hajnoczi
2015-09-02 16:18 ` Yang Hongyang
2015-09-04 10:32 ` Stefan Hajnoczi
2015-09-07 7:37 ` Yang Hongyang
2015-09-07 9:06 ` Markus Armbruster
2015-09-07 9:21 ` Yang Hongyang
2015-09-07 9:11 ` Stefan Hajnoczi
2015-09-07 9:26 ` Yang Hongyang
2015-09-07 10:53 ` Yang Hongyang
2015-09-07 11:00 ` Daniel P. Berrange
2015-09-07 11:41 ` Yang Hongyang
2015-09-07 11:43 ` Daniel P. Berrange
2015-09-07 11:46 ` Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 06/10] netfilter: add an API to pass the packet to next filter Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 07/10] netfilter: print filter info associate with the netdev Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 08/10] net/queue: export qemu_net_queue_append_iov Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 09/10] netfilter: add a netbuffer filter Yang Hongyang
2015-09-01 9:06 ` [Qemu-devel] [PATCH v9 10/10] tests: add test cases for netfilter object Yang Hongyang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E6533F.30600@cn.fujitsu.com \
--to=yanghy@cn.fujitsu.com \
--cc=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=jasowang@redhat.com \
--cc=lizhijian@cn.fujitsu.com \
--cc=mrhines@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.com \
--cc=zhang.zhanghailiang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.