Project

General

Profile

Download (27.9 KB) Statistics
| Branch: | Tag: | Revision:
1 0b844b73 Renato Botelho
<?php
2 124aee67 Chris Buechler
/* $Id$ */
3 d173230c Seth Mos
/*
4
	system_gateways_edit.php
5
	part of pfSense (http://pfsense.com)
6 0b844b73 Renato Botelho
7 6216690b smos
	Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
8 d173230c Seth Mos
	All rights reserved.
9 0b844b73 Renato Botelho
10 d173230c Seth Mos
	Redistribution and use in source and binary forms, with or without
11
	modification, are permitted provided that the following conditions are met:
12 0b844b73 Renato Botelho
13 d173230c Seth Mos
	1. Redistributions of source code must retain the above copyright notice,
14
	   this list of conditions and the following disclaimer.
15 0b844b73 Renato Botelho
16 d173230c Seth Mos
	2. Redistributions in binary form must reproduce the above copyright
17
	   notice, this list of conditions and the following disclaimer in the
18
	   documentation and/or other materials provided with the distribution.
19 0b844b73 Renato Botelho
20 d173230c Seth Mos
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
21
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
	POSSIBILITY OF SUCH DAMAGE.
30
*/
31 1d333258 Scott Ullrich
/*
32
	pfSense_MODULE:	routing
33
*/
34 d173230c Seth Mos
35 6b07c15a Matthew Grooms
##|+PRIV
36
##|*IDENT=page-system-gateways-editgateway
37
##|*NAME=System: Gateways: Edit Gateway page
38
##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway' page.
39
##|*MATCH=system_gateways_edit.php*
40
##|-PRIV
41
42 124aee67 Chris Buechler
require("guiconfig.inc");
43 4666b787 Ermal Lu?i
require("pkg-utils.inc");
44 d173230c Seth Mos
45 99c61352 Ermal
$a_gateways = return_gateways_array(true);
46 87f0be87 Chris Buechler
$a_gateways_arr = array();
47
foreach($a_gateways as $gw) {
48
	$a_gateways_arr[] = $gw;
49
}
50
$a_gateways = $a_gateways_arr;
51 d173230c Seth Mos
52 616e1956 Seth Mos
if (!is_array($config['gateways']['gateway_item']))
53 0b844b73 Renato Botelho
	$config['gateways']['gateway_item'] = array();
54
55 616e1956 Seth Mos
$a_gateway_item = &$config['gateways']['gateway_item'];
56 eb233517 Phil Davis
$apinger_default = return_apinger_defaults();
57 616e1956 Seth Mos
58 87f0be87 Chris Buechler
$id = $_GET['id'];
59
if (isset($_POST['id']))
60 d173230c Seth Mos
	$id = $_POST['id'];
