diff options
author | Renato Botelho <garga@FreeBSD.org> | 2013-04-23 09:40:27 -0300 |
---|---|---|
committer | Renato Botelho <garga@FreeBSD.org> | 2013-04-23 09:40:27 -0300 |
commit | 55705b333518144ccea42219c8459b5d0b1d6ecc (patch) | |
tree | 6b245a79404c5ae5802864a387250930e68ecc80 /usr/local/www/firewall_virtual_ip.php | |
parent | abb87c266822567661970765fc08e26367564cf8 (diff) | |
download | pfsense-55705b333518144ccea42219c8459b5d0b1d6ecc.zip pfsense-55705b333518144ccea42219c8459b5d0b1d6ecc.tar.gz |
Allow IPs inside virtual IP networks to be used as gateways. Fixed #2962
Diffstat (limited to 'usr/local/www/firewall_virtual_ip.php')
-rwxr-xr-x | usr/local/www/firewall_virtual_ip.php | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/usr/local/www/firewall_virtual_ip.php b/usr/local/www/firewall_virtual_ip.php index 5d0dacd..55f6383 100755 --- a/usr/local/www/firewall_virtual_ip.php +++ b/usr/local/www/firewall_virtual_ip.php @@ -107,6 +107,29 @@ if ($_GET['act'] == "del") { } } + if (is_ipaddrv6($a_vip[$_GET['id']]['subnet'])) + $subnet = gen_subnetv6($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']); + else + $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']); + + $subnet .= "/" . $a_vip[$_GET['id']]['subnet_bits']; + + $is_ipv6 = is_ipaddrv6($a_vip[$_GET['id']]['subnet']); + if (is_array($config['gateways']['gateway_item'])) + foreach($config['gateways']['gateway_item'] as $gateway) { + if ($a_vip[$_GET['id']]['interface'] != $gateway['interface']) + continue; + if ($is_ipv6 && $gateway['ipprotocol'] == 'inet') + continue; + if (!$is_ipv6 && $gateway['ipprotocol'] == 'inet6') + continue; + + if (ip_in_subnet($gateway['gateway'], $subnet)) { + $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one Gateway."); + break; + } + } + if ($a_vip[$_GET['id']]['mode'] == "ipalias") { $found_carp = false; $found_other_alias = false; |