From nobody Mon Feb 9 02:21:34 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1742211073; cv=none; d=zohomail.com; s=zohoarc; b=CHSrd+QTzGiW0XfVJXRnmAuwI+t9v4iOfqKhrDwt0Zqcv0fkei+IzBMvJpXRD4D/xuvo6Wfes8UP0ym38bdHJba7Ak/oYaFauRqoVznLX0n4+utnxsJB0Mkw2anapeSjfrTxuJn3GwHN3hgRFXViY/Mz8EHrRIqKb8AIeEFnMEc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742211073; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=Hsr1pJojKmswNG14QTe3iBtTsjDu7DoFP/3XHV1T6h8=; b=HFCaH6cnBXu6Yp8sIRm5OdA2i5h+rS3O5ukDbYnAdBRl863nwp+tYURIni++QIwFsKHpeE/6ZvFYodX4CsXy59RP5ut7P5mXMR8lkYyi8YHe9P+IUinmftGY7XXjES+Kishos61wuskitM3t4arXxJqrcu4Y+jIMto+v8RZOr1g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1742211073357144.39211466181212; Mon, 17 Mar 2025 04:31:13 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5832B175C; Mon, 17 Mar 2025 07:31:12 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 59288243A; Mon, 17 Mar 2025 07:29:08 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D45B0231D; Mon, 17 Mar 2025 07:28:59 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5B9B0231C for ; Mon, 17 Mar 2025 07:28:59 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-648-keM45JMFP0WtB6d3BJDF2A-1; Mon, 17 Mar 2025 07:28:57 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EEEFE180AF52 for ; Mon, 17 Mar 2025 11:28:56 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.3.236]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 413F930001A2 for ; Mon, 17 Mar 2025 11:28:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1742210939; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gnfBL4e7LSasl23S6tj9uP9/roDE+nSdoBLzcbniX+Q=; b=XceGviyHxNslqpbzIX/TnEoMwgrP30ycgG0QCd2AURClWyXpaTbgG0P0/MYEpNzULidrX4 k7ETph7Pnc/+SLGBjAsxKO9/ukItH1hYKmfmAmfev3AFe/IyIFlHYcAYbIsFgnoaLe1F4v nwanSJa2/J7cBjX0bwRA9N6f+m2P9nA= X-MC-Unique: keM45JMFP0WtB6d3BJDF2A-1 X-Mimecast-MFC-AGG-ID: keM45JMFP0WtB6d3BJDF2A_1742210937 To: devel@lists.libvirt.org Subject: [PATCH 3/3] qemu: Emit NIC_MAC_CHANGE event Date: Mon, 17 Mar 2025 12:28:50 +0100 Message-ID: <294cfd1e0f3aa5e55272920509a483728372d308.1742210766.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: B3YAX1KmQBobKdmYb7e_VqvlyCvdgemiztVe5frSfzw_1742210937 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 5OCG4OTT3QPYGFOWTE36HITH5EDPQQIO X-Message-ID-Hash: 5OCG4OTT3QPYGFOWTE36HITH5EDPQQIO X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1742211074867019100 Content-Type: text/plain; charset="utf-8"; x-default="true" So far, we only process NIC_RX_FILTER_CHANGED event when the corresponding device has 'trustGuestRxFilters' enabled. And the event is emitted only for virtio model. IOW, this is fairly limited situation and other scenarios don't emit any event (e.g. change of MAC address on a PCI passthrough device). Resolves: https://issues.redhat.com/browse/RHEL-7035 Signed-off-by: Michal Privoznik --- src/qemu/qemu_domain.c | 16 +++++++++++++++- src/qemu/qemu_domain.h | 3 ++- src/qemu/qemu_driver.c | 9 ++++++--- src/qemu/qemu_process.c | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 47ae59d408..9dc0a03849 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11018,7 +11018,8 @@ syncNicRxFilterMulticast(char *ifname, int qemuDomainSyncRxFilter(virDomainObj *vm, virDomainNetDef *def, - virDomainAsyncJob asyncJob) + virDomainAsyncJob asyncJob, + virObjectEvent **event) { qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virNetDevRxFilter) guestFilter =3D NULL; @@ -11085,6 +11086,19 @@ qemuDomainSyncRxFilter(virDomainObj *vm, } else { VIR_FREE(def->guestAddress); } + + if (event) { + char oldMAC[VIR_MAC_STRING_BUFLEN] =3D { 0 }; + char newMAC[VIR_MAC_STRING_BUFLEN] =3D { 0 }; + + virMacAddrFormat(&def->mac, oldMAC); + virMacAddrFormat(&guestFilter->mac, newMAC); + + *event =3D virDomainEventNICMACChangeNewFromObj(vm, + def->info.alias, + oldMAC, + newMAC); + } } =20 return 0; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 8e53a270a7..f3cff49e96 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1128,7 +1128,8 @@ qemuDomainRefreshStatsSchema(virDomainObj *dom); int qemuDomainSyncRxFilter(virDomainObj *vm, virDomainNetDef *def, - virDomainAsyncJob asyncJob); + virDomainAsyncJob asyncJob, + virObjectEvent **event); =20 int qemuDomainSchedCoreStart(virQEMUDriverConfig *cfg, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index a4866450fc..ab1e63a46a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3667,9 +3667,11 @@ processNetdevStreamDisconnectedEvent(virDomainObj *v= m, =20 =20 static void -processNicRxFilterChangedEvent(virDomainObj *vm, +processNicRxFilterChangedEvent(virQEMUDriver *driver, + virDomainObj *vm, const char *devAlias) { + virObjectEvent *event =3D NULL; virDomainDeviceDef dev; virDomainNetDef *def; =20 @@ -3714,11 +3716,12 @@ processNicRxFilterChangedEvent(virDomainObj *vm, VIR_DEBUG("process NIC_RX_FILTER_CHANGED event for network " "device %s in domain %s", def->info.alias, vm->def->name); =20 - if (qemuDomainSyncRxFilter(vm, def, VIR_ASYNC_JOB_NONE) < 0) + if (qemuDomainSyncRxFilter(vm, def, VIR_ASYNC_JOB_NONE, &event) < 0) goto endjob; =20 endjob: virDomainObjEndJob(vm); + virObjectEventStateQueue(driver->domainEventState, event); } =20 =20 @@ -4062,7 +4065,7 @@ static void qemuProcessEventHandler(void *data, void = *opaque) processNetdevStreamDisconnectedEvent(vm, processEvent->data); break; case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED: - processNicRxFilterChangedEvent(vm, processEvent->data); + processNicRxFilterChangedEvent(driver, vm, processEvent->data); break; case QEMU_PROCESS_EVENT_SERIAL_CHANGED: processSerialChangedEvent(driver, vm, processEvent->data, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0173fbe3be..1d7579509a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8199,7 +8199,7 @@ qemuProcessRefreshRxFilters(virDomainObj *vm, continue; } =20 - if (qemuDomainSyncRxFilter(vm, def, asyncJob) < 0) + if (qemuDomainSyncRxFilter(vm, def, asyncJob, NULL) < 0) return -1; } =20 --=20 2.48.1