]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/NetworkEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / NetworkEdit.js
index a23af6561f05a01ada241104cf635495f7916ae6..4917eba5f75ff9292ac88f895f2319c57239c4bc 100644 (file)
@@ -1,6 +1,6 @@
 Ext.define('PVE.qemu.NetworkInputPanel', {
-    extend: 'PVE.panel.InputPanel',
-    alias: 'widget.PVE.qemu.NetworkInputPanel',
+    extend: 'Proxmox.panel.InputPanel',
+    alias: 'widget.pveQemuNetworkInputPanel',
     onlineHelp: 'qm_network_device',
 
     insideWizard: false,
@@ -9,18 +9,17 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
        var me = this;
 
        me.network.model = values.model;
-       if (values.networkmode === 'none') {
+       if (values.nonetwork) {
            return {};
-       } else if (values.networkmode === 'bridge') {
+       } else {
            me.network.bridge = values.bridge;
            me.network.tag = values.tag;
            me.network.firewall = values.firewall;
-       } else {
-           me.network.bridge = undefined;
        }
        me.network.macaddr = values.macaddr;
        me.network.disconnect = values.disconnect;
        me.network.queues = values.queues;
+       me.network.mtu = values.mtu;
 
        if (values.rate) {
            me.network.rate = values.rate;
@@ -35,6 +34,17 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
        return params;
     },
 
+    viewModel: {
+       data: {
+           networkModel: undefined,
+           mtu: '',
+       },
+       formulas: {
+           isVirtio: get => get('networkModel') === 'virtio',
+           showMtuHint: get => get('mtu') === 1,
+       },
+    },
+
     setNetwork: function(confid, data) {
        var me = this;
 
@@ -47,7 +57,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
            data.networkmode = 'bridge';
        }
        me.network = data;
-       
+
        me.setValues(me.network);
     },
 
@@ -57,78 +67,101 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
        me.bridgesel.setNodename(nodename);
     },
 
-    initComponent : function() {
+    initComponent: function() {
        var me = this;
 
        me.network = {};
        me.confid = 'net0';
 
+       me.column1 = [];
+       me.column2 = [];
+
        me.bridgesel = Ext.create('PVE.form.BridgeSelector', {
            name: 'bridge',
            fieldLabel: gettext('Bridge'),
            nodename: me.nodename,
-           labelAlign: 'right',
            autoSelect: true,
-           allowBlank: false
+           allowBlank: false,
        });
 
        me.column1 = [
-           {
-               xtype: 'radiofield',
-               name: 'networkmode',
-               inputValue: 'bridge',
-               boxLabel: gettext('Bridged mode'),
-               checked: true,
-               listeners: {
-                   change: function(f, value) {
-                       if (!me.rendered) {
-                           return;
-                       }
-                       me.down('field[name=bridge]').setDisabled(!value);
-                       me.down('field[name=bridge]').validate();
-                       me.down('field[name=tag]').setDisabled(!value);
-                       me.down('field[name=firewall]').setDisabled(!value);
-                   }
-               }
-           },
            me.bridgesel,
            {
                xtype: 'pveVlanField',
                name: 'tag',
                value: '',
-               labelAlign: 'right'
            },
-           me.bridgesel,
            {
-               xtype: 'pvecheckbox',
+               xtype: 'proxmoxcheckbox',
                fieldLabel: gettext('Firewall'),
                name: 'firewall',
-               labelAlign: 'right'
+               checked: me.insideWizard || me.isCreate,
+           },
+       ];
+
+       me.advancedColumn1 = [
+           {
+               xtype: 'proxmoxcheckbox',
+               fieldLabel: gettext('Disconnect'),
+               name: 'disconnect',
            },
            {
-               xtype: 'radiofield',
-               name: 'networkmode',
-               inputValue: 'nat',
-               boxLabel: gettext('NAT mode')
-           }
+               xtype: 'proxmoxintegerfield',
+               name: 'mtu',
+               fieldLabel: 'MTU',
+               bind: {
+                   disabled: '{!isVirtio}',
+                   value: '{mtu}',
+               },
+               emptyText: '1500 (1 = bridge MTU)',
+               minValue: 1,
+               maxValue: 65520,
+               allowBlank: true,
+               validator: val => val === '' || val >= 576 || val === '1'
+                   ? true
+                   : gettext('MTU needs to be >= 576 or 1 to inherit the MTU from the underlying bridge.'),
+           },
        ];
 
        if (me.insideWizard) {
-           me.column1.push({
-               xtype: 'radiofield',
-               name: 'networkmode',
+           me.column1.unshift({
+               xtype: 'checkbox',
+               name: 'nonetwork',
                inputValue: 'none',
-               boxLabel: gettext('No network device')
+               boxLabel: gettext('No network device'),
+               listeners: {
+                   change: function(cb, value) {
+                       var fields = [
+                           'disconnect',
+                           'bridge',
+                           'tag',
+                           'firewall',
+                           'model',
+                           'macaddr',
+                           'rate',
+                           'queues',
+                           'mtu',
+                       ];
+                       fields.forEach(function(fieldname) {
+                           me.down('field[name='+fieldname+']').setDisabled(value);
+                       });
+                       me.down('field[name=bridge]').validate();
+                   },
+               },
+           });
+           me.column2.unshift({
+               xtype: 'displayfield',
            });
        }
 
-       me.column2 = [
+       me.column2.push(
            {
                xtype: 'pveNetworkCardSelector',
                name: 'model',
                fieldLabel: gettext('Model'),
+               bind: '{networkModel}',
                value: PVE.qemu.OSDefaults.generic.networkCard,
-               allowBlank: false
+               allowBlank: false,
            },
            {
                xtype: 'textfield',
@@ -136,8 +169,9 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
                fieldLabel: gettext('MAC address'),
                vtype: 'MacAddress',
                allowBlank: true,
-               emptyText: 'auto'
-           },
+               emptyText: 'auto',
+           });
+       me.advancedColumn2 = [
            {
                xtype: 'numberfield',
                name: 'rate',
@@ -146,53 +180,57 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
                maxValue: 10*1024,
                value: '',
                emptyText: 'unlimited',
-               allowBlank: true
+               allowBlank: true,
            },
            {
-               xtype: 'pveIntegerField',
+               xtype: 'proxmoxintegerfield',
                name: 'queues',
-               fieldLabel: gettext('Multiqueues'),
+               fieldLabel: 'Multiqueue',
                minValue: 1,
-               maxValue: 8,
+               maxValue: 64,
                value: '',
-               allowBlank: true
+               allowBlank: true,
            },
+       ];
+       me.advancedColumnB = [
            {
-               xtype: 'pvecheckbox',
-               fieldLabel: gettext('Disconnect'),
-               name: 'disconnect'
-           }
+               xtype: 'displayfield',
+               userCls: 'pmx-hint',
+               value: gettext("Use the special value '1' to inherit the MTU value from the underlying bridge"),
+               bind: {
+                   hidden: '{!showMtuHint}',
+               },
+           },
        ];
 
        me.callParent();
-    }
+    },
 });
 
 Ext.define('PVE.qemu.NetworkEdit', {
-    extend: 'PVE.window.Edit',
+    extend: 'Proxmox.window.Edit',
 
     isAdd: true,
 
-    initComponent : function() {
-       /*jslint confusion: true */
-
+    initComponent: function() {
        var me = this;
 
        var nodename = me.pveSelNode.data.node;
-       if (!nodename) { 
-           throw "no node name specified";         
+       if (!nodename) {
+           throw "no node name specified";
        }
 
-       me.create = me.confid ? false : true;
+       me.isCreate = !me.confid;
 
        var ipanel = Ext.create('PVE.qemu.NetworkInputPanel', {
            confid: me.confid,
-           nodename: nodename
+           nodename: nodename,
+           isCreate: me.isCreate,
        });
 
        Ext.applyIf(me, {
            subject: gettext('Network Device'),
-           items: ipanel
+           items: ipanel,
        });
 
        me.callParent();
@@ -201,7 +239,7 @@ Ext.define('PVE.qemu.NetworkEdit', {
            success: function(response, options) {
                var i, confid;
                me.vmconfig = response.result.data;
-               if (!me.create) {
+               if (!me.isCreate) {
                    var value = me.vmconfig[me.confid];
                    var network = PVE.Parser.parseQemuNetwork(me.confid, value);
                    if (!network) {
@@ -218,9 +256,16 @@ Ext.define('PVE.qemu.NetworkEdit', {
                            break;
                        }
                    }
-                   ipanel.setNetwork(me.confid);                   
+
+                   let ostype = me.vmconfig.ostype;
+                   let defaults = PVE.qemu.OSDefaults.getDefaults(ostype);
+                   let data = {
+                       model: defaults.networkCard,
+                   };
+
+                   ipanel.setNetwork(me.confid, data);
                }
-           }
+           },
        });
-    }
+    },
 });