Project

General

Profile

Download (26.4 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 d173230c Seth Mos
	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
				$subnet = gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn;
123
				if(!ip_in_subnet($_POST['gateway'], $subnet))
124
					$input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within the chosen interface's subnet '%2\$s'."), $_POST['gateway'],$subnet);
125 e227df57 Ermal Lu?i
			}
126 e7d3b8f4 Seth Mos
		}
127 b5b5bcc0 Ermal
		else if(is_ipaddrv6($_POST['gateway'])) {
128 2a9cb3b2 smos
			/* do not do a subnet match on a link local address, it's valid */
129
			if(! preg_match("/fe80::/", $_POST['gateway'])) {
130
				$parent_ip = get_interface_ipv6($_POST['interface']);
131
				$parent_sn = get_interface_subnetv6($_POST['interface']);
132
				if(empty($parent_ip) || empty($parent_sn)) {
133 60037e00 bcyrill
					$input_errors[] = gettext("You can not use a IPv6 Gateway Address on a IPv4 only interface.");
134 2a9cb3b2 smos
				} else {
135 35af7141 smos
					$subnet = gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn;
136
					if(!ip_in_subnet($_POST['gateway'], $subnet))
137
						$input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within the chosen interface's subnet '%2\$s'."), $_POST['gateway'],$subnet);
138
				}
139 7617e245 Seth Mos
			}
140
		}
141 9e80d14c Seth Mos
142
		if (!empty($config['interfaces'][$_POST['interface']]['ipaddr'])) {
143
			if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic"))
144
				$input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration.");
145
		}
146
		if (!empty($config['interfaces'][$_POST['interface']]['ipaddrv6'])) {
147
			if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddrv6']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic"))
148
				$input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration.");
149
		}
150 e7d3b8f4 Seth Mos
	}
151 883c53c9 Ermal Lu?i
	if (($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
152 df152a88 Carlos Eduardo Ramos
		$input_errors[] = gettext("A valid monitor IP address must be specified.");
153 d173230c Seth Mos
	}
154 2972b3e7 smos
	/* only allow correct IPv4 and IPv6 gateway addresses */
155
	if (($_POST['gateway'] <> "") && is_ipaddr($_POST['gateway']) && $_POST['gateway'] != "dynamic") {
156
		if(is_ipaddrv6($_POST['gateway']) && ($_POST['ipprotocol'] == "inet")) {
157
			$input_errors[] = gettext("The IPv6 gateway address '{$_POST['gateway']}' can not be used as a IPv4 gateway'.");
158
		}
159
		if(is_ipaddrv4($_POST['gateway']) && ($_POST['ipprotocol'] == "inet6")) {
160
			$input_errors[] = gettext("The IPv4 gateway address '{$_POST['gateway']}' can not be used as a IPv6 gateway'.");
161
		}
162
	}
163
	/* only allow correct IPv4 and IPv6 monitor addresses */
164 9e80d14c Seth Mos
	if (($_POST['monitor'] <> "") && is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
165 2972b3e7 smos
		if(is_ipaddrv6($_POST['monitor']) && ($_POST['ipprotocol'] == "inet")) {
166
			$input_errors[] = gettext("The IPv6 monitor address '{$_POST['monitor']}' can not be used on a IPv4 gateway'.");
167 c1d36d26 smos
		}
168 2972b3e7 smos
		if(is_ipaddrv4($_POST['monitor']) && ($_POST['ipprotocol'] == "inet6")) {
169
			$input_errors[] = gettext("The IPv4 monitor address '{$_POST['monitor']}' can not be used on a IPv6 gateway'.");
170 9e80d14c Seth Mos
		}
171
	}
172 d173230c Seth Mos
173 8b060357 Seth Mos
	if (isset($_POST['name'])) {
174 31ace93c Seth Mos
		/* check for overlaps */
175
		foreach ($a_gateways as $gateway) {
176 2328dcc5 Seth Mos
			if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) {
177 23fafd14 Ermal
				if ($gateway['name'] != $_POST['name'])
178 33802679 Chris Buechler
					$input_errors[] = gettext("Changing name on a gateway is not allowed.");
179 31ace93c Seth Mos
				continue;
180
			}
181 2328dcc5 Seth Mos
			if($_POST['name'] <> "") {
182 283d78c6 Darren Embry
				if (($gateway['name'] <> "") && ($_POST['name'] == $gateway['name']) && ($gateway['attribute'] !== "system")) {
183 0e94685b Renato Botelho
					$input_errors[] = sprintf(gettext('The gateway name "%s" already exists.'), $_POST['name']);
184 2328dcc5 Seth Mos
					break;
185
				}
186
			}
187
			if(is_ipaddr($_POST['gateway'])) {
188 283d78c6 Darren Embry
				if (($gateway['gateway'] <> "") && ($_POST['gateway'] == $gateway['gateway']) && ($gateway['attribute'] !== "system")) {
189 0e94685b Renato Botelho
					$input_errors[] = sprintf(gettext('The gateway IP address "%s" already exists.'), $_POST['gateway']);
190 2328dcc5 Seth Mos
					break;
191
				}
192 31ace93c Seth Mos
			}
193 2328dcc5 Seth Mos
			if(is_ipaddr($_POST['monitor'])) {
194 283d78c6 Darren Embry
				if (($gateway['monitor'] <> "") && ($_POST['monitor'] == $gateway['monitor']) && ($gateway['attribute'] !== "system")) {
195 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']);
196 2328dcc5 Seth Mos
					break;
197
				}
198 31ace93c Seth Mos
			}
199 d173230c Seth Mos
		}
200
	}
