From: Yang Hongyang <yanghy@cn.fujitsu.com>
To: Thomas Huth <thuth@redhat.com>
Cc: zhang zhanghailiang <zhang.zhanghailiang@huawei.com>,
jasowang@redhat.com, qemu-devel@nongnu.org,
mrhines@linux.vnet.ibm.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 02/12] init/cleanup of netfilter object
Date: Wed, 29 Jul 2015 21:50:02 +0800 [thread overview]
Message-ID: <55B8DA0A.2040009@cn.fujitsu.com> (raw)
In-Reply-To: <1012207755.363443.1438176811477.JavaMail.zimbra@redhat.com>
Hi Thomas,
Thanks for the review.
On 07/29/2015 09:33 PM, Thomas Huth wrote:
> On Wednesday, July 29, 2015 12:51:46 PM,
> "Yang Hongyang" <yanghy@cn.fujitsu.com> wrote:
>>
>> This is mostly the same with init/cleanup of netdev object.
>>
>> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
>> ---
>> include/net/filter.h | 21 ++++++++
>> include/qemu/typedefs.h | 1 +
>> net/filter.c | 131
>> ++++++++++++++++++++++++++++++++++++++++++++++++
>> qapi-schema.json | 30 +++++++++++
>> 4 files changed, 183 insertions(+)
>>
> [...]
>> diff --git a/net/filter.c b/net/filter.c
>> index 4e40f08..e6fdc26 100644
>> --- a/net/filter.c
>> +++ b/net/filter.c
>> @@ -6,10 +6,141 @@
>> */
>>
>> #include "qemu-common.h"
>> +#include "qapi-visit.h"
>> +#include "qapi/qmp/qerror.h"
>> +#include "qemu/error-report.h"
>> +#include "qapi-visit.h"
>> +#include "qapi/opts-visitor.h"
>> +#include "qapi/dealloc-visitor.h"
>> +#include "qemu/config-file.h"
>> +
>> #include "net/filter.h"
>> +#include "net/net.h"
>> +
>> +static QTAILQ_HEAD(, NetFilterState) net_filters;
>> +
>> +NetFilterState *qemu_new_net_filter(NetFilterInfo *info,
>> + NetClientState *netdev,
>> + const char *model,
>> + const char *name)
>> +{
>> + NetFilterState *nf;
>> +
>> + assert(info->size >= sizeof(NetFilterState));
>> +
>> + nf = g_malloc0(info->size);
>> + nf->info = info;
>> + nf->model = g_strdup(model);
>> + nf->name = g_strdup(name);
>> + nf->netdev = netdev;
>> + QTAILQ_INSERT_TAIL(&net_filters, nf, next);
>> + /* TODO: attach netfilter to netdev */
>> +
>> + return nf;
>> +}
>> +
>> +static __attribute__((unused)) void qemu_cleanup_net_filter(NetFilterState
>> *nf)
>
> Maybe rather add this function in the patch you really need it? Then you could
> avoid the ugly attribute-unused here.
It will be removed in the next patch. I put cleanup here in order to pair with
the new function, and could be easy to review...
>
>> +{
>> + /* TODO: remove netfilter from netdev */
>> +
>> + QTAILQ_REMOVE(&net_filters, nf, next);
>> +
>> + if (nf->info->cleanup) {
>> + nf->info->cleanup(nf);
>> + }
>> +
>> + g_free(nf->name);
>> + g_free(nf->model);
>> + g_free(nf);
>> +}
>> +
>> +typedef int (NetFilterInit)(const NetFilterOptions *opts,
>> + const char *name,
>> + NetClientState *netdev, Error **errp);
>> +
>> +static
>> +NetFilterInit * const net_filter_init_fun[NET_FILTER_OPTIONS_KIND_MAX] = {
>> +};
>> +
>> +static int net_filter_init1(const NetFilter *netfilter, Error **errp)
>> +{
>> + NetClientState *netdev = NULL;
>> + NetClientState *ncs[MAX_QUEUE_NUM];
>> + const char *name = netfilter->id;
>> + const char *netdev_id = netfilter->netdev;
>> + const NetFilterOptions *opts = netfilter->opts;
>> + int queues;
>> +
>> + if (!net_filter_init_fun[opts->kind]) {
>> + error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
>> + "a net filter type");
>> + return -1;
>> + }
>> +
>> + queues = qemu_find_net_clients_except(netdev_id, ncs,
>> + NET_CLIENT_OPTIONS_KIND_NIC,
>> + MAX_QUEUE_NUM);
>> + if (queues > 1) {
>> + error_setg(errp, "multiqueues is not supported by now");
>> + return -1;
>> + } else if (queues < 1) {
>> + error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "netdev",
>> + "a network backend id");
>> + return -1;
>> + }
>> +
>> + netdev = ncs[0];
>> +
>> +
>
> One empty line should be enough.
Got, thanks!
>
>> + if (net_filter_init_fun[opts->kind](opts, name, netdev, errp) < 0) {
>> + if (errp && !*errp) {
>> + error_setg(errp, QERR_DEVICE_INIT_FAILED,
>> + NetFilterOptionsKind_lookup[opts->kind]);
>> + }
>> + return -1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static int net_init_filter(void *dummy, QemuOpts *opts, Error **errp)
>> +{
>> + NetFilter *object = NULL;
>> + Error *err = NULL;
>> + int ret = -1;
>> +
>> + {
>
> Why the extra curly brackets here? Looks somewhat strange, can you also
> do it without?
actually it is almost the same with net.c, but sure, can remove it in
the next version.
>
>> + OptsVisitor *ov = opts_visitor_new(opts);
>> +
>> + visit_type_NetFilter(opts_get_visitor(ov), &object, NULL, &err);
>> + opts_visitor_cleanup(ov);
>> + }
>> +
>> + if (!err) {
>> + ret = net_filter_init1(object, &err);
>> + }
>> +
>> +
>> + if (object) {
>> + QapiDeallocVisitor *dv = qapi_dealloc_visitor_new();
>> +
>> + visit_type_NetFilter(qapi_dealloc_get_visitor(dv), &object, NULL,
>> NULL);
>> + qapi_dealloc_visitor_cleanup(dv);
>> + }
>> +
>> + error_propagate(errp, err);
>> + return ret;
>> +}
>>
>> int net_init_filters(void)
>> {
>> + QTAILQ_INIT(&net_filters);
>> +
>> + if (qemu_opts_foreach(qemu_find_opts("netfilter"),
>> + net_init_filter, NULL, NULL)) {
>> + return -1;
>> + }
>> +
>> return 0;
>> }
>>
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index a0a45f7..9a7c107 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -2537,6 +2537,36 @@
>> 'opts': 'NetClientOptions' } }
>>
>> ##
>> +# @NetFilterOptions
>> +#
>> +# A discriminated record of network filters.
>> +#
>> +# Since 2.5
>> +#
>> +##
>> +{ 'union': 'NetFilterOptions',
>> + 'data': { } }
>> +
>> +##
>> +# @NetFilter
>> +#
>> +# Captures the packets of a network backend.
>> +#
>> +# @id: identifier for monitor commands.
>> +#
>> +# @netdev: the network backend it attached to.
>> +#
>> +# @opts: filter type specific properties
>> +#
>> +# Since 2.5
>> +##
>> +{ 'struct': 'NetFilter',
>> + 'data': {
>> + 'id': 'str',
>> + 'netdev': 'str',
>> + 'opts': 'NetFilterOptions' } }
>> +
>> +##
>> # @InetSocketAddress
>> #
>> # Captures a socket address or address range in the Internet namespace.
>
> Apart from the nits, the patch looks ok to me.
Thank you.
>
> Thomas
> .
>
--
Thanks,
Yang.
next prev parent reply other threads:[~2015-07-29 13:50 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-29 10:51 [Qemu-devel] [PATCH 00/12] For QEMU 2.5: Add a netfilter object and netbuffer filter Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 01/12] net: add a new object netfilter Yang Hongyang
2015-07-29 13:53 ` Thomas Huth
2015-07-29 14:05 ` Yang Hongyang
2015-07-29 14:20 ` Thomas Huth
2015-07-29 14:32 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 02/12] init/cleanup of netfilter object Yang Hongyang
2015-07-29 13:33 ` Thomas Huth
2015-07-29 13:50 ` Yang Hongyang [this message]
2015-07-29 13:58 ` Thomas Huth
2015-07-29 14:08 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 03/12] netfilter: add netfilter_{add|del} commands Yang Hongyang
2015-07-29 14:15 ` Thomas Huth
2015-07-29 14:28 ` Yang Hongyang
2015-07-29 14:30 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 04/12] net: add/remove filters from network backend Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 05/12] netfilter: hook packets before receive Yang Hongyang
2015-07-30 4:51 ` Jason Wang
2015-07-30 7:22 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 06/12] netfilter: provide a compat receive_iov Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 07/12] net/queue: export qemu_net_queue_append Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 08/12] move out net queue structs define Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 09/12] netfilter: add a netbuffer filter Yang Hongyang
2015-07-30 1:45 ` Li Zhijian
2015-07-30 1:53 ` Yang Hongyang
2015-07-30 5:13 ` Jason Wang
2015-07-30 6:47 ` Yang Hongyang
2015-07-30 8:40 ` Jason Wang
2015-07-30 9:04 ` Yang Hongyang
2015-07-30 9:33 ` Jason Wang
2015-07-30 9:49 ` Yang Hongyang
2015-07-30 10:14 ` Jason Wang
2015-07-30 10:28 ` Yang Hongyang
2015-07-30 14:16 ` Thomas Huth
2015-07-30 15:00 ` Yang Hongyang
2015-07-30 13:46 ` Yang Hongyang
2015-07-30 7:00 ` Yang Hongyang
2015-07-30 8:52 ` Jason Wang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 10/12] netbuffer: add a public api filter_buffer_release_all Yang Hongyang
2015-07-30 5:25 ` Jason Wang
2015-07-30 5:50 ` Yang Hongyang
2015-07-30 8:42 ` Jason Wang
2015-07-30 8:53 ` Yang Hongyang
2015-07-30 8:50 ` Jason Wang
2015-07-30 9:06 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 11/12] filter/buffer: add an interval option to buffer filter Yang Hongyang
2015-07-30 5:27 ` Jason Wang
2015-07-30 5:37 ` Yang Hongyang
2015-07-30 8:53 ` Jason Wang
2015-07-30 9:12 ` Yang Hongyang
2015-07-29 10:51 ` [Qemu-devel] [PATCH 12/12] filter/buffer: update command description and help Yang Hongyang
2015-07-29 12:56 ` [Qemu-devel] [PATCH 00/12] For QEMU 2.5: Add a netfilter object and netbuffer filter Thomas Huth
2015-07-29 13:39 ` Yang Hongyang
2015-07-29 13:48 ` Thomas Huth
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=55B8DA0A.2040009@cn.fujitsu.com \
--to=yanghy@cn.fujitsu.com \
--cc=jasowang@redhat.com \
--cc=mrhines@linux.vnet.ibm.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.