Project

General

Profile

Download (17.6 KB) Statistics
| Branch: | Tag: | Revision:
1 ef88e1e1 Renato Botelho
<?php
2 5b237745 Scott Ullrich
/*
3
	interfaces_assign.php
4
	part of m0n0wall (http://m0n0.ch/wall)
5
	Written by Jim McBeath based on existing m0n0wall files
6 ef88e1e1 Renato Botelho
7 ce77a9c4 Phil Davis
	Copyright (C) 2013-2015 Electric Sheep Fencing, LP
8 94a77286 Scott Ullrich
	Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
9 5b237745 Scott Ullrich
	All rights reserved.
10 ef88e1e1 Renato Botelho
11 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
12
	modification, are permitted provided that the following conditions are met:
13 ef88e1e1 Renato Botelho
14 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
15
	   this list of conditions and the following disclaimer.
16 ef88e1e1 Renato Botelho
17 5b237745 Scott Ullrich
	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 ef88e1e1 Renato Botelho
21 5b237745 Scott Ullrich
	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 7ac5a4cb Scott Ullrich
/*
33
	pfSense_BUILDER_BINARIES:	/bin/rm
34
	pfSense_MODULE:	interfaces
35
*/
36 5b237745 Scott Ullrich
37 6b07c15a Matthew Grooms
##|+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 8cc6876f groo
$pgtitle = array(gettext("Interfaces"),gettext("Assign network ports"));
45 b32dd0a6 jim-p
$shortcut_section = "interfaces";
46 af1e2031 jim-p
47 5b237745 Scott Ullrich
require("guiconfig.inc");
48 5a7d827b sullrich
require("functions.inc");
49 f6339216 jim-p
require_once("filter.inc");
50 5a7d827b sullrich
require("shaper.inc");
51
require("ipsec.inc");
52
require("vpn.inc");
53 4c86a165 sullrich
require("captiveportal.inc");
54 1b34f8a7 Ermal
require_once("rrd.inc");
55 5b237745 Scott Ullrich
56 1c4b1636 Renato Botelho
function interface_assign_description($portinfo, $portname) {
57 d4b9bc5a Phil Davis
	global $ovpn_descrs;
58 1c4b1636 Renato Botelho
	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 5b237745 Scott Ullrich
/*
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 7c53bc7b Erik Fonnesbeck
/* 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 5b237745 Scott Ullrich
/* add VLAN interfaces */
111
if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
112
	foreach ($config['vlans']['vlan'] as $vlan) {
113 d59557dc Ermal Luçi
		$portlist[$vlan['vlanif']] = $vlan;
114
		$portlist[$vlan['vlanif']]['isvlan'] = true;
115 5b237745 Scott Ullrich
	}
116
}
117
118 38738505 Ermal Luçi
/* add Bridge interfaces */
119 b47c94bd Ermal Luçi
if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
120 ef88e1e1 Renato Botelho
	foreach ($config['bridges']['bridged'] as $bridge) {
121
		$portlist[$bridge['bridgeif']] = $bridge;
122
		$portlist[$bridge['bridgeif']]['isbridge'] = true;
123
	}
124 38738505 Ermal Luçi
}
125
126
/* add GIF interfaces */
127
if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) {
128 ef88e1e1 Renato Botelho
	foreach ($config['gifs']['gif'] as $gif) {
129
		$portlist[$gif['gifif']] = $gif;
130
		$portlist[$gif['gifif']]['isgif'] = true;
131
	}
132 38738505 Ermal Luçi
}
133
134
/* add GRE interfaces */
135
if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) {
136 ef88e1e1 Renato Botelho
	foreach ($config['gres']['gre'] as $gre) {
137
		$portlist[$gre['greif']] = $gre;
138
		$portlist[$gre['greif']]['isgre'] = true;
139
	}
140 38738505 Ermal Luçi
}
141
142 dbdd08af Ermal Luçi
/* add LAGG interfaces */
143 c720925c Ermal Luçi
if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
144 ef88e1e1 Renato Botelho
	foreach ($config['laggs']['lagg'] as $lagg) {
145
		$portlist[$lagg['laggif']] = $lagg;
146
		$portlist[$lagg['laggif']]['islagg'] = true;
147 dbdd08af Ermal Luçi
		/* 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 ef88e1e1 Renato Botelho
	}
153 c720925c Ermal Luçi
}
154
155 265188ea Ermal Lu?i
/* add QinQ interfaces */
156
if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
157 ef88e1e1 Renato Botelho
	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 265188ea Ermal Lu?i
}
168 c720925c Ermal Luçi
169 860c4e80 Chris Buechler
/* add PPP interfaces */
170
if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
171 611ae852 Ermal
	foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