201
202 eb233517 Phil Davis
	/* input validation of apinger advanced parameters */
203
	if($_POST['latencylow']) {
204
		if (! is_numeric($_POST['latencylow'])) {
205
			$input_errors[] = gettext("The low latency threshold needs to be a numeric value.");
206
		} else {
207
			if ($_POST['latencylow'] < 1) {
208
				$input_errors[] = gettext("The low latency threshold needs to be positive.");
209
			}
210
		}
211
	}
212
213
	if($_POST['latencyhigh']) {
214
		if (! is_numeric($_POST['latencyhigh'])) {
215
			$input_errors[] = gettext("The high latency threshold needs to be a numeric value.");
216
		} else {
217
			if ($_POST['latencyhigh'] < 1) {
218
				$input_errors[] = gettext("The high latency threshold needs to be positive.");
219
			}
220
		}
221
	}
222
223
	if($_POST['losslow']) {
224
		if (! is_numeric($_POST['losslow'])) {
225
			$input_errors[] = gettext("The low Packet Loss threshold needs to be a numeric value.");
226
		} else {
227
			if ($_POST['losslow'] < 1) {
228
				$input_errors[] = gettext("The low Packet Loss threshold needs to be positive.");
229
			}
230
			if ($_POST['losslow'] >= 100) {
231
				$input_errors[] = gettext("The low Packet Loss threshold needs to be less than 100.");
232
			}
233
		}
234
	}
235
236
	if($_POST['losshigh']) {
237
		if (! is_numeric($_POST['losshigh'])) {
238
			$input_errors[] = gettext("The high Packet Loss threshold needs to be a numeric value.");
239
		} else {
240
			if ($_POST['losshigh'] < 1) {
241
				$input_errors[] = gettext("The high Packet Loss threshold needs to be positive.");
242
			}
243
			if ($_POST['losshigh'] > 100) {
244
				$input_errors[] = gettext("The high Packet Loss threshold needs to be 100 or less.");
245
			}
246
		}
247
	}
248
249
	if(($_POST['latencylow']) && ($_POST['latencyhigh'])) {
250
		if ((is_numeric($_POST['latencylow'])) && (is_numeric($_POST['latencyhigh']))) {
251
			if(($_POST['latencylow'] > $_POST['latencyhigh'])) {
252
				$input_errors[] = gettext("The high latency threshold needs to be higher than the low latency threshold");
253
			}
254
		}
255
	} else {
256
		if($_POST['latencylow']){
257
			if (is_numeric($_POST['latencylow'])) {
258
				if($_POST['latencylow'] > $apinger_default['latencyhigh']) {
259
					$input_errors[] = gettext(sprintf("The low latency threshold needs to be less than the default high latency threshold (%d)", $apinger_default['latencyhigh']));
260
				}
261
			}
262
		}
263
		if($_POST['latencyhigh']){
264
			if (is_numeric($_POST['latencyhigh'])) {
265
				if($_POST['latencyhigh'] < $apinger_default['latencylow']) {
266
					$input_errors[] = gettext(sprintf("The high latency threshold needs to be higher than the default low latency threshold (%d)", $apinger_default['latencylow']));
267
				}
268
			}
269
		}
270
	}
