Project

General

Profile

Download (18.9 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/*
3
	interfaces_assign.php
4
	part of m0n0wall (http://m0n0.ch/wall)
5
	Written by Jim McBeath based on existing m0n0wall files
6

    
7
        Copyright (C) 2013-2015 Electric Sheep Fencing, LP
8
	Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
9
	All rights reserved.
10

    
11
	Redistribution and use in source and binary forms, with or without
12
	modification, are permitted provided that the following conditions are met:
13

    
14
	1. Redistributions of source code must retain the above copyright notice,
15
	   this list of conditions and the following disclaimer.
16

    
17
	2. Redistributions in binary form must reproduce the above copyright
18
	   notice, this list of conditions and the following disclaimer in the
19
	   documentation and/or other materials provided with the distribution.
20

    
21
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
22
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
23
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
	POSSIBILITY OF SUCH DAMAGE.
31
*/
32
/*
33
	pfSense_BUILDER_BINARIES:	/bin/rm
34
	pfSense_MODULE:	interfaces
35
*/
36

    
37
##|+PRIV
38
##|*IDENT=page-interfaces-assignnetworkports
39
##|*NAME=Interfaces: Assign network ports page
40
##|*DESCR=Allow access to the 'Interfaces: Assign network ports' page.
41
##|*MATCH=interfaces_assign.php*
42
##|-PRIV
43

    
44
$pgtitle = array(gettext("Interfaces"),gettext("Assign network ports"));
45
$shortcut_section = "interfaces";
46

    
47
require("guiconfig.inc");
48
require("functions.inc");
49
require_once("filter.inc");
50
require("shaper.inc");
51
require("ipsec.inc");
52
require("vpn.inc");
53
require("captiveportal.inc");
54
require_once("rrd.inc");
55

    
56
function interface_assign_description($portinfo, $portname) {
57
	global $ovpn_descrs;
58
	if ($portinfo['isvlan']) {
59
		$descr = sprintf(gettext('VLAN %1$s on %2$s'),$portinfo['tag'],$portinfo['if']);
60
		if ($portinfo['descr'])
61
			$descr .= " (" . $portinfo['descr'] . ")";
62
	} elseif ($portinfo['iswlclone']) {
63
		$descr = $portinfo['cloneif'];
64
		if ($portinfo['descr'])
65
			$descr .= " (" . $portinfo['descr'] . ")";
66
	} elseif ($portinfo['isppp']) {
67
		$descr = $portinfo['descr'];
68
	} elseif ($portinfo['isbridge']) {
69
		$descr = strtoupper($portinfo['bridgeif']);
70
		if ($portinfo['descr'])
71
			$descr .= " (" . $portinfo['descr'] . ")";
72
	} elseif ($portinfo['isgre']) {
73
		$descr = "GRE {$portinfo['remote-addr']}";
74
		if ($portinfo['descr'])
75
			$descr .= " (" . $portinfo['descr'] . ")";
76
	} elseif ($portinfo['isgif']) {
77
		$descr = "GIF {$portinfo['remote-addr']}";
78
		if ($portinfo['descr'])
79
			$descr .= " (" . $portinfo['descr'] . ")";
80
	} elseif ($portinfo['islagg']) {
81
		$descr = strtoupper($portinfo['laggif']);
82
		if ($portinfo['descr'])
83
			$descr .= " (" . $portinfo['descr'] . ")";
84
	} elseif ($portinfo['isqinq']) {
85
		$descr =  $portinfo['descr'];
86
	} elseif (substr($portname, 0, 4) == 'ovpn') {
87
		$descr = $portname . " (" . $ovpn_descrs[substr($portname, 5)] . ")";
88
	} else
89
		$descr = $portname . " (" . $portinfo['mac'] . ")";
90

    
91
	return htmlspecialchars($descr);
92
}
93

    
94
/*
95
	In this file, "port" refers to the physical port name,
96
	while "interface" refers to LAN, WAN, or OPTn.
97
*/
98

    
99
/* get list without VLAN interfaces */
100
$portlist = get_interface_list();
101

    
102
/* add wireless clone interfaces */
103
if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) {
104
	foreach ($config['wireless']['clone'] as $clone) {
105
		$portlist[$clone['cloneif']] = $clone;
106
		$portlist[$clone['cloneif']]['iswlclone'] = true;
107
	}
108
}
109

    
110
/* add VLAN interfaces */
111
if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
112
	foreach ($config['vlans']['vlan'] as $vlan) {
113
		$portlist[$vlan['vlanif']] = $vlan;
114
		$portlist[$vlan['vlanif']]['isvlan'] = true;
115
	}
