X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=www%2Fmanager6%2Fqemu%2FNetworkEdit.js;h=4917eba5f75ff9292ac88f895f2319c57239c4bc;hb=refs%2Fheads%2Fmaster;hp=a23af6561f05a01ada241104cf635495f7916ae6;hpb=8a7e5598f158d057b9d08b89fe894fa0f274c84b;p=pve-manager.git diff --git a/www/manager6/qemu/NetworkEdit.js b/www/manager6/qemu/NetworkEdit.js index a23af656..4917eba5 100644 --- a/www/manager6/qemu/NetworkEdit.js +++ b/www/manager6/qemu/NetworkEdit.js @@ -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); } - } + }, }); - } + }, });