271
272
	if(($_POST['losslow']) && ($_POST['losshigh'])){
273
		if ((is_numeric($_POST['losslow'])) && (is_numeric($_POST['losshigh']))) {
274
			if($_POST['losslow'] > $_POST['losshigh']) {
275
				$input_errors[] = gettext("The high Packet Loss threshold needs to be higher than the low Packet Loss threshold");
276
			}
277
		}
278
	} else {
279
		if($_POST['losslow']){
280
			if (is_numeric($_POST['losslow'])) {
281
				if($_POST['losslow'] > $apinger_default['losshigh']) {
282
					$input_errors[] = gettext(sprintf("The low Packet Loss threshold needs to be less than the default high Packet Loss threshold (%d)", $apinger_default['losshigh']));
283
				}
284
			}
285
		}
286
		if($_POST['losshigh']){
287
			if (is_numeric($_POST['losshigh'])) {
288
				if($_POST['losshigh'] < $apinger_default['losslow']) {
289
					$input_errors[] = gettext(sprintf("The high Packet Loss threshold needs to be higher than the default low Packet Loss threshold (%d)", $apinger_default['losslow']));
290
				}
291
			}
292
		}
293
	}
294
295
	if($_POST['interval']) {
296
		if (! is_numeric($_POST['interval'])) {
297
			$input_errors[] = gettext("The frequency probe interval needs to be a numeric value.");
298
		} else {
299
			if ($_POST['interval'] < 1) {
300
				$input_errors[] = gettext("The frequency probe interval needs to be positive.");
301
			}
302
		}
303
	}
304
305 023920e7 Ermal
	if($_POST['down']) {
306 eb233517 Phil Davis
		if (! is_numeric($_POST['down'])) {
307
			$input_errors[] = gettext("The down time setting needs to be a numeric value.");
308
		} else {
309
			if ($_POST['down'] < 1) {
310
				$input_errors[] = gettext("The down time setting needs to be positive.");
311
			}
312
		}
313
	}
314
315
	if(($_POST['interval']) && ($_POST['down'])){
316
		if ((is_numeric($_POST['interval'])) && (is_numeric($_POST['down']))) {
317
			if($_POST['interval'] > $_POST['down']) {
318
				$input_errors[] = gettext("The Frequency Probe interval needs to be less than the down time setting.");
319
			}
320
		}
321
	} else {
322
		if($_POST['interval']){
323
			if (is_numeric($_POST['interval'])) {
324
				if($_POST['interval'] > $apinger_default['down']) {
325
					$input_errors[] = gettext(sprintf("The Frequency Probe interval needs to be less than the default down time setting (%d)", $apinger_default['down']));
326
				}
327
			}
328
		}
329
		if($_POST['down']){
330
			if (is_numeric($_POST['down'])) {
331
				if($_POST['down'] < $apinger_default['interval']) {
332
					$input_errors[] = gettext(sprintf("The down time setting needs to be higher than the default Frequency Probe interval (%d)", $apinger_default['interval']));
333
				}
334
			}
335
		}
336
	}
