Project

General

Profile

Download (18.6 KB) Statistics
| Branch: | Tag: | Revision:
1 ef88e1e1 Renato Botelho
<?php
2 5b237745 Scott Ullrich
/*
3 c5d81585 Renato Botelho
 * interfaces_assign.php
4 092e7a96 Stephen Beaver
 *
5 c5d81585 Renato Botelho
 * part of pfSense (https://www.pfsense.org)
6 87489e5c loonylion
 * Copyright (c) 2004-2016 Rubicon Communications, LLC (Netgate)
7 c5d81585 Renato Botelho
 * All rights reserved.
8 191cb31d Stephen Beaver
 *
9 c5d81585 Renato Botelho
 * originally based on m0n0wall (http://m0n0.ch/wall)
10
 * Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net>.
11
 * Written by Jim McBeath based on existing m0n0wall files
12
 * All rights reserved.
13 092e7a96 Stephen Beaver
 *
14 b12ea3fb Renato Botelho
 * Licensed under the Apache License, Version 2.0 (the "License");
15
 * you may not use this file except in compliance with the License.
16
 * You may obtain a copy of the License at
17 092e7a96 Stephen Beaver
 *
18 b12ea3fb Renato Botelho
 * http://www.apache.org/licenses/LICENSE-2.0
19 092e7a96 Stephen Beaver
 *
20 b12ea3fb Renato Botelho
 * Unless required by applicable law or agreed to in writing, software
21
 * distributed under the License is distributed on an "AS IS" BASIS,
22
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
 * See the License for the specific language governing permissions and
24
 * limitations under the License.
25 092e7a96 Stephen Beaver
 */
26 5b237745 Scott Ullrich
27 6b07c15a Matthew Grooms
##|+PRIV
28
##|*IDENT=page-interfaces-assignnetworkports
29 26b4bef8 k-paulius
##|*NAME=Interfaces: Interface Assignments
30
##|*DESCR=Allow access to the 'Interfaces: Interface Assignments' page.
31 6b07c15a Matthew Grooms
##|*MATCH=interfaces_assign.php*
32
##|-PRIV
33
34 87489e5c loonylion
//$timealla = microtime(true);
35
36 26b4bef8 k-paulius
$pgtitle = array(gettext("Interfaces"), gettext("Interface Assignments"));
37 b32dd0a6 jim-p
$shortcut_section = "interfaces";
38 af1e2031 jim-p
39 c81ef6e2 Phil Davis
require_once("guiconfig.inc");
40
require_once("functions.inc");
41 f6339216 jim-p
require_once("filter.inc");
42 c81ef6e2 Phil Davis
require_once("shaper.inc");
43
require_once("ipsec.inc");
44
require_once("vpn.inc");
45
require_once("captiveportal.inc");
46 1b34f8a7 Ermal
require_once("rrd.inc");
47 87489e5c loonylion
require_once("interfaces_fast.inc");
48 772a7b3d loonylion
49 87489e5c loonylion
global $friendlyifnames;
50 5b237745 Scott Ullrich
51 87489e5c loonylion
/*moved most gettext calls to here, we really don't want to be repeatedly calling gettext() within loops if it can be avoided.*/
52
$gettextArray = array('add'=>gettext('Add'),'addif'=>gettext('Add interface'),'delete'=>gettext('Delete'),'deleteif'=>gettext('Delete interface'),'edit'=>gettext('Edit'),'on'=>gettext('on'));
53 772a7b3d loonylion
54 5b237745 Scott Ullrich
/*
55
	In this file, "port" refers to the physical port name,
56
	while "interface" refers to LAN, WAN, or OPTn.
57
*/
58
59
/* get list without VLAN interfaces */
60
$portlist = get_interface_list();
61
62 179377b0 robjarsen
/*another *_fast function from interfaces_fast.inc. These functions are basically the same as the
63 87489e5c loonylion
ones they're named after, except they (usually) take an array and (always) return an array. This means that they only
64
need to be called once per script run, the returned array contains all the data necessary for repeated use */
65
$friendlyifnames = convert_real_interface_to_friendly_interface_name_fast();
66
67 7c53bc7b Erik Fonnesbeck
/* add wireless clone interfaces */
68
if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) {
69
	foreach ($config['wireless']['clone'] as $clone) {
70
		$portlist[$clone['cloneif']] = $clone;
71
		$portlist[$clone['cloneif']]['iswlclone'] = true;
72
	}
73
}
74
75 5b237745 Scott Ullrich
/* add VLAN interfaces */
76
if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
77 87489e5c loonylion
	//$timea = microtime(true);