61
62
if (isset($_GET['dup'])) {
63
	$id = $_GET['dup'];
64
}
65
66
if (isset($id) && $a_gateways[$id]) {
67 bb849003 Ermal
	$pconfig = array();
68 e90db2b4 Ermal Lu?i
	$pconfig['name'] = $a_gateways[$id]['name'];
69 5f53260a Ermal
	$pconfig['weight'] = $a_gateways[$id]['weight'];
70 f7203985 Ermal
	$pconfig['interval'] = $a_gateways[$id]['interval'];
71 e90db2b4 Ermal Lu?i
	$pconfig['interface'] = $a_gateways[$id]['interface'];
72 883c53c9 Ermal Lu?i
	$pconfig['friendlyiface'] = $a_gateways[$id]['friendlyiface'];
73 c1d36d26 smos
	$pconfig['ipprotocol'] = $a_gateways[$id]['ipprotocol'];
74 d44d26c1 Ermal
	if (isset($a_gateways[$id]['dynamic']))
75
		$pconfig['dynamic'] = true;
76
	$pconfig['gateway'] = $a_gateways[$id]['gateway'];
77 883c53c9 Ermal Lu?i
	$pconfig['defaultgw'] = isset($a_gateways[$id]['defaultgw']);
78 023920e7 Ermal
	$pconfig['latencylow'] = $a_gateway_item[$id]['latencylow'];
79 eb233517 Phil Davis
	$pconfig['latencyhigh'] = $a_gateway_item[$id]['latencyhigh'];
80
	$pconfig['losslow'] = $a_gateway_item[$id]['losslow'];
81
	$pconfig['losshigh'] = $a_gateway_item[$id]['losshigh'];
82
	$pconfig['down'] = $a_gateway_item[$id]['down'];
83 99c61352 Ermal
	$pconfig['monitor'] = $a_gateways[$id]['monitor'];
84 33c06ef7 Ermal
	$pconfig['monitor_disable'] = isset($a_gateways[$id]['monitor_disable']);
85 e90db2b4 Ermal Lu?i
	$pconfig['descr'] = $a_gateways[$id]['descr'];
86
	$pconfig['attribute'] = $a_gateways[$id]['attribute'];
87 d173230c Seth Mos
}
88
89 124aee67 Chris Buechler
if (isset($_GET['dup'])) {
90 d173230c Seth Mos
	unset($id);
91 124aee67 Chris Buechler
	unset($pconfig['attribute']);
92
}
93 d173230c Seth Mos
94
if ($_POST) {
95
96
	unset($input_errors);
97
98
	/* input validation */
99 d44d26c1 Ermal
	$reqdfields = explode(" ", "name interface");
100
	$reqdfieldsn = array(gettext("Name"), gettext("Interface"));
101 883c53c9 Ermal Lu?i
102 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
103 883c53c9 Ermal Lu?i
104 d173230c Seth Mos
	if (! isset($_POST['name'])) {
105
		$input_errors[] = "A valid gateway name must be specified.";
106
	}
107 31ace93c Seth Mos
	if (! is_validaliasname($_POST['name'])) {
108 df152a88 Carlos Eduardo Ramos
		$input_errors[] = gettext("The gateway name must not contain invalid characters.");
109 31ace93c Seth Mos
	}
110 87f0be87 Chris Buechler
	/* skip system gateways which have been automatically added */
111 283d78c6 Darren Embry
	if (($_POST['gateway'] && (!is_ipaddr($_POST['gateway'])) && ($_POST['attribute'] !== "system")) && ($_POST['gateway'] != "dynamic")) {
112 df152a88 Carlos Eduardo Ramos
		$input_errors[] = gettext("A valid gateway IP address must be specified.");
113 87f0be87 Chris Buechler
	}
114 15a13dab Scott Ullrich
115 d44d26c1 Ermal
	if ($_POST['gateway'] && (is_ipaddr($_POST['gateway'])) && !$_REQUEST['isAjax']) {
116 9e80d14c Seth Mos
		if(is_ipaddrv4($_POST['gateway'])) {
117 47593ac6 Seth Mos
			$parent_ip = get_interface_ip($_POST['interface']);
118 e227df57 Ermal Lu?i
			$parent_sn = get_interface_subnet($_POST['interface']);
119 9e80d14c Seth Mos
			if(empty($parent_ip) || empty($parent_sn)) {
120 60037e00 bcyrill
				$input_errors[] = gettext("You can not use a IPv4 Gateway Address on a IPv6 only interface.");
121 9e80d14c Seth Mos
			} else {
122 55705b33 Renato Botelho
				$subnets = array(gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn);
123
				$vips = link_interface_to_vips($_POST['interface']);
124
				if (is_array($vips))
125
					foreach($vips as $vip) {
126
						if (!is_ipaddrv4($vip['subnet']))
127
							continue;
128
						$subnets[] = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
129
					}
130
131
				$found = false;
132
				foreach($subnets as $subnet)
133
					if(ip_in_subnet($_POST['gateway'], $subnet)) {
134
						$found = true;
135
						break;
136
					}
137
138
				if ($found === false)
139
					$input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
140 e227df57 Ermal Lu?i
			}
141 e7d3b8f4 Seth Mos
		}
142 b5b5bcc0 Ermal
		else if(is_ipaddrv6($_POST['gateway'])) {
143 2a9cb3b2 smos
			/* do not do a subnet match on a link local address, it's valid */
144 db7a628c Renato Botelho
			if(!is_linklocal($_POST['gateway'])) {
145 2a9cb3b2 smos
				$parent_ip = get_interface_ipv6($_POST['interface']);
146
				$parent_sn = get_interface_subnetv6($_POST['interface']);
147
				if(empty($parent_ip) || empty($parent_sn)) {
148 60037e00 bcyrill
					$input_errors[] = gettext("You can not use a IPv6 Gateway Address on a IPv4 only interface.");
149 2a9cb3b2 smos
				} else {
150 55705b33 Renato Botelho
					$subnets = array(gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn);
151
					$vips = link_interface_to_vips($_POST['interface']);
152
					if (is_array($vips))
153
						foreach($vips as $vip) {
154
							if (!is_ipaddrv6($vip['subnet']))
155
								continue;
156
							$subnets[] = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
157
						}
158
159
					$found = false;
160
					foreach($subnets as $subnet)
161
						if(ip_in_subnet($_POST['gateway'], $subnet)) {
162
							$found = true;
163
							break;
164
						}
165
166
					if ($found === false)
167
						$input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
168 35af7141 smos
				}
169 7617e245 Seth Mos
			}
170
		}
171 9e80d14c Seth Mos
172
		if (!empty($config['interfaces'][$_POST['interface']]['ipaddr'])) {
173
			if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic"))
174
				$input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration.");
175
		}
176
		if (!empty($config['interfaces'][$_POST['interface']]['ipaddrv6'])) {
177
			if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddrv6']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic"))
178
				$input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration.");
179
		}
180 e7d3b8f4 Seth Mos
	}
181 883c53c9 Ermal Lu?i
	if (($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
182 df152a88 Carlos Eduardo Ramos
		$input_errors[] = gettext("A valid monitor IP address must be specified.");
183 d173230c Seth Mos
	}
184 2972b3e7 smos
	/* only allow correct IPv4 and IPv6 gateway addresses */
185
	if (($_POST['gateway'] <> "") && is_ipaddr($_POST['gateway']) && $_POST['gateway'] != "dynamic") {
186
		if(is_ipaddrv6($_POST['gateway']) && ($_POST['ipprotocol'] == "inet")) {
187
			$input_errors[] = gettext("The IPv6 gateway address '{$_POST['gateway']}' can not be used as a IPv4 gateway'.");
188
		}
189
		if(is_ipaddrv4($_POST['gateway']) && ($_POST['ipprotocol'] == "inet6")) {
190
			$input_errors[] = gettext("The IPv4 gateway address '{$_POST['gateway']}' can not be used as a IPv6 gateway'.");
191
		}
192
	}
193
	/* only allow correct IPv4 and IPv6 monitor addresses */
194 9e80d14c Seth Mos
	if (($_POST['monitor'] <> "") && is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
195 2972b3e7 smos
		if(is_ipaddrv6($_POST['monitor']) && ($_POST['ipprotocol'] == "inet")) {
196
			$input_errors[] = gettext("The IPv6 monitor address '{$_POST['monitor']}' can not be used on a IPv4 gateway'.");
197 c1d36d26 smos
		}
198 2972b3e7 smos
		if(is_ipaddrv4($_POST['monitor']) && ($_POST['ipprotocol'] == "inet6")) {
199
			$input_errors[] = gettext("The IPv4 monitor address '{$_POST['monitor']}' can not be used on a IPv6 gateway'.");
200 9e80d14c Seth Mos
		}
201
	}
202 d173230c Seth Mos
203 8b060357 Seth Mos
	if (isset($_POST['name'])) {
204 31ace93c Seth Mos
		/* check for overlaps */
205
		foreach ($a_gateways as $gateway) {
206 2328dcc5 Seth Mos
			if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) {
207 23fafd14 Ermal
				if ($gateway['name'] != $_POST['name'])
208 33802679 Chris Buechler
					$input_errors[] = gettext("Changing name on a gateway is not allowed.");
209 31ace93c Seth Mos
				continue;
210
			}
211 2328dcc5 Seth Mos
			if($_POST['name'] <> "") {
212 283d78c6 Darren Embry
				if (($gateway['name'] <> "") && ($_POST['name'] == $gateway['name']) && ($gateway['attribute'] !== "system")) {
213 0e94685b Renato Botelho
					$input_errors[] = sprintf(gettext('The gateway name "%s" already exists.'), $_POST['name']);
214 2328dcc5 Seth Mos
					break;
215
				}
216
			}
217
			if(is_ipaddr($_POST['gateway'])) {
218 283d78c6 Darren Embry
				if (($gateway['gateway'] <> "") && ($_POST['gateway'] == $gateway['gateway']) && ($gateway['attribute'] !== "system")) {
219 0e94685b Renato Botelho
					$input_errors[] = sprintf(gettext('The gateway IP address "%s" already exists.'), $_POST['gateway']);
220 2328dcc5 Seth Mos
					break;
221
				}
222 31ace93c Seth Mos
			}
223 2328dcc5 Seth Mos
			if(is_ipaddr($_POST['monitor'])) {
224 283d78c6 Darren Embry
				if (($gateway['monitor'] <> "") && ($_POST['monitor'] == $gateway['monitor']) && ($gateway['attribute'] !== "system")) {
225 0e94685b Renato Botelho
					$input_errors[] = sprintf(gettext('The monitor IP address "%s" is already in use. You must choose a different monitor IP.'), $_POST['monitor']);
226 2328dcc5 Seth Mos
					break;
227
				}
228 31ace93c Seth Mos
			}
229 d173230c Seth Mos
		}
230
	}
231
232 eb233517 Phil Davis
	/* input validation of apinger advanced parameters */
233
	if($_POST['latencylow']) {
234
		if (! is_numeric($_POST['latencylow'])) {
235
			$input_errors[] = gettext("The low latency threshold needs to be a numeric value.");
236
		} else {
237
			if ($_POST['latencylow'] < 1) {
238
				$input_errors[] = gettext("The low latency threshold needs to be positive.");
239
			}
240
		}
241
	}
242
243
	if($_POST['latencyhigh']) {
244
		if (! is_numeric($_POST['latencyhigh'])) {
245
			$input_errors[] = gettext("The high latency threshold needs to be a numeric value.");
246
		} else {
247
			if ($_POST['latencyhigh'] < 1) {
248
				$input_errors[] = gettext("The high latency threshold needs to be positive.");
249
			}
250
		}
251
	}
252
253
	if($_POST['losslow']) {
254
		if (! is_numeric($_POST['losslow'])) {
255
			$input_errors[] = gettext("The low Packet Loss threshold needs to be a numeric value.");
256
		} else {
257
			if ($_POST['losslow'] < 1) {
258
				$input_errors[] = gettext("The low Packet Loss threshold needs to be positive.");
259
			}
260
			if ($_POST['losslow'] >= 100) {
261
				$input_errors[] = gettext("The low Packet Loss threshold needs to be less than 100.");
262
			}
263
		}
264
	}
265
266
	if($_POST['losshigh']) {
267
		if (! is_numeric($_POST['losshigh'])) {
268
			$input_errors[] = gettext("The high Packet Loss threshold needs to be a numeric value.");
269
		} else {
270
			if ($_POST['losshigh'] < 1) {
271
				$input_errors[] = gettext("The high Packet Loss threshold needs to be positive.");
272
			}
273
			if ($_POST['losshigh'] > 100) {
274
				$input_errors[] = gettext("The high Packet Loss threshold needs to be 100 or less.");
275
			}
276
		}
277
	}
278
279
	if(($_POST['latencylow']) && ($_POST['latencyhigh'])) {
280
		if ((is_numeric($_POST['latencylow'])) && (is_numeric($_POST['latencyhigh']))) {
281
			if(($_POST['latencylow'] > $_POST['latencyhigh'])) {
282
				$input_errors[] = gettext("The high latency threshold needs to be higher than the low latency threshold");
283
			}
284
		}
285
	} else {
286
		if($_POST['latencylow']){
287
			if (is_numeric($_POST['latencylow'])) {
288
				if($_POST['latencylow'] > $apinger_default['latencyhigh']) {
289
					$input_errors[] = gettext(sprintf("The low latency threshold needs to be less than the default high latency threshold (%d)", $apinger_default['latencyhigh']));
290
				}
291
			}
292
		}
293
		if($_POST['latencyhigh']){
294
			if (is_numeric($_POST['latencyhigh'])) {
295
				if($_POST['latencyhigh'] < $apinger_default['latencylow']) {
296
					$input_errors[] = gettext(sprintf("The high latency threshold needs to be higher than the default low latency threshold (%d)", $apinger_default['latencylow']));
297
				}
298
			}
299
		}
300
	}
301
302
	if(($_POST['losslow']) && ($_POST['losshigh'])){
303
		if ((is_numeric($_POST['losslow'])) && (is_numeric($_POST['losshigh']))) {
304
			if($_POST['losslow'] > $_POST['losshigh']) {
305
				$input_errors[] = gettext("The high Packet Loss threshold needs to be higher than the low Packet Loss threshold");
306
			}
307
		}
308
	} else {
309
		if($_POST['losslow']){
310
			if (is_numeric($_POST['losslow'])) {
311
				if($_POST['losslow'] > $apinger_default['losshigh']) {
312
					$input_errors[] = gettext(sprintf("The low Packet Loss threshold needs to be less than the default high Packet Loss threshold (%d)", $apinger_default['losshigh']));
313
				}
314
			}
315
		}
316
		if($_POST['losshigh']){
317
			if (is_numeric($_POST['losshigh'])) {
318
				if($_POST['losshigh'] < $apinger_default['losslow']) {
319
					$input_errors[] = gettext(sprintf("The high Packet Loss threshold needs to be higher than the default low Packet Loss threshold (%d)", $apinger_default['losslow']));
320
				}
321
			}
322
		}
323
	}
324
325
	if($_POST['interval']) {
326
		if (! is_numeric($_POST['interval'])) {
327 490cd438 Phil Davis
			$input_errors[] = gettext("The probe interval needs to be a numeric value.");
328 eb233517 Phil Davis
		} else {
329
			if ($_POST['interval'] < 1) {
330 490cd438 Phil Davis
				$input_errors[] = gettext("The probe interval needs to be positive.");
331 eb233517 Phil Davis
			}
332
		}
333
	}
334
335 023920e7 Ermal
	if($_POST['down']) {
336 eb233517 Phil Davis
		if (! is_numeric($_POST['down'])) {
337
			$input_errors[] = gettext("The down time setting needs to be a numeric value.");
338
		} else {
339
			if ($_POST['down'] < 1) {
340
				$input_errors[] = gettext("The down time setting needs to be positive.");
341
			}
342
		}
343
	}
344
345
	if(($_POST['interval']) && ($_POST['down'])){
346
		if ((is_numeric($_POST['interval'])) && (is_numeric($_POST['down']))) {
347
			if($_POST['interval'] > $_POST['down']) {
348 490cd438 Phil Davis
				$input_errors[] = gettext("The probe interval needs to be less than the down time setting.");
349 eb233517 Phil Davis
			}
350
		}
351
	} else {
352
		if($_POST['interval']){
353
			if (is_numeric($_POST['interval'])) {
354
				if($_POST['interval'] > $apinger_default['down']) {
355 490cd438 Phil Davis
					$input_errors[] = gettext(sprintf("The probe interval needs to be less than the default down time setting (%d)", $apinger_default['down']));
356 eb233517 Phil Davis
				}
357
			}
358
		}
359
		if($_POST['down']){
360
			if (is_numeric($_POST['down'])) {
361
				if($_POST['down'] < $apinger_default['interval']) {
362 490cd438 Phil Davis
					$input_errors[] = gettext(sprintf("The down time setting needs to be higher than the default probe interval (%d)", $apinger_default['interval']));
363 eb233517 Phil Davis
				}
364
			}
365
		}
366
	}
367 023920e7 Ermal
368 d173230c Seth Mos
	if (!$input_errors) {
369 c6865c5e Ermal
		$reloadif = "";
370 d44d26c1 Ermal
		$gateway = array();
371
372
		if (empty($_POST['interface']))
373
			$gateway['interface'] = $pconfig['friendlyiface'];
374
		else
375 3befe730 Ermal
			$gateway['interface'] = $_POST['interface'];
376 d44d26c1 Ermal
		if (is_ipaddr($_POST['gateway']))
377
			$gateway['gateway'] = $_POST['gateway'];
378
		else
379
			$gateway['gateway'] = "dynamic";
380
		$gateway['name'] = $_POST['name'];
381
		$gateway['weight'] = $_POST['weight'];
382 e02caf4a smos
		$gateway['ipprotocol'] = $_POST['ipprotocol'];
383 f7203985 Ermal
		$gateway['interval'] = $_POST['interval'];
384 d44d26c1 Ermal
		$gateway['descr'] = $_POST['descr'];
385 33c06ef7 Ermal
		if ($_POST['monitor_disable'] == "yes")
386
			$gateway['monitor_disable'] = true;
387 32a9eb18 Ermal
		else if (is_ipaddr($_POST['monitor'])) {
388
			/* NOTE: If monitor ip is changed need to cleanup the old static route */
389
			if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$id]) && is_ipaddr($a_gateway_item[$id]['monitor']) &&
390
			    $_POST['monitor'] != $a_gateway_item[$id]['monitor'] && $gateway['gateway'] != $a_gateway_item[$id]['monitor']) {
391
				if (is_ipaddrv4($a_gateway_item[$id]['monitor']))
392
					mwexec("/sbin/route delete " . escapeshellarg($a_gateway_item[$id]['monitor']));
393
				else
394
					mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateway_item[$id]['monitor']));