337 023920e7 Ermal
338 d173230c Seth Mos
	if (!$input_errors) {
339 c6865c5e Ermal
		$reloadif = "";
340 d44d26c1 Ermal
		$gateway = array();
341
342
		if (empty($_POST['interface']))
343
			$gateway['interface'] = $pconfig['friendlyiface'];
344
		else
345 3befe730 Ermal
			$gateway['interface'] = $_POST['interface'];
346 d44d26c1 Ermal
		if (is_ipaddr($_POST['gateway']))
347
			$gateway['gateway'] = $_POST['gateway'];
348
		else
349
			$gateway['gateway'] = "dynamic";
350
		$gateway['name'] = $_POST['name'];
351
		$gateway['weight'] = $_POST['weight'];
352 e02caf4a smos
		$gateway['ipprotocol'] = $_POST['ipprotocol'];
353 f7203985 Ermal
		$gateway['interval'] = $_POST['interval'];
354 d44d26c1 Ermal
		$gateway['descr'] = $_POST['descr'];
355 33c06ef7 Ermal
		if ($_POST['monitor_disable'] == "yes")
356
			$gateway['monitor_disable'] = true;
357
		else if (is_ipaddr($_POST['monitor']))
358 d44d26c1 Ermal
			$gateway['monitor'] = $_POST['monitor'];
359
360
		if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") {
361
			$i = 0;
362 2f14d021 Seth Mos
			/* remove the default gateway bits for all gateways with the same address family */
363 a531d687 Ermal
			foreach($a_gateway_item as $gw) {
364 2f14d021 Seth Mos
				if(is_ipaddrv4($gateway['gateway']) && is_ipaddrv4($gw['gateway'])) {
365
					unset($config['gateways']['gateway_item'][$i]['defaultgw']);
366
					if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
367
						$reloadif = $gw['interface'];
368
				}
369
				if(is_ipaddrv6($gateway['gateway']) && is_ipaddrv6($gw['gateway'])) {
370
					unset($config['gateways']['gateway_item'][$i]['defaultgw']);
371
					if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
372
						$reloadif = $gw['interface'];
373
				}
374 d44d26c1 Ermal
				$i++;
375 bb849003 Ermal
			}
376 d44d26c1 Ermal
			$gateway['defaultgw'] = true;
377 124aee67 Chris Buechler
		}
378 d44d26c1 Ermal
379
		if ($_POST['latencylow'])
380
			$gateway['latencylow'] = $_POST['latencylow'];
381
		if ($_POST['latencyhigh'])
382 0b844b73 Renato Botelho
			$gateway['latencyhigh'] = $_POST['latencyhigh'];
383 d44d26c1 Ermal
		if ($_POST['losslow'])
384 a0edece9 Darren Embry
			$gateway['losslow'] = $_POST['losslow'];
385 d44d26c1 Ermal
		if ($_POST['losshigh'])
386 0b844b73 Renato Botelho
			$gateway['losshigh'] = $_POST['losshigh'];
387 d44d26c1 Ermal
		if ($_POST['down'])
388 0b844b73 Renato Botelho
			$gateway['down'] = $_POST['down'];
389 d44d26c1 Ermal
390
		/* when saving the manual gateway we use the attribute which has the corresponding id */
391
		if (isset($id) && $a_gateway_item[$id])
392
			$a_gateway_item[$id] = $gateway;
393
		else
394
			$a_gateway_item[] = $gateway;
395
396 a368a026 Ermal Lu?i
		mark_subsystem_dirty('staticroutes');
397 0b844b73 Renato Botelho
398 d173230c Seth Mos
		write_config();
399 d44d26c1 Ermal
400 ad862220 Charlie
		if($_REQUEST['isAjax']) {
401
			echo $_POST['name'];
402
			exit;
403 c6865c5e Ermal
		} else if (!empty($reloadif))
404
			send_event("interface reconfigure {$reloadif}");
405 0b844b73 Renato Botelho
406 d173230c Seth Mos
		header("Location: system_gateways.php");
407
		exit;
408 ea939fc3 Ermal
	} else {
409 a0edece9 Darren Embry
		if ($_REQUEST['isAjax']) {
410
			header("HTTP/1.0 500 Internal Server Error");
411
			header("Content-type: text/plain");
412
			foreach ($input_errors as $error) {
413
				echo("$error\n");
414
			}
415
			exit;
416
		}
417 0b844b73 Renato Botelho
418 883c53c9 Ermal Lu?i
		$pconfig = $_POST;
419 ea939fc3 Ermal
		if (empty($_POST['friendlyiface']))
420
			$pconfig['friendlyiface'] = $_POST['interface'];
421
	}
