From: Luiz Capitulino <lcapitulino@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Amos Kong <akong@redhat.com>, qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 1/2] net: introduce MAC_TABLE_CHANGED event
Date: Thu, 16 May 2013 08:52:46 -0400 [thread overview]
Message-ID: <20130516085246.156bbc33@redhat.com> (raw)
In-Reply-To: <20130516124517.GA32739@redhat.com>
On Thu, 16 May 2013 15:45:17 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Thu, May 16, 2013 at 08:24:03AM -0400, Luiz Capitulino wrote:
> > On Thu, 16 May 2013 15:17:45 +0300
> > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> >
> > > On Thu, May 16, 2013 at 07:07:24PM +0800, Amos Kong wrote:
> > > > Introduce this new QMP event to notify management after guest changes
> > > > mac-table configuration.
> > > >
> > > > Signed-off-by: Amos Kong <akong@redhat.com>
> > > > ---
> > > > QMP/qmp-events.txt | 14 ++++++++++++++
> > > > hw/net/virtio-net.c | 12 ++++++++++++
> > > > include/monitor/monitor.h | 1 +
> > > > monitor.c | 1 +
> > > > 4 files changed, 28 insertions(+)
> > > >
> > > > diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt
> > > > index 92fe5fb..24d62df 100644
> > > > --- a/QMP/qmp-events.txt
> > > > +++ b/QMP/qmp-events.txt
> > > > @@ -154,6 +154,20 @@ Data:
> > > > "path": "/machine/peripheral/virtio-net-pci-0" },
> > > > "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
> > > >
> > > > +MAC_TABLE_CHANGED
> > > > +-----------------
> > > > +
> > > > +Emitted mac-table configuration is changed by the guest.
> > > > +
> > > > +Data:
> > > > +
> > > > +- "name": net client name (json-string)
> > > > +
> > > > +{ "event": "MAC_TABLE_CHANGED",
> > > > + "data": { "name": "vnet0" },
> > > > + "timestamp": { "seconds": 1368697518, "microseconds": 326866 }}
> > > > +}
> > > > +
> > > > DEVICE_TRAY_MOVED
> > > > -----------------
> > > >
> > > > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> > > > index bed0822..a9b8f53 100644
> > > > --- a/hw/net/virtio-net.c
> > > > +++ b/hw/net/virtio-net.c
> > > > @@ -21,6 +21,8 @@
> > > > #include "hw/virtio/virtio-net.h"
> > > > #include "net/vhost_net.h"
> > > > #include "hw/virtio/virtio-bus.h"
> > > > +#include "qapi/qmp/qjson.h"
> > > > +#include "monitor/monitor.h"
> > > >
> > > > #define VIRTIO_NET_VM_VERSION 11
> > > >
> > > > @@ -395,6 +397,7 @@ static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd,
> > > > {
> > > > uint8_t on;
> > > > size_t s;
> > > > + QObject *event_data;
> > > >
> > > > s = iov_to_buf(iov, iov_cnt, 0, &on, sizeof(on));
> > > > if (s != sizeof(on)) {
> > > > @@ -417,6 +420,10 @@ static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd,
> > > > return VIRTIO_NET_ERR;
> > > > }
> > > >
> > > > + event_data = qobject_from_jsonf("{ 'name': %s }", n->netclient_name);
> > > > + monitor_protocol_event(QEVENT_MAC_TABLE_CHANGED, event_data);
> > > > + qobject_decref(event_data);
> > > > +
> > > > return VIRTIO_NET_OK;
> > > > }
> > > >
> > >
> > > Sorry, pls ignore my previous mail, I see you actually
> > > emit this on rx mode change as well.
> > >
> > > I find the name misleading or at least it mislead me :)
> > > RX_FILTER_CHANGED?
> > >
> > > > @@ -425,6 +432,7 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd,
> > > > {
> > > > struct virtio_net_ctrl_mac mac_data;
> > > > size_t s;
> > > > + QObject *event_data;
> > > >
> > > > if (cmd == VIRTIO_NET_CTRL_MAC_ADDR_SET) {
> > > > if (iov_size(iov, iov_cnt) != sizeof(n->mac)) {
> > > > @@ -497,6 +505,10 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd,
> > > > n->mac_table.multi_overflow = 1;
> > > > }
> > > >
> > > > + event_data = qobject_from_jsonf("{ 'name': %s }", n->netclient_name);
> > > > + monitor_protocol_event(QEVENT_MAC_TABLE_CHANGED, event_data);
> > > > + qobject_decref(event_data);
> > > > +
> > > > return VIRTIO_NET_OK;
> > > > }
> > > >
> > >
> > > This makes it easy for guest to flood management with
> > > spurious events.
> > > How about we set a flag after this, and avoid sending any more
> > > events until management queries the filter status?
> >
> > We have an API for that, look at monitor_protocol_event_init().
>
> You mean monitor_protocol_event_throttle?
> So what happens if guest triggers more
> MAC changes per second?
The QMP client will receive the newest one.
>
> > >
> > > > diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
> > > > index 1a6cfcf..e88c70f 100644
> > > > --- a/include/monitor/monitor.h
> > > > +++ b/include/monitor/monitor.h
> > > > @@ -40,6 +40,7 @@ typedef enum MonitorEvent {
> > > > QEVENT_BLOCK_JOB_ERROR,
> > > > QEVENT_BLOCK_JOB_READY,
> > > > QEVENT_DEVICE_DELETED,
> > > > + QEVENT_MAC_TABLE_CHANGED,
> > > > QEVENT_DEVICE_TRAY_MOVED,
> > > > QEVENT_SUSPEND,
> > > > QEVENT_SUSPEND_DISK,
> > > > diff --git a/monitor.c b/monitor.c
> > > > index 62aaebe..9e51545 100644
> > > > --- a/monitor.c
> > > > +++ b/monitor.c
> > > > @@ -490,6 +490,7 @@ static const char *monitor_event_names[] = {
> > > > [QEVENT_BLOCK_JOB_ERROR] = "BLOCK_JOB_ERROR",
> > > > [QEVENT_BLOCK_JOB_READY] = "BLOCK_JOB_READY",
> > > > [QEVENT_DEVICE_DELETED] = "DEVICE_DELETED",
> > > > + [QEVENT_MAC_TABLE_CHANGED] = "MAC_TABLE_CHANGED",
> > > > [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED",
> > > > [QEVENT_SUSPEND] = "SUSPEND",
> > > > [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
> > > > --
> > > > 1.8.1.4
> > >
>
next prev parent reply other threads:[~2013-05-16 12:53 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-16 11:07 [Qemu-devel] [PATCH v2 0/2] mac programming over macvtap Amos Kong
2013-05-16 11:07 ` [Qemu-devel] [PATCH v2 1/2] net: introduce MAC_TABLE_CHANGED event Amos Kong
2013-05-16 12:12 ` Michael S. Tsirkin
2013-05-16 12:17 ` Michael S. Tsirkin
2013-05-16 12:24 ` Luiz Capitulino
2013-05-16 12:45 ` Michael S. Tsirkin
2013-05-16 12:52 ` Luiz Capitulino [this message]
2013-05-16 14:58 ` Eric Blake
2013-05-16 15:03 ` Michael S. Tsirkin
2013-05-16 15:06 ` Michael S. Tsirkin
2013-05-16 15:12 ` Eric Blake
2013-05-16 15:17 ` Michael S. Tsirkin
2013-05-16 15:24 ` Eric Blake
2013-05-23 15:54 ` Luiz Capitulino
2013-05-23 17:18 ` Michael S. Tsirkin
2013-05-23 17:26 ` Luiz Capitulino
2013-05-24 12:10 ` Michael S. Tsirkin
2013-05-24 12:51 ` Luiz Capitulino
2013-05-27 9:34 ` Amos Kong
2013-05-27 13:10 ` Luiz Capitulino
2013-05-27 13:24 ` Luiz Capitulino
2013-05-27 22:43 ` Amos Kong
2013-05-28 12:25 ` Luiz Capitulino
2013-05-30 13:50 ` Amos Kong
2013-05-30 13:57 ` Michael S. Tsirkin
2013-05-30 13:54 ` Michael S. Tsirkin
2013-05-31 0:35 ` Amos Kong
2013-05-31 3:02 ` Amos Kong
2013-06-04 6:43 ` Amos Kong
2013-06-04 7:42 ` Amos Kong
2013-06-04 11:11 ` Michael S. Tsirkin
2013-05-21 5:04 ` Amos Kong
2013-05-21 8:51 ` Michael S. Tsirkin
2013-05-23 6:08 ` Amos Kong
2013-05-16 14:56 ` Eric Blake
2013-05-16 15:01 ` Michael S. Tsirkin
2013-05-16 11:07 ` [Qemu-devel] [PATCH v2 2/2] net: introduce command to query mac-table information Amos Kong
2013-05-16 12:19 ` Michael S. Tsirkin
2013-05-21 3:31 ` Amos Kong
2013-05-16 15:38 ` Eric Blake
2013-05-23 4:03 ` Amos Kong
2013-05-17 7:39 ` Stefan Hajnoczi
2013-05-21 4:46 ` Amos Kong
2013-05-21 7:38 ` Stefan Hajnoczi
2013-05-29 5:31 ` Jason Wang
2013-06-05 7:18 ` 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=20130516085246.156bbc33@redhat.com \
--to=lcapitulino@redhat.com \
--cc=akong@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).