* [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit
@ 2026-06-03 15:55 Lukas Sichert
2026-06-05 8:04 ` Hannes Laimer
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Lukas Sichert @ 2026-06-03 15:55 UTC (permalink / raw)
To: pve-devel; +Cc: Lukas Sichert
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 <l.sichert@proxmox.com>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit
2026-06-03 15:55 [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit Lukas Sichert
@ 2026-06-05 8:04 ` Hannes Laimer
2026-07-14 8:23 ` Dominik Csapak
2026-07-15 8:18 ` superseded: " Lukas Sichert
2 siblings, 0 replies; 5+ messages in thread
From: Hannes Laimer @ 2026-06-05 8:04 UTC (permalink / raw)
To: Lukas Sichert, pve-devel
LGTM! could reproduce the problem, and this does work as advertised,
consider this:
Tested-by: Hannes Laimer <h.laimer@proxmox.com>
Reviewed-by: Hannes Laimer <h.laimer@proxmox.com>
On 2026-06-03 17:54, Lukas Sichert wrote:
> 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 <l.sichert@proxmox.com>
> ---
> 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();
> - },
> });
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit
2026-06-03 15:55 [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit Lukas Sichert
2026-06-05 8:04 ` Hannes Laimer
@ 2026-07-14 8:23 ` Dominik Csapak
2026-07-14 13:54 ` Lukas Sichert
2026-07-15 8:18 ` superseded: " Lukas Sichert
2 siblings, 1 reply; 5+ messages in thread
From: Dominik Csapak @ 2026-07-14 8:23 UTC (permalink / raw)
To: Lukas Sichert, pve-devel
wanted to apply this already, but during testing i noticed
that even without the patch, we don't have an ipv4 column here, so
i was confused by the commit message.
It turns out, while this patch indeed fixes the error, the rationale
in the commmit message is not precise and patch seems to conflate two
things here (correct me if i'm missing something here)
the panel never got a field via the column, because those got
filtered out via 'hasIpv6Support' or in the initComponent you removed
so the stray 'ip' comes from the overall store, not the columns
(which get set in 'setValue')
so this patch does two things here:
it moves the removal of the ip column from the initcomponent
to a config (which is fine IMO, but does not change the actual
behavior)
and it adds a manual filter in 'getValue' to skip the ip and ip6 field
depending on this config -> this is what actually fixes the issue
i think this should be split into two patch that reflect these two
changes, with the proper commit messages.
(though we can do it in one commmit, but then the message must explain
the issue properly)
the code itself LGTM
On 6/3/26 5:54 PM, Lukas Sichert wrote:
> 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 <l.sichert@proxmox.com>
> ---
> 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();
> - },
> });
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit
2026-07-14 8:23 ` Dominik Csapak
@ 2026-07-14 13:54 ` Lukas Sichert
0 siblings, 0 replies; 5+ messages in thread
From: Lukas Sichert @ 2026-07-14 13:54 UTC (permalink / raw)
To: Dominik Csapak, pve-devel
Thanks for looking into this. I will send a v3. Some comments inline:
On 2026-07-14 10:23, Dominik Csapak <d.csapak@proxmox.com> wrote:
> wanted to apply this already, but during testing i noticed
> that even without the patch, we don't have an ipv4 column here, so
> i was confused by the commit message.
You are right, the wording is very misleading here. The base panel
always adds an IPv4 column, but it gets removed with 'me.commonColumns =
me.commonColumns.filter((col) => col.dataIndex !== 'ip');' in
bgp/InterfacePanel.js, so it is not actually there anymore.
I still think it is cleaner to make IPv4 column support configurable,
just like IPv6 column support already is. That part is only a
behavior-preserving cleanup though.
> It turns out, while this patch indeed fixes the error, the rationale
> in the commmit message is not precise and patch seems to conflate two
> things here (correct me if i'm missing something here)
>
> the panel never got a field via the column, because those got
> filtered out via 'hasIpv6Support' or in the initComponent you removed
>
> so the stray 'ip' comes from the overall store, not the columns
> (which get set in 'setValue')
>
> so this patch does two things here:
>
> it moves the removal of the ip column from the initcomponent
> to a config (which is fine IMO, but does not change the actual
> behavior)
>
> and it adds a manual filter in 'getValue' to skip the ip and ip6 field
> depending on this config -> this is what actually fixes the issue
>
>
> i think this should be split into two patch that reflect these two
> changes, with the proper commit messages.
> (though we can do it in one commmit, but then the message must explain
> the issue properly)
>
> the code itself LGTM
>
It absolutely makes sense to do this in two patches. I will split this
into a behavior-preserving cleanup for the IPv4 column handling and a
separate fix for filtering unsupported `ip`/`ip6` properties in
`getValue()` for v3.
^ permalink raw reply [flat|nested] 5+ messages in thread
* superseded: [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit
2026-06-03 15:55 [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit Lukas Sichert
2026-06-05 8:04 ` Hannes Laimer
2026-07-14 8:23 ` Dominik Csapak
@ 2026-07-15 8:18 ` Lukas Sichert
2 siblings, 0 replies; 5+ messages in thread
From: Lukas Sichert @ 2026-07-15 8:18 UTC (permalink / raw)
To: Lukas Sichert, pve-devel
superseded-by v3:
https://lore.proxmox.com/all/20260715081519.29721-1-l.sichert@proxmox.com/T/#t
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-15 8:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-03 15:55 [PATCH manager v2] ui: fabrics: skip unsupported interface properties on submit Lukas Sichert
2026-06-05 8:04 ` Hannes Laimer
2026-07-14 8:23 ` Dominik Csapak
2026-07-14 13:54 ` Lukas Sichert
2026-07-15 8:18 ` superseded: " Lukas Sichert
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.