116
}
117

    
118
/* add Bridge interfaces */
119
if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
120
	foreach ($config['bridges']['bridged'] as $bridge) {
121
		$portlist[$bridge['bridgeif']] = $bridge;
122
		$portlist[$bridge['bridgeif']]['isbridge'] = true;
123
	}
124
}
125

    
126
/* add GIF interfaces */
127
if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) {
128
	foreach ($config['gifs']['gif'] as $gif) {
129
		$portlist[$gif['gifif']] = $gif;
130
		$portlist[$gif['gifif']]['isgif'] = true;
131
	}
132
}
133

    
134
/* add GRE interfaces */
135
if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) {
136
	foreach ($config['gres']['gre'] as $gre) {
137
		$portlist[$gre['greif']] = $gre;
138
		$portlist[$gre['greif']]['isgre'] = true;
139
	}
140
}
141

    
142
/* add LAGG interfaces */
143
if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
144
	foreach ($config['laggs']['lagg'] as $lagg) {
145
		$portlist[$lagg['laggif']] = $lagg;
146
		$portlist[$lagg['laggif']]['islagg'] = true;
147
		/* LAGG members cannot be assigned */
148
		$lagifs = explode(',', $lagg['members']);
149
		foreach ($lagifs as $lagif)
150
			if (isset($portlist[$lagif]))
151
				unset($portlist[$lagif]);
152
	}
153
}
154

    
155
/* add QinQ interfaces */
156
if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
157
	foreach ($config['qinqs']['qinqentry'] as $qinq) {
158
		$portlist["vlan{$qinq['tag']}"]['descr'] = "VLAN {$qinq['tag']}";
159
		$portlist["vlan{$qinq['tag']}"]['isqinq'] = true;
160
		/* QinQ members */
161
		$qinqifs = explode(' ', $qinq['members']);
162
		foreach ($qinqifs as $qinqif) {
163
			$portlist["vlan{$qinq['tag']}_{$qinqif}"]['descr'] = "QinQ {$qinqif}";
164
			$portlist["vlan{$qinq['tag']}_{$qinqif}"]['isqinq'] = true;
165
		}
166
	}
167
}
168

    
169
/* add PPP interfaces */
170
if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
171
	foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
172
		$portname = $ppp['if'];
173
		$portlist[$portname] = $ppp;
174
		$portlist[$portname]['isppp'] = true;
175
		$ports_base = basename($ppp['ports']);
176
		if (isset($ppp['descr']))
177
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}";
178
		else if (isset($ppp['username']))
179
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}";
180
		else
181
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})";
182
	}
183
}
184

    
185
$ovpn_descrs = array();
186
if (is_array($config['openvpn'])) {
187
	if (is_array($config['openvpn']['openvpn-server']))
188
		foreach ($config['openvpn']['openvpn-server'] as $s)
189
			$ovpn_descrs[$s['vpnid']] = $s['description'];
190
	if (is_array($config['openvpn']['openvpn-client']))
191
		foreach ($config['openvpn']['openvpn-client'] as $c)
192
			$ovpn_descrs[$c['vpnid']] = $c['description'];
193
}
194

    
195
if (isset($_POST['add_x']) && isset($_POST['if_add'])) {
196
	/* Be sure this port is not being used */
197
	$portused = false;
198
	foreach ($config['interfaces'] as $ifname => $ifdata) {
199
		if ($ifdata['if'] == $_PORT['if_add']) {
200
			$portused = true;
201
			break;
202
		}
203
	}
204

    
205
	if ($portused === false) {
206
		/* find next free optional interface number */
207
		if(!$config['interfaces']['lan']) {
208
			$newifname = gettext("lan");
209
			$descr = gettext("LAN");
210
		} else {
211
			for ($i = 1; $i <= count($config['interfaces']); $i++) {
212
				if (!$config['interfaces']["opt{$i}"])
213
					break;
214
			}
215
			$newifname = 'opt' . $i;
216
			$descr = "OPT" . $i;
217
		}
218

    
219
		$config['interfaces'][$newifname] = array();
220
		$config['interfaces'][$newifname]['descr'] = $descr;
221
		$config['interfaces'][$newifname]['if'] = $_POST['if_add'];
222
		if (preg_match($g['wireless_regex'], $_POST['if_add'])) {
223
			$config['interfaces'][$newifname]['wireless'] = array();
224
			interface_sync_wireless_clones($config['interfaces'][$newifname], false);
225
		}
226

    
227
		uksort($config['interfaces'], "compare_interface_friendly_names");
228

    
229
		/* XXX: Do not remove this. */
230
		unlink_if_exists("{$g['tmp_path']}/config.cache");
231

    
232
		write_config();
233

    
234
		$savemsg = gettext("Interface has been added.");
235
	}
236

    
237
} else if (isset($_POST['apply'])) {
238
	if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
239
		system_reboot();
240
		$rebootingnow = true;
241
	} else {
242
		write_config();
243

    
244
		$retval = filter_configure();
245
		$savemsg = get_std_save_message($retval);
246

    
247
		if (stristr($retval, "error") <> true)
248
			$savemsg = get_std_save_message($retval);
249
		else
250
			$savemsg = $retval;
251
	}
