diff options
author | bcyrill <cyrill@bannwart.info> | 2012-12-19 15:16:41 +0100 |
---|---|---|
committer | bcyrill <cyrill@bannwart.info> | 2012-12-19 15:16:41 +0100 |
commit | 8436caa7549229c79de1ae34d1e0a4e39be2fbce (patch) | |
tree | 1d5d5aee3bf864669687951c43fcf715e537233f /usr/local/www/interfaces_gif_edit.php | |
parent | d13e23ec0d22ecdea862d5fcbde360c601277560 (diff) | |
download | pfsense-8436caa7549229c79de1ae34d1e0a4e39be2fbce.zip pfsense-8436caa7549229c79de1ae34d1e0a4e39be2fbce.tar.gz |
Add IP alias support to GIF interfaces
Diffstat (limited to 'usr/local/www/interfaces_gif_edit.php')
-rw-r--r-- | usr/local/www/interfaces_gif_edit.php | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/usr/local/www/interfaces_gif_edit.php b/usr/local/www/interfaces_gif_edit.php index 7421f8d..4cc95b3 100644 --- a/usr/local/www/interfaces_gif_edit.php +++ b/usr/local/www/interfaces_gif_edit.php @@ -52,6 +52,9 @@ if (isset($_POST['id'])) if (isset($id) && $a_gifs[$id]) { $pconfig['if'] = $a_gifs[$id]['if']; + if (!empty($a_gifs[$id]['ipaddr'])) { + $pconfig['if'] = $pconfig['if'] . '|' . $a_gifs[$id]['ipaddr']; + } $pconfig['gifif'] = $a_gifs[$id]['gifif']; $pconfig['remote-addr'] = $a_gifs[$id]['remote-addr']; $pconfig['tunnel-remote-net'] = $a_gifs[$id]['tunnel-remote-net']; @@ -77,13 +80,18 @@ if ($_POST) { (!is_ipaddr($_POST['remote-addr']))) { $input_errors[] = gettext("The tunnel local and tunnel remote fields must have valid IP addresses."); } + + $alias = strstr($_POST['if'],'|'); + if ((is_ipaddrv4($alias) && !is_ipaddrv4($_POST['remote-addr'])) || + (is_ipaddrv6($alias) && !is_ipaddrv6($_POST['remote-addr']))) + $input_errors[] = gettext("The alias IP address family has to match the family of the remote peer address."); foreach ($a_gifs as $gif) { if (isset($id) && ($a_gifs[$id]) && ($a_gifs[$id] === $gif)) continue; /* FIXME: needs to perform proper subnet checks in the feature */ - if (($gif['if'] == $_POST['if']) && ($gif['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) { + if (($gif['if'] == strtok($_POST['if'],'|')) && ($gif['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) { $input_errors[] = sprintf(gettext("A gif with the network %s is already defined."), $gif['tunnel-remote-addr']); break; } @@ -91,7 +99,7 @@ if ($_POST) { if (!$input_errors) { $gif = array(); - $gif['if'] = $_POST['if']; + list($gif['if'], $gif['ipaddr']) = explode ("|",$_POST['if']); $gif['tunnel-local-addr'] = $_POST['tunnel-local-addr']; $gif['tunnel-remote-addr'] = $_POST['tunnel-remote-addr']; $gif['tunnel-remote-net'] = $_POST['tunnel-remote-net']; @@ -144,9 +152,12 @@ include("head.inc"); <?php $portlist = get_configured_interface_with_descr(); $carplist = get_configured_carp_interface_list(); - foreach ($carplist as $cif => $carpip) - $portlist[$cif] = $carpip." (".get_vip_descr($carpip).")"; - foreach ($portlist as $ifn => $ifinfo) { + foreach ($carplist as $cif => $carpip) + $portlist[$cif] = $carpip." (".get_vip_descr($carpip).")"; + $aliaslist = get_configured_ip_aliases_list(); + foreach ($aliaslist as $aliasip => $aliasif) + $portlist[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")"; + foreach ($portlist as $ifn => $ifinfo) { echo "<option value=\"{$ifn}\""; if ($ifn == $pconfig['if']) echo "selected"; |