interfaces: cleanup spurious functions regarding VIP access

We do this for different reasons, but mainly for code maintenance
and simplicity.  It also fixes a few aquire/display bugs with
overlapping linl-local VIPs across interfaces, but not all.
This commit is contained in:
Franco Fichtner 2025-04-04 10:58:35 +02:00
parent 7210f016eb
commit 868a74e058
6 changed files with 79 additions and 113 deletions

View File

@ -3679,18 +3679,14 @@ function link_interface_to_bridge($interface, $attach_device = null, $ifconfig_d
function link_interface_to_gre($interface, $update = false, $family = null)
{
global $config;
$aliaslist = get_configured_ip_aliases_list();
$result = [];
if (isset($config['gres']['gre'])) {
foreach ($config['gres']['gre'] as $gre) {
foreach (config_read_array('gres', 'gre') as $gre) {
$parent = explode('_vip', $gre['if'])[0];
if (is_ipaddr($parent)) {
foreach ($aliaslist as $ip => $int) {
if ($ip == $parent) {
$parent = $int;
foreach (config_read_array('virtualip', 'vip') as $vip) {
if ($vip['mode'] == 'ipalias' && $vip['subnet'] == $parent) {
$parent = $vip['interface'];
break;
}
}
@ -3712,19 +3708,15 @@ function link_interface_to_gre($interface, $update = false, $family = null)
/* callers are only concerned with the resulting device names */
$result[] = $gre['greif'];
}
}
return $result;
}
function link_interface_to_gif($interface, $update = false, $family = null)
{
global $config;
$result = [];
if (isset($config['gifs']['gif'])) {
foreach ($config['gifs']['gif'] as $gif) {
foreach (config_read_array('gifs', 'gif') as $gif) {
if (explode('_vip', $gif['if'])[0] != $interface) {
continue;
} elseif ($family == 4 && !is_ipaddrv4($gif['remote-addr'])) {
@ -3741,7 +3733,6 @@ function link_interface_to_gif($interface, $update = false, $family = null)
/* callers are only concerned with the resulting device names */
$result[] = $gif['gifif'];
}
}
return $result;
}
@ -3838,19 +3829,6 @@ function get_interface_mac($interface, $ifconfig_details = null)
return $intf_details['macaddr'];
}
function get_vip_descr($ipaddress)
{
global $config;
foreach ($config['virtualip']['vip'] as $vip) {
if ($vip['subnet'] == $ipaddress) {
return ($vip['descr'] ?? '');
}
}
return '';
}
function interfaces_staticarp_configure($if, $ifconfig_details = null)
{
global $config;

View File

@ -32,7 +32,6 @@
require_once 'IPv6.inc';
/* XXX only two callers left, better remove this unreliable function */
function killbyname($procname, $sig = 'TERM', $waitforit = true)
{
/* pgrep -n only kills the newest matching process */
@ -802,32 +801,6 @@ function is_inrange($test, $start, $end)
return is_ipaddrv6($test) ? is_inrange_v6($test, $start, $end) : is_inrange_v4($test, $start, $end);
}
function get_configured_carp_interface_list()
{
$carp_list = [];
foreach (config_read_array('virtualip', 'vip') as $vip) {
if ($vip['mode'] == 'carp') {
$carp_list["{$vip['interface']}_vip{$vip['vhid']}"] = $vip['subnet'];
}
}
return $carp_list;
}
function get_configured_ip_aliases_list()
{
$alias_list = [];
foreach (config_read_array('virtualip', 'vip') as $vip) {
if ($vip['mode'] == 'ipalias') {
$alias_list[$vip['subnet']] = $vip['interface'];
}
}
return $alias_list;
}
function get_configured_interface_with_descr()
{
$iflist = [];

View File

@ -6,7 +6,7 @@
<Phase1 url="/vpn_ipsec_phase1.php*" visibility="hidden"/>
<Phase2 url="/vpn_ipsec_phase2.php*" visibility="hidden"/>
</Tunnels>
<Mobile order="20" VisibleName="Mobile Clients (legacy)" url="/vpn_ipsec_mobile.php">
<Mobile order="20" VisibleName="Mobile Clients [legacy]" url="/vpn_ipsec_mobile.php">
<Act url="/vpn_ipsec_mobile.php*" visibility="hidden"/>
</Mobile>
<Keys order="30" VisibleName="Pre-Shared Keys" url="/ui/ipsec/pre_shared_keys"/>

View File

@ -721,14 +721,16 @@ include("head.inc");
<select name="interface">
<?php
$interfaces = get_configured_interface_with_descr();
$carplist = get_configured_carp_interface_list();
foreach ($carplist as $cif => $carpip) {
$interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
foreach (config_read_array('virtualip', 'vip') as $vip) {
$label = $vip['subnet'] . (empty($vip['descr']) ? '' : " (${vip['descr']})");
if ($vip['mode'] == 'carp') {
$value = "{$vip['interface']}_vip{$vip['vhid']}";
} elseif ($vip['mode'] == 'ipalias') {
$value = $vip['subnet'];
} else {
continue;
}
$aliaslist = get_configured_ip_aliases_list();
foreach ($aliaslist as $aliasip => $aliasif) {
$interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
$interfaces[$value] = $label;
}
foreach ($interfaces as $iface => $ifacename) :
?>

View File

@ -639,13 +639,16 @@ $( document ).ready(function() {
<select name="interface" class="form-control">
<?php
$interfaces = get_configured_interface_with_descr();
$carplist = get_configured_carp_interface_list();
foreach ($carplist as $cif => $carpip) {
$interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
foreach (config_read_array('virtualip', 'vip') as $vip) {
$label = $vip['subnet'] . (empty($vip['descr']) ? '' : " (${vip['descr']})");
if ($vip['mode'] == 'carp') {
$value = "{$vip['interface']}_vip{$vip['vhid']}";
} elseif ($vip['mode'] == 'ipalias') {
$value = $vip['interface'];
} else {
continue;
}
$aliaslist = get_configured_ip_aliases_list();
foreach ($aliaslist as $aliasip => $aliasif) {
$interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
$interfaces["{$value}|{$vip['subnet']}"] = $label;
}
$interfaces['lo0'] = "Localhost";
$interfaces['any'] = "any";

View File

@ -805,11 +805,16 @@ $( document ).ready(function() {
<select name="interface" class="selectpicker" data-size="5" data-live-search="true">
<?php
$interfaces = get_configured_interface_with_descr();
foreach (get_configured_carp_interface_list() as $cif => $carpip) {
$interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
foreach (config_read_array('virtualip', 'vip') as $vip) {
$label = $vip['subnet'] . (empty($vip['descr']) ? '' : " (${vip['descr']})");
if ($vip['mode'] == 'carp') {
$value = "{$vip['interface']}_vip{$vip['vhid']}";
} elseif ($vip['mode'] == 'ipalias') {
$value = $vip['interface'];
} else {
continue;
}
foreach (get_configured_ip_aliases_list() as $aliasip => $aliasif) {
$interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
$interfaces["{$value}|{$vip['subnet']}"] = $label;
}
$interfaces['lo0'] = "Localhost";
$interfaces['any'] = "any";
@ -1140,11 +1145,16 @@ $( document ).ready(function() {
<?php
$serverbridge_interface['none'] = "none";
$serverbridge_interface = array_merge($serverbridge_interface, get_configured_interface_with_descr());
foreach (get_configured_carp_interface_list() as $cif => $carpip) {
$serverbridge_interface[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
foreach (config_read_array('virtualip', 'vip') as $vip) {
$label = $vip['subnet'] . (empty($vip['descr']) ? '' : " (${vip['descr']})");
if ($vip['mode'] == 'carp') {
$value = "{$vip['interface']}_vip{$vip['vhid']}";
} elseif ($vip['mode'] == 'ipalias') {
$value = $vip['interface'];
} else {
continue;
}
foreach (get_configured_ip_aliases_list() as $aliasip => $aliasif) {
$serverbridge_interface[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
$serverbridge_interface["{$value}|{$vip['subnet']}"] = $label;
}
foreach ($serverbridge_interface as $iface => $ifacename) :
$selected = "";