395
			}
396 d44d26c1 Ermal
			$gateway['monitor'] = $_POST['monitor'];
397 32a9eb18 Ermal
		}
398 d44d26c1 Ermal
399
		if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") {
400
			$i = 0;
401 2f14d021 Seth Mos
			/* remove the default gateway bits for all gateways with the same address family */
402 a531d687 Ermal
			foreach($a_gateway_item as $gw) {
403 beb7cd97 Renato Botelho
				if ($gateway['ipprotocol'] == $gw['ipprotocol']) {
404 2f14d021 Seth Mos
					unset($config['gateways']['gateway_item'][$i]['defaultgw']);
405
					if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
406
						$reloadif = $gw['interface'];
407
				}
408 d44d26c1 Ermal
				$i++;
409 bb849003 Ermal
			}
410 d44d26c1 Ermal
			$gateway['defaultgw'] = true;
411 124aee67 Chris Buechler
		}
412 d44d26c1 Ermal
413
		if ($_POST['latencylow'])
414
			$gateway['latencylow'] = $_POST['latencylow'];
415
		if ($_POST['latencyhigh'])
416 0b844b73 Renato Botelho
			$gateway['latencyhigh'] = $_POST['latencyhigh'];
417 d44d26c1 Ermal
		if ($_POST['losslow'])