78 5b237745 Scott Ullrich
	foreach ($config['vlans']['vlan'] as $vlan) {
79 d59557dc Ermal Luçi
		$portlist[$vlan['vlanif']] = $vlan;
80
		$portlist[$vlan['vlanif']]['isvlan'] = true;
81 5b237745 Scott Ullrich
	}
82
}
83
84 38738505 Ermal Luçi
/* add Bridge interfaces */
85 b47c94bd Ermal Luçi
if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
86 ef88e1e1 Renato Botelho
	foreach ($config['bridges']['bridged'] as $bridge) {
87
		$portlist[$bridge['bridgeif']] = $bridge;
88
		$portlist[$bridge['bridgeif']]['isbridge'] = true;
89
	}
90 38738505 Ermal Luçi
}
91
92
/* add GIF interfaces */
93
if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) {
94 ef88e1e1 Renato Botelho
	foreach ($config['gifs']['gif'] as $gif) {
95
		$portlist[$gif['gifif']] = $gif;
96
		$portlist[$gif['gifif']]['isgif'] = true;
97
	}
98 38738505 Ermal Luçi
}
99
100
/* add GRE interfaces */
101
if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) {
102 ef88e1e1 Renato Botelho
	foreach ($config['gres']['gre'] as $gre) {
103
		$portlist[$gre['greif']] = $gre;
104
		$portlist[$gre['greif']]['isgre'] = true;
105
	}
106 38738505 Ermal Luçi
}
107
108 dbdd08af Ermal Luçi
/* add LAGG interfaces */
109 87489e5c loonylion
if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
110
	foreach ($config['laggs']['lagg'] as $lagg) {
111
		$portlist[$lagg['laggif']] = $lagg;
112
		$portlist[$lagg['laggif']]['islagg'] = true;
113
		/* LAGG members cannot be assigned */
114
		$lagifs = explode(',', $lagg['members']);
115
		foreach ($lagifs as $lagif) {
116
			if (isset($portlist[$lagif])) {
117
				unset($portlist[$lagif]);
118
			}
119 2af86dda Phil Davis
		}
120 ef88e1e1 Renato Botelho
	}
121 c720925c Ermal Luçi
}
122
123 265188ea Ermal Lu?i
/* add QinQ interfaces */
124
if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
125 ef88e1e1 Renato Botelho
	foreach ($config['qinqs']['qinqentry'] as $qinq) {
126 1322ee22 Chris Rowe
		$portlist["{$qinq['vlanif']}"]['descr'] = "VLAN {$qinq['tag']} on {$qinq['if']}";
127
		$portlist["{$qinq['vlanif']}"]['isqinq'] = true;
128 ef88e1e1 Renato Botelho
		/* QinQ members */
129
		$qinqifs = explode(' ', $qinq['members']);
130
		foreach ($qinqifs as $qinqif) {
131 f0134497 stephenw10
			$portlist["{$qinq['vlanif']}.{$qinqif}"]['descr'] = "QinQ {$qinqif} on VLAN {$qinq['tag']} on {$qinq['if']}";
132
			$portlist["{$qinq['vlanif']}.{$qinqif}"]['isqinq'] = true;
133 ef88e1e1 Renato Botelho
		}
134
	}
135 265188ea Ermal Lu?i
}
136 c720925c Ermal Luçi
137 860c4e80 Chris Buechler
/* add PPP interfaces */
138
if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
139 611ae852 Ermal
	foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
140 99c26d44 gnhb
		$portname = $ppp['if'];
141 860c4e80 Chris Buechler
		$portlist[$portname] = $ppp;
142
		$portlist[$portname]['isppp'] = true;
