diff options
author | Renato Botelho <renato@netgate.com> | 2016-02-19 08:28:44 -0200 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2016-02-19 10:57:32 -0200 |
commit | 2bf455caa3aaca83287309b6a7629c7d3a328652 (patch) | |
tree | d86087d0db6abc692d570e9f2dde7067675b0ffb /src/etc/inc/services.inc | |
parent | 934b8a98b29b01978f6d36d9487423df1b2f7339 (diff) | |
download | pfsense-2bf455caa3aaca83287309b6a7629c7d3a328652.zip pfsense-2bf455caa3aaca83287309b6a7629c7d3a328652.tar.gz |
Ticket #3029
Import patch from @Robert-Nelson to enable DHCPv6 Server/RA to
interfaces configured to track DHCP-PD
This patch only works for PD with length 64
Diffstat (limited to 'src/etc/inc/services.inc')
-rw-r--r-- | src/etc/inc/services.inc | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc index e07601d..4e121e9 100644 --- a/src/etc/inc/services.inc +++ b/src/etc/inc/services.inc @@ -1237,13 +1237,17 @@ function services_dhcpdv6_configure($blacklist = array()) { sleep(1); } - /* we add a fake entry for interfaces that are set to track6 another WAN */ + /* + * We add a fake entry for interfaces that are set to track6 + * another WAN unless DHCP has been configured + */ foreach ($Iflist as $ifname) { /* Do not put in the config an interface which is down */ if (isset($blacklist[$ifname])) { continue; } - if (!empty($config['interfaces'][$ifname]['track6-interface'])) { + if (!empty($config['interfaces'][$ifname]['track6-interface']) && + (empty($dhcpdv6cfg[$ifname]) || !isset($dhcpdv6cfg[$ifname]['enable']))) { $realif = get_real_interface($ifname, "inet6"); $ifcfgipv6 = get_interface_ipv6($ifname); if (!is_ipaddrv6($ifcfgipv6)) { @@ -1416,8 +1420,15 @@ EOD; $dhcpdv6conf .= " {\n"; + $range_from = $dhcpv6ifconf['range']['from']; + $range_to = $dhcpv6ifconf['range']['to']; + if ($ifcfgv6['ipaddrv6'] == 'track6') { + $range_from = merge_ipv6_delegated_prefix($ifcfgipv6, $range_from); + $range_to = merge_ipv6_delegated_prefix($ifcfgipv6, $range_to); + } + $dhcpdv6conf .= <<<EOD - range6 {$dhcpv6ifconf['range']['from']} {$dhcpv6ifconf['range']['to']}; + range6 {$range_from} {$range_to}; $dnscfgv6 EOD; @@ -1426,7 +1437,12 @@ EOD; $dhcpdv6conf .= " prefix6 {$dhcpv6ifconf['prefixrange']['from']} {$dhcpv6ifconf['prefixrange']['to']} /{$dhcpv6ifconf['prefixrange']['prefixlength']};\n"; } if (is_ipaddrv6($dhcpv6ifconf['dns6ip'])) { - $dhcpdv6conf .= " option dhcp6.name-servers {$dhcpv6ifconf['dns6ip']};\n"; + $dns6ip = $dhcpv6ifconf['dns6ip']; + if ($ifcfgv6['ipaddrv6'] == 'track6' && + Net_IPv6::isInNetmask($dns6ip, '::', 64)) { + $dns6ip = merge_ipv6_delegated_prefix($ifcfgipv6, $dns6ip); + } + $dhcpdv6conf .= " option dhcp6.name-servers {$dns6ip};\n"; } // default-lease-time if ($dhcpv6ifconf['defaultleasetime']) { @@ -1442,9 +1458,14 @@ EOD; if (is_array($dhcpv6ifconf['ntpserver']) && $dhcpv6ifconf['ntpserver'][0]) { $ntpservers = array(); foreach ($dhcpv6ifconf['ntpserver'] as $ntpserver) { - if (is_ipaddrv6($ntpserver)) { - $ntpservers[] = $ntpserver; + if (!is_ipaddrv6($ntpserver)) { + continue; + } + if ($ifcfgv6['ipaddrv6'] == 'track6' && + Net_IPv6::isInNetmask($ntpserver, '::', 64)) { + $ntpserver =merge_ipv6_delegated_prefix($ifcfgipv6, $ntpserver); } + $ntpservers[] = $ntpserver; } if (count($ntpservers) > 0) { $dhcpdv6conf .= " option dhcp6.sntp-servers " . join(",", $dhcpv6ifconf['ntpserver']) . ";\n"; @@ -1468,7 +1489,12 @@ EOD; // ldap-server if ($dhcpv6ifconf['ldap'] <> "") { - $dhcpdv6conf .= " option ldap-server \"{$dhcpv6ifconf['ldap']}\";\n"; + $ldapserver = $dhcpv6ifconf['ldap']; + if ($ifcfgv6['ipaddrv6'] == 'track6' && + Net_IPv6::isInNetmask($ldapserver, '::', 64)) { + $ldapserver = merge_ipv6_delegated_prefix($ifcfgipv6, $ldapserver); + } + $dhcpdv6conf .= " option ldap-server \"{$ldapserver}\";\n"; } // net boot information @@ -1491,7 +1517,11 @@ host s_{$dhcpv6if}_{$i} { EOD; if ($sm['ipaddrv6']) { - $dhcpdv6conf .= " fixed-address6 {$sm['ipaddrv6']};\n"; + $ipaddrv6 = $sm['ipaddrv6']; + if ($ifcfgv6['ipaddrv6'] == 'track6') { + $ipaddrv6 = merge_ipv6_delegated_prefix($ifcfgipv6, $ipaddrv6); + } + $dhcpdv6conf .= " fixed-address6 {$ipaddrv6};\n"; } if ($sm['hostname']) { |