252

    
253
} else if (isset($_POST['Submit'])) {
254

    
255
	unset($input_errors);
256

    
257
	/* input validation */
258

    
259
	/* Build a list of the port names so we can see how the interfaces map */
260
	$portifmap = array();
261
	foreach ($portlist as $portname => $portinfo)
262
		$portifmap[$portname] = array();
263

    
264
	/* Go through the list of ports selected by the user,
265
	build a list of port-to-interface mappings in portifmap */
266
	foreach ($_POST as $ifname => $ifport) {
267
		if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt'))
268
			$portifmap[$ifport][] = strtoupper($ifname);
269
	}
270

    
271
	/* Deliver error message for any port with more than one assignment */
272
	foreach ($portifmap as $portname => $ifnames) {
273
		if (count($ifnames) > 1) {
274
			$errstr = sprintf(gettext('Port %1$s '.
275
				' was assigned to %2$s' .
276
				' interfaces:'), $portname, count($ifnames));
277

    
278
			foreach ($portifmap[$portname] as $ifn)
279
				$errstr .= " " . convert_friendly_interface_to_friendly_descr(strtolower($ifn)) . " (" . $ifn . ")";
280

    
281
			$input_errors[] = $errstr;
282
		} else if (count($ifnames) == 1 && preg_match('/^bridge[0-9]/', $portname) && is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
283
			foreach ($config['bridges']['bridged'] as $bridge) {
284
				if ($bridge['bridgeif'] != $portname)
285
					continue;
286

    
287
				$members = explode(",", strtoupper($bridge['members']));
288
				foreach ($members as $member) {
289
					if ($member == $ifnames[0]) {
290
						$input_errors[] = sprintf(gettext("You cannot set port %s to interface %s because this interface is a member of %s."), $portname, $member, $portname);
291
						break;
292
					}
293
				}
294
			}
295
		}
296
	}
297

    
298
	if (is_array($config['vlans']['vlan'])) {
299
		foreach ($config['vlans']['vlan'] as $vlan) {
300
			if (does_interface_exist($vlan['if']) == false)
301
				$input_errors[] = "Vlan parent interface {$vlan['if']} does not exist anymore so vlan id {$vlan['tag']} cannot be created please fix the issue before continuing.";
302
		}
303
	}
304

    
305
	if (!$input_errors) {
306
		/* No errors detected, so update the config */
307
		foreach ($_POST as $ifname => $ifport) {
308

    
309
			if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
310

    
311
				if (!is_array($ifport)) {
312
					$reloadif = false;
313
					if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) {
314
						interface_bring_down($ifname);
315
						/* Mark this to be reconfigured in any case. */
316
						$reloadif = true;
317
					}
318
					$config['interfaces'][$ifname]['if'] = $ifport;
319
					if (isset($portlist[$ifport]['isppp']))
320
						$config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type'];
321

    
322
					if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') {
323
						unset($config['interfaces'][$ifname]['ipaddr']);
324
						unset($config['interfaces'][$ifname]['subnet']);
325
						unset($config['interfaces'][$ifname]['ipaddrv6']);
326
						unset($config['interfaces'][$ifname]['subnetv6']);
327
					}
328

    
329
					/* check for wireless interfaces, set or clear ['wireless'] */
330
					if (preg_match($g['wireless_regex'], $ifport)) {
331
						if (!is_array($config['interfaces'][$ifname]['wireless']))
332
							$config['interfaces'][$ifname]['wireless'] = array();
333
					} else {
334
						unset($config['interfaces'][$ifname]['wireless']);
335
					}
336

    
337
					/* make sure there is a descr for all interfaces */
338
					if (!isset($config['interfaces'][$ifname]['descr']))
339
						$config['interfaces'][$ifname]['descr'] = strtoupper($ifname);
340

    
341
					if ($reloadif == true) {
342
						if (preg_match($g['wireless_regex'], $ifport))
343
							interface_sync_wireless_clones($config['interfaces'][$ifname], false);
344
						/* Reload all for the interface. */
345
						interface_configure($ifname, true);
346
					}
347
				}
348
			}