143 3f2ef8d7 gnhb
		$ports_base = basename($ppp['ports']);
144 2af86dda Phil Davis
		if (isset($ppp['descr'])) {
145 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}";
146 2af86dda Phil Davis
		} else if (isset($ppp['username'])) {
147 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}";
148 2af86dda Phil Davis
		} else {
149 99c26d44 gnhb
			$portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})";
150 2af86dda Phil Davis
		}
151 860c4e80 Chris Buechler
	}
152
}
153
154 144fbff2 jim-p
$ovpn_descrs = array();
155
if (is_array($config['openvpn'])) {
156 2af86dda Phil Davis
	if (is_array($config['openvpn']['openvpn-server'])) {
157
		foreach ($config['openvpn']['openvpn-server'] as $s) {
158 bfa7b33e doktornotor
			$portname = "ovpns{$s['vpnid']}";
159
			$portlist[$portname] = $s;
160 144fbff2 jim-p
			$ovpn_descrs[$s['vpnid']] = $s['description'];
161 2af86dda Phil Davis
		}
162
	}
163
	if (is_array($config['openvpn']['openvpn-client'])) {
164
		foreach ($config['openvpn']['openvpn-client'] as $c) {
165 bfa7b33e doktornotor
			$portname = "ovpnc{$c['vpnid']}";
166
			$portlist[$portname] = $c;
167 144fbff2 jim-p
			$ovpn_descrs[$c['vpnid']] = $c['description'];
168 2af86dda Phil Davis
		}
169
	}
170 144fbff2 jim-p
}
171
172 bd4c337c jim-p
global $ipsec_descrs;
173 235c051f jim-p
$ipsec_descrs = interface_ipsec_vti_list_all();
174
foreach ($ipsec_descrs as $ifname => $ifdescr) {
175
	$portlist[$ifname] = array('descr' => $ifdescr);
176 bd4c337c jim-p
}
177
178 87489e5c loonylion
179
$ifdescrs = interface_assign_description_fast($portlist,$friendlyifnames);
180
181 4401107f Steve Beaver
if (isset($_REQUEST['add']) && isset($_REQUEST['if_add'])) {
182 7c611a3e Renato Botelho
	/* Be sure this port is not being used */
183
	$portused = false;
184
	foreach ($config['interfaces'] as $ifname => $ifdata) {
185 4401107f Steve Beaver
		if ($ifdata['if'] == $_REQUEST['if_add']) {
186 7c611a3e Renato Botelho
			$portused = true;
187
			break;
188
		}
189
	}
190
191
	if ($portused === false) {
192
		/* find next free optional interface number */
193 2af86dda Phil Davis
		if (!$config['interfaces']['lan']) {
194 a5fd107d Renato Botelho
			$newifname = "lan";
195
			$descr = "LAN";
196 7c611a3e Renato Botelho
		} else {
197 e34c96a3 Steve Beaver
			for ($i = 1; $i <= count($config['interfaces']); $i++) {
198
				if (!$config['interfaces']["opt{$i}"]) {
199
					break;
200
				}
201
			}
202 7c611a3e Renato Botelho
			$newifname = 'opt' . $i;
203
			$descr = "OPT" . $i;
204
		}
205 179377b0 robjarsen
206 7c611a3e Renato Botelho
		$config['interfaces'][$newifname] = array();
207
		$config['interfaces'][$newifname]['descr'] = $descr;
208
		$config['interfaces'][$newifname]['if'] = $_POST['if_add'];
209
		if (preg_match($g['wireless_regex'], $_POST['if_add'])) {
210
			$config['interfaces'][$newifname]['wireless'] = array();
211
			interface_sync_wireless_clones($config['interfaces'][$newifname], false);
212
		}
213
214 179377b0 robjarsen
215 7c611a3e Renato Botelho
		uksort($config['interfaces'], "compare_interface_friendly_names");
216
217
		/* XXX: Do not remove this. */
218
		unlink_if_exists("{$g['tmp_path']}/config.cache");
219
220
		write_config();
221
222 44c42356 Phil Davis
		$action_msg = gettext("Interface has been added.");
223 c8532336 Phil Davis
		$class = "success";
224 7c611a3e Renato Botelho
	}
225
226
} else if (isset($_POST['apply'])) {
227 ca4acbcd Scott Ullrich
	if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
228 eef52225 jim-p
		system_reboot();
229 ca4acbcd Scott Ullrich
		$rebootingnow = true;
230
	} else {
231 d59557dc Ermal Luçi
		write_config();
232
233 44c42356 Phil Davis
		$changes_applied = true;
234
		$retval = 0;
235
		$retval |= filter_configure();
236 d59557dc Ermal Luçi
	}
