diff options
author | Seth Mos <seth.mos@dds.nl> | 2011-03-24 15:51:31 +0100 |
---|---|---|
committer | Seth Mos <seth.mos@dds.nl> | 2011-03-24 15:51:31 +0100 |
commit | ee5c01b56525a8596cacc9978f2a2f9fcc602d7e (patch) | |
tree | d469d82e694f6ea7757ca37835ec658ead0e82d6 /usr/local/www/interfaces.php | |
parent | 126f531437bbc659ba9e4ce1d3973ccb06ed4eae (diff) | |
download | pfsense-ee5c01b56525a8596cacc9978f2a2f9fcc602d7e.zip pfsense-ee5c01b56525a8596cacc9978f2a2f9fcc602d7e.tar.gz |
Remove the old v6 address using the -alias method
Diffstat (limited to 'usr/local/www/interfaces.php')
-rwxr-xr-x | usr/local/www/interfaces.php | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index 15a3f5f..00cbaa1 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -85,6 +85,7 @@ if (!is_array($config['gateways']['gateway_item'])) $a_gateways = &$config['gateways']['gateway_item']; $wancfg = &$config['interfaces'][$if]; +$old_wancfg = $wancfg; // Populate page descr if it does not exist. if ($if == "wan" && !$wancfg['descr']) $wancfg['descr'] = "WAN"; @@ -221,12 +222,12 @@ switch($wancfg['ipaddrv6']) { break; default: /* if we have dual stack we need a combined type */ - if(is_ipaddr($wancfg['ipaddrv6'])) { + if(is_ipaddrv6($wancfg['ipaddrv6'])) { $pconfig['type'] = "staticv6"; $pconfig['ipaddrv6'] = $wancfg['ipaddrv6']; $pconfig['subnetv6'] = $wancfg['subnetv6']; $pconfig['gatewayv6'] = $wancfg['gatewayv6']; - if((is_ipaddr($wancfg['ipaddrv6'])) && (is_ipaddr($wancfg['ipaddr']))) { + if((is_ipaddrv6($wancfg['ipaddrv6'])) && (is_ipaddr($wancfg['ipaddr']))) { $pconfig['type'] = "staticv4v6"; } } @@ -331,11 +332,18 @@ if ($_POST['apply']) { if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); - foreach ($toapplylist as $ifapply) { - if (isset($config['interfaces'][$ifapply]['enable'])) + foreach ($toapplylist as $ifapply => $values) { + if (isset($config['interfaces'][$ifapply]['enable'])) { + /* check if any old addresses need purging */ + if(is_ipaddrv6($values['ipaddrv6'])) { + $realif = get_real_interface("$ifapply"); + log_error("removing old v6 address {$values['ipaddrv6']} on {$realif}"); + mwexec("/sbin/ifconfig {realif} inet6 {$values['ipaddrv6']} -alias"); + } interface_configure($ifapply, true); - else + } else { interface_bring_down($ifapply); + } } } /* restart snmp so that it binds to correct address */ @@ -359,11 +367,16 @@ if ($_POST['apply']) { interface_sync_wireless_clones($wancfg, false); write_config("Interface {$_POST['descr']}({$if}) is now disabled."); mark_subsystem_dirty('interfaces'); - if (file_exists("{$g['tmp_path']}/.interfaces.apply")) + if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); - else + } else { $toapplylist = array(); - $toapplylist[$if] = $if; + } + $toapplylist[$if] = array(); + /* we need to be able remove IP aliases for IPv6 */ + if(($old_wancfg['ipaddrv6'] != $wancfg['ipaddrv6']) && (is_ipaddrv6($old_wancfg['ipaddrv6']))) { + $toapplylist[$if]['ipaddrv6'] = "{$old_wancfg['ipaddrv6']}"; + } file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist)); header("Location: interfaces.php?if={$if}"); exit; @@ -795,11 +808,17 @@ if ($_POST['apply']) { conf_mount_ro(); write_config(); - if (file_exists("{$g['tmp_path']}/.interfaces.apply")) + if (file_exists("{$g['tmp_path']}/.interfaces.apply")) { $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply")); - else + } else { $toapplylist = array(); - $toapplylist[$if] = $if; + } + $toapplylist[$if] = array(); + /* we need to be able remove IP aliases for IPv6 */ + if(($old_wancfg['ipaddrv6'] != $wancfg['ipaddrv6']) && (is_ipaddrv6($old_wancfg['ipaddrv6']))) { + $toapplylist[$if]['ipaddrv6'] = $old_wancfg['ipaddrv6']; + } + file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist)); mark_subsystem_dirty('interfaces'); |