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