237
238 7c611a3e Renato Botelho
} else if (isset($_POST['Submit'])) {
239 5b237745 Scott Ullrich
240
	unset($input_errors);
241
242
	/* input validation */
243
244
	/* Build a list of the port names so we can see how the interfaces map */
245
	$portifmap = array();
246 2af86dda Phil Davis
	foreach ($portlist as $portname => $portinfo) {
247 5b237745 Scott Ullrich
		$portifmap[$portname] = array();
248 2af86dda Phil Davis
	}
249 5b237745 Scott Ullrich
250
	/* Go through the list of ports selected by the user,
251 ef88e1e1 Renato Botelho
	build a list of port-to-interface mappings in portifmap */
252 5b237745 Scott Ullrich
	foreach ($_POST as $ifname => $ifport) {
253 2af86dda Phil Davis
		if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
254 587c2d55 jim-p
			if (array_key_exists($ifport, $portlist)) {
255
				$portifmap[$ifport][] = strtoupper($ifname);
256
			} else {
257
				$input_errors[] = sprintf(gettext('Cannot set port %1$s because the submitted interface does not exist.'), $ifname);
258
			}
259 2af86dda Phil Davis
		}
260 5b237745 Scott Ullrich
	}
261
262
	/* Deliver error message for any port with more than one assignment */
263
	foreach ($portifmap as $portname => $ifnames) {
264
		if (count($ifnames) > 1) {
265 ddc55e12 Erik Fonnesbeck
			$errstr = sprintf(gettext('Port %1$s '.
266
				' was assigned to %2$s' .
267
				' interfaces:'), $portname, count($ifnames));
268 ef88e1e1 Renato Botelho
269 2af86dda Phil Davis
			foreach ($portifmap[$portname] as $ifn) {
270 f0eef2ef Phil Davis
				$errstr .= " " . convert_friendly_interface_to_friendly_descr(strtolower($ifn)) . " (" . $ifn . ")";
271 2af86dda Phil Davis
			}
272 ef88e1e1 Renato Botelho
273 5b237745 Scott Ullrich
			$input_errors[] = $errstr;
274 95540233 Renato Botelho
		} else if (count($ifnames) == 1 && preg_match('/^bridge[0-9]/', $portname) && is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
275
			foreach ($config['bridges']['bridged'] as $bridge) {
276 2af86dda Phil Davis
				if ($bridge['bridgeif'] != $portname) {
277 95540233 Renato Botelho
					continue;
278 2af86dda Phil Davis
				}
279 95540233 Renato Botelho
280
				$members = explode(",", strtoupper($bridge['members']));
281
				foreach ($members as $member) {
282
					if ($member == $ifnames[0]) {
283 45654aa0 NOYB
						$input_errors[] = sprintf(gettext('Cannot set port %1$s to interface %2$s because this interface is a member of %3$s.'), $portname, $member, $portname);
284 95540233 Renato Botelho
						break;
285
					}
286
				}
287
			}
288 5b237745 Scott Ullrich
		}
289
	}
290
291 66bcba1b Ermal
	if (is_array($config['vlans']['vlan'])) {
292
		foreach ($config['vlans']['vlan'] as $vlan) {
293 2af86dda Phil Davis
			if (does_interface_exist($vlan['if']) == false) {
294 0fc3de67 Phil Davis
				$input_errors[] = sprintf(gettext('Vlan parent interface %1$s does not exist anymore so vlan id %2$s cannot be created please fix the issue before continuing.'), $vlan['if'], $vlan['tag']);
295 2af86dda Phil Davis
			}
296 66bcba1b Ermal
		}
297
	}