172 99c26d44 gnhb
		$portname = $ppp['if'];
173 860c4e80 Chris Buechler
		$portlist[$portname] = $ppp;
174
		$portlist[$portname]['isppp'] = true;
175 3f2ef8d7 gnhb
		$ports_base = basename($ppp['ports']);
176 42809b4a gnhb
		if (isset($ppp['descr']))
177 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}";
178 00b702cc gnhb
		else if (isset($ppp['username']))
179 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}";
180 42809b4a gnhb
		else
181 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})";
182 860c4e80 Chris Buechler
	}
183
}
184
185 144fbff2 jim-p
$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 41ea4cf3 Sjon Hortensius
if (isset($_POST['if_add'])) {
196 7c611a3e Renato Botelho
	/* Be sure this port is not being used */
197
	$portused = false;
198
	foreach ($config['interfaces'] as $ifname => $ifdata) {
199 3f6930f7 Phil Davis
		if ($ifdata['if'] == $_POST['if_add']) {
200 7c611a3e Renato Botelho
			$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 ca4acbcd Scott Ullrich
	if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
239 eef52225 jim-p
		system_reboot();
240 ca4acbcd Scott Ullrich
		$rebootingnow = true;
241
	} else {
242 d59557dc Ermal Luçi
		write_config();
243
244
		$retval = filter_configure();
245 0027de0a Ermal Lu?i
		$savemsg = get_std_save_message($retval);
246 d59557dc Ermal Luçi
247
		if (stristr($retval, "error") <> true)
248
			$savemsg = get_std_save_message($retval);
249
		else
250
			$savemsg = $retval;
251
	}
252
253 7c611a3e Renato Botelho
} else if (isset($_POST['Submit'])) {
254 5b237745 Scott Ullrich
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 ef88e1e1 Renato Botelho
	build a list of port-to-interface mappings in portifmap */
266 5b237745 Scott Ullrich
	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 ddc55e12 Erik Fonnesbeck
			$errstr = sprintf(gettext('Port %1$s '.
275
				' was assigned to %2$s' .
276
				' interfaces:'), $portname, count($ifnames));
277 ef88e1e1 Renato Botelho
278 5b237745 Scott Ullrich
			foreach ($portifmap[$portname] as $ifn)
279 f0eef2ef Phil Davis
				$errstr .= " " . convert_friendly_interface_to_friendly_descr(strtolower($ifn)) . " (" . $ifn . ")";
280 ef88e1e1 Renato Botelho
281 5b237745 Scott Ullrich
			$input_errors[] = $errstr;
282 95540233 Renato Botelho
		} 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 5b237745 Scott Ullrich
		}
296
	}
297
298 66bcba1b Ermal
	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 5b237745 Scott Ullrich
305
	if (!$input_errors) {
306
		/* No errors detected, so update the config */
307
		foreach ($_POST as $ifname => $ifport) {
308 ef88e1e1 Renato Botelho
309
			if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
310
311 5b237745 Scott Ullrich
				if (!is_array($ifport)) {
312 e7bfa231 Ermal Lu?i
					$reloadif = false;
313 44088ce8 Ermal Lu?i
					if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) {
314
						interface_bring_down($ifname);
315 e7bfa231 Ermal Lu?i
						/* Mark this to be reconfigured in any case. */
316
						$reloadif = true;
317 44088ce8 Ermal Lu?i
					}
318 5b237745 Scott Ullrich
					$config['interfaces'][$ifname]['if'] = $ifport;
319 99c26d44 gnhb
					if (isset($portlist[$ifport]['isppp']))
320 c86e8f76 gnhb
						$config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type'];
321 ef88e1e1 Renato Botelho
322 0b5fc1d1 Ermal
					if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') {
323 f3d88511 Renato Botelho
						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 5b237745 Scott Ullrich
					/* check for wireless interfaces, set or clear ['wireless'] */
330 94a77286 Scott Ullrich
					if (preg_match($g['wireless_regex'], $ifport)) {
331 5b237745 Scott Ullrich
						if (!is_array($config['interfaces'][$ifname]['wireless']))
332
							$config['interfaces'][$ifname]['wireless'] = array();
333
					} else {
334
						unset($config['interfaces'][$ifname]['wireless']);
335
					}
336 ef88e1e1 Renato Botelho
337 d59557dc Ermal Luçi
					/* make sure there is a descr for all interfaces */
338
					if (!isset($config['interfaces'][$ifname]['descr']))
339
						$config['interfaces'][$ifname]['descr'] = strtoupper($ifname);
340 ef88e1e1 Renato Botelho
341 b13efb03 Erik Fonnesbeck
					if ($reloadif == true) {
342
						if (preg_match($g['wireless_regex'], $ifport))
343
							interface_sync_wireless_clones($config['interfaces'][$ifname], false);
344 e7bfa231 Ermal Lu?i
						/* Reload all for the interface. */
345
						interface_configure($ifname, true);
346 b13efb03 Erik Fonnesbeck
					}
347 5b237745 Scott Ullrich
				}
348
			}
