From: Amos Kong <akong@redhat.com>
To: Markus Armbruster <armbru@redhat.com>, Eric Blake <eblake@redhat.com>
Cc: lcapitulino@redhat.com, qemu-devel@nongnu.org,
stefanha@redhat.com, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 2/2] net: introduce command to query rx-filter information
Date: Tue, 2 Jul 2013 18:40:10 +0800 [thread overview]
Message-ID: <20130702104010.GA19476@amosk.info> (raw)
In-Reply-To: <87ppv1tjpn.fsf@blackfin.pond.sub.org>
On Tue, Jul 02, 2013 at 11:05:56AM +0200, Markus Armbruster wrote:
> Amos Kong <akong@redhat.com> writes:
> >> > diff --git a/net/net.c b/net/net.c
> >> > index 43a74e4..7b73a10 100644
> >> > --- a/net/net.c
> >> > +++ b/net/net.c
> >> > @@ -961,6 +961,53 @@ void print_net_client(Monitor *mon, NetClientState *nc)
> >> > nc->info_str);
> >> > }
> >> >
> >> > +RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
> >> > + Error **errp)
> >> > +{
> >> > + NetClientState *nc;
> >> > + RxFilterInfoList *filter_list = NULL, *last_entry = NULL;
> >> > +
> >> > + QTAILQ_FOREACH(nc, &net_clients, next) {
> >> > + RxFilterInfoList *entry;
> >> > + RxFilterInfo *info;
> >> > +
> >> > + if (nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC) {
> >> > + continue;
> >> > + }
> >> > + if (has_name && strcmp(nc->name, name) != 0) {
> >> > + continue;
> >> > + }
> >> > +
> >> > + if (nc->info->query_rx_filter) {
> >> > + info = nc->info->query_rx_filter(nc);
> >> > + entry = g_malloc0(sizeof(*entry));
> >> > + entry->value = info;
> >> > +
> >> > + if (!filter_list) {
> >> > + filter_list = entry;
> >> > + } else {
> >> > + last_entry->next = entry;
> >> > + }
> >> > + last_entry = entry;
> >> > + } else if (has_name) {
> >> > + error_setg(errp, "net client(%s) doesn't support"
> >> > + " rx-filter querying", name);
> >> > + break;
> >> > + }
> >> > +
> >> > + }
> >> > +
> >> > + if (filter_list == NULL && !error_is_set(errp)) {
> >> > + if (has_name) {
> >> > + error_setg(errp, "invalid net client name: %s", name);
> >> > + } else {
> >> > + error_setg(errp, "no net client supports rx-filter querying");
> >>
> >> Why is this an error?
> >
> > Return an error note is bettr than a NULL list. Management should not query
> > the rx-filter info if there is no net client supports it.
>
> I disagree. If a management application asks a question we can answer,
> we should give it a straight answer, not an error.
>
> ls of an empty directory prints nothing and succeeds. It doesn't
> concern itself with whether I should or should not ask for the
> directory's contents, say because nobody but me can access the
> directory, and I therefore should know perfectly well that it's empty.
Reasonable.
> > {
> > "return": [
> > ]
> > }
> >
> > NULL list might be misread to that it supports rx-filter querying, but the
> > rx-filter config has no item.
>
> If such a misunderstanding is possible, the command's specification
> needs fixing.
>
> If I read the specification correctly, the returned list has one element
> per selected NIC that supports rx-filter querying, and no more.
>
> Without the optional argument, all NICs are selected. With the optional
> argument, just the NIC identified by the argument is selected.
We don't support filter by net client name in latest version.
> Whether the "rx-filter config has no item" shouldn't matter. I don't
> even understand what that means :)
I'm wrong, if one nic doesn't have rx-filter config entry, a NULL dict
will also be returned.
"return": [
{ }
]
I will return NULL table in this case.
> >> > + }
> >> > + }
> >> > +
> >> > + return filter_list;
> >> > +}
> >> > +
> >> > +Example:
> >> > +
> >> > +-> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" }}
> >> > +<- { "return": [
> >> > + {
> >> > + "promiscuous": true,
> >> > + "name": "vnet0",
> >> > + "main-mac": "52:54:00:12:34:56",
> >> > + "unicast": "normal",
> >> > + "unicast-table": [
> >> > + ],
> >> > + "multicast": "normal",
> >> > + "multicast-overflow": false,
> >> > + "unicast-overflow": false,
> >> > + "multicast-table": [
> >> > + "01:00:5e:00:00:01",
> >> > + "33:33:00:00:00:01",
> >> > + "33:33:ff:12:34:56"
> >> > + ],
> >> > + "broadcast-allowed": false
> >> > + }
> >> > + ]
> >> > + }
> >> > +
> >> > +EQMP
> >>
> >> This interface is abstract in the sense that it applies to all NICs. At
> >> this time, it's implemented only virtio-net implements it. I'm
> >> habitually wary of abstractions based on just one concrete instance,
> >> which makes me ask:
> >>
> >> 1. Ignorant question first: could the feature make sense for other NICs,
> >> too, or is it specific to virtio-net?
> >
> > We will not.
> >
> > It's ugly to check if nic is virtio-net nic in net/net.c, so I
> > register the query function to NetClientInfo. Traversal the net
> > client list in net/net.c, and execute query of each virtio-net
> > instance in virtio-net.c
>
> Implementing the feature as an optional callback is fine.
>
> Let me rephrase my question: could this feature be implemented for other
> NICs? I'm *not* asking you to do that, just whether it would be
> possible.
>
> I'm asking because my review of the QAPI schema depends on the answer.
>
> >> 2. If the former, are you reasonably sure this object will do for other
> >> NICs?
> >
> > No.
>
> I'm not sure I understand you. Do you mean to say that the feature
> could be implemented for other NICs, but RxFilterInfo would probably not
> fit for them?
We will not implement the feature to other NICs, no request.
We notify the management of virtio-net rx-filter change, because
we want to sync the the rx-filter change to macvtap device.
--
Amos.
next prev parent reply other threads:[~2013-07-02 11:06 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-23 9:07 [Qemu-devel] [PATCH v3 0/2] mac programming over macvtap Amos Kong
2013-05-23 9:07 ` [Qemu-devel] [PATCH v3 1/2] net: introduce RX_FILTER_CHANGED event Amos Kong
2013-05-23 10:24 ` Michael S. Tsirkin
2013-05-23 14:28 ` Luiz Capitulino
2013-05-23 14:43 ` Michael S. Tsirkin
2013-05-23 14:52 ` Eric Blake
2013-05-23 14:57 ` Michael S. Tsirkin
2013-05-23 15:33 ` Luiz Capitulino
2013-05-24 3:20 ` Amos Kong
2013-05-23 12:01 ` Eric Blake
2013-06-26 6:54 ` Markus Armbruster
2013-06-26 13:53 ` Luiz Capitulino
2013-05-23 9:08 ` [Qemu-devel] [PATCH v3 2/2] net: introduce command to query rx-filter information Amos Kong
2013-05-23 10:23 ` Michael S. Tsirkin
2013-05-24 4:53 ` Amos Kong
2013-05-23 12:14 ` Eric Blake
2013-05-24 3:03 ` Amos Kong
2013-06-26 7:14 ` Markus Armbruster
2013-05-23 16:03 ` Luiz Capitulino
2013-05-24 3:08 ` Amos Kong
2013-05-24 12:23 ` Luiz Capitulino
2013-05-24 12:55 ` Eric Blake
2013-05-24 13:08 ` Luiz Capitulino
2013-05-24 13:23 ` Eric Blake
2013-06-26 9:35 ` Markus Armbruster
2013-05-24 15:20 ` Markus Armbruster
2013-05-24 16:12 ` Michael S. Tsirkin
2013-05-24 18:05 ` Eric Blake
2013-05-24 20:00 ` Luiz Capitulino
2013-05-26 7:38 ` Michael S. Tsirkin
2013-05-27 8:36 ` Stefan Hajnoczi
2013-06-26 9:54 ` Markus Armbruster
2013-06-26 12:00 ` Markus Armbruster
2013-06-26 14:02 ` Luiz Capitulino
2013-06-26 14:15 ` Markus Armbruster
2013-06-28 14:04 ` Eric Blake
2013-06-28 17:27 ` Markus Armbruster
2013-07-01 3:24 ` Amos Kong
2013-07-02 6:33 ` Amos Kong
2013-07-02 9:05 ` Markus Armbruster
2013-07-02 10:40 ` Amos Kong [this message]
2013-07-02 13:27 ` Markus Armbruster
2013-07-04 3:31 ` Amos Kong
2013-07-04 6:28 ` Markus Armbruster
2013-07-11 14:05 ` Amos Kong
2013-07-12 6:32 ` Markus Armbruster
2013-07-12 7:07 ` Amos Kong
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=20130702104010.GA19476@amosk.info \
--to=akong@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).