From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 2621A1FF0B7 for ; Tue, 25 Aug 2026 13:02:50 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 958E5215C8; Tue, 25 Aug 2026 13:02:43 +0200 (CEST) From: Nicolas Frey To: pve-devel@lists.proxmox.com Subject: [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues Date: Tue, 25 Aug 2026 13:02:35 +0200 Message-ID: <20260825110238.215790-2-n.frey@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260825110238.215790-1-n.frey@proxmox.com> References: <20260825110238.215790-1-n.frey@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 AWL -1.133 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 1.274 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Message-ID-Hash: OXROSBLJ7VAVRNK73UHTPHK5RVN544R2 X-Message-ID-Hash: OXROSBLJ7VAVRNK73UHTPHK5RVN544R2 X-MailFrom: nfrey@miso.proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: based on the known issues as seen on the wiki. If warnVirtio is true, the filename is matched against "virtio-win-x.x.x.iso" and checks whether the version number in the filename is in any "from - to" version range in `virtioIssues`. Signed-off-by: Nicolas Frey --- www/manager6/form/IsoSelector.js | 68 +++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js index b2d94ed3..ae6b8d65 100644 --- a/www/manager6/form/IsoSelector.js +++ b/www/manager6/form/IsoSelector.js @@ -10,6 +10,7 @@ Ext.define('PVE.form.IsoSelector', { nodename: undefined, insideWizard: false, + warnVirtio: false, labelWidth: undefined, labelAlign: 'right', @@ -63,6 +64,61 @@ Ext.define('PVE.form.IsoSelector', { return me.callParent([disabled]); }, + virtioIssues: [ + { + from: '0.1.215', + to: '0.1.262', + message: gettext('Upgrading to version 0.1.266 or newer is recommended.'), + }, + { + from: '0.1.285', + to: '0.1.285', + message: gettext('Downgrading to version 0.1.271 is recommended.'), + }, + ], + + checkVirtioVersion: function (filename) { + let me = this; + let warningBox = me.lookup('virtioWarning'); + + const compareVersions = (a, b) => { + let pa = a.split('.').map(Number); + let pb = b.split('.').map(Number); + let max = Math.max(pa.length, pb.length); + for (let i = 0; i < max; i++) { + let cmp = (pa[i] || 0) - (pb[i] || 0); + if (cmp !== 0) { + return cmp; + } + } + return 0; + }; + + let match = (filename || '').match(/virtio-win[_-](\d+\.\d+\.\d+)/i); + let version = match && match[1]; + let issue = + version && + me.virtioIssues.find( + (i) => compareVersions(version, i.from) >= 0 && compareVersions(version, i.to) <= 0, + ); + + if (!issue) { + warningBox.setHtml(''); + return; + } + + warningBox.setHtml( + ' ' + + gettext('This VirtIO driver version is known to') + + ' ' + + `${gettext( + 'cause issues', + )}` + + '. ' + + issue.message, + ); + }, + referenceHolder: true, items: [ @@ -105,10 +161,18 @@ Ext.define('PVE.form.IsoSelector', { }, allowBlank: false, listeners: { - change: function () { - this.up('pveIsoSelector').checkChange(); + change: function (_field, value) { + let selector = this.up('pveIsoSelector'); + if (selector.warnVirtio) { + selector.checkVirtioVersion(value); + } + selector.checkChange(); }, }, }, + { + xtype: 'displayfield', + reference: 'virtioWarning', + }, ], }); -- 2.47.3