diff options
author | Ermal Luçi <eri@pfsense.org> | 2008-11-05 21:00:32 +0000 |
---|---|---|
committer | Ermal Luçi <eri@pfsense.org> | 2008-11-05 21:00:32 +0000 |
commit | b64523c146437c3b3cf9b0f73ef1d3d9bd193698 (patch) | |
tree | f1f04b7ddee2db5f581f8a4988c6820b0814c8b2 /etc | |
parent | dc97efafc488a61a85bc360056075bbb4d8e7f23 (diff) | |
download | pfsense-b64523c146437c3b3cf9b0f73ef1d3d9bd193698.zip pfsense-b64523c146437c3b3cf9b0f73ef1d3d9bd193698.tar.gz |
Fix mtu handling on bridge and lagg interfaces. Reported-by: Seth
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/interfaces.inc | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 5e0352d..c05fda5 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -145,6 +145,15 @@ function interface_bridge_configure(&$bridge) } else $bridgeif = exec("/sbin/ifconfig bridge create"); + /* Calculate smaller mtu and enforce it */ + $smallermtu = 1500; + foreach ($members as $member) { + $realif = get_real_interface($member); + $mtu = get_interface_mtu($realif); + if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + /* Add interfaces to bridge */ foreach ($members as $member) { if (!array_key_exists($member, $checklist)) @@ -152,6 +161,7 @@ function interface_bridge_configure(&$bridge) $realif = get_real_interface($member); $realif = escapeshellarg($realif); /* make sure the parent interface is up */ + mwexec("/sbin/ifconfig {$realif} mtu {$smallermtu}"); mwexec("/sbin/ifconfig {$realif} up"); mwexec("/sbin/ifconfig {$bridgeif} addm {$realif}"); } @@ -290,31 +300,35 @@ function interface_lagg_configure(&$lagg) $checklist = get_interface_list(); + if ($g['booting'] || !(empty($lagg['laggif']))) { + mwexec("/sbin/ifconfig {$lagg['laggif']} destroy"); + mwexec("/sbin/ifconfig {$lagg['laggif']} create"); + $laggif = $lagg['laggif']; + } else + $laggif = exec("/sbin/ifconfig lagg create"); + + mwexec("/sbin/ifconfig {$laggif} {$lagg['proto']}"); + + /* Calculate smaller mtu and enforce it */ + $smallermtu = 1500; + foreach ($members as $member) { + $realif = get_real_interface($member); + $mtu = get_interface_mtu($realif); + if (!empty($mtu) && $mtu < $smallermtu) + $smallermtu = $mtu; + } + $cmd = ""; foreach ($members as $member) { if (!array_key_exists($member, $checklist)) continue; $realif = escapeshellarg($member); - $mtu = get_interface_mtu($realif); /* make sure the parent interface is up */ - mwexec("/sbin/ifconfig {$realif} mtu {$mtu}"); + mwexec("/sbin/ifconfig {$realif} mtu {$smallermtu}"); mwexec("/sbin/ifconfig {$realif} up"); - $cmd .= " laggport {$realif}"; + mwexec("/sbin/ifconfig {laggif} laggport {$realif}"); } - if ($g['booting'] || !(empty($lagg['laggif']))) { - mwexec("/sbin/ifconfig {$lagg['laggif']} destroy"); - mwexec("/sbin/ifconfig {$lagg['laggif']} create"); - $laggif = $lagg['laggif']; - } else - $laggif = exec("/sbin/ifconfig lagg create"); - - - mwexec("/sbin/ifconfig {$laggif} {$lagg['proto']}"); - - /* Add interfaces to lagg */ - mwexec("/sbin/ifconfig {$laggif} {$cmd}"); - mwexec("/sbin/ifconfig {$laggif} up"); return $laggif; |