298 5b237745 Scott Ullrich
299
	if (!$input_errors) {
300
		/* No errors detected, so update the config */
301
		foreach ($_POST as $ifname => $ifport) {
302 ef88e1e1 Renato Botelho
303
			if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
304
305 5b237745 Scott Ullrich
				if (!is_array($ifport)) {
306 e7bfa231 Ermal Lu?i
					$reloadif = false;
307 44088ce8 Ermal Lu?i
					if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) {
308
						interface_bring_down($ifname);
309 e7bfa231 Ermal Lu?i
						/* Mark this to be reconfigured in any case. */
310
						$reloadif = true;
311 44088ce8 Ermal Lu?i
					}
312 5b237745 Scott Ullrich
					$config['interfaces'][$ifname]['if'] = $ifport;
313 2af86dda Phil Davis
					if (isset($portlist[$ifport]['isppp'])) {
314 c86e8f76 gnhb
						$config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type'];
315 2af86dda Phil Davis
					}
316 ef88e1e1 Renato Botelho
317 0b5fc1d1 Ermal
					if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') {
318 f3d88511 Renato Botelho
						unset($config['interfaces'][$ifname]['ipaddr']);
319
						unset($config['interfaces'][$ifname]['subnet']);
320
						unset($config['interfaces'][$ifname]['ipaddrv6']);
321
						unset($config['interfaces'][$ifname]['subnetv6']);
322
					}
323
324 5b237745 Scott Ullrich
					/* check for wireless interfaces, set or clear ['wireless'] */
325 94a77286 Scott Ullrich
					if (preg_match($g['wireless_regex'], $ifport)) {
326 2af86dda Phil Davis
						if (!is_array($config['interfaces'][$ifname]['wireless'])) {
327 5b237745 Scott Ullrich
							$config['interfaces'][$ifname]['wireless'] = array();
328 2af86dda Phil Davis
						}
329 5b237745 Scott Ullrich
					} else {
330
						unset($config['interfaces'][$ifname]['wireless']);
331
					}
332 ef88e1e1 Renato Botelho
333 d59557dc Ermal Luçi
					/* make sure there is a descr for all interfaces */
334 2af86dda Phil Davis
					if (!isset($config['interfaces'][$ifname]['descr'])) {
335 d59557dc Ermal Luçi
						$config['interfaces'][$ifname]['descr'] = strtoupper($ifname);
336 2af86dda Phil Davis
					}
337 ef88e1e1 Renato Botelho
338 b13efb03 Erik Fonnesbeck
					if ($reloadif == true) {
339 2af86dda Phil Davis
						if (preg_match($g['wireless_regex'], $ifport)) {
340 b13efb03 Erik Fonnesbeck
							interface_sync_wireless_clones($config['interfaces'][$ifname], false);
341 2af86dda Phil Davis
						}
342 e7bfa231 Ermal Lu?i
						/* Reload all for the interface. */
343
						interface_configure($ifname, true);
344 b13efb03 Erik Fonnesbeck
					}
345 5b237745 Scott Ullrich
				}
346
			}
347
		}
348
		write_config();
349 ef88e1e1 Renato Botelho
350 6e6233d0 sullrich
		enable_rrd_graphing();
351 5b237745 Scott Ullrich
	}