418 a0edece9 Darren Embry
			$gateway['losslow'] = $_POST['losslow'];
419 d44d26c1 Ermal
		if ($_POST['losshigh'])
420 0b844b73 Renato Botelho
			$gateway['losshigh'] = $_POST['losshigh'];
421 d44d26c1 Ermal
		if ($_POST['down'])
422 0b844b73 Renato Botelho
			$gateway['down'] = $_POST['down'];
423 d44d26c1 Ermal
424
		/* when saving the manual gateway we use the attribute which has the corresponding id */
425
		if (isset($id) && $a_gateway_item[$id])
426
			$a_gateway_item[$id] = $gateway;
427
		else
428
			$a_gateway_item[] = $gateway;
429
430 a368a026 Ermal Lu?i
		mark_subsystem_dirty('staticroutes');
431 0b844b73 Renato Botelho
432 d173230c Seth Mos
		write_config();
433 d44d26c1 Ermal
434 ad862220 Charlie
		if($_REQUEST['isAjax']) {
435
			echo $_POST['name'];
436
			exit;
437 c6865c5e Ermal
		} else if (!empty($reloadif))
438
			send_event("interface reconfigure {$reloadif}");
439 0b844b73 Renato Botelho
440 d173230c Seth Mos
		header("Location: system_gateways.php");
