From: "Shannon Sterz" <s.sterz@proxmox.com>
To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH widget-toolkit v3] fix #3892: Network: add bridge vids field for bridge_vids
Date: Fri, 26 Jul 2024 14:22:19 +0200 [thread overview]
Message-ID: <D2ZGTTIBD4PC.2JZIEZ35LOL91@proxmox.com> (raw)
In-Reply-To: <20240703080147.81154-5-a.lauterer@proxmox.com>
On Wed Jul 3, 2024 at 10:01 AM CEST, Aaron Lauterer wrote:
> The new optional bridge_vids field allows to set that property via the
> GUI. Since the backend needs to support it, the field needs to be
> explicitly enabled.
>
> For now, Proxmox VE (PVE) is the use case.
>
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
> changes since v2:
> * added validation code following how it is implemented in the API
>
> src/node/NetworkEdit.js | 62 +++++++++++++++++++++++++++++++++++++++++
> src/node/NetworkView.js | 5 ++++
> 2 files changed, 67 insertions(+)
>
> diff --git a/src/node/NetworkEdit.js b/src/node/NetworkEdit.js
> index 27c1baf..8c1b135 100644
> --- a/src/node/NetworkEdit.js
> +++ b/src/node/NetworkEdit.js
> @@ -2,6 +2,9 @@ Ext.define('Proxmox.node.NetworkEdit', {
> extend: 'Proxmox.window.Edit',
> alias: ['widget.proxmoxNodeNetworkEdit'],
>
> + // Enable to show the VLAN ID field
> + bridge_set_vids: false,
> +
> initComponent: function() {
> let me = this;
>
> @@ -57,11 +60,67 @@ Ext.define('Proxmox.node.NetworkEdit', {
> }
>
> if (me.iftype === 'bridge') {
> + let vids = Ext.create('Ext.form.field.Text', {
> + fieldLabel: gettext('Bridge VIDS'),
> + name: 'bridge_vids',
> + emptyText: '2-4094',
> + disabled: true,
> + autoEl: {
> + tag: 'div',
> + 'data-qtip': gettext('Space-separated list of VLANs and ranges, for example: 2 4 100-200'),
> + },
> + validator: function(value) {
> + if (!value) { return true; } // Empty
nit: our js style guide state that single line ifs should be avoided
> + let result = true;
> +
> + let vid_list = value.split(' ');
> +
> + let checkVid = function(tag) {
> + if (tag < 2 || tag > 4094) {
> + return `not a valid VLAN ID '${tag}'`;
> + }
> + return true;
> + };
> +
> + for (const vid of vid_list) {
> + if (!vid) {
> + continue;
> + }
> + let res = vid.match(/^(\d+)([-](\d+))?$/i);
nit: see my comment for patch 2.
> + if (!res) {
> + return `not a valid VLAN configuration '${vid}'`;
> + }
> + let start = Number(res[1]);
> + let end = Number(res[3]);
> +
> + if (start) {
> + result = checkVid(start);
> + if (result !== true) { return result; }
same here...
> + }
> + if (end) {
> + result = checkVid(end);
> + if (result !== true) { return result; }
and here. it might be more elegant to do this:
let invalidVid = function(tag) {
if (!isNaN(tag) && (tag < 2 || tag > 4094)) {
return `not a valid VLAN ID '${tag}'`;
}
return false;
};
// [..]
if (res = invalidVid(start)) {
return res;
}
if (res = invalidVid(end)) {
return res;
}
`Number(res[n])` should return `NaN` if `res[n]` is undefined, this
shouldn't be the case for start ever but is relevant for `end`.
> + }
> +
> + if (start >= end) {
> + return `VID range must go from lower to higher tag: '${vid}'`;
> + }
> + }
> + return true;
> + },
> + });
> column2.push({
> xtype: 'proxmoxcheckbox',
> fieldLabel: gettext('VLAN aware'),
> name: 'bridge_vlan_aware',
> deleteEmpty: !me.isCreate,
> + listeners: {
> + change: function(f, newVal) {
> + if (me.bridge_set_vids) {
> + vids.setDisabled(!newVal);
> + }
> + },
> + },
> });
> column2.push({
> xtype: 'textfield',
> @@ -72,6 +131,9 @@ Ext.define('Proxmox.node.NetworkEdit', {
> 'data-qtip': gettext('Space-separated list of interfaces, for example: enp0s0 enp1s0'),
> },
> });
> + if (me.bridge_set_vids) {
> + advancedColumn2.push(vids);
> + }
> } else if (me.iftype === 'OVSBridge') {
> column2.push({
> xtype: 'textfield',
> diff --git a/src/node/NetworkView.js b/src/node/NetworkView.js
> index 1d67ac8..c08cbfa 100644
> --- a/src/node/NetworkView.js
> +++ b/src/node/NetworkView.js
> @@ -33,6 +33,9 @@ Ext.define('Proxmox.node.NetworkView', {
>
> showApplyBtn: false,
>
> + // decides if VLAN IDs field for bridges is shown, depends on the product if needed
> + bridge_set_vids: false,
> +
> initComponent: function() {
> let me = this;
>
> @@ -100,6 +103,7 @@ Ext.define('Proxmox.node.NetworkView', {
> nodename: me.nodename,
> iface: rec.data.iface,
> iftype: rec.data.type,
> + bridge_set_vids: me.bridge_set_vids,
> listeners: {
> destroy: () => reload(),
> },
> @@ -170,6 +174,7 @@ Ext.define('Proxmox.node.NetworkView', {
> nodename: me.nodename,
> iftype: iType,
> iface_default: findNextFreeInterfaceId(iDefault ?? iType),
> + bridge_set_vids: me.bridge_set_vids,
> onlineHelp: 'sysadmin_network_configuration',
> listeners: {
> destroy: () => reload(),
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2024-07-26 12:22 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-03 8:01 [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Aaron Lauterer
2024-07-03 8:01 ` [pve-devel] [PATCH common v3 1/3] tools: add check_list_empty function Aaron Lauterer
2024-07-03 8:01 ` [pve-devel] [PATCH common v3 2/3] fix #3893: network: add vlan id and range parameter definitions Aaron Lauterer
2024-07-26 12:22 ` Shannon Sterz
2024-07-03 8:01 ` [pve-devel] [PATCH common v3 3/3] inotify: interfaces: make sure bridge_vids use space as separator Aaron Lauterer
2024-07-03 8:01 ` [pve-devel] [PATCH widget-toolkit v3] fix #3892: Network: add bridge vids field for bridge_vids Aaron Lauterer
2024-07-26 12:22 ` Shannon Sterz [this message]
2024-07-29 10:25 ` Aaron Lauterer
2024-07-29 10:42 ` Shannon Sterz
2024-07-03 8:01 ` [pve-devel] [PATCH manager v3 5/6] fix #3893: api: network: add bridge_vids parameter Aaron Lauterer
2024-07-26 12:23 ` Shannon Sterz
2024-07-03 8:01 ` [pve-devel] [PATCH manager v3 6/6] fix #3893: ui: network: enable bridge_vids field Aaron Lauterer
2024-07-23 11:24 ` [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Stefan Hanreich
2024-07-23 13:33 ` [pve-devel] [PATCH widget-toolkit v3 7/6 follow-up] Network: add explanation for bridge vids field Aaron Lauterer
2024-07-26 12:23 ` Shannon Sterz
2024-07-26 12:22 ` [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Shannon Sterz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D2ZGTTIBD4PC.2JZIEZ35LOL91@proxmox.com \
--to=s.sterz@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox