On 09/30/2014 11:54 AM, Tony Krowiak wrote:
On 09/24/2014 05:50 AM, Laine Stump wrote:
> NIC_RX_FILTER_CHANGED is sent by qemu any time a NIC driver in the
> guest modified the NIC's RX Filter (for example, if the MAC address of
> the NIC is changed by the guest).
>
> This patch doesn't do anything useful with that event; it just sets up
> all the plumbing to get news of the event into a worker thread with
> all proper locking/reference counting, and provide an easy place to
> add in desired functionality.
>
> For easy reference the next time a handler for a qemu event is
> written, here is the sequence:
I assume you mean qemu_monitor_json.c
> The handler in qemu_json_monitor.c calls
Yes.
>
>
> + if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) < 0) {
> + VIR_WARN("NIC_RX_FILTER_CHANGED event received for "
> + "non-existent device %s in domain %s",
> + devAlias, vm->def->name);
> + goto endjob;
> + }
> + if (dev.type != VIR_DOMAIN_DEVICE_NET) {
> + VIR_WARN("NIC_RX_FILTER_CHANGED event received for "
> + "non-network device %s in domain %s",
> + devAlias, vm->def->name);
> + goto endjob;
> + }
I understand the need to check the device type, but is it necessary to
log a warning message? I wonder if it may not cause unnecessary
concern for someone viewing the logs. Is it possible to receive a
NIC_RX_FILTER_CHANGED event for something other than a network device?
As far as I know this event should never be issued for any device that
isn't a net device. If this was happening, it would mean that either
qemu or libvirt had messed up somewhere, and could be an indicator of
larger problems.
> +
> +
> +static void
> +qemuMonitorJSONHandleNicRxFilterChanged(qemuMonitorPtr mon,
> virJSONValuePtr data)
> +{
> + const char *name;
> +
> + if (!(name = virJSONValueObjectGetString(data, "name"))) {
> + VIR_WARN("missing device in NIC_RX_FILTER_CHANGED event");
> + return;
> + }
The device path is also sent with the event. It may be that data
element is useless with regard to subsequent NIC_RX_FILTER_CHANGED
event handling but, for my edification, I am curious as to why you
ignored it.
Because we don't use it in libvirt. We only use the alias (aka "name")