summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErmal LUÇI <eri@pfsense.org>2014-11-25 16:36:55 +0100
committerErmal LUÇI <eri@pfsense.org>2014-11-25 16:36:55 +0100
commit2b58f94e6005a4b1e8c3387341dc07f3c173269f (patch)
tree46a046d7a8a0efe7964fb9f1473c43acb686030c
parenta8e430147463e0acb6e8b09a02eda96eff431aeb (diff)
downloadpfsense-2b58f94e6005a4b1e8c3387341dc07f3c173269f.zip
pfsense-2b58f94e6005a4b1e8c3387341dc07f3c173269f.tar.gz
Fixes #2786, properly handle the chain of interfaces during lagg configuration for mtu. For most interfaces this works, bridge will be added in a separate commit
-rw-r--r--etc/inc/interfaces.inc68
1 files changed, 53 insertions, 15 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index b3da34d..373cc09 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -700,19 +700,7 @@ function interface_lagg_configure($lagg) {
$laggif = pfSense_interface_create("lagg");
/* Check if MTU was defined for this lagg interface */
- $lagg_mtu = 0;
- if (is_array($config['interfaces'])) {
- foreach ($config['interfaces'] as $ifname => $ifdata) {
- if ($ifdata['if'] != $laggif)
- continue;
-
- if (isset($ifdata['mtu']) && !empty($ifdata['mtu']))
- $lagg_mtu = $ifdata['mtu'];
-
- break;
- }
- }
-
+ $lagg_mtu = interface_find_child_cfgmtu($laggif);
if ($lagg_mtu == 0) {
/* Calculate smaller mtu and enforce it */
$smallermtu = 0;
@@ -4072,8 +4060,6 @@ function convert_real_interface_to_friendly_interface_name($interface = "wan") {
if ($interface == "enc0")
return 'IPsec';
-
- return NULL;
}
/* attempt to resolve interface to friendly descr */
@@ -4543,6 +4529,58 @@ function link_interface_to_track6($int, $action = "") {
}
}
+function interface_find_child_cfgmtu($realiface) {
+ global $config;
+
+ $interface = convert_real_interface_to_friendly_interface_name($realiface);
+ $vlans = link_interface_to_vlans($realiface);
+ $bridge = link_interface_to_bridge($realiface);
+ if (!empty($interface)) {
+ $gifs = link_interface_to_gif($interface);
+ $gres = link_interface_to_gre($interface);
+ } else {
+ $gifs = array();
+ $gres = array();
+ }
+
+ $mtu = 0;
+ foreach ($vlans as $vlan) {
+ $ifass = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
+ if (empty($ifass))
+ continue;
+ if (!empty($config['interfaces'][$ifass]['mtu'])) {
+ if (intval($config['interfaces'][$ifass]['mtu']) > $mtu)
+ $mtu = intval($config['interfaces'][$ifass]['mtu']);
+ }
+ }
+ foreach ($gifs as $vlan) {
+ $ifass = convert_real_interface_to_friendly_interface_name($vlan['gifif']);
+ if (empty($ifass))
+ continue;
+ if (!empty($config['interfaces'][$ifass]['mtu'])) {
+ if (intval($config['interfaces'][$ifass]['mtu']) > $mtu)
+ $mtu = intval($config['interfaces'][$ifass]['mtu']);
+ }
+ }
+ foreach ($gres as $vlan) {
+ $ifass = convert_real_interface_to_friendly_interface_name($vlan['greif']);
+ if (empty($ifass))
+ continue;
+ if (!empty($config['interfaces'][$ifass]['mtu'])) {
+ if (intval($config['interfaces'][$ifass]['mtu']) > $mtu)
+ $mtu = intval($config['interfaces'][$ifass]['mtu']);
+ }
+ }
+ $ifass = convert_real_interface_to_friendly_interface_name($bridge);
+ if (!empty($ifass) && !empty($config['interfaces'][$ifass]['mtu'])) {
+ if (intval($config['interfaces'][$ifass]['mtu']) > $mtu)
+ $mtu = intval($config['interfaces'][$ifass]['mtu']);
+ }
+ unset($vlans, $bridge, $gifs, $gres, $ifass, $vlan);
+
+ return $mtu;
+}
+
function link_interface_to_vlans($int, $action = "") {
global $config;
OpenPOWER on IntegriCloud