Skip to content

Commit

Permalink
Revert "(legacy) remove cache stuff from find_interface_ipv6"
Browse files Browse the repository at this point in the history
This reverts commit 47aaef9.
  • Loading branch information
fichtner committed Nov 25, 2015
1 parent cc145db commit a26d6c5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
6 changes: 3 additions & 3 deletions src/etc/inc/gwlb.inc
Original file line number Diff line number Diff line change
Expand Up @@ -190,22 +190,22 @@ EOD;
if (is_linklocal($gateway['gateway'])) {
$gwifip = find_interface_ipv6_ll($gateway['interface'], true);
} else {
$gwifip = find_interface_ipv6($gateway['interface']);
$gwifip = find_interface_ipv6($gateway['interface'], true);
}
} else {
/* 'monitor' has been set, so makes sure it has precedence over
* 'gateway' in defining the source IP. Otherwise if 'gateway'
* is a local link and 'monitor' is global routable then the
* ICMP6 response would not find its way back home...
*/
$gwifip = find_interface_ipv6($gateway['interface']);
$gwifip = find_interface_ipv6($gateway['interface'], true);
if (is_linklocal($gateway['monitor'])) {
if (!strstr($gateway['monitor'], '%')) {
$gateway['monitor'] .= "%{$gateway['interface']}";
}
} else {
// Monitor is a routable address, so use a routable address for the "src" part
$gwifip = find_interface_ipv6($gateway['interface']);
$gwifip = find_interface_ipv6($gateway['interface'], true);
}
}

Expand Down
43 changes: 32 additions & 11 deletions src/etc/inc/interfaces.inc
Original file line number Diff line number Diff line change
Expand Up @@ -2840,7 +2840,7 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven
{
global $config;
global $interface_sn_arr_cache;
global $interface_snv6_arr_cache;
global $interface_snv6_arr_cache, $interface_ipv6_arr_cache;

$wancfg = $config['interfaces'][$interface];

Expand Down Expand Up @@ -2957,6 +2957,7 @@ function interface_configure($interface = 'wan', $reloadall = false, $linkupeven

/* invalidate interface/ip/sn cache */
unset($interface_sn_arr_cache[$realif]);
unset($interface_ipv6_arr_cache[$realif]);
unset($interface_snv6_arr_cache[$realif]);

$tunnelif = substr($realif, 0, 3);
Expand Down Expand Up @@ -3157,6 +3158,7 @@ function interface_track6_configure($interface = 'lan', $wancfg, $linkupevent =
function interface_track6_6rd_configure($interface = 'lan', $lancfg)
{
global $config;
global $interface_ipv6_arr_cache;
global $interface_snv6_arr_cache;

if (!is_array($lancfg))
Expand Down Expand Up @@ -3207,6 +3209,7 @@ function interface_track6_6rd_configure($interface = 'lan', $lancfg)
$oip = find_interface_ipv6($lanif);
if (is_ipaddrv6($oip))
mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete");
unset($interface_ipv6_arr_cache[$lanif]);
unset($interface_snv6_arr_cache[$lanif]);
log_error("rd6 {$interface} with ipv6 address {$rd6lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
mwexec("/sbin/ifconfig {$lanif} inet6 {$rd6lan} prefixlen 64");
Expand All @@ -3217,6 +3220,7 @@ function interface_track6_6rd_configure($interface = 'lan', $lancfg)
function interface_track6_6to4_configure($interface = 'lan', $lancfg)
{
global $config;
global $interface_ipv6_arr_cache;
global $interface_snv6_arr_cache;

if (!is_array($lancfg))
Expand Down Expand Up @@ -3263,6 +3267,7 @@ function interface_track6_6to4_configure($interface = 'lan', $lancfg)
$oip = find_interface_ipv6($lanif);
if (is_ipaddrv6($oip))
mwexec("/sbin/ifconfig {$lanif} inet6 {$oip} delete");
unset($interface_ipv6_arr_cache[$lanif]);
unset($interface_snv6_arr_cache[$lanif]);
log_error("sixto4 {$interface} with ipv6 address {$sixto4lan} based on {$lancfg['track6-interface']} ipv4 {$ip4address}");
mwexec("/sbin/ifconfig {$lanif} inet6 {$sixto4lan} prefixlen 64");
Expand Down Expand Up @@ -4506,23 +4511,39 @@ function find_interface_ip($interface) {
if (isset($ifinfo['ipaddr'])) {
return $ifinfo['ipaddr'];
}
} else {
return null;
}
return null;
}

/*
* find_interface_ipv6($interface): return the interface ip (first found)
*/
function find_interface_ipv6($interface) {
// a bit obscure, why should this be different then find_interface_ip?
$interface = get_real_interface(trim($interface));
if (does_interface_exist($interface)) {
$ifinfo = pfSense_get_interface_addresses($interface);
if (isset($ifinfo['ipaddr6'])) {
return $ifinfo['ipaddr6'];
}
function find_interface_ipv6($interface, $flush = false) {
global $interface_ipv6_arr_cache;
global $config;

if (!isset($interface_ipv6_arr_cache) || !is_array($interface_ipv6_arr_cache)) {
$interface_ipv6_arr_cache = array();
}

$interface = trim($interface);
$interface = get_real_interface($interface);

if (!does_interface_exist($interface))
return;

/* Setup IP cache */
if (!isset($interface_ipv6_arr_cache[$interface]) or $flush) {
$ifinfo = pfSense_get_interface_addresses($interface);
if (isset($ifinfo['ipaddr6'])) {
$interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddr6'];
} else {
return null;
}
return null;
}

return $interface_ipv6_arr_cache[$interface];
}

/*
Expand Down

0 comments on commit a26d6c5

Please sign in to comment.