349
		}
350 ef88e1e1 Renato Botelho
351 5b237745 Scott Ullrich
		write_config();
352 ef88e1e1 Renato Botelho
353 6e6233d0 sullrich
		enable_rrd_graphing();
354 5b237745 Scott Ullrich
	}
355 7c611a3e Renato Botelho
} else {
356
	unset($delbtn);
357 41ea4cf3 Sjon Hortensius
	if (!empty($_POST['del']))
358
		$delbtn = key($_POST['del']);
359 5b237745 Scott Ullrich
360 7c611a3e Renato Botelho
	if (isset($delbtn)) {
361
		$id = $delbtn;
362
363
		if (link_interface_to_group($id))
364
			$input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue");
365
		else if (link_interface_to_bridge($id))
366
			$input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue");
367
		else if (link_interface_to_gre($id))
368
			$input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue");
369
		else if (link_interface_to_gif($id))
370
			$input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue");
371
		else {
372
			unset($config['interfaces'][$id]['enable']);
373
			$realid = get_real_interface($id);
374
			interface_bring_down($id);   /* down the interface */
375
376
			unset($config['interfaces'][$id]);	/* delete the specified OPTn or LAN*/
377
378
			if (is_array($config['dhcpd']) && is_array($config['dhcpd'][$id])) {
379
				unset($config['dhcpd'][$id]);
380
				services_dhcpd_configure();
381
			}
382 c3bc7432 Ermal Luçi
383 7c611a3e Renato Botelho
			if (count($config['filter']['rule']) > 0) {
384
				foreach ($config['filter']['rule'] as $x => $rule) {
385
					if($rule['interface'] == $id)
386
						unset($config['filter']['rule'][$x]);
387
				}
388 e27d0494 Ermal
			}
389 7c611a3e Renato Botelho
			if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) {
390
				foreach ($config['nat']['rule'] as $x => $rule) {
391
					if($rule['interface'] == $id)
392
						unset($config['nat']['rule'][$x]['interface']);
393
				}
394 e27d0494 Ermal
			}
395 c3bc7432 Ermal Luçi
396 7c611a3e Renato Botelho
			write_config();
397 ef88e1e1 Renato Botelho
398 7c611a3e Renato Botelho
			/* If we are in firewall/routing mode (not single interface)
399
			 * then ensure that we are not running DHCP on the wan which
400
			 * will make a lot of ISP's unhappy.
401
			 */
402
			if($config['interfaces']['lan'] && $config['dhcpd']['wan']) {
403
				unset($config['dhcpd']['wan']);
404
			}
405 7850de1c Ermal Lu?i
406 7c611a3e Renato Botelho
			link_interface_to_vlans($realid, "update");
407 ef88e1e1 Renato Botelho
408 7c611a3e Renato Botelho
			$savemsg = gettext("Interface has been deleted.");
409 8a648100 Ermal Luçi
		}
410 bda86e8f Scott Ullrich
	}
411 7c611a3e Renato Botelho
}
412 cec4323f Erik Fonnesbeck
413 7c611a3e Renato Botelho
/* Create a list of unused ports */
414
$unused_portlist = array();
415
foreach ($portlist as $portname => $portinfo) {
416
	$portused = false;
417
	foreach ($config['interfaces'] as $ifname => $ifdata) {
418
		if ($ifdata['if'] == $portname) {
419
			$portused = true;
420 5b237745 Scott Ullrich
			break;
421
		}
422
	}
423 7c611a3e Renato Botelho
	if ($portused === false)
424
		$unused_portlist[$portname] = $portinfo;
425
}
426 5b237745 Scott Ullrich
427 7f43ca88 Scott Ullrich
include("head.inc");
428
429 ef88e1e1 Renato Botelho
if(file_exists("/var/run/interface_mismatch_reboot_needed"))
430 41ea4cf3 Sjon Hortensius
{
431 ca4acbcd Scott Ullrich
	if ($_POST) {
432 ef88e1e1 Renato Botelho
		if($rebootingnow)
433 ca4acbcd Scott Ullrich
			$savemsg = gettext("The system is now rebooting.  Please wait.");
434
		else
435
			$savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot.");
436
	} else {
437 0b252f7a Renato Botelho
		$savemsg = gettext("Interface mismatch detected.  Please resolve the mismatch and click 'Apply changes'.  The firewall will reboot afterwards.");
438 ca4acbcd Scott Ullrich
	}
439 41ea4cf3 Sjon Hortensius
}
440 f2cb6a9f Scott Ullrich
441 1b0e073e Renato Botelho
if (file_exists("/tmp/reload_interfaces")) {
442
	echo "<p>\n";
443
	print_info_box_np(gettext("The interface configuration has been changed.<br />You must apply the changes in order for them to take effect."));
444
	echo "<br /></p>\n";
445
} elseif($savemsg)
446
	print_info_box($savemsg);
