From 7a41d7378fdb6e10e2a02c14fa55683dddcd931e Mon Sep 17 00:00:00 2001 From: Ermal Date: Sat, 9 Feb 2013 13:23:25 +0000 Subject: [PATCH] Revert "Remove track6 dhcp configuration since dhcp6 will do this for us." This reverts commit 6ebfa0ccfd7db500a4f85d2d45ebd74699a8805f. --- etc/inc/interfaces.inc | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 553f1b2713..bca9a24f9a 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -2995,7 +2995,7 @@ function interface_track6_configure($interface = "lan", $wancfg) { case "dhcp6": if ($g['debug']) log_error("Interface {$interface} configured via {$wancfg['track6-interface']} type {$type}"); - /* NOTE dhcp6c will do the work for us so no need to do anything here. */ + interface_track6_dhcp6_configure($interface, $wancfg); break; } @@ -3121,6 +3121,45 @@ function interface_track6_6to4_configure($interface = "lan", $lancfg) { return 0; } +function interface_track6_dhcp6_configure($interface = "lan", $lancfg) { + global $config, $g; + + if (!is_array($lancfg)) + return; + + /* If the interface is not configured via another, exit */ + if (empty($lancfg['track6-interface'])) + return; + + if (!is_numeric($lancfg['track6-prefix-id'])) + $lancfg['track6-prefix-id'] = 0; + + $wancfg = $config['interfaces'][$lancfg['track6-interface']]; + if (empty($wancfg)) { + log_error("Interface {$interface} tracking non-existant interface {$lancfg['track6-interface']}"); + return; + } + + $wanif = get_real_interface($lancfg['track6-interface']); + $ifcfgipv6 = find_interface_ipv6($wanif); + if (is_ipaddrv6($ifcfgipv6)) { + $dhcp6lanarr = explode(":", Net_IPv6::uncompress($ifcfgipv6)); + $dhcp6lanarr[4] = 0; + $dhcp6lanarr[5] = 0; + $dhcp6lanarr[6] = 0; + $dhcp6lanarr[7] = 1; + $dhcp6lan = Net_IPv6::compress(implode(":", $dhcp6lanarr)); + $lanif = get_real_interface($interface); + $oip = find_interface_ipv6($lanif); + if (is_ipaddrv6($oip)) + mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete"); + log_error("dhcp6 {$interface} with ipv6 address {$dhcp6lan} based on {$lancfg['track6-interface']}"); + mwexec("/sbin/ifconfig {$lanif} inet6 {$dhcp6lan} prefixlen 64"); + } + + return 0; +} + function interface_6rd_configure($interface = "wan", $wancfg) { global $config, $g;