422 d173230c Seth Mos
}
423
424 2328dcc5 Seth Mos
425 df152a88 Carlos Eduardo Ramos
$pgtitle = array(gettext("System"),gettext("Gateways"),gettext("Edit gateway"));
426 b32dd0a6 jim-p
$shortcut_section = "gateways";
427 02ca24c9 jim-p
428 d173230c Seth Mos
include("head.inc");
429
430
?>
431
432
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
433
<?php include("fbegin.inc"); ?>
434 a1dccfc6 Colin Fleming
<script type="text/javascript">
435
//<![CDATA[
436 023920e7 Ermal
function show_advanced_gateway() {
437 0b844b73 Renato Botelho
	document.getElementById("showadvgatewaybox").innerHTML='';
438
	aodiv = document.getElementById('showgatewayadv');
439
	aodiv.style.display = "block";
440 023920e7 Ermal
}
441 33c06ef7 Ermal
function monitor_change() {
442 0b844b73 Renato Botelho
	document.iform.monitor.disabled = document.iform.monitor_disable.checked;
443 33c06ef7 Ermal
}
444 a1dccfc6 Colin Fleming
//]]>
445 883c53c9 Ermal Lu?i
</script>
446 d173230c Seth Mos
<?php if ($input_errors) print_input_errors($input_errors); ?>
447 0b844b73 Renato Botelho
	<form action="system_gateways_edit.php" method="post" name="iform" id="iform">
448 124aee67 Chris Buechler
	<?php
449 e9df5769 Seth Mos
450
	/* If this is a system gateway we need this var */
451 124aee67 Chris Buechler
	if(($pconfig['attribute'] == "system") || is_numeric($pconfig['attribute'])) {
452 a1dccfc6 Colin Fleming
		echo "<input type='hidden' name='attribute' id='attribute' value='" . htmlspecialchars($pconfig['attribute']) . "' />\n";
453 124aee67 Chris Buechler
	}
454 a1dccfc6 Colin Fleming
	echo "<input type='hidden' name='friendlyiface' id='friendlyiface' value='" . htmlspecialchars($pconfig['friendlyiface']) . "' />\n";
455 124aee67 Chris Buechler
	?>
456 a1dccfc6 Colin Fleming
		<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system gateways edit">
457 0b844b73 Renato Botelho
			<tr>
458
				<td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway"); ?></td>
459
			</tr>
460
			<tr>
461
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
462
				<td width="78%" class="vtable">
463 a1dccfc6 Colin Fleming
					<select name='interface' class='formselect'>
464 0b844b73 Renato Botelho
					<?php
465
						$interfaces = get_configured_interface_with_descr(false, true);
466
						foreach ($interfaces as $iface => $ifacename) {
467
							echo "<option value=\"{$iface}\"";
468
							if ($iface == $pconfig['friendlyiface'])
469 a1dccfc6 Colin Fleming
								echo " selected='selected'";
470 0b844b73 Renato Botelho
							echo ">" . htmlspecialchars($ifacename) . "</option>";
471
						}
472
						if (is_package_installed("openbgpd") == 1) {
473
							echo "<option value=\"bgpd\"";
474
							if ($pconfig['interface'] == "bgpd")
475 a1dccfc6 Colin Fleming
								echo " selected='selected'";
476 0b844b73 Renato Botelho
							echo ">" . gettext("Use BGPD") . "</option>";
477
						}
478
					?>
479 a1dccfc6 Colin Fleming
					</select><br/>
480 0b844b73 Renato Botelho
					<span class="vexpl"><?=gettext("Choose which interface this gateway applies to."); ?></span>
481
				</td>
482
			</tr>
483
			<tr>
484
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Address Family"); ?></td>
485
				<td width="78%" class="vtable">
486
					<select name='ipprotocol' class='formselect' >
487
					<?php
488
						$options = array("inet" => "IPv4", "inet6" => "IPv6");
