From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 8A8441FF13B for ; Wed, 03 Jun 2026 17:55:32 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B470612B6A; Wed, 3 Jun 2026 17:55:30 +0200 (CEST) From: Lukas Sichert To: pve-devel@lists.proxmox.com Subject: [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit Date: Wed, 3 Jun 2026 17:55:20 +0200 Message-ID: <20260603155521.125175-1-l.sichert@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1780502089450 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.315 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: GLRQ6XPZQUGGP5THWSCKUN4BTLA36ULW X-Message-ID-Hash: GLRQ6XPZQUGGP5THWSCKUN4BTLA36ULW X-MailFrom: l.sichert@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 CC: Lukas Sichert X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: BGP unnumbered interfaces have neither IPv4 nor IPv6 addresses, but the base interface panel always added the IPv4 column and only allowed child panels to disable IPv6. This meant BGP still exposed an IPv4 field and would also serialize existing IPv4 and IPv6 data from the node interface record. When submitting such an interface, the backend rejects the unsupported property with: 'format error interfaces[0].ip: property is not defined in schema' Add a 'hasIpv4Support' flag matching the existing IPv6 handling and use both support flags to skip unsupported IP columns and properties during serialization. Signed-off-by: Lukas Sichert --- www/manager6/sdn/fabrics/InterfacePanel.js | 37 ++++++++++++------- .../sdn/fabrics/bgp/InterfacePanel.js | 11 +----- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/www/manager6/sdn/fabrics/InterfacePanel.js b/www/manager6/sdn/fabrics/InterfacePanel.js index f07e7859..e325340f 100644 --- a/www/manager6/sdn/fabrics/InterfacePanel.js +++ b/www/manager6/sdn/fabrics/InterfacePanel.js @@ -6,6 +6,7 @@ Ext.define('PVE.sdn.Fabric.InterfacePanel', { nodeInterfaces: {}, + hasIpv4Support: true, hasIpv6Support: true, selModel: { @@ -59,19 +60,6 @@ Ext.define('PVE.sdn.Fabric.InterfacePanel', { dataIndex: 'type', flex: 1, }, - { - text: gettext('IPv4'), - xtype: 'widgetcolumn', - dataIndex: 'ip', - flex: 1, - widget: { - xtype: 'proxmoxtextfield', - isFormField: false, - bind: { - disabled: '{record.isDisabled}', - }, - }, - }, ], additionalColumns: [], @@ -112,6 +100,23 @@ Ext.define('PVE.sdn.Fabric.InterfacePanel', { let columns = [...me.commonColumns]; + + if (me.hasIpv4Support) { + columns.push({ + text: gettext('IPv4'), + xtype: 'widgetcolumn', + dataIndex: 'ip', + flex: 1, + widget: { + xtype: 'proxmoxtextfield', + isFormField: false, + bind: { + disabled: '{record.isDisabled}', + }, + }, + }); + } + if (me.hasIpv6Support) { columns.push({ text: gettext('IPv6'), @@ -174,7 +179,11 @@ Ext.define('PVE.sdn.Fabric.InterfacePanel', { continue; } - if (['type', 'isDisabled'].includes(key)) { + if ( + ['type', 'isDisabled'].includes(key) || + (key === 'ip' && !me.hasIpv4Support) || + (key === 'ip6' && !me.hasIpv6Support) + ) { continue; } diff --git a/www/manager6/sdn/fabrics/bgp/InterfacePanel.js b/www/manager6/sdn/fabrics/bgp/InterfacePanel.js index c7ac7627..fd5e6f4b 100644 --- a/www/manager6/sdn/fabrics/bgp/InterfacePanel.js +++ b/www/manager6/sdn/fabrics/bgp/InterfacePanel.js @@ -1,15 +1,6 @@ Ext.define('PVE.sdn.Fabric.Bgp.InterfacePanel', { extend: 'PVE.sdn.Fabric.InterfacePanel', + hasIpv4Support: false, hasIpv6Support: false, - - // BGP unnumbered interfaces have no IP - override commonColumns to - // exclude the IP column that the base class defines. - initComponent: function () { - let me = this; - - me.commonColumns = me.commonColumns.filter((col) => col.dataIndex !== 'ip'); - - me.callParent(); - }, }); -- 2.47.3