From nobody Wed Jun 24 21:42:03 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 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=1781859642; cv=none; d=zohomail.com; s=zohoarc; b=my1ZG+oz6vtSwzarcoRQhOt16F/4arLOrWrJ8XWm3Q6w5+FMmxakEN0oLmTSC4UFLiEJjvF4O+mhJgAbzVmPi5zDDIchdlhu8JDGWNQ8wMhKpMNUa2OEz3BqlqXZ4Sj3rcGfrjw/7yDc69i6QOUgRJJRO6asVbVx6/gIWUFX39w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781859642; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=nQZGvxGHMCRLvlHgqy1hxE3nMF1BJKvmo3Mbn1o2FCQ=; b=cPm0M1mbwu/dpN6DYuV+rIvaJfBisgRhDB9f0QUQaO7erKnvANDS5IjissofzgitXU5AkALiQnM1KlchrCY+NzJl1UsDUdc62WP2fvJ9lXPGzXVnTu0TTq/Lw5BGUwhnprOq0qbs7Pdw8LICnX9uj0mSiAnER24pPvTYhSEX3eo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 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 [38.145.34.151]) by mx.zohomail.com with SMTPS id 1781859642717232.32301266007187; Fri, 19 Jun 2026 02:00:42 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4C52841C8E; Fri, 19 Jun 2026 05:00:41 -0400 (EDT) Received: from [172.19.199.7] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id F3C2E41D40; Fri, 19 Jun 2026 04:59:32 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id AD43541C62; Fri, 19 Jun 2026 04:59:23 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 12BE041D55 for ; Fri, 19 Jun 2026 04:58:42 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-19-oK1980BZNeO0X9if63SZng-1; Fri, 19 Jun 2026 04:58:40 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E7A5719560BB for ; Fri, 19 Jun 2026 08:58:39 +0000 (UTC) Received: from rsmigiel-thinkpadx1carbongen11-remote-csb.redhat.com (unknown [10.44.49.231]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 969C71956088; Fri, 19 Jun 2026 08:58:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,SPF_HELO_PASS autolearn=no autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1781859522; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nQZGvxGHMCRLvlHgqy1hxE3nMF1BJKvmo3Mbn1o2FCQ=; b=TF8AX9NdZqxqoMMR4V/vm0dzSwkVPh5MsXCUjG0u8K4hA0renW20K24cK4HVsjDP5T0eZk L/oM1J70/re/4+DEw1NjPK2IfGKfX2WneSKjwfe+177lE+51yBB5nv6N49LFjjsKPYluEd Srh06JJx208mzU46SMgvdBvgV3ivyqs= X-MC-Unique: oK1980BZNeO0X9if63SZng-1 X-Mimecast-MFC-AGG-ID: oK1980BZNeO0X9if63SZng_1781859520 To: devel@lists.libvirt.org Subject: [PATCH v3] lxc: Assign aliases to filesystem and network devices Date: Fri, 19 Jun 2026 10:56:02 +0200 Message-ID: <254efee38bbfaef9470f165c098324d05e03bb9f.1781859361.git.rsmigiel@redhat.com> In-Reply-To: <20260619085812.574723-1-rsmigiel@redhat.com> References: <20260619085812.574723-1-rsmigiel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: mAgwFECRWe69sZ52G8jQ4np-NQmozW7B3vcProI05gM_1781859520 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 6R6BQE76JBV3KPSCBWFDBS4UUSPV2CY2 X-Message-ID-Hash: 6R6BQE76JBV3KPSCBWFDBS4UUSPV2CY2 X-MailFrom: rsmigiel@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Radoslaw Smigielski X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: =?utf-8?q?Rados=C5=82aw_=C5=9Amigielski_via_Devel?= Reply-To: rsmigiel@redhat.com X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1781859644450158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Radoslaw Smigielski LXC domains did not assign device aliases to filesystem and network interface during domain startup. Only console devices received aliases. This change introduces two new functions: - virLXCAssignDeviceNetAlias() - virLXCAssignDeviceFSAlias() These functions scan existing devices to find the next available device index. Also ensure correct alias assignment after network and block device hotplug/unplug operations when a gap can be introduced in device numbering. The new functions are called during: - domain startup virLXCProcessStart() - device hotplug lxcDomainAttachDeviceNetLive() Signed-off-by: Radoslaw Smigielski --- src/lxc/lxc_domain.c | 59 +++++++++++++++++++++++++++++++++++++++++++ src/lxc/lxc_domain.h | 8 ++++++ src/lxc/lxc_driver.c | 3 +++ src/lxc/lxc_process.c | 8 ++++++ 4 files changed, 78 insertions(+) diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index afd8d6e9805f..5326c9852073 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -25,6 +25,7 @@ =20 #include "virlog.h" #include "virerror.h" +#include "virstring.h" #include "virtime.h" #include "virsystemd.h" #include "virinitctl.h" @@ -375,3 +376,61 @@ virLXCDomainSetRunlevel(virDomainObj *vm, g_clear_pointer(&data.st_valid, g_free); return ret; } + + +void +virLXCAssignDeviceNetAlias(virDomainDef *def, + virDomainNetDef *net) +{ + size_t i; + int idx =3D 0; + + if (net->info.alias) + return; + + for (i =3D 0; i < def->nnets; i++) { + int thisidx; + + if (!def->nets[i]->info.alias) + continue; + if (!STRPREFIX(def->nets[i]->info.alias, "net")) + continue; + + if (virStrToLong_i(def->nets[i]->info.alias + 3, NULL, 10, &thisid= x) < 0) + continue; + + if (thisidx >=3D idx) + idx =3D thisidx + 1; + } + + net->info.alias =3D g_strdup_printf("net%d", idx); +} + + +void +virLXCAssignDeviceFSAlias(virDomainDef *def, + virDomainFSDef *fs) +{ + size_t i; + int idx =3D 0; + + if (fs->info.alias) + return; + + for (i =3D 0; i < def->nfss; i++) { + int thisidx; + + if (!def->fss[i]->info.alias) + continue; + if (!STRPREFIX(def->fss[i]->info.alias, "fs")) + continue; + + if (virStrToLong_i(def->fss[i]->info.alias + 2, NULL, 10, &thisidx= ) < 0) + continue; + + if (thisidx >=3D idx) + idx =3D thisidx + 1; + } + + fs->info.alias =3D g_strdup_printf("fs%d", idx); +} diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h index d22c2ea153a5..a66688397968 100644 --- a/src/lxc/lxc_domain.h +++ b/src/lxc/lxc_domain.h @@ -79,3 +79,11 @@ virLXCDomainGetMachineName(virDomainDef *def, pid_t pid); int virLXCDomainSetRunlevel(virDomainObj *vm, int runlevel); + +void +virLXCAssignDeviceNetAlias(virDomainDef *def, + virDomainNetDef *net); + +void +virLXCAssignDeviceFSAlias(virDomainDef *def, + virDomainFSDef *fs); diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index b59c080da908..5be087de922a 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3502,6 +3502,9 @@ lxcDomainAttachDeviceNetLive(virLXCDriver *driver, if (virDomainActualNetDefValidate(net) < 0) return -1; =20 + /* Assign alias to the new network interface */ + virLXCAssignDeviceNetAlias(vm->def, net); + actualType =3D virDomainNetGetActualType(net); =20 switch (actualType) { diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index cac49af6e2b2..466ce07afd03 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -1349,6 +1349,14 @@ int virLXCProcessStart(virLXCDriver * driver, vm->def->consoles[i]->info.alias =3D g_strdup_printf("console%zu",= i); } =20 + VIR_DEBUG("Setting up filesystem aliases"); + for (i =3D 0; i < vm->def->nfss; i++) + virLXCAssignDeviceFSAlias(vm->def, vm->def->fss[i]); + + VIR_DEBUG("Setting up network interface aliases"); + for (i =3D 0; i < vm->def->nnets; i++) + virLXCAssignDeviceNetAlias(vm->def, vm->def->nets[i]); + VIR_DEBUG("Setting up Interfaces"); if (virLXCProcessSetupInterfaces(driver, vm->def, &veths) < 0) goto cleanup; --=20 2.54.0