diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 91c3271ea..e8dfb5358 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -2620,17 +2620,17 @@ function interface_track6_6rd_configure($interface = 'lan', $lancfg) $rd6lanbin = str_pad($rd6lanbin, 128, "0", STR_PAD_RIGHT); /* convert the 128 bits for the lan address back into a valid IPv6 address */ - $rd6lan = convert_128bit_to_ipv6($rd6lanbin) ."1"; + $rd6lan = convert_128bit_to_ipv6($rd6lanbin) . (1 + get_interface_number_track6($lancfg['track6-interface'], $interface)); $lanif = get_real_interface($interface, 'inet6'); $oip = find_interface_ipv6($lanif); if (is_ipaddrv6($oip)) { mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); } - log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); - mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64"); - return 0; + log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + /* XXX why 64? */ + mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64"); } function interface_track6_6to4_configure($interface = 'lan', $lancfg) @@ -2660,17 +2660,17 @@ function interface_track6_6to4_configure($interface = 'lan', $lancfg) $sixto4lanbin = str_pad($sixto4lanbin, 128, "0", STR_PAD_RIGHT); /* convert the 128 bits for the lan address back into a valid IPv6 address */ - $sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) ."1"; + $sixto4lan = convert_128bit_to_ipv6($sixto4lanbin) . (1 + get_interface_number_track6($lancfg['track6-interface'], $interface)); $lanif = get_real_interface($interface, 'inet6'); $oip = find_interface_ipv6($lanif); if (is_ipaddrv6($oip)) { mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); } - log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); - mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64"); - return 0; + log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}"); + /* XXX why 64? */ + mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64"); } function interface_6rd_configure($interface = 'wan', $wancfg) @@ -2845,8 +2845,6 @@ function interface_6to4_configure($interface = 'wan', $wancfg) if (!file_exists("/var/run/booting")) { link_interface_to_track6($interface, true); } - - return 0; } function interface_dhcpv6_configure($interface = 'wan', $wancfg) @@ -3759,6 +3757,22 @@ function guess_interface_from_ip($ipaddress) return $ret; } +function get_interface_number_track6($wanif, $targetif) +{ + $list = link_interface_to_track6($wanif); + $number = 0; + + foreach ($list as $lanif => $unused) { + if ($lanif == $targetif) { + return $number; + } + $number += 1; + } + + /* if we fail give backwards-compat */ + return 0; +} + function link_interface_to_track6($wanif, $update = false) { $list = array();