352 7c611a3e Renato Botelho
} else {
353
	unset($delbtn);
354 aa82505e Phil Davis
	if (!empty($_POST['del'])) {
355 41ea4cf3 Sjon Hortensius
		$delbtn = key($_POST['del']);
356 aa82505e Phil Davis
	}
357 5b237745 Scott Ullrich
358 7c611a3e Renato Botelho
	if (isset($delbtn)) {
359
		$id = $delbtn;
360
361 2af86dda Phil Davis
		if (link_interface_to_group($id)) {
362 7c611a3e Renato Botelho
			$input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue");
363 2af86dda Phil Davis
		} else if (link_interface_to_bridge($id)) {
364 7c611a3e Renato Botelho
			$input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue");
365 2af86dda Phil Davis
		} else if (link_interface_to_gre($id)) {
366 7c611a3e Renato Botelho
			$input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue");
367 2af86dda Phil Davis
		} else if (link_interface_to_gif($id)) {
368 7c611a3e Renato Botelho
			$input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue");
369 85ea9d46 Steve Beaver
		} else if (interface_has_queue($id)) {
370 9267c6c9 Steve Beaver
			$input_errors[] = gettext("The interface has a traffic shaper queue configured.\nPlease remove all queues on the interface to continue.");
371 2af86dda Phil Davis
		} else {
372 7c611a3e Renato Botelho
			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 6756052b NewEraCracker
				services_dhcpd_configure('inet');
381 7c611a3e Renato Botelho
			}
382 c3bc7432 Ermal Luçi
383 ff3f0016 Chris Buechler
			if (is_array($config['dhcpdv6']) && is_array($config['dhcpdv6'][$id])) {
384
				unset($config['dhcpdv6'][$id]);
385 6756052b NewEraCracker
				services_dhcpd_configure('inet6');
386 ff3f0016 Chris Buechler
			}
387
388 7c611a3e Renato Botelho
			if (count($config['filter']['rule']) > 0) {
389
				foreach ($config['filter']['rule'] as $x => $rule) {
390 2af86dda Phil Davis
					if ($rule['interface'] == $id) {
391 7c611a3e Renato Botelho
						unset($config['filter']['rule'][$x]);
392 2af86dda Phil Davis
					}
393 7c611a3e Renato Botelho
				}
394 e27d0494 Ermal
			}
395 7c611a3e Renato Botelho
			if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) {
396
				foreach ($config['nat']['rule'] as $x => $rule) {
397 2af86dda Phil Davis
					if ($rule['interface'] == $id) {
398 7c611a3e Renato Botelho
						unset($config['nat']['rule'][$x]['interface']);
399 2af86dda Phil Davis
					}
400 7c611a3e Renato Botelho
				}
401 e27d0494 Ermal
			}
402 c3bc7432 Ermal Luçi
403 7c611a3e Renato Botelho
			write_config();
404 ef88e1e1 Renato Botelho
405 7c611a3e Renato Botelho
			/* If we are in firewall/routing mode (not single interface)
406
			 * then ensure that we are not running DHCP on the wan which
407
			 * will make a lot of ISP's unhappy.
408
			 */
409 2af86dda Phil Davis
			if ($config['interfaces']['lan'] && $config['dhcpd']['wan']) {
410 7c611a3e Renato Botelho
				unset($config['dhcpd']['wan']);
411
			}
412 7850de1c Ermal Lu?i
413 7c611a3e Renato Botelho
			link_interface_to_vlans($realid, "update");
414 ef88e1e1 Renato Botelho
415 44c42356 Phil Davis
			$action_msg = gettext("Interface has been deleted.");
416 c8532336 Phil Davis
			$class = "success";
417 8a648100 Ermal Luçi
		}
418 bda86e8f Scott Ullrich
	}
419 7c611a3e Renato Botelho
}
420 cec4323f Erik Fonnesbeck
421 7c611a3e Renato Botelho
/* Create a list of unused ports */
422
$unused_portlist = array();
423 87489e5c loonylion
$portArray = array_keys($portlist);
424
425
$ifaceArray = array_column($config['interfaces'],'if');
426
$unused = array_diff($portArray,$ifaceArray);
427
$unused = array_flip($unused);
428
$unused_portlist = array_intersect_key($portlist,$unused);//*/
429
unset($unused,$portArray,$ifaceArray);
430 5b237745 Scott Ullrich
431 7f43ca88 Scott Ullrich
include("head.inc");
432
433 2af86dda Phil Davis
if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
434 ca4acbcd Scott Ullrich
	if ($_POST) {
435 2af86dda Phil Davis
		if ($rebootingnow) {
436 44c42356 Phil Davis
			$action_msg = gettext("The system is now rebooting. Please wait.");
437 c8532336 Phil Davis
			$class = "success";
438 2af86dda Phil Davis
		} else {
439 21c18c3d Phil Davis
			$applymsg = gettext("Reboot is needed. Please apply the settings in order to reboot.");
440 c8532336 Phil Davis
			$class = "warning";
441 2af86dda Phil Davis
		}
442 ca4acbcd Scott Ullrich
	} else {
443 44c42356 Phil Davis
		$action_msg = gettext("Interface mismatch detected. Please resolve the mismatch, save and then click 'Apply Changes'. The firewall will reboot afterwards.");
444 c8532336 Phil Davis
		$class = "warning";
445 ca4acbcd Scott Ullrich
	}
