]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - node/NetworkEdit.js
node/net: add onlineHelp reference to interface add windows
[proxmox-widget-toolkit.git] / node / NetworkEdit.js
index f925e0d14bb220e8aaee4f4c794dfa03a6bcfe93..b2cb2e489879886beae4549bd257194093a9b881 100644 (file)
@@ -13,7 +13,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
            throw "no network device type specified";
        }
 
-       me.create = !me.iface;
+       me.isCreate = !me.iface;
 
        var iface_vtype;
 
@@ -21,10 +21,10 @@ Ext.define('Proxmox.node.NetworkEdit', {
            iface_vtype = 'BridgeName';
        } else if (me.iftype === 'bond') {
            iface_vtype = 'BondName';
-       } else if (me.iftype === 'eth' && !me.create) {
-           iface_vtype = 'InterfaceName';
-       } else if (me.iftype === 'vlan' && !me.create) {
+       } else if (me.iftype === 'eth' && !me.isCreate) {
            iface_vtype = 'InterfaceName';
+       } else if (me.iftype === 'vlan') {
+           iface_vtype = 'VlanName';
        } else if (me.iftype === 'OVSBridge') {
            iface_vtype = 'BridgeName';
        } else if (me.iftype === 'OVSBond') {
@@ -40,25 +40,27 @@ Ext.define('Proxmox.node.NetworkEdit', {
 
        me.subject = Proxmox.Utils.render_network_iface_type(me.iftype);
 
-       var column2 = [];
+       let column1 = [],
+           column2 = [],
+           advancedColumn1 = [],
+           advancedColumn2 = [];
 
-       if (!(me.iftype === 'OVSIntPort' || me.iftype === 'OVSPort' ||
-             me.iftype === 'OVSBond')) {
+       if (!(me.iftype === 'OVSIntPort' || me.iftype === 'OVSPort' || me.iftype === 'OVSBond')) {
            column2.push({
-               xtype: 'pvecheckbox',
+               xtype: 'proxmoxcheckbox',
                fieldLabel: gettext('Autostart'),
                name: 'autostart',
                uncheckedValue: 0,
-               checked: me.create ? true : undefined
+               checked: me.isCreate ? true : undefined
            });
        }
 
        if (me.iftype === 'bridge') {
            column2.push({
-               xtype: 'pvecheckbox',
+               xtype: 'proxmoxcheckbox',
                fieldLabel: gettext('VLAN aware'),
                name: 'bridge_vlan_aware',
-               deleteEmpty: !me.create
+               deleteEmpty: !me.isCreate
            });
            column2.push({
                xtype: 'textfield',
@@ -78,7 +80,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
            });
        } else if (me.iftype === 'OVSPort' || me.iftype === 'OVSIntPort') {
            column2.push({
-               xtype: me.create ? 'PVE.form.BridgeSelector' : 'displayfield',
+               xtype: me.isCreate ? 'PVE.form.BridgeSelector' : 'displayfield',
                fieldLabel: Proxmox.Utils.render_network_iface_type('OVSBridge'),
                allowBlank: false,
                nodename: me.nodename,
@@ -87,7 +89,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
            });
            column2.push({
                xtype: 'pveVlanField',
-               deleteEmpty: !me.create,
+               deleteEmpty: !me.isCreate,
                name: 'ovs_tag',
                value: ''
            });
@@ -96,6 +98,49 @@ Ext.define('Proxmox.node.NetworkEdit', {
                fieldLabel: gettext('OVS options'),
                name: 'ovs_options'
            });
+       } else if (me.iftype === 'vlan') {
+
+           if (!me.isCreate) {
+
+               me.disablevlanid = false;
+               me.disablevlanrawdevice = false;
+               me.vlanrawdevicevalue = '';
+               me.vlanidvalue = '';
+
+               if (Proxmox.Utils.VlanInterface_match.test(me.iface)) {
+                  me.disablevlanid = true;
+                  me.disablevlanrawdevice = true;
+                  var arr = Proxmox.Utils.VlanInterface_match.exec(me.iface);
+                  me.vlanrawdevicevalue = arr[1];
+                  me.vlanidvalue = arr[2];
+
+               } else if (Proxmox.Utils.Vlan_match.test(me.iface)) {
+                  me.disablevlanid = true;
+                  var arr = Proxmox.Utils.Vlan_match.exec(me.iface);
+                  me.vlanidvalue = arr[1];
+               }
+           } else {
+
+               me.disablevlanid = true;
+               me.disablevlanrawdevice = true;
+           }
+
+           column2.push({
+               xtype: 'textfield',
+               fieldLabel: gettext('Vlan raw device'),
+               name: 'vlan-raw-device',
+               value: me.vlanrawdevicevalue,
+               disabled: me.disablevlanrawdevice
+           });
+
+           column2.push({
+               xtype: 'pveVlanField',
+               name: 'vlan-id',
+               value: me.vlanidvalue,
+               disabled: me.disablevlanid
+
+           });
+
        } else if (me.iftype === 'bond') {
            column2.push({
                xtype: 'textfield',
@@ -106,7 +151,14 @@ Ext.define('Proxmox.node.NetworkEdit', {
            var policySelector = Ext.createWidget('bondPolicySelector', {
                fieldLabel: gettext('Hash policy'),
                name: 'bond_xmit_hash_policy',
-               deleteEmpty: !me.create,
+               deleteEmpty: !me.isCreate,
+               disabled: true
+           });
+
+           var primaryfield = Ext.createWidget('textfield', {
+               fieldLabel: gettext('bond-primary'),
+               name: 'bond-primary',
+               value: '',
                disabled: true
            });
 
@@ -114,15 +166,23 @@ Ext.define('Proxmox.node.NetworkEdit', {
                xtype: 'bondModeSelector',
                fieldLabel: gettext('Mode'),
                name: 'bond_mode',
-               value: me.create ? 'balance-rr' : undefined,
+               value: me.isCreate ? 'balance-rr' : undefined,
                listeners: {
                    change: function(f, value) {
                        if (value === 'balance-xor' ||
                            value === '802.3ad') {
                            policySelector.setDisabled(false);
+                           primaryfield.setDisabled(true);
+                           primaryfield.setValue('');
+                       } else if (value === 'active-backup') {
+                           primaryfield.setDisabled(false);
+                           policySelector.setDisabled(true);
+                           policySelector.setValue('');
                        } else {
                            policySelector.setDisabled(true);
                            policySelector.setValue('');
+                           primaryfield.setDisabled(true);
+                           primaryfield.setValue('');
                        }
                    }
                },
@@ -130,10 +190,11 @@ Ext.define('Proxmox.node.NetworkEdit', {
            });
 
            column2.push(policySelector);
+           column2.push(primaryfield);
 
        } else if (me.iftype === 'OVSBond') {
            column2.push({
-               xtype: me.create ? 'PVE.form.BridgeSelector' : 'displayfield',
+               xtype: me.isCreate ? 'PVE.form.BridgeSelector' : 'displayfield',
                fieldLabel: Proxmox.Utils.render_network_iface_type('OVSBridge'),
                allowBlank: false,
                nodename: me.nodename,
@@ -142,7 +203,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
            });
            column2.push({
                xtype: 'pveVlanField',
-               deleteEmpty: !me.create,
+               deleteEmpty: !me.isCreate,
                name: 'ovs_tag',
                value: ''
            });
@@ -164,7 +225,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
        var url;
        var method;
 
-       if (me.create) {
+       if (me.isCreate) {
            url = "/api2/extjs/nodes/" + me.nodename + "/network";
            method = 'POST';
        } else {
@@ -172,21 +233,37 @@ Ext.define('Proxmox.node.NetworkEdit', {
            method = 'PUT';
        }
 
-       var column1 = [
-           {
-               xtype: 'hiddenfield',
-               name: 'type',
-               value: me.iftype
-           },
-           {
-               xtype: me.create ? 'textfield' : 'displayfield',
-               fieldLabel: gettext('Name'),
-               name: 'iface',
-               value: me.iface,
-               vtype: iface_vtype,
-               allowBlank: false
+       column1.push({
+           xtype: 'hiddenfield',
+           name: 'type',
+           value: me.iftype
+       },
+       {
+           xtype: me.isCreate ? 'textfield' : 'displayfield',
+           fieldLabel: gettext('Name'),
+           name: 'iface',
+           value: me.iface,
+           vtype: iface_vtype,
+           allowBlank: false,
+           listeners: {
+               change: function(f, value) {
+                   if (me.isCreate && iface_vtype === 'VlanName') {
+                       var vlanidField = me.down('field[name=vlan-id]');
+                       var vlanrawdeviceField = me.down('field[name=vlan-raw-device]');
+                       if (Proxmox.Utils.VlanInterface_match.test(value)) {
+                           vlanidField.setDisabled(true);
+                           vlanrawdeviceField.setDisabled(true);
+                       } else if (Proxmox.Utils.Vlan_match.test(value)) {
+                           vlanidField.setDisabled(true);
+                           vlanrawdeviceField.setDisabled(false);
+                       } else {
+                           vlanidField.setDisabled(false);
+                           vlanrawdeviceField.setDisabled(false);
+                       }
+                   }
+               }
            }
-       ];
+       });
 
        if (me.iftype === 'OVSBond') {
            column1.push(
@@ -195,7 +272,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
                    fieldLabel: gettext('Mode'),
                    name: 'bond_mode',
                    openvswitch: true,
-                   value: me.create ? 'active-backup' : undefined,
+                   value: me.isCreate ? 'active-backup' : undefined,
                    allowBlank: false
                },
                {
@@ -209,84 +286,43 @@ Ext.define('Proxmox.node.NetworkEdit', {
            column1.push(
                {
                    xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('IP address'),
-                   vtype: 'IPAddress',
-                   name: 'address'
+                   deleteEmpty: !me.isCreate,
+                   fieldLabel: 'IPv4/CIDR',
+                   vtype: 'IPCIDRAddress',
+                   name: 'cidr'
                },
                {
                    xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('Subnet mask'),
+                   deleteEmpty: !me.isCreate,
+                   fieldLabel: gettext('Gateway') + ' (IPv4)',
                    vtype: 'IPAddress',
-                   name: 'netmask',
-                   validator: function(value) {
-                       /*jslint confusion: true */
-                       if (!me.items) {
-                           return true;
-                       }
-                       var address = me.down('field[name=address]').getValue();
-                       if (value !== '') {
-                           if (address === '') {
-                               return "Subnet mask requires option 'IP address'";
-                           }
-                       } else {
-                           if (address !== '') {
-                               return "Option 'IP address' requires a subnet mask";
-                           }
-                       }
-
-                       return true;
-                   }
+                   name: 'gateway'
                },
                {
                    xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('Gateway'),
-                   vtype: 'IPAddress',
-                   name: 'gateway'
+                   deleteEmpty: !me.isCreate,
+                   fieldLabel: 'IPv6/CIDR',
+                   vtype: 'IP6CIDRAddress',
+                   name: 'cidr6'
                },
                {
                    xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('IPv6 address'),
+                   deleteEmpty: !me.isCreate,
+                   fieldLabel: gettext('Gateway') + ' (IPv6)',
                    vtype: 'IP6Address',
-                   name: 'address6'
+                   name: 'gateway6'
                },
+           );
+           advancedColumn1. push(
                {
-                   xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('Prefix length'),
-                   vtype: 'IP6PrefixLength',
-                   name: 'netmask6',
-                   value: '',
-                   allowBlank: true,
-                   validator: function(value) {
-                       /*jslint confusion: true */
-                       if (!me.items) {
-                           return true;
-                       }
-                       var address = me.down('field[name=address6]').getValue();
-                       if (value !== '') {
-                           if (address === '') {
-                               return "IPv6 prefix length requires option 'IPv6 address'";
-                           }
-                       } else {
-                           if (address !== '') {
-                               return "Option 'IPv6 address' requires an IPv6 prefix length";
-                           }
-                       }
-
-                       return true;
-                   }
+                   xtype: 'proxmoxintegerfield',
+                   minValue: 1280,
+                   maxValue: 65520,
+                   deleteEmpty: !me.isCreate,
+                   emptyText: 1500,
+                   fieldLabel: 'MTU',
+                   name: 'mtu'
                },
-               {
-                   xtype: 'proxmoxtextfield',
-                   deleteEmpty: !me.create,
-                   fieldLabel: gettext('Gateway'),
-                   vtype: 'IP6Address',
-                   name: 'gateway6'
-               }
            );
        }
 
@@ -296,13 +332,15 @@ Ext.define('Proxmox.node.NetworkEdit', {
            items: {
                 xtype: 'inputpanel',
                column1: column1,
-               column2: column2
+               column2: column2,
+               advancedColumn1: advancedColumn1,
+               advancedColumn2: advancedColumn2,
            }
        });
 
        me.callParent();
 
-       if (me.create) {
+       if (me.isCreate) {
            me.down('field[name=iface]').setValue(me.iface_default);
        } else {
            me.load({