diff options
author | Ermal Luçi <ermal.luci@gmail.com> | 2012-07-31 13:29:47 -0700 |
---|---|---|
committer | Ermal Luçi <ermal.luci@gmail.com> | 2012-07-31 13:29:47 -0700 |
commit | f15849b5e4961e5c76931a8891ea7a7e2f6f3c53 (patch) | |
tree | e76c5fed2e8aa4d7fe37dc76884aedad9de879af /etc | |
parent | 0b233932f2ec54ddb47a61240fabf02509116767 (diff) | |
parent | 73c897eb1441fd64777826b56aab66acb4df8d52 (diff) | |
download | pfsense-f15849b5e4961e5c76931a8891ea7a7e2f6f3c53.zip pfsense-f15849b5e4961e5c76931a8891ea7a7e2f6f3c53.tar.gz |
Merge pull request #196 from mtharp/dhcpv6-relay
Get DHCPv6 relay working (#1663)
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/services.inc | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/etc/inc/services.inc b/etc/inc/services.inc index 78b810e..4843fdd 100644 --- a/etc/inc/services.inc +++ b/etc/inc/services.inc @@ -1262,12 +1262,14 @@ function services_dhcrelay6_configure() { if (is_ipaddrv6(get_interface_ipv6($dhcrelayif))) $dhcrelayifs[] = get_real_interface($dhcrelayif); } + $dhcrelayifs = array_unique($dhcrelayifs); /* * In order for the relay to work, it needs to be active * on the interface in which the destination server sits. */ $srvips = explode(",", $dhcrelaycfg['server']); + $srvifaces = array(); foreach ($srvips as $srcidx => $srvip) { unset($destif); foreach ($iflist as $ifname) { @@ -1322,23 +1324,24 @@ function services_dhcrelay6_configure() { $destif = get_real_interface("wan"); } - if (!empty($destif)) - $dhcrelayifs[] = $destif; + if (!empty($destif)) { + $srvifaces[] = "{$srvip}%{$destif}"; + } } - $dhcrelayifs = array_unique($dhcrelayifs); /* fire up dhcrelay */ - if (empty($dhcrelayifs)) { + if (empty($dhcrelayifs) || empty($srvifaces) ) { log_error("No suitable interface found for running dhcrelay -6!"); return; /* XXX */ } - $cmd = "/usr/local/sbin/dhcrelay -6 -pf \"{$g['varetc_path']}/dhcrelay6.pid\" -i " . implode(" -i ", $dhcrelayifs); - - if (isset($dhcrelaycfg['agentoption'])) - $cmd .= " -a -m replace"; - - $cmd .= " " . implode(" ", $srvips); + $cmd = "/usr/local/sbin/dhcrelay -6 -pf \"{$g['varetc_path']}/dhcrelay6.pid\""; + foreach ($dhcrelayifs as $dhcrelayif) { + $cmd .= " -l {$dhcrelayif}"; + } + foreach ($srvifaces as $srviface) { + $cmd .= " -u \"{$srviface}\""; + } mwexec($cmd); return 0; |