mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Refactor MAC utilities into a single class (#15379)
* Refactor MAC utils to a new utility class * Apply fixes from StyleCI * Inline functions Add tests Handle bridgeid format * Apply fixes from StyleCI * Dedicated code path for stp bridge parsing, and improve STP output a bit * Correctly parse dot1dBaseBridgeAddress and don't store int in bool field * trim any unexpected character from bridge addresses, add extra test data. * better comment * barsBridge can handle dot1dBaseBridgeAddress correctly now * parseBridge, check for properly formatted mac first. * update test data, empty data = empty mac * Fix new usage after rebase * import --------- Co-authored-by: StyleCI Bot <bot@styleci.io>
This commit is contained in:
@@ -42,8 +42,8 @@ use LibreNMS\Exceptions\InvalidTableColumnException;
|
||||
use LibreNMS\Util\Graph;
|
||||
use LibreNMS\Util\IP;
|
||||
use LibreNMS\Util\IPv4;
|
||||
use LibreNMS\Util\Mac;
|
||||
use LibreNMS\Util\Number;
|
||||
use LibreNMS\Util\Rewrite;
|
||||
|
||||
function api_success($result, $result_name, $message = null, $code = 200, $count = null, $extra = null): JsonResponse
|
||||
{
|
||||
@@ -2460,30 +2460,23 @@ function list_fdb(Illuminate\Http\Request $request)
|
||||
|
||||
function list_fdb_detail(Illuminate\Http\Request $request)
|
||||
{
|
||||
$macAddress = Rewrite::macToHex((string) $request->route('mac'));
|
||||
$macAddress = Mac::parse($request->route('mac'));
|
||||
|
||||
$rules = [
|
||||
'macAddress' => 'required|string|regex:/^[0-9a-fA-F]{12}$/',
|
||||
];
|
||||
|
||||
$validate = Validator::make(['macAddress' => $macAddress], $rules);
|
||||
if ($validate->fails()) {
|
||||
return api_error(422, $validate->messages());
|
||||
if (! $macAddress->isValid()) {
|
||||
return api_error(422, 'Invalid MAC address');
|
||||
}
|
||||
|
||||
$extras = ['mac' => Rewrite::readableMac($macAddress), 'mac_oui' => Rewrite::readableOUI($macAddress)];
|
||||
$extras = ['mac' => $macAddress->readable(), 'mac_oui' => $macAddress->vendor()];
|
||||
|
||||
$fdb = PortsFdb::hasAccess(Auth::user())
|
||||
->when(! empty($macAddress), function (Builder $query) use ($macAddress) {
|
||||
return $query->leftJoin('ports', 'ports_fdb.port_id', 'ports.port_id')
|
||||
->leftJoin('devices', 'ports_fdb.device_id', 'devices.device_id')
|
||||
->where('mac_address', $macAddress)
|
||||
->orderBy('ports_fdb.updated_at', 'desc')
|
||||
->select('devices.hostname', 'ports.ifName', 'ports_fdb.updated_at');
|
||||
})
|
||||
->limit(1000)->get();
|
||||
->leftJoin('ports', 'ports_fdb.port_id', 'ports.port_id')
|
||||
->leftJoin('devices', 'ports_fdb.device_id', 'devices.device_id')
|
||||
->where('mac_address', $macAddress->hex())
|
||||
->orderBy('ports_fdb.updated_at', 'desc')
|
||||
->select('devices.hostname', 'ports.ifName', 'ports_fdb.updated_at')
|
||||
->limit(1000)->get();
|
||||
|
||||
if (count($fdb) == 0) {
|
||||
if ($fdb->isEmpty()) {
|
||||
return api_error(404, 'Fdb entry does not exist');
|
||||
}
|
||||
|
||||
@@ -2558,7 +2551,7 @@ function list_arp(Illuminate\Http\Request $request)
|
||||
return api_error(400, 'Invalid Network Address');
|
||||
}
|
||||
} elseif (filter_var($query, FILTER_VALIDATE_MAC)) {
|
||||
$mac = \LibreNMS\Util\Rewrite::macToHex($query);
|
||||
$mac = Mac::parse($query)->hex();
|
||||
$arp = dbFetchRows('SELECT * FROM `ipv4_mac` WHERE `mac_address`=?', [$mac]);
|
||||
} else {
|
||||
$arp = dbFetchRows('SELECT * FROM `ipv4_mac` WHERE `ipv4_address`=?', [$query]);
|
||||
@@ -2967,7 +2960,7 @@ function del_service_from_host(Illuminate\Http\Request $request)
|
||||
|
||||
function search_by_mac(Illuminate\Http\Request $request)
|
||||
{
|
||||
$macAddress = Rewrite::macToHex((string) $request->route('search'));
|
||||
$macAddress = Mac::parse((string) $request->route('search'))->hex();
|
||||
|
||||
$rules = [
|
||||
'macAddress' => 'required|string|regex:/^[0-9a-fA-F]{12}$/',
|
||||
|
||||
Reference in New Issue
Block a user