447
448
pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors");
449
if ($input_errors)
450
	print_input_errors($input_errors);
451 f2cb6a9f Scott Ullrich
452 41ea4cf3 Sjon Hortensius
$tab_array = array();
453
$tab_array[0] = array(gettext("Interface assignments"), true, "interfaces_assign.php");
454
$tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
455
$tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
456
$tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
457
$tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
458
$tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
459
$tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php");
460
$tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php");
461
$tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php");
462
$tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php");
463
display_top_tabs($tab_array);
464 1b0e073e Renato Botelho
?>
465 41ea4cf3 Sjon Hortensius
<form action="interfaces_assign.php" method="post">
466 89f64f0f Sander van Leeuwen
	<div class="table-responsive">
467
	<table class="table table-striped table-hover">
468 41ea4cf3 Sjon Hortensius
	<thead>
469
		<tr>
470
			<th><?=gettext("Interface")?></th>
471
			<th><?=gettext("Network port")?></th>
472
		</tr>
473
	</thead>
474
	<tbody>
475 1b0e073e Renato Botelho
<?php
476 41ea4cf3 Sjon Hortensius
	foreach ($config['interfaces'] as $ifname => $iface):
477
		if ($iface['descr'])
478
			$ifdescr = $iface['descr'];
479
		else
480
			$ifdescr = strtoupper($ifname);
481 7c611a3e Renato Botelho
?>
482 41ea4cf3 Sjon Hortensius
		<tr>
483
			<td><a href="/interfaces.php?if=<?=$ifname?>"><?=$ifdescr?></a></td>
484
			<td>
485
				<select name="<?=$ifname?>" id="<?=$ifname?>" class="form-control">
486
<?php foreach ($portlist as $portname => $portinfo):?>
487
					<option value="<?=$portname?>" <?=($portname == $iface['if']) ? ' selected="selected"': ''?>>
488
						<?=interface_assign_description($portinfo, $portname)?>
489
					</option>
490
<?php endforeach;?>
491
				</select>
492
			</td>
493
			<td>
494
<?php if ($ifname != 'wan'):?>
495 45d6ada5 Sjon Hortensius
				<input type="submit" name="del[<?=$ifname?>]" class="btn btn-danger" value="<?=gettext("delete interface")?>"/>
496 41ea4cf3 Sjon Hortensius
<?php endif;?>
497
			</td>
498
		</tr>
499
<?php endforeach;
500
	if (count($config['interfaces']) < count($portlist)):
501 1b0e073e Renato Botelho
?>
502 41ea4cf3 Sjon Hortensius
		<tr>
503
			<th>
504
				<?=gettext("Available network ports:")?>
505
			</th>
506
			<td>
507
				<select name="if_add" id="if_add" class="form-control">
508
<?php foreach ($unused_portlist as $portname => $portinfo):?>
509
					<option value="<?=$portname?>" <?=($portname == $iface['if']) ? ' selected="selected"': ''?>>
510
						<?=interface_assign_description($portinfo, $portname)?>
511
					</option>
512
<?php endforeach;?>
513
				</select>
514
			</td>
515
			<td>
516
				<input type="submit" name="add" title="<?=gettext("add selected interface")?>" value="add interface" class="btn btn-success" />
517
			</td>
518
		</tr>
519
<?php endif;?>
520
		</tbody>
521
	</table>
522 89f64f0f Sander van Leeuwen
	</div>
523 41ea4cf3 Sjon Hortensius
524
	<input name="Submit" type="submit" class="btn btn-default" value="<?=gettext("Save")?>" /><br /><br />
525 5b237745 Scott Ullrich
</form>
526 89f64f0f Sander van Leeuwen
527
<p class="alert alert-info"><?=gettext("Interfaces that are configured as members of a lagg(4) interface will not be shown.")?></p>
528
529 41ea4cf3 Sjon Hortensius
<?php include("foot.inc")?>