446 41ea4cf3 Sjon Hortensius
}
447 f2cb6a9f Scott Ullrich
448 1b0e073e Renato Botelho
if (file_exists("/tmp/reload_interfaces")) {
449
	echo "<p>\n";
450 45654aa0 NOYB
	print_apply_box(gettext("The interface configuration has been changed.") . "<br />" . gettext("The changes must be applied for them to take effect."));
451 1b0e073e Renato Botelho
	echo "<br /></p>\n";
452 21c18c3d Phil Davis
} elseif ($applymsg) {
453
	print_apply_box($applymsg);
454 44c42356 Phil Davis
} elseif ($action_msg) {
455
	print_info_box($action_msg, $class);
456
} elseif ($changes_applied) {
457
	print_apply_result_box($retval);
458 2af86dda Phil Davis
}
459 1b0e073e Renato Botelho
460
pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors");
461 a4af095c Renato Botelho
462 aa82505e Phil Davis
if ($input_errors) {
463 1b0e073e Renato Botelho
	print_input_errors($input_errors);
464 aa82505e Phil Davis
}
465 f2cb6a9f Scott Ullrich
466 41ea4cf3 Sjon Hortensius
$tab_array = array();
467 26b4bef8 k-paulius
$tab_array[] = array(gettext("Interface Assignments"), true, "interfaces_assign.php");
468 50e6c063 Renato Botelho
$tab_array[] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
469
$tab_array[] = array(gettext("Wireless"), false, "interfaces_wireless.php");
470
$tab_array[] = array(gettext("VLANs"), false, "interfaces_vlan.php");
471
$tab_array[] = array(gettext("QinQs"), false, "interfaces_qinq.php");
472
$tab_array[] = array(gettext("PPPs"), false, "interfaces_ppps.php");
473 26b4bef8 k-paulius
$tab_array[] = array(gettext("GREs"), false, "interfaces_gre.php");
474
$tab_array[] = array(gettext("GIFs"), false, "interfaces_gif.php");
475 50e6c063 Renato Botelho
$tab_array[] = array(gettext("Bridges"), false, "interfaces_bridge.php");
476 26b4bef8 k-paulius
$tab_array[] = array(gettext("LAGGs"), false, "interfaces_lagg.php");
477 41ea4cf3 Sjon Hortensius
display_top_tabs($tab_array);
478 87489e5c loonylion
479 179377b0 robjarsen
/*Generate the port select box only once.
480 87489e5c loonylion
Not indenting the HTML to produce smaller code
481
and faster page load times */
482
483
$portselect='';
484
foreach ($portlist as $portname => $portinfo) {
485 179377b0 robjarsen
	$portselect.='<option value="'.$portname.'"';
486 87489e5c loonylion
	$portselect.=">".$ifdescrs[$portname]."</option>\n";
487
}
488
489 1b0e073e Renato Botelho
?>
490 41ea4cf3 Sjon Hortensius
<form action="interfaces_assign.php" method="post">
491 89f64f0f Sander van Leeuwen
	<div class="table-responsive">
492
	<table class="table table-striped table-hover">
493 41ea4cf3 Sjon Hortensius
	<thead>
494
		<tr>
495
			<th><?=gettext("Interface")?></th>
496
			<th><?=gettext("Network port")?></th>
497 290566ed NOYB
			<th>&nbsp;</th>
498 41ea4cf3 Sjon Hortensius
		</tr>
499
	</thead>
500
	<tbody>
501 1b0e073e Renato Botelho
<?php
502 87489e5c loonylion
	$i=0;
503 41ea4cf3 Sjon Hortensius
	foreach ($config['interfaces'] as $ifname => $iface):