349
		}
350

    
351
		write_config();
352

    
353
		enable_rrd_graphing();
354
	}
355
} else {
356
	/* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
357
	unset($delbtn);
358
	foreach ($_POST as $pn => $pd) {
359
		if (preg_match("/del_(.+)_x/", $pn, $matches))
360
			$delbtn = $matches[1];
361
	}
362

    
363
	if (isset($delbtn)) {
364
		$id = $delbtn;
365

    
366
		if (link_interface_to_group($id))
367
			$input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue");
368
		else if (link_interface_to_bridge($id))
369
			$input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue");
370
		else if (link_interface_to_gre($id))
371
			$input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue");
372
		else if (link_interface_to_gif($id))
373
			$input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue");
374
		else {
375
			unset($config['interfaces'][$id]['enable']);
376
			$realid = get_real_interface($id);
377
			interface_bring_down($id);   /* down the interface */
378

    
379
			unset($config['interfaces'][$id]);	/* delete the specified OPTn or LAN*/
380

    
381
			if (is_array($config['dhcpd']) && is_array($config['dhcpd'][$id])) {
382
				unset($config['dhcpd'][$id]);
383
				services_dhcpd_configure();
384
			}
385

    
386
			if (count($config['filter']['rule']) > 0) {
387
				foreach ($config['filter']['rule'] as $x => $rule) {
388
					if($rule['interface'] == $id)
389
						unset($config['filter']['rule'][$x]);
390
				}
391
			}
392
			if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) {
393
				foreach ($config['nat']['rule'] as $x => $rule) {
394
					if($rule['interface'] == $id)
395
						unset($config['nat']['rule'][$x]['interface']);
396
				}
397
			}
398

    
399
			write_config();
400

    
401
			/* If we are in firewall/routing mode (not single interface)
402
			 * then ensure that we are not running DHCP on the wan which
403
			 * will make a lot of ISP's unhappy.
404
			 */
405
			if($config['interfaces']['lan'] && $config['dhcpd']['wan']) {
406
				unset($config['dhcpd']['wan']);
407
			}
408

    
409
			link_interface_to_vlans($realid, "update");
410

    
411
			$savemsg = gettext("Interface has been deleted.");
412
		}
413
	}
414
}
415

    
416
/* Create a list of unused ports */
417
$unused_portlist = array();
418
foreach ($portlist as $portname => $portinfo) {
419
	$portused = false;
420
	foreach ($config['interfaces'] as $ifname => $ifdata) {
421
		if ($ifdata['if'] == $portname) {
422
			$portused = true;
423
			break;
424
		}
425
	}
426
	if ($portused === false)
427
		$unused_portlist[$portname] = $portinfo;
428
}
429

    
430
include("head.inc");
431

    
432
if(file_exists("/var/run/interface_mismatch_reboot_needed"))
433
	if ($_POST) {
434
		if($rebootingnow)
435
			$savemsg = gettext("The system is now rebooting.  Please wait.");
436
		else
437
			$savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot.");
438
	} else {
439
		$savemsg = gettext("Interface mismatch detected.  Please resolve the mismatch and click 'Apply changes'.  The firewall will reboot afterwards.");
440
	}
