--- services.inc.orig 2014-05-01 22:01:50.000000000 +0200 +++ services.inc 2014-06-21 03:03:56.675462400 +0200 @@ -134,49 +134,93 @@ case "assist": $radvdconf .= "\tAdvManagedFlag on;\n"; $radvdconf .= "\tAdvOtherConfigFlag on;\n"; break; } - $radvdconf .= "\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; - if($carpif == true) { - $radvdconf .= "\t\tDeprecatePrefix off;\n"; - } else { - $radvdconf .= "\t\tDeprecatePrefix on;\n"; - } - switch($dhcpv6ifconf['ramode']) { - case "managed": - $radvdconf .= "\t\tAdvOnLink on;\n"; - $radvdconf .= "\t\tAdvAutonomous off;\n"; - $radvdconf .= "\t\tAdvRouterAddr on;\n"; - break; - case "router": - $radvdconf .= "\t\tAdvOnLink off;\n"; - $radvdconf .= "\t\tAdvAutonomous off;\n"; - $radvdconf .= "\t\tAdvRouterAddr on;\n"; - break; - case "assist": - $radvdconf .= "\t\tAdvOnLink on;\n"; - $radvdconf .= "\t\tAdvAutonomous on;\n"; - $radvdconf .= "\t\tAdvRouterAddr on;\n"; - break; - case "unmanaged": - $radvdconf .= "\t\tAdvOnLink on;\n"; - $radvdconf .= "\t\tAdvAutonomous on;\n"; - $radvdconf .= "\t\tAdvRouterAddr on;\n"; - break; + if (is_array($dhcpv6ifconf['subnets']['item'])) { + foreach ($dhcpv6ifconf['subnets']['item'] as $dhcpv6subnet) { + $radvdconf .= "\tprefix {$dhcpv6subnet} {\n"; + if($carpif == true) { + $radvdconf .= "\t\tDeprecatePrefix off;\n"; + } else { + $radvdconf .= "\t\tDeprecatePrefix on;\n"; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "router": + $radvdconf .= "\t\tAdvOnLink off;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "assist": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "unmanaged": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + } + $radvdconf .= "\t};\n"; + } } - $radvdconf .= "\t};\n"; - - if($carpif === true) { - $radvdconf .= "\troute ::/0 {\n"; - $radvdconf .= "\t\tRemoveRoute off;\n"; - $radvdconf .= "\t};\n"; - } else { - $radvdconf .= "\troute ::/0 {\n"; - $radvdconf .= "\t\tRemoveRoute on;\n"; + else { + $radvdconf .= "\tprefix {$subnetv6}/{$ifcfgsnv6} {\n"; + if($carpif == true) { + $radvdconf .= "\t\tDeprecatePrefix off;\n"; + } else { + $radvdconf .= "\t\tDeprecatePrefix on;\n"; + } + switch($dhcpv6ifconf['ramode']) { + case "managed": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "router": + $radvdconf .= "\t\tAdvOnLink off;\n"; + $radvdconf .= "\t\tAdvAutonomous off;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "assist": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + case "unmanaged": + $radvdconf .= "\t\tAdvOnLink on;\n"; + $radvdconf .= "\t\tAdvAutonomous on;\n"; + $radvdconf .= "\t\tAdvRouterAddr on;\n"; + break; + } $radvdconf .= "\t};\n"; } + if (is_array($dhcpv6ifconf['routes']['item'])) { + foreach ($dhcpv6ifconf['routes']['item'] as $dhcpv6route) { + $radvdconf .= "\troute " . $dhcpv6route['destination'] . " {\n"; + $radvdconf .= "\t\tRemoveRoute off;\n"; + $radvdconf .= "\t\tAdvRoutePreference " . $dhcpv6route['priority'] . ";\n"; + $radvdconf .= "\t};\n"; + } + } + else { + if($carpif === true) { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute off;\n"; + $radvdconf .= "\t};\n"; + } else { + $radvdconf .= "\troute ::/0 {\n"; + $radvdconf .= "\t\tRemoveRoute on;\n"; + $radvdconf .= "\t};\n"; + } + } /* add DNS servers */ $dnslist = array(); if (isset($dhcpv6ifconf['rasamednsasdhcp6']) && is_array($dhcpv6ifconf['dnsserver']) && !empty($dhcpv6ifconf['dnsserver'])) { foreach($dhcpv6ifconf['dnsserver'] as $server) @@ -197,11 +241,19 @@ if (count($dnslist) > 0) { $dnsstring = implode(" ", $dnslist); if ($dnsstring <> "") $radvdconf .= "\tRDNSS {$dnsstring} { };\n"; } - if (!empty($dhcpv6ifconf['domain'])) { + + if (!isset($dhcpv6ifconf['rasamednsasdhcp6']) && isset($dhcpv6ifconf['radomainsearchlist']) && $dhcpv6ifconf['radomainsearchlist'] <> "") { + $domain_array=preg_split("/[ ;]+/",$dhcpv6ifconf['radomainsearchlist']); + $radvdconf .= "\tDNSSL "; + foreach ($domain_array as $curdomain) { + $radvdconf .= $curdomain . " "; + } + $radvdconf .= "{ };\n"; + } elseif (!empty($dhcpv6ifconf['domain'])) { $radvdconf .= "\tDNSSL {$dhcpv6ifconf['domain']} { };\n"; } elseif (!empty($config['system']['domain'])) { $radvdconf .= "\tDNSSL {$config['system']['domain']} { };\n"; } $radvdconf .= "};\n";