489
						foreach ($options as $name => $string) {
490
							echo "<option value=\"{$name}\"";
491
							if ($name == $pconfig['ipprotocol'])
492 a1dccfc6 Colin Fleming
								echo " selected='selected'";
493 0b844b73 Renato Botelho
							echo ">" . htmlspecialchars($string) . "</option>\n";
494
						}
495
					?>
496 a1dccfc6 Colin Fleming
					</select><br/>
497 0b844b73 Renato Botelho
					<span class="vexpl"><?=gettext("Choose the Internet Protocol this gateway uses."); ?></span>
498
				</td>
499
			</tr>
500
			<tr>
501
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
502
				<td width="78%" class="vtable">
503 a1dccfc6 Colin Fleming
					<input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
504
					<br/><span class="vexpl"><?=gettext("Gateway name"); ?></span>
505 0b844b73 Renato Botelho
				</td>
506
			</tr>
507
			<tr>
508
				<td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
509
				<td width="78%" class="vtable">
510 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']); ?>" />
511
					<br/><span class="vexpl"><?=gettext("Gateway IP address"); ?></span>
512 0b844b73 Renato Botelho
				</td>
513
			</tr>
514 023920e7 Ermal
			<tr>
515 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Default Gateway"); ?></td>
516
				<td width="78%" class="vtable">
517 a1dccfc6 Colin Fleming
					<input name="defaultgw" type="checkbox" id="defaultgw" value="yes" <?php if ($pconfig['defaultgw'] == true) echo "checked=\"checked\""; ?> />
518 0b844b73 Renato Botelho
					<strong><?=gettext("Default Gateway"); ?></strong><br />
519
					<?=gettext("This will select the above gateway as the default gateway"); ?>
520
				</td>
521
			</tr>
522
			<tr>
523
				<td width="22%" valign="top" class="vncell"><?=gettext("Disable Gateway Monitoring"); ?></td>
524
				<td width="78%" class="vtable">
525 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()" />
526 0b844b73 Renato Botelho
					<strong><?=gettext("Disable Gateway Monitoring"); ?></strong><br />
527
					<?=gettext("This will consider this gateway as always being up"); ?>
528
				</td>
529
			</tr>
530
			<tr>
531
				<td width="22%" valign="top" class="vncell"><?=gettext("Monitor IP"); ?></td>
532
				<td width="78%" class="vtable">
533
					<?php
534
						if ($pconfig['gateway'] == $pconfig['monitor'])
535
							$monitor = "";
536
						else
537
							$monitor = htmlspecialchars($pconfig['monitor']);
538
					?>
539
					<input name="monitor" type="text" id="monitor" value="<?php echo htmlspecialchars($monitor); ?>" size="28" />
540
					<strong><?=gettext("Alternative monitor IP"); ?></strong> <br />
541
					<?=gettext("Enter an alternative address here to be used to monitor the link. This is used for the " .
542
					"quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond " .
543 a1dccfc6 Colin Fleming
					"to ICMP echo requests (pings)"); ?>.
544 0b844b73 Renato Botelho
					<br />
545
				</td>
546 023920e7 Ermal
			</tr>
547
			<tr>
548 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Advanced");?></td>
549 ec9bb09f jim-p
				<td width="78%" class="vtable">
550 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']))); ?>
551
					<div id="showadvgatewaybox" <?php if ($showbutton) echo "style='display:none'"; ?>>
552 a1dccfc6 Colin Fleming
						<input type="button" onclick="show_advanced_gateway()" value="Advanced" /><?=gettext(" - Show advanced option"); ?>
553 0b844b73 Renato Botelho
					</div>
554
					<div id="showgatewayadv" <?php if (!$showbutton) echo "style='display:none'"; ?>>
555 a1dccfc6 Colin Fleming
						<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="advanced options">
556 0b844b73 Renato Botelho
							<tr>
557
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Weight");?></td>
558
								<td width="78%" class="vtable">
559
									<select name='weight' class='formfldselect' id='weight'>
560
									<?php
561
										for ($i = 1; $i < 6; $i++) {
562
											$selected = "";
563
											if ($pconfig['weight'] == $i)
564 a1dccfc6 Colin Fleming
												$selected = "selected='selected'";
565 0b844b73 Renato Botelho
											echo "<option value='{$i}' {$selected} >{$i}</option>";
566
										}
