]> git.proxmox.com Git - pve-manager.git/blame - www/manager/grid/FirewallOptions.js
firewall: add enable ndp option
[pve-manager.git] / www / manager / grid / FirewallOptions.js
CommitLineData
434f2466
DM
1Ext.define('PVE.FirewallOptions', {
2 extend: 'PVE.grid.ObjectGrid',
3 alias: ['widget.pveFirewallOptions'],
4
5 fwtype: undefined, // 'dc', 'node' or 'vm'
6
7 base_url: undefined,
8
9 initComponent : function() {
10 /*jslint confusion: true */
11
12 var me = this;
13
14 if (!me.base_url) {
15 throw "missing base_url configuration";
16 }
17
18 if (me.fwtype === 'dc' || me.fwtype === 'node' || me.fwtype === 'vm') {
19 if (me.fwtype === 'node') {
20 me.cwidth1 = 250;
21 }
22 } else {
23 throw "unknown firewall option type";
24 }
25
26 var rows = {};
27
2cc7876a 28 var add_boolean_row = function(name, text, defaultValue, labelWidth) {
434f2466
DM
29 rows[name] = {
30 header: text,
31 required: true,
2cc7876a 32 defaultValue: defaultValue || 0,
434f2466
DM
33 renderer: PVE.Utils.format_boolean,
34 editor: {
35 xtype: 'pveWindowEdit',
36 subject: text,
37 fieldDefaults: { labelWidth: labelWidth || 100 },
38 items: {
39 xtype: 'pvecheckbox',
2cc7876a
DM
40 defaultValue: defaultValue || 0,
41 checked: defaultValue ? true : false,
434f2466
DM
42 name: name,
43 uncheckedValue: 0,
44 fieldLabel: text
45 }
46 }
47 };
48 };
49
50 var add_integer_row = function(name, text, labelWidth, minValue) {
51 rows[name] = {
52 header: text,
53 required: true,
54 renderer: function(value) {
55 return value || PVE.Utils.defaultText;
56 },
57 editor: {
58 xtype: 'pveWindowEdit',
59 subject: text,
60 fieldDefaults: { labelWidth: labelWidth || 100 },
61 items: {
62 xtype: 'numberfield',
63 name: name,
64 minValue: minValue,
65 decimalPrecision: 0,
66 fieldLabel: text,
67 emptyText: gettext('Default'),
68 getSubmitData: function() {
69 var me = this;
70 var val = me.getSubmitValue();
71 if (val !== null && val !== '') {
72 var data = {};
73 data[name] = val;
74 return data;
75 } else {
76 return { 'delete' : name };
77 }
78 }
79 }
80 }
81 };
82 };
83
84 var add_log_row = function(name, labelWidth) {
85 rows[name] = {
86 header: name,
87 required: true,
88 defaultValue: 'nolog',
89 editor: {
90 xtype: 'pveWindowEdit',
91 subject: name,
92 fieldDefaults: { labelWidth: labelWidth || 100 },
93 items: {
94 xtype: 'pveKVComboBox',
95 name: name,
96 fieldLabel: name,
97 data: [['nolog', 'nolog'], ['info', 'info'], ['err', 'err'],
98 ['warning', 'warning'], ['crit', 'crit'], ['alert', 'alert'],
99 ['emerg', 'emerg'], ['debug', 'debug']]
100 }
101 }
102 };
103 };
104
434f2466
DM
105
106 if (me.fwtype === 'node') {
5d3a49bf 107 add_boolean_row('enable', gettext('Enable Firewall'), 1);
2cc7876a
DM
108 add_boolean_row('nosmurfs', gettext('SMURFS filter'), 1);
109 add_boolean_row('tcpflags', gettext('TCP flags filter'), 0);
5d4970c5 110 add_boolean_row('ndp', gettext('Enable NDP'), 1);
434f2466
DM
111 add_integer_row('nf_conntrack_max', 'nf_conntrack_max', 120, 32768);
112 add_integer_row('nf_conntrack_tcp_timeout_established',
113 'nf_conntrack_tcp_timeout_established', 250, 7875);
114 add_log_row('log_level_in');
115 add_log_row('log_level_out');
116 add_log_row('tcp_flags_log_level', 120);
117 add_log_row('smurf_log_level');
118 } else if (me.fwtype === 'vm') {
5d3a49bf 119 add_boolean_row('enable', gettext('Enable Firewall'), 0);
2cc7876a 120 add_boolean_row('dhcp', gettext('Enable DHCP'), 0);
5d4970c5 121 add_boolean_row('ndp', gettext('Enable NDP'), 1);
2cc7876a 122 add_boolean_row('macfilter', gettext('MAC filter'), 1);
434f2466
DM
123 add_log_row('log_level_in');
124 add_log_row('log_level_out');
79b93a4d
DM
125 } else if (me.fwtype === 'dc') {
126 add_boolean_row('enable', gettext('Enable Firewall'), 0);
127 }
434f2466
DM
128
129 if (me.fwtype === 'dc' || me.fwtype === 'vm') {
130 rows.policy_in = {
131 header: gettext('Input Policy'),
132 required: true,
133 defaultValue: 'DROP',
134 editor: {
135 xtype: 'pveWindowEdit',
136 subject: gettext('Input Policy'),
137 items: {
138 xtype: 'pveFirewallPolicySelector',
139 name: 'policy_in',
140 value: 'DROP',
141 fieldLabel: gettext('Input Policy')
142 }
143 }
144 };
145
146 rows.policy_out = {
147 header: gettext('Output Policy'),
148 required: true,
149 defaultValue: 'ACCEPT',
150 editor: {
151 xtype: 'pveWindowEdit',
152 subject: gettext('Output Policy'),
153 items: {
154 xtype: 'pveFirewallPolicySelector',
155 name: 'policy_out',
156 value: 'ACCEPT',
157 fieldLabel: gettext('Output Policy')
158 }
159 }
160 };
161 }
162
163 var reload = function() {
164 me.rstore.load();
165 };
166
167 var run_editor = function() {
168 var sm = me.getSelectionModel();
169 var rec = sm.getSelection()[0];
170 if (!rec) {
171 return;
172 }
173
174 var rowdef = rows[rec.data.key];
175 if (!rowdef.editor) {
176 return;
177 }
178
179 var win;
180 if (Ext.isString(rowdef.editor)) {
181 win = Ext.create(rowdef.editor, {
182 pveSelNode: me.pveSelNode,
183 confid: rec.data.key,
184 url: '/api2/extjs' + me.base_url
185 });
186 } else {
187 var config = Ext.apply({
188 pveSelNode: me.pveSelNode,
189 confid: rec.data.key,
190 url: '/api2/extjs' + me.base_url
191 }, rowdef.editor);
192 win = Ext.createWidget(rowdef.editor.xtype, config);
193 win.load();
194 }
195
196 win.show();
197 win.on('destroy', reload);
198 };
199
200 var edit_btn = new Ext.Button({
201 text: gettext('Edit'),
202 disabled: true,
203 handler: run_editor
204 });
205
206 var set_button_status = function() {
207 var sm = me.getSelectionModel();
208 var rec = sm.getSelection()[0];
209
210 if (!rec) {
211 edit_btn.disable();
212 return;
213 }
214 var rowdef = rows[rec.data.key];
215 edit_btn.setDisabled(!rowdef.editor);
216 };
217
218 Ext.applyIf(me, {
219 url: "/api2/json" + me.base_url,
220 cwidth1: 150,
221 tbar: [ edit_btn ],
222 rows: rows,
223 listeners: {
224 itemdblclick: run_editor,
225 selectionchange: set_button_status
226 }
227 });
228
229 me.callParent();
230
231 me.on('show', reload);
232 }
233});