441
		exit;
442 ea939fc3 Ermal
	} else {
443 a0edece9 Darren Embry
		if ($_REQUEST['isAjax']) {
444
			header("HTTP/1.0 500 Internal Server Error");
445
			header("Content-type: text/plain");
446
			foreach ($input_errors as $error) {
447
				echo("$error\n");
448
			}
449
			exit;
450
		}
451 0b844b73 Renato Botelho
452 883c53c9 Ermal Lu?i
		$pconfig = $_POST;
453 ea939fc3 Ermal
		if (empty($_POST['friendlyiface']))
454
			$pconfig['friendlyiface'] = $_POST['interface'];
455
	}
456 d173230c Seth Mos
}
457
458 2328dcc5 Seth Mos
459 df152a88 Carlos Eduardo Ramos
$pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway"));
460 b32dd0a6 jim-p
$shortcut_section = "gateways";
461 02ca24c9 jim-p
462 d173230c Seth Mos
include("head.inc");
463
464
?>
465
466
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
467
<?php include("fbegin.inc"); ?>
468 a1dccfc6 Colin Fleming
<script type="text/javascript">
469
//<![CDATA[
470 023920e7 Ermal
function show_advanced_gateway() {
471 0b844b73 Renato Botelho
	document.getElementById("showadvgatewaybox").innerHTML='';
472
	aodiv = document.getElementById('showgatewayadv');
473
	aodiv.style.display = "block";
474 023920e7 Ermal
}
475 33c06ef7 Ermal
function monitor_change() {
476 0b844b73 Renato Botelho
	document.iform.monitor.disabled = document.iform.monitor_disable.checked;
477 33c06ef7 Ermal
}
478 a1dccfc6 Colin Fleming
//]]>
479 883c53c9 Ermal Lu?i
</script>
480 d173230c Seth Mos
<?php if ($input_errors) print_input_errors($input_errors); ?>
481 0b844b73 Renato Botelho
	<form action="system_gateways_edit.php" method="post" name="iform" id="iform">
