summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorErmal <eri@pfsense.org>2013-12-27 20:05:08 +0000
committerErmal <eri@pfsense.org>2013-12-27 20:37:34 +0000
commit53555bf2f796cd53cf649410fe1827a9a45fc4a7 (patch)
tree1c2085db98a127c04f1d33abf7d53df4530c0440 /etc
parent1a4ef44e5c86e1dd480b8abe40b9483bbdb3e8d3 (diff)
downloadpfsense-53555bf2f796cd53cf649410fe1827a9a45fc4a7.zip
pfsense-53555bf2f796cd53cf649410fe1827a9a45fc4a7.tar.gz
Make sense of interface mtu handling code. No need to do unneeded operations. This fixes slow boot times and proper handling of mtu for vlans though some work or better model is needed for other interface types.
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/interfaces.inc152
1 files changed, 48 insertions, 104 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);
OpenPOWER on IntegriCloud