summaryrefslogtreecommitdiffstats
path: root/src/etc/inc/services.inc
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2016-02-19 08:28:44 -0200
committerRenato Botelho <renato@netgate.com>2016-02-19 10:57:32 -0200
commit2bf455caa3aaca83287309b6a7629c7d3a328652 (patch)
treed86087d0db6abc692d570e9f2dde7067675b0ffb /src/etc/inc/services.inc
parent934b8a98b29b01978f6d36d9487423df1b2f7339 (diff)
downloadpfsense-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.inc46
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']) {
OpenPOWER on IntegriCloud