482 124aee67 Chris Buechler
	<?php
483 e9df5769 Seth Mos
484
	/* If this is a system gateway we need this var */
485 124aee67 Chris Buechler
	if(($pconfig['attribute'] == "system") || is_numeric($pconfig['attribute'])) {
486 605ae553 Renato Botelho
		echo "<input type='hidden' name='attribute' id='attribute' value=\"" . htmlspecialchars($pconfig['attribute']) . "\" />\n";
487 124aee67 Chris Buechler
	}
488 605ae553 Renato Botelho
	echo "<input type='hidden' name='friendlyiface' id='friendlyiface' value=\"" . htmlspecialchars($pconfig['friendlyiface']) . "\" />\n";
489 124aee67 Chris Buechler
	?>
490 a1dccfc6 Colin Fleming
		<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system gateways edit">
491 0b844b73 Renato Botelho
			<tr>
492
				<td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway"); ?></td>
493
			</tr>
494
			<tr>
495
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
496
				<td width="78%" class="vtable">
497 a1dccfc6 Colin Fleming
					<select name='interface' class='formselect'>
498 0b844b73 Renato Botelho
					<?php
499
						$interfaces = get_configured_interface_with_descr(false, true);
500
						foreach ($interfaces as $iface => $ifacename) {
501
							echo "<option value=\"{$iface}\"";
502
							if ($iface == $pconfig['friendlyiface'])
503 a1dccfc6 Colin Fleming
								echo " selected='selected'";
504 0b844b73 Renato Botelho
							echo ">" . htmlspecialchars($ifacename) . "</option>";
505
						}
506
						if (is_package_installed("openbgpd") == 1) {
507
							echo "<option value=\"bgpd\"";
508
							if ($pconfig['interface'] == "bgpd")
509 a1dccfc6 Colin Fleming
								echo " selected='selected'";
510 0b844b73 Renato Botelho
							echo ">" . gettext("Use BGPD") . "</option>";
511
						}
512
					?>
513 a1dccfc6 Colin Fleming
					</select><br/>
514 0b844b73 Renato Botelho
					<span class="vexpl"><?=gettext("Choose which interface this gateway applies to."); ?></span>
515
				</td>
516
			</tr>
517
			<tr>
518
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Address Family"); ?></td>
519
				<td width="78%" class="vtable">
520
					<select name='ipprotocol' class='formselect' >
521
					<?php
522
						$options = array("inet" => "IPv4", "inet6" => "IPv6");
523
						foreach ($options as $name => $string) {
524
							echo "<option value=\"{$name}\"";
525
							if ($name == $pconfig['ipprotocol'])
526 a1dccfc6 Colin Fleming
								echo " selected='selected'";
527 0b844b73 Renato Botelho
							echo ">" . htmlspecialchars($string) . "</option>\n";
528
						}
529
					?>
