From nobody Tue Dec 16 16:23:43 2025 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=1742894429; cv=none; d=zohomail.com; s=zohoarc; b=AxDekN6JXW1TPJW9oH5m2f7uRRri9xxyqXf18gCN8X+gCy1ZDahQL02F+2iWoS7ELoDNj2tayKDs7qhCvKiOw60xSm/BUdElb0i+4irExfnSslyUDd0Vb7ksTfDiHdzAGtWF31ZZPDKViMpbgJuKdEZW9rSKerxqFLZW240ZjI8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1742894429; 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=LxEp3c1yxb66IsSaj1E6y7dK4N1tuLDvdT13O2Jx51A=; b=LdQ1ipCjL7+ZkLqD3HlS4MftZWhrGp3RsFQNL4ikOl5kIW1UqwbFZNJkpnMVKNN3LPZ/I3BimDaOi6LTQj8bZc7CUWQX18RL7BVs8BUtKfS4eZA2745VJKJEOfa1BkYkFPQSAYGJw5JeBX91b1yOQzkyMHsuIWdSlFJo8mOyzcI= 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 1742894429879109.62266652618416; Tue, 25 Mar 2025 02:20:29 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E93A5152C; Tue, 25 Mar 2025 05:20:28 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7E51C1557; Tue, 25 Mar 2025 05:18:35 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 95F9B1549; Tue, 25 Mar 2025 05:18:30 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.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 88812152D for ; Tue, 25 Mar 2025 05:18:24 -0400 (EDT) Received: from mx-prod-mc-06.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-9-tDHslBIKP22tZUkRZF79yw-1; Tue, 25 Mar 2025 05:18:22 -0400 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 83D78180035C for ; Tue, 25 Mar 2025 09:18:21 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.3.236]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CEF8F1955BC1 for ; Tue, 25 Mar 2025 09:18:20 +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_H5, RCVD_IN_MSPIKE_WL,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=1742894304; 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=EWQtkhj2RQbsBHwSnAYkn/DmGHGOjsUUvQ8uxF1molc=; b=AGP08wKk0m/5Yiy4Yx2EoSVUo7TN1s1Y52b9NpHmkCclRrMuQhS15HfbBQxCQPE6PNhJnX f+55nv97BGmW5n3qr6XNaFoRve3r8V9bAZJKxvWyfkhpcETeZ/ifKPrYoMSGMDSFHJnVhS xjQ/blSfQ5dATh2g6bvWT+6/Gf3o47A= X-MC-Unique: tDHslBIKP22tZUkRZF79yw-1 X-Mimecast-MFC-AGG-ID: tDHslBIKP22tZUkRZF79yw_1742894301 To: devel@lists.libvirt.org Subject: [PATCH v3 3/3] qemu: Emit NIC_MAC_CHANGE event Date: Tue, 25 Mar 2025 10:18:13 +0100 Message-ID: <2a6bd6c9350a01f8172e2f78f006a79a1d3dfdd9.1742894007.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: BU6dE-8mITu4tJpikT0TXZJ0WKA5tVCJkkgT2v_cMzc_1742894301 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AFF6TXRSF5KCLFEIEZ2EO3ZYGAK3DI2I X-Message-ID-Hash: AFF6TXRSF5KCLFEIEZ2EO3ZYGAK3DI2I 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: 1742894431527019100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik 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 7f89b193f9..e45eef4787 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11088,7 +11088,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; @@ -11145,6 +11146,19 @@ qemuDomainSyncRxFilter(virDomainObj *vm, oldMac =3D &def->mac; =20 if (virMacAddrCmp(oldMac, &guestFilter->mac)) { + if (event) { + char oldMACStr[VIR_MAC_STRING_BUFLEN] =3D { 0 }; + char newMACStr[VIR_MAC_STRING_BUFLEN] =3D { 0 }; + + virMacAddrFormat(oldMac, oldMACStr); + virMacAddrFormat(&guestFilter->mac, newMACStr); + + *event =3D virDomainEventNICMACChangeNewFromObj(vm, + def->info.alias, + oldMACStr, + newMACStr); + } + /* Reflect changed MAC address in the domain XML. */ if (virMacAddrCmp(&def->mac, &guestFilter->mac)) { if (!def->currentAddress) { diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index e3b206763c..70e1fb187f 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1132,7 +1132,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 20b94ccdf0..1be32c01b1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3679,9 +3679,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 @@ -3726,11 +3728,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 @@ -4074,7 +4077,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 c3eeadfc3b..842f559439 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8362,7 +8362,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