diff options
author | Ermal Luçi <eri@pfsense.org> | 2008-07-25 20:24:57 +0000 |
---|---|---|
committer | Ermal Luçi <eri@pfsense.org> | 2008-07-25 20:24:57 +0000 |
commit | cccf624bc0a4b6c86693b0679f404763e8313fc4 (patch) | |
tree | bbe477ba020855246a4c86488250055f41cb204a /etc | |
parent | bdd550108ebaa9f3bae789d63d7f0aae865089f0 (diff) | |
download | pfsense-cccf624bc0a4b6c86693b0679f404763e8313fc4.zip pfsense-cccf624bc0a4b6c86693b0679f404763e8313fc4.tar.gz |
Backend support for lagg(4).
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/interfaces.inc | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 358f5fe..2033607 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -255,6 +255,64 @@ function interface_bridge_configure(&$bridge) { return $bridgeif; } +function interfaces_lagg_configure() { + global $config; + + $i = 0; + if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) { + foreach ($config['laggs']['lagg'] as $lagg) { + if(empty($lagg['laggif'])) { + $lagg['laggif'] = "lagg{$i}"; + } + /* XXX: Maybe we should report any errors?! */ + interface_lagg_configure($lagg); + $i++; + } + } +} + +function interface_lagg_configure(&$lagg) { + global $config, $g; + + if (!is_array($lagg)) + return -1; + + $members = explode(',', $lagg['members']); + if (!count($members)) + return -1; + + $checklist = get_configured_interface_list(); + + $cmd = ""; + foreach ($members as $member) { + if (!array_key_exists($member, $checklist)) + continue; + $realif = get_real_wan_interface($member); + $realif = escapeshellarg($realif); + /* make sure the parent interface is up */ + mwexec("/sbin/ifconfig {$realif} up"); + $cmd .= " 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"); + + return -1; + + /* Add interfaces to lagg */ + mwexec("/sbin/ifconfig {$laggif} {$cmd}"); + + mwexec("/sbin/ifconfig {$laggif} {$lagg['proto']}"); + + mwexec("/sbin/ifconfig {$laggif} up"); + + return $laggif; +} + function interfaces_gre_configure() { global $config; |