530 a1dccfc6 Colin Fleming
					</select><br/>
531 0b844b73 Renato Botelho
					<span class="vexpl"><?=gettext("Choose the Internet Protocol this gateway uses."); ?></span>
532
				</td>
533
			</tr>
534
			<tr>
535
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
536
				<td width="78%" class="vtable">
537 a1dccfc6 Colin Fleming
					<input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
538
					<br/><span class="vexpl"><?=gettext("Gateway name"); ?></span>
539 0b844b73 Renato Botelho
				</td>
540
			</tr>
541
			<tr>
542
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
543
				<td width="78%" class="vtable">
544 a1dccfc6 Colin Fleming
					<input name="gateway" type="text" class="formfld host" id="gateway" size="28" value="<?php if ($pconfig['dynamic']) echo "dynamic"; else echo htmlspecialchars($pconfig['gateway']); ?>" />
545
					<br/><span class="vexpl"><?=gettext("Gateway IP address"); ?></span>
546 0b844b73 Renato Botelho
				</td>
547
			</tr>
548 023920e7 Ermal
			<tr>
549 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Default Gateway"); ?></td>
550
				<td width="78%" class="vtable">
551 a1dccfc6 Colin Fleming
					<input name="defaultgw" type="checkbox" id="defaultgw" value="yes" <?php if ($pconfig['defaultgw'] == true) echo "checked=\"checked\""; ?> />
552 0b844b73 Renato Botelho
					<strong><?=gettext("Default Gateway"); ?></strong><br />
553
					<?=gettext("This will select the above gateway as the default gateway"); ?>
554
				</td>
555
			</tr>
556
			<tr>
557
				<td width="22%" valign="top" class="vncell"><?=gettext("Disable Gateway Monitoring"); ?></td>
558
				<td width="78%" class="vtable">
559 a1dccfc6 Colin Fleming
					<input name="monitor_disable" type="checkbox" id="monitor_disable" value="yes" <?php if ($pconfig['monitor_disable'] == true) echo "checked=\"checked\""; ?> onclick="monitor_change()" />
560 0b844b73 Renato Botelho
					<strong><?=gettext("Disable Gateway Monitoring"); ?></strong><br />
561
					<?=gettext("This will consider this gateway as always being up"); ?>
562
				</td>
563
			</tr>
564
			<tr>
565
				<td width="22%" valign="top" class="vncell"><?=gettext("Monitor IP"); ?></td>
566
				<td width="78%" class="vtable">
567
					<?php
568
						if ($pconfig['gateway'] == $pconfig['monitor'])
569
							$monitor = "";
570
						else
571
							$monitor = htmlspecialchars($pconfig['monitor']);
572
					?>
573
					<input name="monitor" type="text" id="monitor" value="<?php echo htmlspecialchars($monitor); ?>" size="28" />
574
					<strong><?=gettext("Alternative monitor IP"); ?></strong> <br />
575
					<?=gettext("Enter an alternative address here to be used to monitor the link. This is used for the " .
576
					"quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond " .
577 a1dccfc6 Colin Fleming
					"to ICMP echo requests (pings)"); ?>.
578 0b844b73 Renato Botelho
					<br />
579
				</td>
580 023920e7 Ermal
			</tr>
581
			<tr>
582 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Advanced");?></td>
583 ec9bb09f jim-p
				<td width="78%" class="vtable">
584 0b844b73 Renato Botelho
					<?php $showbutton = (!empty($pconfig['latencylow']) || !empty($pconfig['latencyhigh']) || !empty($pconfig['losslow']) || !empty($pconfig['losshigh']) || (isset($pconfig['weight']) && $pconfig['weight'] > 1) || (isset($pconfig['interval']) && ($pconfig['interval'] > $apinger_default['interval'])) || (isset($pconfig['down']) && !($pconfig['down'] == $apinger_default['down']))); ?>
585
					<div id="showadvgatewaybox" <?php if ($showbutton) echo "style='display:none'"; ?>>
586 a1dccfc6 Colin Fleming
						<input type="button" onclick="show_advanced_gateway()" value="Advanced" /><?=gettext(" - Show advanced option"); ?>
587 0b844b73 Renato Botelho
					</div>
588
					<div id="showgatewayadv" <?php if (!$showbutton) echo "style='display:none'"; ?>>
589 a1dccfc6 Colin Fleming
						<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="advanced options">
590 0b844b73 Renato Botelho
							<tr>
591
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Weight");?></td>
592
								<td width="78%" class="vtable">
593
									<select name='weight' class='formfldselect' id='weight'>
594
									<?php
595
										for ($i = 1; $i < 6; $i++) {
596
											$selected = "";
597
											if ($pconfig['weight'] == $i)
598 a1dccfc6 Colin Fleming
												$selected = "selected='selected'";
599 0b844b73 Renato Botelho
											echo "<option value='{$i}' {$selected} >{$i}</option>";
600
										}
601
									?>