504 aa82505e Phil Davis
		if ($iface['descr']) {
505 41ea4cf3 Sjon Hortensius
			$ifdescr = $iface['descr'];
506 aa82505e Phil Davis
		} else {
507 41ea4cf3 Sjon Hortensius
			$ifdescr = strtoupper($ifname);
508 aa82505e Phil Davis
		}
509 7c611a3e Renato Botelho
?>
510 41ea4cf3 Sjon Hortensius
		<tr>
511 4401107f Steve Beaver
			<td><a href="/interfaces.php?if=<?=$ifname?>"><?=$ifdescr?></a></td>
512 41ea4cf3 Sjon Hortensius
			<td>
513
				<select name="<?=$ifname?>" id="<?=$ifname?>" class="form-control">
514 179377b0 robjarsen
<?php
515 87489e5c loonylion
/*port select menu generation loop replaced with pre-prepared select menu to reduce page generation time */
516
echo str_replace('value="'.$iface['if'].'">','value="'.$iface['if'].'" selected>',$portselect);
517
?>
518 41ea4cf3 Sjon Hortensius
				</select>
519
			</td>
520
			<td>
521
<?php if ($ifname != 'wan'):?>
522 87489e5c loonylion
				<button type="submit" name="del[<?=$ifname?>]" class="btn btn-danger btn-sm" title="<?=$gettextArray['deleteif']?>">
523 4419e274 Stephen Beaver
					<i class="fa fa-trash icon-embed-btn"></i>
524 87489e5c loonylion
					<?=$gettextArray["delete"]?>
525 4419e274 Stephen Beaver
				</button>
526 41ea4cf3 Sjon Hortensius
<?php endif;?>
527
			</td>
528
		</tr>
529 179377b0 robjarsen
<?php $i++;
530 87489e5c loonylion
endforeach;
531 41ea4cf3 Sjon Hortensius
	if (count($config['interfaces']) < count($portlist)):
532 1b0e073e Renato Botelho
?>
533 41ea4cf3 Sjon Hortensius
		<tr>
534
			<th>
535
				<?=gettext("Available network ports:")?>
536
			</th>
537
			<td>
538
				<select name="if_add" id="if_add" class="form-control">
539 87489e5c loonylion
<?php
540
/* HTML not indented to save on transmission/render time */
541
foreach ($unused_portlist as $portname => $portinfo):?>
542
<option value="<?=$portname?>" <?=($portname == $iface['if']) ? ' selected': ''?>><?=$ifdescrs[$portname]?></option>
543
<?php endforeach;
544
?>
545 41ea4cf3 Sjon Hortensius
				</select>
546
			</td>
547
			<td>
548 4419e274 Stephen Beaver
				<button type="submit" name="add" title="<?=gettext("Add selected interface")?>" value="add interface" class="btn btn-success btn-sm" >
549
					<i class="fa fa-plus icon-embed-btn"></i>
550 87489e5c loonylion
					<?=$gettextArray["add"]?>
551 4419e274 Stephen Beaver
				</button>
552 41ea4cf3 Sjon Hortensius
			</td>
553
		</tr>
554
<?php endif;?>
555
		</tbody>
556
	</table>
557 89f64f0f Sander van Leeuwen
	</div>
558 41ea4cf3 Sjon Hortensius
559 27d6a45b jim-p
	<button name="Submit" type="submit" class="btn btn-primary" value="<?=gettext('Save')?>"><i class="fa fa-save icon-embed-btn"></i><?=gettext('Save')?></button>
560 5b237745 Scott Ullrich
</form>
561 4419e274 Stephen Beaver
<br />
562 7c945f74 k-paulius
563
<?php
564 481db4fe jim-p
print_info_box(gettext("Interfaces that are configured as members of a lagg(4) interface will not be shown.") .
565
    '<br/><br/>' .
566
    gettext("Wireless interfaces must be created on the Wireless tab before they can be assigned."), 'info', false);
567 7c945f74 k-paulius
?>
568 89f64f0f Sander van Leeuwen
569 bfa7b33e doktornotor
<?php include("foot.inc")?>