diff options
author | Phil Davis <phil.davis@inf.org> | 2016-07-20 19:31:34 +0930 |
---|---|---|
committer | Phil Davis <phil.davis@inf.org> | 2016-07-20 19:31:34 +0930 |
commit | 9cf9f30f449f2f19e294fad5a86c16517ab78282 (patch) | |
tree | 78496b4182014629805d8887c3fb8c452a3c3758 /src | |
parent | c9d6b915daced9767ff596ee9485ec2d9a573a41 (diff) | |
download | pfsense-9cf9f30f449f2f19e294fad5a86c16517ab78282.zip pfsense-9cf9f30f449f2f19e294fad5a86c16517ab78282.tar.gz |
Backport Fix issue with QinQ on LAGG interfaces where MTU doesn't apply to parent
Original pull request to master was #2905
Diffstat (limited to 'src')
-rw-r--r-- | src/etc/inc/interfaces.inc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 4eee7bc..a7eee18 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -4976,6 +4976,7 @@ function interface_find_child_cfgmtu($realiface) { $interface = convert_real_interface_to_friendly_interface_name($realiface); $vlans = link_interface_to_vlans($realiface); + $qinqs = link_interface_to_qinqs($realiface); $bridge = link_interface_to_bridge($realiface); if (!empty($interface)) { $gifs = link_interface_to_gif($interface); @@ -4999,6 +5000,19 @@ function interface_find_child_cfgmtu($realiface) { } } } + if (is_array($qinqs)) { + foreach ($qinqs as $qinq) { + $ifass = convert_real_interface_to_friendly_interface_name($qinq['vlanif']); + if (empty($ifass)) { + continue; + } + if (!empty($config['interfaces'][$ifass]['mtu'])) { + if (intval($config['interfaces'][$ifass]['mtu']) > $mtu) { + $mtu = intval($config['interfaces'][$ifass]['mtu']); + } + } + } + } if (is_array($gifs)) { foreach ($gifs as $gif) { $ifass = convert_real_interface_to_friendly_interface_name($gif['gifif']); @@ -5060,6 +5074,30 @@ function link_interface_to_vlans($int, $action = "") { } } +function link_interface_to_qinqs($int, $action = "") { + global $config; + + if (empty($int)) { + return; + } + + if (is_array($config['qinqs']['qinqentry'])) { + $ifaces = array(); + foreach ($config['qinqs']['qinqentry'] as $qinq) { + if ($int == $qinq['if']) { + if ($action == "update") { + interfaces_bring_up($int); + } else { + $ifaces[$qinq['tag']] = $qinq; + } + } + } + if (!empty($ifaces)) { + return $ifaces; + } + } +} + function link_interface_to_vips($int, $action = "", $vhid = '') { global $config; |