602
									</select>
603
									<br /><?=gettext("Weight for this gateway when used in a Gateway Group.");?> <br />
604
								</td>
605
							</tr>
606
							<tr>
607
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Latency thresholds");?></td>
608
								<td width="78%" class="vtable">
609
									<?=gettext("From");?>
610
									<input name="latencylow" type="text" class="formfld unknown" id="latencylow" size="2"
611 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['latencylow']);?>" />
612 0b844b73 Renato Botelho
									<?=gettext("To");?>
613
									<input name="latencyhigh" type="text" class="formfld unknown" id="latencyhigh" size="2"
614 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['latencyhigh']);?>" />
615
									<br/><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for latency in milliseconds. Default is %d/%d.", $apinger_default['latencylow'], $apinger_default['latencyhigh']));?></span>
616 0b844b73 Renato Botelho
								</td>
617
							</tr>
618
							<tr>
619
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Packet Loss thresholds");?></td>
620
								<td width="78%" class="vtable">
621
									<?=gettext("From");?>
622
									<input name="losslow" type="text" class="formfld unknown" id="losslow" size="2"
623 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['losslow']);?>" />
624 0b844b73 Renato Botelho
									<?=gettext("To");?>
625
									<input name="losshigh" type="text" class="formfld unknown" id="losshigh" size="2"
626 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['losshigh']);?>" />
627
									<br /><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for packet loss in %%. Default is %d/%d.", $apinger_default['losslow'], $apinger_default['losshigh']));?></span>
628 0b844b73 Renato Botelho
								</td>
629
							</tr>
630
							<tr>
631 490cd438 Phil Davis
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Probe Interval");?></td>
632 0b844b73 Renato Botelho
								<td width="78%" class="vtable">
633
									<input name="interval" type="text" class="formfld unknown" id="interval" size="2"
634 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['interval']);?>" />
635
									<br/><span class="vexpl">
636 0b844b73 Renato Botelho
										<?=gettext(sprintf("How often that an ICMP probe will be sent in seconds. Default is %d.", $apinger_default['interval']));?><br/><br/>
637 490cd438 Phil Davis
										<?=gettext("NOTE: The quality graph is averaged over seconds, not intervals, so as the probe interval is increased the accuracy of the quality graph is decreased.");?>
638 0b844b73 Renato Botelho
									</span>
639
								</td>
640
							</tr>
641
							<tr>
642
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Down");?></td>
643
								<td width="78%" class="vtable">
644
									<input name="down" type="text" class="formfld unknown" id="down" size="2"
645 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['down']);?>" />
646
									<br/><span class="vexpl"><?=gettext(sprintf("The number of seconds of failed probes before the alarm will fire. Default is %d.", $apinger_default['down']));?></span>
647 0b844b73 Renato Botelho
								</td>
648
							</tr>
649
							<tr>
650
								<td colspan="2">
651 490cd438 Phil Davis
									<?= gettext("The probe interval must be less than the down time, otherwise the gateway will seem to go down then come up again at the next probe."); ?><br/><br/>
652
									<?= gettext("The down time defines the length of time before the gateway is marked as down, but the accuracy is controlled by the probe interval. For example, if your down time is 40 seconds but on a 30 second probe interval, only one probe would have to fail before the gateway is marked down at the 40 second mark. By default, the gateway is considered down after 10 seconds, and the probe interval is 1 second, so 10 probes would have to fail before the gateway is marked down."); ?><br/>
653 0b844b73 Renato Botelho
								</td>
654
							</tr>
655
						</table>
656
					</div>
657 ec9bb09f jim-p
				</td>
658
			</tr>
659 f7203985 Ermal
			<tr>
660 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
661 ec9bb09f jim-p
				<td width="78%" class="vtable">
662 a1dccfc6 Colin Fleming
					<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
663
					<br/><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
664 ec9bb09f jim-p
				</td>
665
			</tr>
666
			<tr>
667 0b844b73 Renato Botelho
				<td width="22%" valign="top">&nbsp;</td>
668
				<td width="78%">
669 a1dccfc6 Colin Fleming
					<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /> <input type="button" value="<?=gettext("Cancel");?>" class="formbtn"  onclick="history.back()" />
670 0b844b73 Renato Botelho
					<?php if (isset($id) && $a_gateways[$id]): ?>
671 a1dccfc6 Colin Fleming
					<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
672 0b844b73 Renato Botelho
					<?php endif; ?>
673 ec9bb09f jim-p
				</td>
674
			</tr>
675 0b844b73 Renato Botelho
		</table>
676
	</form>
677 d173230c Seth Mos
<?php include("fend.inc"); ?>
678 a1dccfc6 Colin Fleming
<script type="text/javascript">
679
//<![CDATA[
680 33c06ef7 Ermal
monitor_change();
681 a1dccfc6 Colin Fleming
//]]>
682 d173230c Seth Mos
</script>
683
</body>
684 60037e00 bcyrill
</html>