diff options
author | PiBa-NL <pba_2k3@yahoo.com> | 2015-11-26 21:05:46 +0100 |
---|---|---|
committer | PiBa-NL <pba_2k3@yahoo.com> | 2015-11-26 21:05:46 +0100 |
commit | e75f0e7d9d7d0c7646b03fe2b4b7b5fae3856f86 (patch) | |
tree | c00ba0faf1b29806260432af1bf0f17638dbb18d /src | |
parent | de34f1fc12f29db0348f8ff9b1bc8300d9fb74d2 (diff) | |
download | pfsense-e75f0e7d9d7d0c7646b03fe2b4b7b5fae3856f86.zip pfsense-e75f0e7d9d7d0c7646b03fe2b4b7b5fae3856f86.tar.gz |
cleanup static routes for interface nonlocal gateways when being deleted or changed.
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/local/www/system_gateways.php | 9 | ||||
-rw-r--r-- | src/usr/local/www/system_gateways_edit.php | 10 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/usr/local/www/system_gateways.php b/src/usr/local/www/system_gateways.php index f05816c..5223a20 100644 --- a/src/usr/local/www/system_gateways.php +++ b/src/usr/local/www/system_gateways.php @@ -155,6 +155,15 @@ function delete_gateway_item($id) { return; } + /* NOTE: Cleanup static routes for the interface route if any */ + if (!empty($a_gateways[$id]) && is_ipaddr($a_gateways[$id]['gateway']) && + $gateway['gateway'] != $a_gateways[$id]['gateway'] && + isset($a_gateways[$id]["nonlocalgateway"])) { + $realif = get_real_interface($a_gateways[$id]['interface']); + $inet = (!is_ipaddrv4($a_gateways[$id]['gateway']) ? "-inet6" : "-inet"); + $cmd = "/sbin/route delete $inet " . escapeshellarg($a_gateways[$id]['gateway']) . " -iface " . escapeshellarg($realif); + mwexec($cmd); + } /* NOTE: Cleanup static routes for the monitor ip if any */ if (!empty($a_gateways[$id]['monitor']) && $a_gateways[$id]['monitor'] != "dynamic" && diff --git a/src/usr/local/www/system_gateways_edit.php b/src/usr/local/www/system_gateways_edit.php index 5641924..b6d7c37 100644 --- a/src/usr/local/www/system_gateways_edit.php +++ b/src/usr/local/www/system_gateways_edit.php @@ -526,6 +526,16 @@ if ($_POST) { $gateway['monitor'] = $_POST['monitor']; } + /* NOTE: If gateway ip is changed need to cleanup the old static interface route */ + if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$realid]) && is_ipaddr($a_gateway_item[$realid]['gateway']) && + $gateway['gateway'] != $a_gateway_item[$realid]['gateway'] && + isset($a_gateway_item[$realid]["nonlocalgateway"])) { + $realif = get_real_interface($a_gateway_item[$realid]['interface']); + $inet = (!is_ipaddrv4($a_gateway_item[$realid]['gateway']) ? "-inet6" : "-inet"); + $cmd = "/sbin/route delete $inet " . escapeshellarg($a_gateway_item[$realid]['gateway']) . " -iface " . escapeshellarg($realif); + mwexec($cmd); + } + /* NOTE: If monitor ip is changed need to cleanup the old static route */ if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$realid]) && is_ipaddr($a_gateway_item[$realid]['monitor']) && $_POST['monitor'] != $a_gateway_item[$realid]['monitor'] && $gateway['gateway'] != $a_gateway_item[$realid]['monitor']) { |