]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/NetworkEdit.js
dd950d2bb461009bb421c10443adc612469e718a
[pve-manager.git] / www / manager6 / qemu / NetworkEdit.js
1 Ext.define('PVE.qemu.NetworkInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 alias: 'widget.pveQemuNetworkInputPanel',
4 onlineHelp: 'qm_network_device',
5
6 insideWizard: false,
7
8 onGetValues: function(values) {
9 var me = this;
10
11 me.network.model = values.model;
12 if (values.nonetwork) {
13 return {};
14 } else {
15 me.network.bridge = values.bridge;
16 me.network.tag = values.tag;
17 me.network.firewall = values.firewall;
18 }
19 me.network.macaddr = values.macaddr;
20 me.network.disconnect = values.disconnect;
21 me.network.queues = values.queues;
22
23 if (values.rate) {
24 me.network.rate = values.rate;
25 } else {
26 delete me.network.rate;
27 }
28
29 var params = {};
30
31 params[me.confid] = PVE.Parser.printQemuNetwork(me.network);
32
33 return params;
34 },
35
36 setNetwork: function(confid, data) {
37 var me = this;
38
39 me.confid = confid;
40
41 if (data) {
42 data.networkmode = data.bridge ? 'bridge' : 'nat';
43 } else {
44 data = {};
45 data.networkmode = 'bridge';
46 }
47 me.network = data;
48
49 me.setValues(me.network);
50 },
51
52 setNodename: function(nodename) {
53 var me = this;
54
55 me.bridgesel.setNodename(nodename);
56 },
57
58 initComponent : function() {
59 var me = this;
60
61 me.network = {};
62 me.confid = 'net0';
63
64 me.column1 = [];
65 me.column2 = [];
66
67 me.bridgesel = Ext.create('PVE.form.BridgeSelector', {
68 name: 'bridge',
69 fieldLabel: gettext('Bridge'),
70 nodename: me.nodename,
71 autoSelect: true,
72 allowBlank: false
73 });
74
75 me.column1 = [
76 me.bridgesel,
77 {
78 xtype: 'pveVlanField',
79 name: 'tag',
80 value: ''
81 },
82 {
83 xtype: 'proxmoxcheckbox',
84 fieldLabel: gettext('Firewall'),
85 name: 'firewall'
86 }
87 ];
88
89 me.advancedColumn1 = [
90 {
91 xtype: 'proxmoxcheckbox',
92 fieldLabel: gettext('Disconnect'),
93 name: 'disconnect'
94 }
95 ];
96
97 if (me.insideWizard) {
98 me.column1.unshift({
99 xtype: 'checkbox',
100 name: 'nonetwork',
101 inputValue: 'none',
102 boxLabel: gettext('No network device'),
103 listeners: {
104 change: function(cb, value) {
105 var fields = [
106 'disconnect',
107 'bridge',
108 'tag',
109 'firewall',
110 'model',
111 'macaddr',
112 'rate',
113 'queues'
114 ];
115 fields.forEach(function(fieldname) {
116 me.down('field[name='+fieldname+']').setDisabled(value);
117 });
118 me.down('field[name=bridge]').validate();
119 }
120 }
121 });
122 me.column2.unshift({
123 xtype: 'displayfield'
124 });
125 }
126
127 me.column2.push(
128 {
129 xtype: 'pveNetworkCardSelector',
130 name: 'model',
131 fieldLabel: gettext('Model'),
132 value: PVE.qemu.OSDefaults.generic.networkCard,
133 allowBlank: false
134 },
135 {
136 xtype: 'textfield',
137 name: 'macaddr',
138 fieldLabel: gettext('MAC address'),
139 vtype: 'MacAddress',
140 allowBlank: true,
141 emptyText: 'auto'
142 });
143 me.advancedColumn2 = [
144 {
145 xtype: 'numberfield',
146 name: 'rate',
147 fieldLabel: gettext('Rate limit') + ' (MB/s)',
148 minValue: 0,
149 maxValue: 10*1024,
150 value: '',
151 emptyText: 'unlimited',
152 allowBlank: true
153 },
154 {
155 xtype: 'proxmoxintegerfield',
156 name: 'queues',
157 fieldLabel: 'Multiqueue',
158 minValue: 1,
159 maxValue: 8,
160 value: '',
161 allowBlank: true
162 }
163 ];
164
165 me.callParent();
166 }
167 });
168
169 Ext.define('PVE.qemu.NetworkEdit', {
170 extend: 'Proxmox.window.Edit',
171
172 isAdd: true,
173
174 initComponent : function() {
175 /*jslint confusion: true */
176
177 var me = this;
178
179 var nodename = me.pveSelNode.data.node;
180 if (!nodename) {
181 throw "no node name specified";
182 }
183
184 me.isCreate = me.confid ? false : true;
185
186 var ipanel = Ext.create('PVE.qemu.NetworkInputPanel', {
187 confid: me.confid,
188 nodename: nodename
189 });
190
191 Ext.applyIf(me, {
192 subject: gettext('Network Device'),
193 items: ipanel
194 });
195
196 me.callParent();
197
198 me.load({
199 success: function(response, options) {
200 var i, confid;
201 me.vmconfig = response.result.data;
202 if (!me.isCreate) {
203 var value = me.vmconfig[me.confid];
204 var network = PVE.Parser.parseQemuNetwork(me.confid, value);
205 if (!network) {
206 Ext.Msg.alert(gettext('Error'), 'Unable to parse network options');
207 me.close();
208 return;
209 }
210 ipanel.setNetwork(me.confid, network);
211 } else {
212 for (i = 0; i < 100; i++) {
213 confid = 'net' + i.toString();
214 if (!Ext.isDefined(me.vmconfig[confid])) {
215 me.confid = confid;
216 break;
217 }
218 }
219 ipanel.setNetwork(me.confid);
220 }
221 }
222 });
223 }
224 });