summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/inc/interfaces.inc152
-rwxr-xr-xusr/local/www/interfaces.php6
2 files changed, 51 insertions, 107 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index cd1732c..f4456c7 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -2772,14 +2772,13 @@ function find_dhcp6c_process($interface) {
function interface_vlan_mtu_configured($realhwif, $mtu) {
global $config;
- if (is_array($config['vlans']['vlan'])) {
+ if (is_array($config['vlans']) && is_array($config['vlans']['vlan'])) {
foreach ($config['vlans']['vlan'] as $vlan) {
if ($vlan['if'] != $realhwif)
continue;
$assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (!empty($assignedport)) {
- $portmtu = $config['interfaces'][$assignedport]['mtu'];
- if (!empty($portmtu) && $portmtu > $mtu)
+ if (!empty($assignedport) && !empty($config['interfaces'][$assignedport]['mtu'])) {
+ if (intval($config['interfaces'][$assignedport]['mtu'])> $mtu)
$mtu = $portmtu;
}
}
@@ -2788,6 +2787,33 @@ function interface_vlan_mtu_configured($realhwif, $mtu) {
return $mtu;
}
+function interface_vlan_adapt_mtu($vlanifs, $mtu) {
+ global $config;
+
+ if (!is_array($vlanifs))
+ return;
+
+ /* All vlans need to use the same mtu value as their parent. */
+ foreach ($vlanifs as $vlan) {
+ $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
+ if (!empty($assignedport)) {
+ if (!empty($config['interfaces'][$assignedport]['mtu'])) {
+ /*
+ * XXX: This is really never going to happen just keep the code for safety and readbility.
+ * It never happens since interface_vlan_mtu_configured finds the biggest mtu on vlans.
+ * Also if it has a lower mtu configured just respect user choice.
+ */
+ if (intval($config['interfaces'][$assignedport]['mtu']) > $mtu)
+ pfSense_interface_mtu($vlan['vlanif'], $mtu);
+ } else {
+ if (get_interface_mtu($vlan['vlanif']) != $mtu)
+ pfSense_interface_mtu($vlan['vlanif'], $mtu);
+ }
+ } else if (get_interface_mtu($vlan['vlanif']) != $mtu)
+ pfSense_interface_mtu($vlan['vlanif'], $mtu);
+ }
+}
+
function interface_configure($interface = "wan", $reloadall = false, $linkupevent = false) {
global $config, $g;
global $interface_sn_arr_cache, $interface_ip_arr_cache;
@@ -2988,115 +3014,33 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
break;
}
- $mtu = get_interface_default_mtu(remove_ifindex($realhwif));
- $assignedparent = convert_real_interface_to_friendly_interface_name($realhwif);
- if (!empty($assignedparent) && !empty($config['interfaces'][$assignedparent]['mtu']))
- $mtu = $config['interfaces'][$assignedparent]['mtu'];
-
- $vlanifs = link_interface_to_vlans($realhwif);
- if (empty($vlanifs))
- $vlanifs = array();
-
if (!empty($wancfg['mtu'])) {
if (stristr($realif, "_vlan")) {
- if (!empty($assignedparent)) {
+ $assignedparent = convert_real_interface_to_friendly_interface_name($realhwif);
+ if (!empty($assignedparent) && !empty($config['interfaces'][$assignedparent]['mtu']))
$parentmtu = $config['interfaces'][$assignedparent]['mtu'];
- if (empty($parentmtu))
- $parentmtu = interface_vlan_mtu_configured($realhwif, $wancfg['mtu']);
- if ($wancfg['mtu'] > $parentmtu) {
- if (get_interface_mtu($realhwif) != $wancfg['mtu'])
- pfSense_interface_mtu($realhwif, $wancfg['mtu']);
-
- /* All vlans need to use the same mtu value as their parent. */
- foreach ($vlanifs as $vlan) {
- if ($vlan['vlanif'] == $realif)
- continue;
- $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (!empty($assignedport)) {
- $portmtu = $config['interfaces'][$assignedport]['mtu'];
- if (empty($portmtu) && (get_interface_mtu($vlan['vlanif']) != $wancfg['mtu']))
- pfSense_interface_mtu($vlan['vlanif'], $wancfg['mtu']);
- } else if (get_interface_mtu($vlan['vlanif']) != $wancfg['mtu'])
- pfSense_interface_mtu($vlan['vlanif'], $wancfg['mtu']);
- }
- }
- } else {
- /* Parent is not assigned, back to default */
- if (get_interface_mtu($realhwif) != $mtu)
- pfSense_interface_mtu($realhwif, $mtu);
+ else
+ $parentmtu = interface_vlan_mtu_configured($realhwif, $wancfg['mtu']);
- /* All vlans need to use the same mtu value as their parent. */
- foreach ($vlanifs as $vlan) {
- if ($vlan['vlanif'] == $realif)
- continue;
- $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (!empty($assignedport)) {
- $portmtu = $config['interfaces'][$assignedport]['mtu'];
- if (empty($portmtu) && (get_interface_mtu($vlan['vlanif']) != $mtu))
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
- } else if (get_interface_mtu($vlan['vlanif']) != $mtu)
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
- }
+ if ($wancfg['mtu'] > $parentmtu) {
+ if (get_interface_mtu($realhwif) != $wancfg['mtu'])
+ pfSense_interface_mtu($realhwif, $wancfg['mtu']);
- if (get_interface_mtu($realif) != $wancfg['mtu'])
- pfSense_interface_mtu($realif, $wancfg['mtu']);
- }
+ /* All vlans need to use the same mtu value as their parent. */
+ interface_vlan_adapt_mtu(link_interface_to_vlans($realhwif), $wancfg['mtu']);
+ } else
+ pfSense_interface_mtu($realif, $wancfg['mtu']);
} else {
- foreach ($vlanifs as $vlan) {
- $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (empty($assignedport)) {
- if (get_interface_mtu($vlan['vlanif']) != $wancfg['mtu'])
- pfSense_interface_mtu($vlan['vlanif'], $wancfg['mtu']);
- } else {
- $vlanmtu = $config['interfaces'][$assignedport]['mtu'];
- if ((empty($vlanmtu) || ($vlanmtu >= $wancfg['mtu'])) && (get_interface_mtu($vlan['vlanif']) != $wancfg['mtu']))
- pfSense_interface_mtu($vlan['vlanif'], $wancfg['mtu']);
- }
- }
- }
- if ($wancfg['mtu'] != get_interface_mtu($realif))
- pfSense_interface_mtu($realif, $wancfg['mtu']);
- } else if (stristr($realif, "_vlan")) {
- /* XXX: This is really dangerous for example with vlans changing their parent mtu! */
- $bigmtu = interface_vlan_mtu_configured($realhwif, $mtu);
- if ($mtu < $bigmtu)
- $mtu = $bigmtu;
-
- if (get_interface_mtu($realhwif) != $mtu)
- pfSense_interface_mtu($realhwif, $mtu);
-
- /* All vlans need to use the same mtu value as their parent. */
- foreach ($vlanifs as $vlan) {
- if ($vlan['vlanif'] == $realif)
- continue;
- $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (!empty($assignedport)) {
- $portmtu = $config['interfaces'][$assignedport]['mtu'];
- if (empty($portmtu) && (get_interface_mtu($vlan['vlanif']) != $mtu))
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
- } else if (get_interface_mtu($vlan['vlanif']) != $mtu)
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
- }
- if (get_interface_mtu($realif) != $mtu)
- pfSense_interface_mtu($realif, $mtu);
- } else {
- /* All vlans need to use the same mtu value as their parent. */
- foreach ($vlanifs as $vlan) {
- $assignedport = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
- if (!empty($assignedport)) {
- $portmtu = $config['interfaces'][$assignedport]['mtu'];
- if (empty($portmtu) && (get_interface_mtu($vlan['vlanif']) != $mtu))
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
- } else if (get_interface_mtu($vlan['vlanif']) != $mtu)
- pfSense_interface_mtu($vlan['vlanif'], $mtu);
+ if ($wancfg['mtu'] != get_interface_mtu($realif))
+ pfSense_interface_mtu($realif, $wancfg['mtu']);
+
+ /* This case is needed when the parent of vlans is being configured */
+ interface_vlan_adapt_mtu(link_interface_to_vlans($realif), $wancfg['mtu']);
}
- if ($mtu != get_interface_mtu($realhwif))
- pfSense_interface_mtu($realhwif, $mtu);
+ /* XXX: What about gre/gif/lagg/.. ? */
}
- unset($vlanifs);
-
- if(does_interface_exist($wancfg['if']))
+ if (does_interface_exist($wancfg['if']))
interfaces_bring_up($wancfg['if']);
interface_netgraph_needed($interface);
diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php
index 4b74997..922caa8 100755
--- a/usr/local/www/interfaces.php
+++ b/usr/local/www/interfaces.php
@@ -642,17 +642,17 @@ if ($_POST['apply']) {
$input_errors[] = gettext("A valid MAC address must be specified.");
if ($_POST['mtu']) {
if ($_POST['mtu'] < 576 || $_POST['mtu'] > 9000)
- $input_errors[] = gettext("The MTU must be greater than 576 bytes.");
+ $input_errors[] = gettext("The MTU must be greater than 576 bytes and less than 9000.");
if (stristr($wancfg['if'], "_vlan")) {
$realhwif_array = get_parent_interface($wancfg['if']);
// Need code to handle MLPPP if we ever use $realhwif for MLPPP handling
$parent_realhwif = $realhwif_array[0];
$parent_if = convert_real_interface_to_friendly_interface_name($parent_realhwif);
- if (!empty($parent_if) && isset($config['interfaces'][$parent_if]['mtu'])) {
+ if (!empty($parent_if) && !empty($config['interfaces'][$parent_if]['mtu'])) {
$parent_mtu = $config['interfaces'][$parent_if]['mtu'];
- if ($_POST['mtu'] > $parent_mtu)
+ if ($_POST['mtu'] > intval($config['interfaces'][$parent_if]['mtu']))
$input_errors[] = gettext("MTU of a vlan should not be bigger than parent interface.");
}
} else {
OpenPOWER on IntegriCloud