441
?>
442

    
443
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
444
<?php include("fbegin.inc"); ?>
445

    
446
<form action="interfaces_assign.php" method="post" name="iform" id="iform">
447

    
448
<?php
449
if (file_exists("/tmp/reload_interfaces")) {
450
	echo "<p>\n";
451
	print_info_box_np(gettext("The interface configuration has been changed.<br />You must apply the changes in order for them to take effect."));
452
	echo "<br /></p>\n";
453
} elseif($savemsg)
454
	print_info_box($savemsg);
455

    
456
pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors");
457
if ($input_errors)
458
	print_input_errors($input_errors);
459
?>
460

    
461
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces assign">
462
	<tr><td class="tabnavtbl">
463
<?php
464
	$tab_array = array();
465
	$tab_array[0] = array(gettext("Interface assignments"), true, "interfaces_assign.php");
466
	$tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
467
	$tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
468
	$tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
469
	$tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
470
	$tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
471
	$tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php");
472
	$tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php");
473
	$tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php");
474
	$tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php");
475
	display_top_tabs($tab_array);
476
?>
477
	</td></tr>
478
	<tr><td>
479
		<div id="mainarea">
480
			<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
481
				<tr>
482
					<td class="listhdrr"><?=gettext("Interface"); ?></td>
483
					<td class="listhdr"><?=gettext("Network port"); ?></td>
484
					<td class="list">&nbsp;</td>
485
				</tr>
486
<?php
487
			foreach ($config['interfaces'] as $ifname => $iface):
488
				if ($iface['descr'])
489
					$ifdescr = $iface['descr'];
490
				else
491
					$ifdescr = strtoupper($ifname);
492
?>
493
				<tr>
494
					<td class="listlr" valign="middle"><strong><u><span onclick="location.href='/interfaces.php?if=<?=$ifname;?>'" style="cursor: pointer;"><?=$ifdescr;?></span></u></strong></td>
495
					<td valign="middle" class="listr">
496
						<select onchange="javascript:jQuery('#savediv').show();" name="<?=$ifname;?>" id="<?=$ifname;?>">
497
<?php
498
						foreach ($portlist as $portname => $portinfo):
499
?>
500
							<option  value="<?=$portname;?>"  <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
501
								<?=interface_assign_description($portinfo, $portname);?>
502
							</option>
503
<?php
504
						endforeach;
505
?>
506
						</select>
507
					</td>
508
					<td valign="middle" class="list">
509
<?php
510
					if ($ifname != 'wan'):
511
?>
512
						<input name="del_<?=$ifname;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
513
							title="<?=gettext("delete interface");?>"
514
							type="image" style="height:17;width:17;border:0"
515
							onclick="return confirm('<?=gettext("Do you really want to delete this interface?"); ?>')" />
516
<?php
517
					endif;
518
?>
519
					</td>
520
				</tr>
521
<?php
522
			endforeach;
523
			if (count($config['interfaces']) < count($portlist)):
524
?>
525
				<tr>
526
					<td class="list">
527
						<strong><?=gettext("Available network ports:");?></strong>
528
					</td>
529
					<td class="list">
530
						<select name="if_add" id="if_add">
531
<?php
532
						foreach ($unused_portlist as $portname => $portinfo):
533
?>
534
							<option  value="<?=$portname;?>"  <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
535
								<?=interface_assign_description($portinfo, $portname);?>
536
							</option>
537
<?php
538
						endforeach;
539
?>
540
						</select>
541
					</td>
542
					<td class="list">
543
						<input name="add" type="image" src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" style="width:17;height:17;border:0" title="<?=gettext("add selected interface");?>" />
544
					</td>
545
				</tr>
546
<?php
547
			endif;
548
?>
549
			</table>
550
		</div>
551
		<br />
552
		<div id='savediv' style='display:none'>
553
			<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /><br /><br />
554
		</div>
555
		<ul>
556
			<li><span class="vexpl"><?=gettext("Interfaces that are configured as members of a lagg(4) interface will not be shown."); ?></span></li>
557
		</ul>
558
	</td></tr>
559
</table>
560
</form>
561
<?php include("fend.inc"); ?>
562
</body>
563
</html>
(96-96/256)