mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-17 01:54:49 +00:00
Interface\Autoconf add new static class to access information collected by ifctl and remove existing direct callers.
This commit is contained in:
parent
387fc592d7
commit
2fa2a2be23
@ -33,6 +33,7 @@ use OPNsense\Core\Backend;
|
||||
use OPNsense\Core\Config;
|
||||
use OPNsense\Firewall\Util;
|
||||
use OPNsense\Routing\Gateways;
|
||||
use OPNsense\Interface\Autoconf;
|
||||
|
||||
class OverviewController extends ApiControllerBase
|
||||
{
|
||||
@ -154,16 +155,9 @@ class OverviewController extends ApiControllerBase
|
||||
continue;
|
||||
}
|
||||
/* collect ifctl received properties for this interface */
|
||||
foreach (['nameserver', 'prefix', 'router', 'searchdomain'] as $ifctl) {
|
||||
$items = [];
|
||||
foreach (['', 'v6'] as $ext) {
|
||||
if (is_file("/tmp/{$if}_{$ifctl}{$ext}")) {
|
||||
$items[] = trim(file_get_contents("/tmp/{$if}_{$ifctl}{$ext}"));
|
||||
}
|
||||
}
|
||||
if (!empty($items)) {
|
||||
$tmp["ifctl.{$ifctl}"] = $items;
|
||||
}
|
||||
foreach (Autoconf::all($if) as $key => $value)
|
||||
{
|
||||
$tmp["ifctl.{$key}"] = $value;
|
||||
}
|
||||
|
||||
$tmp['status'] = (!empty($details['flags']) && in_array('up', $details['flags'])) ? 'up' : 'down';
|
||||
|
||||
107
src/opnsense/mvc/app/library/OPNsense/Interface/Autoconf.php
Normal file
107
src/opnsense/mvc/app/library/OPNsense/Interface/Autoconf.php
Normal file
@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2024 Deciso B.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
namespace OPNsense\Interface;
|
||||
|
||||
class Autoconf
|
||||
{
|
||||
/**
|
||||
* @return string fetch ifctl collected data
|
||||
*/
|
||||
private static function get($if, $type, $ipproto='inet')
|
||||
{
|
||||
$fsuffix = $ipproto == 'inet6' ? 'v6' : '';
|
||||
foreach (['', ':slaac'] as $isuffix) {
|
||||
$file = "/tmp/{$if}{$isuffix}_{$type}{$fsuffix}";
|
||||
if (file_exists($file)) {
|
||||
return trim(@file_get_contents($file));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string nameserver when offered
|
||||
*/
|
||||
public static function getNameserver($if, $ipproto='inet')
|
||||
{
|
||||
return self::get($if, 'nameserver', $ipproto);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string router when offered
|
||||
*/
|
||||
public static function getRouter($if, $ipproto='inet')
|
||||
{
|
||||
return self::get($if, 'router', $ipproto);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string prefix when offered
|
||||
*/
|
||||
public static function getPrefix($if, $ipproto='inet')
|
||||
{
|
||||
return self::get($if, 'prefix', $ipproto);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string search domain when offered
|
||||
*/
|
||||
public static function getSearchdomain($if, $ipproto='inet')
|
||||
{
|
||||
return self::get($if, 'searchdomain', $ipproto);
|
||||
}
|
||||
|
||||
/**
|
||||
* fetch all collected dynamic interface properties
|
||||
* @return array
|
||||
*/
|
||||
public static function all($if)
|
||||
{
|
||||
|
||||
$result = [];
|
||||
foreach (['inet', 'inet6'] as $ipproto)
|
||||
{
|
||||
$map = [
|
||||
'nameserver' => self::getNameserver($if, $ipproto),
|
||||
'prefix' => self::getPrefix($if, $ipproto),
|
||||
'router' => self::getRouter($if, $ipproto),
|
||||
'searchdomain' => self::getSearchdomain($if, $ipproto)
|
||||
];
|
||||
foreach ($map as $key => $content) {
|
||||
if ($content !== null) {
|
||||
if (!isset($result[$key])) {
|
||||
$result[$key] = [];
|
||||
}
|
||||
$result[$key][] = $content;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2019-2023 Deciso B.V.
|
||||
* Copyright (C) 2019-2024 Deciso B.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -31,6 +31,7 @@ namespace OPNsense\Routing;
|
||||
use OPNsense\Base\BaseModel;
|
||||
use OPNsense\Core\Config;
|
||||
use OPNsense\Firewall\Util;
|
||||
use OPNsense\Interface\Autoconf;
|
||||
use OPNsense\Base\Messages\Message;
|
||||
|
||||
class Gateways extends BaseModel
|
||||
@ -244,29 +245,6 @@ class Gateways extends BaseModel
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* return dynamic router address from file-based location created via ifctl utility
|
||||
* @param string $realif underlying network device name
|
||||
* @param string $ipproto inet/inet6 type
|
||||
* @return string $router IP address
|
||||
*/
|
||||
private function getRouterFromFile($realif, $ipproto = 'inet')
|
||||
{
|
||||
$fsuffix = $ipproto == 'inet6' ? 'v6' : '';
|
||||
$router = null;
|
||||
|
||||
/* some types have fallback files we are looking for in order */
|
||||
foreach (['', ':slaac'] as $isuffix) {
|
||||
$file = "/tmp/{$realif}{$isuffix}_router{$fsuffix}";
|
||||
if (file_exists($file)) {
|
||||
$router = trim(@file_get_contents($file));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $router;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the device name present in the system for the specific configuration
|
||||
* @param string $ifname name of the interface
|
||||
@ -478,7 +456,7 @@ class Gateways extends BaseModel
|
||||
}
|
||||
if (!empty($thisconf['virtual']) && in_array($thisconf['name'], $reservednames)) {
|
||||
/* if name is already taken, don't try to add a new (virtual) entry */
|
||||
} elseif (($router = $this->getRouterFromFile($realif, $ipproto)) != null) {
|
||||
} elseif (($router = Autoconf::getRouter($realif, $ipproto)) != null) {
|
||||
$thisconf['gateway'] = $router;
|
||||
if (empty($thisconf['monitor_disable']) && empty($thisconf['monitor'])) {
|
||||
$thisconf['monitor'] = $thisconf['gateway'];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user