567
									?>
568
									</select>
569
									<br /><?=gettext("Weight for this gateway when used in a Gateway Group.");?> <br />
570
								</td>
571
							</tr>
572
							<tr>
573
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Latency thresholds");?></td>
574
								<td width="78%" class="vtable">
575
									<?=gettext("From");?>
576
									<input name="latencylow" type="text" class="formfld unknown" id="latencylow" size="2"
577 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['latencylow']);?>" />
578 0b844b73 Renato Botelho
									<?=gettext("To");?>
579
									<input name="latencyhigh" type="text" class="formfld unknown" id="latencyhigh" size="2"
580 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['latencyhigh']);?>" />
581
									<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>
582 0b844b73 Renato Botelho
								</td>
583
							</tr>
584
							<tr>
585
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Packet Loss thresholds");?></td>
586
								<td width="78%" class="vtable">
587
									<?=gettext("From");?>
588
									<input name="losslow" type="text" class="formfld unknown" id="losslow" size="2"
589 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['losslow']);?>" />
590 0b844b73 Renato Botelho
									<?=gettext("To");?>
591
									<input name="losshigh" type="text" class="formfld unknown" id="losshigh" size="2"
592 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['losshigh']);?>" />
593
									<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>
594 0b844b73 Renato Botelho
								</td>
595
							</tr>
596
							<tr>
597
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Frequency Probe");?></td>
598
								<td width="78%" class="vtable">
599
									<input name="interval" type="text" class="formfld unknown" id="interval" size="2"
600 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['interval']);?>" />
601
									<br/><span class="vexpl">
602 0b844b73 Renato Botelho
										<?=gettext(sprintf("How often that an ICMP probe will be sent in seconds. Default is %d.", $apinger_default['interval']));?><br/><br/>
603
										<?=gettext("NOTE: The quality graph is averaged over seconds, not intervals, so as the frequency probe is increased the accuracy of the quality graph is decreased.");?>
604
									</span>
605
								</td>
606
							</tr>
607
							<tr>
608
								<td width="22%" valign="top" class="vncellreq"><?=gettext("Down");?></td>
609
								<td width="78%" class="vtable">
610
									<input name="down" type="text" class="formfld unknown" id="down" size="2"
611 a1dccfc6 Colin Fleming
										value="<?=htmlspecialchars($pconfig['down']);?>" />
612
									<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>
613 0b844b73 Renato Botelho
								</td>
614
							</tr>
615
							<tr>
616
								<td colspan="2">
617
									<?= gettext("NOTE: The Frequency 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/>
618
								</td>
619
							</tr>
620
						</table>
621
					</div>
622 ec9bb09f jim-p
				</td>
623
			</tr>
624 f7203985 Ermal
			<tr>
625 0b844b73 Renato Botelho
				<td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
626 ec9bb09f jim-p
				<td width="78%" class="vtable">
627 a1dccfc6 Colin Fleming
					<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
628
					<br/><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
629 ec9bb09f jim-p
				</td>
630
			</tr>
631
			<tr>
632 0b844b73 Renato Botelho
				<td width="22%" valign="top">&nbsp;</td>
633
				<td width="78%">
634 a1dccfc6 Colin Fleming
					<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /> <input type="button" value="<?=gettext("Cancel");?>" class="formbtn"  onclick="history.back()" />
635 0b844b73 Renato Botelho
					<?php if (isset($id) && $a_gateways[$id]): ?>
636 a1dccfc6 Colin Fleming
					<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
637 0b844b73 Renato Botelho
					<?php endif; ?>
638 ec9bb09f jim-p
				</td>
639
			</tr>
640 0b844b73 Renato Botelho
		</table>
641
	</form>
642 d173230c Seth Mos
<?php include("fend.inc"); ?>
643 a1dccfc6 Colin Fleming
<script type="text/javascript">
644
//<![CDATA[
645 33c06ef7 Ermal
monitor_change();
646 a1dccfc6 Colin Fleming
//]]>
647 d173230c Seth Mos
</script>
648
</body>
649 60037e00 bcyrill
</html>