From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34253) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcxYU-0000B5-9s for qemu-devel@nongnu.org; Thu, 16 May 2013 08:45:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UcxYN-0006Dy-Ns for qemu-devel@nongnu.org; Thu, 16 May 2013 08:45:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:18448) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcxYN-0006Du-FW for qemu-devel@nongnu.org; Thu, 16 May 2013 08:45:03 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4GCj2Uo026726 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 16 May 2013 08:45:02 -0400 Date: Thu, 16 May 2013 15:45:17 +0300 From: "Michael S. Tsirkin" Message-ID: <20130516124517.GA32739@redhat.com> References: <1368702445-30733-1-git-send-email-akong@redhat.com> <1368702445-30733-2-git-send-email-akong@redhat.com> <20130516121745.GE31841@redhat.com> <20130516082403.6a09e5f9@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130516082403.6a09e5f9@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 1/2] net: introduce MAC_TABLE_CHANGED event List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: Amos Kong , qemu-devel@nongnu.org, stefanha@redhat.com 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" 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 > > > --- > > > 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? > > > > > 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 > >