Migrate xDSL code to module, and add support for VDSL2 MIB (#14207)

* use component to discover if xDSL polling is needed

use component to discover if xDSL polling is needed

* Components OK, Polling in correct files, no DB for VDSL

* GUI

GUI_suite

* per port as well

* rename

* interface listing

* draytek_snmpsim

* fix arraymerge

fix names and max value

* schema

schema

style

* remove one dbFetchRows

remove 2x dbFetchCell

style

style

remove Legacy dbFetchRow

tests

tests

eloquent

more eloquent

more eloquent

one more gone

* fix properties access

eloquent_insert_update

style

tests

tests

tests

tests

* tests

tests

tests

* adslLineCoding

* Models

* fix not nullable cols in DB from code

default values

typo

rename

typo

schema

fix

fix

vdsl fix now

typo

typo

fix size

fix size

* Power values for VDSL

Power values for VDSL

Power values for VDSL

DB

* cleanup

* Rrd::checkRrdExists

* always enable DSL discovery

style

* xdsl module

* cleanup and move to Module

cleanup and move to Module

cleanup and move to Module

cleanup and move to Module

* Fix display

* fix polling and tenth

* remove legacy poller

* Style and Cosmetics

Cosmetics

Cleanup

* Translations

Translations

* exists

exists

* add test support for xdsl

* remove last component call

unused

* translations

* remove non standard onclick event on xdsl line

* Update Discovery Support.md

Update Poller Support.md

toner_gone

* Notification for removal of lnms config:set enable_ports_adsl true

* enable on devices with potential DSL interfaces

* tests are working now

fix teldat tests

* os_schema

* teldat

* move to new module structure

* move to new module structure

* wrong dump function

* wrong dump function

* laravel_through_key hidden

* Update notifications.rss

* Update notifications.rss

Co-authored-by: Tony Murray <murraytony@gmail.com>
This commit is contained in:
PipoCanaja
2022-09-08 02:29:17 +02:00
committed by GitHub
parent b44f1546a2
commit 53bfb24ef9
56 changed files with 4079 additions and 278 deletions

View File

@@ -25,6 +25,7 @@
namespace LibreNMS\DB; namespace LibreNMS\DB;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
trait SyncsModels trait SyncsModels
@@ -63,7 +64,13 @@ trait SyncsModels
} }
$new = $models->diffKeys($existing); $new = $models->diffKeys($existing);
$device->$relationship()->saveMany($new); if (is_a($device->$relationship(), HasManyThrough::class)) {
// if this is a distant relation, the models need the intermediate relationship set
// just save assuming things are correct
$new->each->save();
} else {
$device->$relationship()->saveMany($new);
}
return $existing->map->first()->merge($new); return $existing->map->first()->merge($new);
} }

296
LibreNMS/Modules/Xdsl.php Normal file
View File

@@ -0,0 +1,296 @@
<?php
/**
* Xdsl.php
*
* -Description-
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* @link https://www.librenms.org
*
* @copyright 2022 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/
namespace LibreNMS\Modules;
use App\Facades\Rrd;
use App\Models\Device;
use App\Models\PortAdsl;
use App\Models\PortVdsl;
use App\Observers\ModuleModelObserver;
use Illuminate\Support\Collection;
use LibreNMS\DB\SyncsModels;
use LibreNMS\Interfaces\Module;
use LibreNMS\OS;
use LibreNMS\RRD\RrdDefinition;
use LibreNMS\Util\Number;
class Xdsl implements Module
{
use SyncsModels;
/** @var string[] */
private $trimAdminString = ['adslAtucInvVendorID', 'adslAturInvVendorID', 'adslAturInvVersionNumber', 'adslAtucInvVersionNumber'];
/** @var string[] */
private $adslTenthValues = ['adslAtucCurrSnrMgn', 'adslAtucCurrAtn', 'adslAtucCurrOutputPwr', 'adslAturCurrSnrMgn', 'adslAturCurrAtn', 'adslAturCurrOutputPwr'];
/** @var string[] */
private $vdslTenthValues = ['xdsl2LineStatusActAtpDs', 'xdsl2LineStatusActAtpUs'];
/** @var string[] */
private $ifNameMap;
/**
* @inheritDoc
*/
public function dependencies(): array
{
return ['ports'];
}
/**
* @inheritDoc
*/
public function discover(OS $os): void
{
//discover if any port has dsl data. We use the pollXdsl functions, with the store parameter set to false
$this->pollAdsl($os, false);
$this->pollVdsl($os, false);
}
/**
* Poll data for this module and update the DB / RRD.
* Try to keep this efficient and only run if discovery has indicated there is a reason to run.
* Run frequently (default every 5 minutes)
*
* @param \LibreNMS\OS $os
*/
public function poll(OS $os): void
{
//only do polling if at least one portAdsl was discovered
if ($os->getDevice()->portsAdsl()->exists()) {
$this->pollAdsl($os);
}
if ($os->getDevice()->portsVdsl()->exists()) {
$this->pollVdsl($os);
}
}
/**
* @inheritDoc
*/
public function cleanup(Device $device): void
{
$device->portsAdsl()->delete();
$device->portsVdsl()->delete();
}
/**
* @inheritDoc
*/
public function dump(Device $device)
{
return [
'ports_adsl' => $device->portsAdsl()->orderBy('ifIndex')
->select(['ports_adsl.*', 'ifIndex'])
->get()->map->makeHidden(['laravel_through_key', 'port_adsl_updated', 'port_id']),
'ports_vdsl' => $device->portsVdsl()->orderBy('ifIndex')
->select(['ports_vdsl.*', 'ifIndex'])
->get()->map->makeHidden(['laravel_through_key', 'port_vdsl_updated', 'port_id']),
];
}
/**
* Poll data for this module and update the DB / RRD.
* Try to keep this efficient and only run if discovery has indicated there is a reason to run.
* Run frequently (default every 5 minutes)
*
* @param \LibreNMS\OS $os
* @param bool $store
*/
private function pollAdsl(OS $os, $store = true): Collection
{
$adsl = \SnmpQuery::hideMib()->walk('ADSL-LINE-MIB::adslMibObjects')->table(1);
$adslPorts = new Collection;
foreach ($adsl as $ifIndex => $data) {
// Values are 1/10
foreach ($this->adslTenthValues as $oid) {
if (isset($data[$oid])) {
$data[$oid] = $data[$oid] / 10;
}
}
$portAdsl = new PortAdsl($data);
// trim SnmpAdminStrings
foreach ($this->trimAdminString as $oid) {
$portAdsl->$oid = rtrim($portAdsl->$oid, '.');
}
$portAdsl->port_id = $os->ifIndexToId($ifIndex);
if ($store) {
$this->storeAdsl($portAdsl, $data, (int) $ifIndex, $os);
echo ' ADSL(' . $portAdsl->adslLineCoding . '/' . Number::formatSi($portAdsl->adslAtucChanCurrTxRate, 2, 3, 'bps') . '/' . Number::formatSi($portAdsl->adslAturChanCurrTxRate, 2, 3, 'bps') . ') ';
}
$adslPorts->push($portAdsl);
}
ModuleModelObserver::observe(PortAdsl::class);
return $this->syncModels($os->getDevice(), 'portsAdsl', $adslPorts);
}
/**
* Poll data for this module and update the DB / RRD.
* Try to keep this efficient and only run if discovery has indicated there is a reason to run.
* Run frequently (default every 5 minutes)
*
* @param \LibreNMS\OS $os
* @param bool $store
*/
private function pollVdsl(OS $os, $store = true): Collection
{
$vdsl = \SnmpQuery::hideMib()->walk(['VDSL2-LINE-MIB::xdsl2ChannelStatusTable', 'VDSL2-LINE-MIB::xdsl2LineTable'])->table(1);
$vdslPorts = new Collection;
foreach ($vdsl as $ifIndex => $data) {
$portVdsl = new PortVdsl([
'port_id' => $os->ifIndexToId($ifIndex),
'xdsl2ChStatusActDataRateXtur' => $data['xdsl2ChStatusActDataRate']['xtur'] ?? 0,
'xdsl2ChStatusActDataRateXtuc' => $data['xdsl2ChStatusActDataRate']['xtuc'] ?? 0,
]);
foreach ($this->vdslTenthValues as $oid) {
if (isset($data[$oid])) {
$data[$oid] = $data[$oid] / 10;
}
}
$portVdsl->fill($data); // fill oids that are one to one
if ($store) {
$this->storeVdsl($portVdsl, $data, (int) $ifIndex, $os);
echo ' VDSL(' . $os->ifIndexToName($ifIndex) . '/' . Number::formatSi($portVdsl->xdsl2LineStatusAttainableRateDs, 2, 3, 'bps') . '/' . Number::formatSi($portVdsl->xdsl2LineStatusAttainableRateUs, 2, 3, 'bps') . ') ';
}
$vdslPorts->push($portVdsl);
}
ModuleModelObserver::observe(PortVdsl::class);
return $this->syncModels($os->getDevice(), 'portsVdsl', $vdslPorts);
}
private function storeAdsl(PortAdsl $port, array $data, int $ifIndex, OS $os): void
{
$rrd_def = RrdDefinition::make()
->addDataset('AtucCurrSnrMgn', 'GAUGE', 0, 635)
->addDataset('AtucCurrAtn', 'GAUGE', 0, 635)
->addDataset('AtucCurrOutputPwr', 'GAUGE', 0, 635)
->addDataset('AtucCurrAttainableR', 'GAUGE', 0)
->addDataset('AtucChanCurrTxRate', 'GAUGE', 0)
->addDataset('AturCurrSnrMgn', 'GAUGE', 0, 635)
->addDataset('AturCurrAtn', 'GAUGE', 0, 635)
->addDataset('AturCurrOutputPwr', 'GAUGE', 0, 635)
->addDataset('AturCurrAttainableR', 'GAUGE', 0)
->addDataset('AturChanCurrTxRate', 'GAUGE', 0)
->addDataset('AtucPerfLofs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfLoss', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfLprs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfESs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfInits', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLofs', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLoss', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLprs', 'COUNTER', null, 100000000000)
->addDataset('AturPerfESs', 'COUNTER', null, 100000000000)
->addDataset('AtucChanCorrectedBl', 'COUNTER', null, 100000000000)
->addDataset('AtucChanUncorrectBl', 'COUNTER', null, 100000000000)
->addDataset('AturChanCorrectedBl', 'COUNTER', null, 100000000000)
->addDataset('AturChanUncorrectBl', 'COUNTER', null, 100000000000);
$fields = [
'AtucCurrSnrMgn' => ($data['adslAtucCurrSnrMgn'] ?? 0) > 1280 ? null : ($data['adslAtucCurrSnrMgn'] ?? null),
'AtucCurrAtn' => $data['adslAtucCurrAtn'] ?? null,
'AtucCurrOutputPwr' => $data['adslAtucCurrOutputPwr'] ?? null,
'AtucCurrAttainableRate' => $data['adslAtucCurrAttainableRate'] ?? null,
'AtucChanCurrTxRate' => $data['adslAtucChanCurrTxRate'] ?? null,
'AturCurrSnrMgn' => ($data['adslAturCurrSnrMgn'] ?? 0) > 1280 ? null : ($data['adslAturCurrSnrMgn'] ?? null),
'AturCurrAtn' => $data['adslAturCurrAtn'] ?? null,
'AturCurrOutputPwr' => $data['adslAturCurrOutputPwr'] ?? null,
'AturCurrAttainableRate' => $data['adslAturCurrAttainableRate'] ?? null,
'AturChanCurrTxRate' => $data['adslAturChanCurrTxRate'] ?? null,
'AtucPerfLofs' => $data['adslAtucPerfLofs'] ?? null,
'AtucPerfLoss' => $data['adslAtucPerfLoss'] ?? null,
'AtucPerfLprs' => $data['adslAtucPerfLprs'] ?? null,
'AtucPerfESs' => $data['adslAtucPerfESs'] ?? null,
'AtucPerfInits' => $data['adslAtucPerfInits'] ?? null,
'AturPerfLofs' => $data['adslAturPerfLofs'] ?? null,
'AturPerfLoss' => $data['adslAturPerfLoss'] ?? null,
'AturPerfLprs' => $data['adslAturPerfLprs'] ?? null,
'AturPerfESs' => $data['adslAturPerfESs'] ?? null,
'AtucChanCorrectedBlks' => $data['adslAtucChanCorrectedBlks'] ?? null,
'AtucChanUncorrectBlks' => $data['adslAtucChanUncorrectBlks'] ?? null,
'AturChanCorrectedBlks' => $data['adslAturChanCorrectedBlks'] ?? null,
'AturChanUncorrectBlks' => $data['adslAturChanUncorrectBlks'] ?? null,
];
data_update($os->getDeviceArray(), 'adsl', [
'ifName' => $os->ifIndexToName($ifIndex),
'rrd_name' => Rrd::portName($port->port_id, 'adsl'),
'rrd_def' => $rrd_def,
], $fields);
}
private function storeVdsl(PortVdsl $port, array $data, int $ifIndex, OS $os): void
{
// Attainable
data_update($os->getDeviceArray(), 'xdsl2LineStatusAttainableRate', [
'ifName' => $os->ifIndexToName($ifIndex),
'rrd_name' => Rrd::portName($port->port_id, 'xdsl2LineStatusAttainableRate'),
'rrd_def' => RrdDefinition::make()
->addDataset('ds', 'GAUGE', 0)
->addDataset('us', 'GAUGE', 0),
], [
'ds' => $data['xdsl2LineStatusAttainableRateDs'] ?? null,
'us' => $data['xdsl2LineStatusAttainableRateUs'] ?? null,
]);
// actual data rates
data_update($os->getDeviceArray(), 'xdsl2LineStatusActRate', [
'ifName' => $os->ifIndexToName($ifIndex),
'rrd_name' => Rrd::portName($port->port_id, 'xdsl2ChStatusActDataRate'),
'rrd_dev' => RrdDefinition::make()
->addDataset('xtuc', 'GAUGE', 0)
->addDataset('xtur', 'GAUGE', 0),
], [
'xtuc' => $data['xdsl2ChStatusActDataRate']['xtuc'] ?? null,
'xtur' => $data['xdsl2ChStatusActDataRate']['xtur'] ?? null,
]);
// power levels
data_update($os->getDeviceArray(), 'xdsl2LineStatusActAtp', [
'ifName' => $os->ifIndexToName($ifIndex),
'rrd_name' => Rrd::portName($port->port_id, 'xdsl2LineStatusActAtp'),
'rrd_def' => RrdDefinition::make()
->addDataset('ds', 'GAUGE', 0)
->addDataset('us', 'GAUGE', 0),
], [
'ds' => $data['xdsl2LineStatusActAtpDs'] ?? null,
'us' => $data['xdsl2LineStatusActAtpUs'] ?? null,
]);
}
}

View File

@@ -35,6 +35,8 @@ trait ResolvesPortIds
* @var array * @var array
*/ */
private $basePortIdMap; private $basePortIdMap;
/** @var string[] */
private $ifIndexToNameMap;
/** /**
* Figure out the port_id from the BRIDGE-MIB::dot1dBasePort * Figure out the port_id from the BRIDGE-MIB::dot1dBasePort
@@ -58,6 +60,21 @@ trait ResolvesPortIds
return $this->ifIndexToPortIdMap()[$ifIndex] ?? 0; return $this->ifIndexToPortIdMap()[$ifIndex] ?? 0;
} }
/**
* Get IF-MIB::ifName from IF-MIB::ifIndex
*
* @param int|string $ifIndex
* @return string
*/
public function ifIndexToName($ifIndex): string
{
if ($this->ifIndexToNameMap === null) {
$this->ifIndexToNameMap = $this->getDevice()->ports()->pluck('ifName', 'ifIndex')->all();
}
return $this->ifIndexToNameMap[$ifIndex] ?? '';
}
private function ifIndexToPortIdMap(): array private function ifIndexToPortIdMap(): array
{ {
if ($this->ifIndexPortIdMap === null) { if ($this->ifIndexPortIdMap === null) {

View File

@@ -782,6 +782,11 @@ class Device extends BaseModel
return $this->hasMany(\App\Models\Port::class, 'device_id', 'device_id'); return $this->hasMany(\App\Models\Port::class, 'device_id', 'device_id');
} }
public function portsAdsl(): HasManyThrough
{
return $this->hasManyThrough(\App\Models\PortAdsl::class, \App\Models\Port::class, 'device_id', 'port_id');
}
public function portsFdb(): HasMany public function portsFdb(): HasMany
{ {
return $this->hasMany(\App\Models\PortsFdb::class, 'device_id', 'device_id'); return $this->hasMany(\App\Models\PortsFdb::class, 'device_id', 'device_id');
@@ -797,6 +802,11 @@ class Device extends BaseModel
return $this->hasMany(\App\Models\PortStp::class, 'device_id', 'device_id'); return $this->hasMany(\App\Models\PortStp::class, 'device_id', 'device_id');
} }
public function portsVdsl(): HasManyThrough
{
return $this->hasManyThrough(\App\Models\PortVdsl::class, \App\Models\Port::class, 'device_id', 'port_id');
}
public function portsVlan(): HasMany public function portsVlan(): HasMany
{ {
return $this->hasMany(\App\Models\PortVlan::class, 'device_id', 'device_id'); return $this->hasMany(\App\Models\PortVlan::class, 'device_id', 'device_id');

View File

@@ -29,6 +29,7 @@ class Port extends DeviceRelatedModel
static::deleting(function (Port $port) { static::deleting(function (Port $port) {
// delete related data // delete related data
$port->adsl()->delete(); $port->adsl()->delete();
$port->vdsl()->delete();
$port->fdbEntries()->delete(); $port->fdbEntries()->delete();
$port->ipv4()->delete(); $port->ipv4()->delete();
$port->ipv6()->delete(); $port->ipv6()->delete();
@@ -279,6 +280,11 @@ class Port extends DeviceRelatedModel
return $this->hasMany(PortAdsl::class, 'port_id'); return $this->hasMany(PortAdsl::class, 'port_id');
} }
public function vdsl(): HasMany
{
return $this->hasMany(PortVdsl::class, 'port_id');
}
public function events(): MorphMany public function events(): MorphMany
{ {
return $this->morphMany(Eventlog::class, 'events', 'type', 'reference'); return $this->morphMany(Eventlog::class, 'events', 'type', 'reference');

View File

@@ -2,9 +2,39 @@
namespace App\Models; namespace App\Models;
class PortAdsl extends PortRelatedModel use LibreNMS\Interfaces\Models\Keyable;
class PortAdsl extends PortRelatedModel implements Keyable
{ {
protected $table = 'ports_adsl'; protected $table = 'ports_adsl';
protected $primaryKey = 'port_id'; protected $primaryKey = 'port_id';
public $timestamps = false; public $timestamps = false;
protected $fillable = [
'port_id',
'adslLineCoding',
'adslLineType',
'adslAtucInvVendorID',
'adslAtucInvVersionNumber',
'adslAtucCurrSnrMgn',
'adslAtucCurrAtn',
'adslAtucCurrOutputPwr',
'adslAtucCurrAttainableRate',
'adslAtucChanCurrTxRate',
'adslAturInvSerialNumber',
'adslAturInvVendorID',
'adslAturInvVersionNumber',
'adslAturChanCurrTxRate',
'adslAturCurrSnrMgn',
'adslAturCurrAtn',
'adslAturCurrOutputPwr',
'adslAturCurrAttainableRate',
];
/**
* @inheritDoc
*/
public function getCompositeKey()
{
return $this->port_id;
}
} }

29
app/Models/PortVdsl.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
namespace App\Models;
use LibreNMS\Interfaces\Models\Keyable;
class PortVdsl extends PortRelatedModel implements Keyable
{
protected $table = 'ports_vdsl';
protected $primaryKey = 'port_id';
public $timestamps = false;
protected $fillable = [
'port_id',
'xdsl2LineStatusAttainableRateDs',
'xdsl2LineStatusAttainableRateUs',
'xdsl2ChStatusActDataRateXtur',
'xdsl2ChStatusActDataRateXtuc',
'xdsl2LineStatusActAtpDs',
'xdsl2LineStatusActAtpUs',
];
/**
* @inheritDoc
*/
public function getCompositeKey()
{
return $this->port_id;
}
}

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreatePortsVdslTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('ports_vdsl', function (Blueprint $table) {
$table->unsignedInteger('port_id')->unique();
$table->timestamp('port_vdsl_updated')->useCurrent();
$table->integer('xdsl2LineStatusAttainableRateDs')->default(0);
$table->integer('xdsl2LineStatusAttainableRateUs')->default(0);
$table->integer('xdsl2ChStatusActDataRateXtur')->default(0);
$table->integer('xdsl2ChStatusActDataRateXtuc')->default(0);
$table->decimal('xdsl2LineStatusActAtpDs')->default(0);
$table->decimal('xdsl2LineStatusActAtpUs')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('ports_vdsl');
}
}

View File

@@ -0,0 +1,63 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class UpdatePortsAdslTableWithDefaults extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('ports_adsl', function (Blueprint $table) {
$table->string('adslLineCoding', 8)->default('')->change();
$table->string('adslLineType', 16)->default('')->change();
$table->string('adslAtucInvVendorID', 16)->default('')->change();
$table->string('adslAtucInvVersionNumber', 16)->default('')->change();
$table->decimal('adslAtucCurrSnrMgn', 5, 1)->default(0)->change();
$table->decimal('adslAtucCurrAtn', 5, 1)->default(0)->change();
$table->decimal('adslAtucCurrOutputPwr', 5, 1)->default(0)->change();
$table->integer('adslAtucCurrAttainableRate')->default(0)->change();
$table->integer('adslAtucChanCurrTxRate')->default(0)->change();
$table->string('adslAturInvSerialNumber', 32)->default('')->change();
$table->string('adslAturInvVendorID', 16)->default('')->change();
$table->string('adslAturInvVersionNumber', 16)->default('')->change();
$table->integer('adslAturChanCurrTxRate')->default(0)->change();
$table->decimal('adslAturCurrSnrMgn', 5, 1)->default(0)->change();
$table->decimal('adslAturCurrAtn', 5, 1)->default(0)->change();
$table->decimal('adslAturCurrOutputPwr', 5, 1)->default(0)->change();
$table->integer('adslAturCurrAttainableRate')->default(0)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('ports_adsl', function (Blueprint $table) {
$table->string('adslLineCoding', 8)->change();
$table->string('adslLineType', 16)->change();
$table->string('adslAtucInvVendorID', 8)->change();
$table->string('adslAtucInvVersionNumber', 8)->change();
$table->decimal('adslAtucCurrSnrMgn', 5, 1)->change();
$table->decimal('adslAtucCurrAtn', 5, 1)->change();
$table->decimal('adslAtucCurrOutputPwr', 5, 1)->change();
$table->integer('adslAtucCurrAttainableRate')->change();
$table->integer('adslAtucChanCurrTxRate')->change();
$table->string('adslAturInvSerialNumber', 8)->change();
$table->string('adslAturInvVendorID', 8)->change();
$table->string('adslAturInvVersionNumber', 8)->change();
$table->integer('adslAturChanCurrTxRate')->change();
$table->decimal('adslAturCurrSnrMgn', 5, 1)->change();
$table->decimal('adslAturCurrAtn', 5, 1)->change();
$table->decimal('adslAturCurrOutputPwr', 5, 1)->change();
$table->integer('adslAturCurrAttainableRate')->change();
});
}
}

View File

@@ -639,7 +639,6 @@ Please refer to [Port-Description-Parser](../Extensions/Interface-Description-Pa
```bash ```bash
lnms config:set enable_ports_etherlike false lnms config:set enable_ports_etherlike false
lnms config:set enable_ports_junoseatmvp false lnms config:set enable_ports_junoseatmvp false
lnms config:set enable_ports_adsl true
lnms config:set enable_ports_poe false lnms config:set enable_ports_poe false
``` ```

View File

@@ -93,7 +93,7 @@ $config['discovery_modules']['bgp-peers'] = true;
$config['discovery_modules']['vlans'] = true; $config['discovery_modules']['vlans'] = true;
$config['discovery_modules']['vmware-vminfo'] = false; $config['discovery_modules']['vmware-vminfo'] = false;
$config['discovery_modules']['libvirt-vminfo'] = false; $config['discovery_modules']['libvirt-vminfo'] = false;
$config['discovery_modules']['toner'] = false; $config['discovery_modules']['printer-supplies'] = false;
$config['discovery_modules']['ucd-diskio'] = true; $config['discovery_modules']['ucd-diskio'] = true;
$config['discovery_modules']['applications'] = false; $config['discovery_modules']['applications'] = false;
$config['discovery_modules']['services'] = true; $config['discovery_modules']['services'] = true;
@@ -103,6 +103,7 @@ $config['discovery_modules']['loadbalancers'] = false;
$config['discovery_modules']['mef'] = false; $config['discovery_modules']['mef'] = false;
$config['discovery_modules']['wireless'] = true; $config['discovery_modules']['wireless'] = true;
$config['discovery_modules']['fdb-table'] = true; $config['discovery_modules']['fdb-table'] = true;
$config['discovery_modules']['xdsl'] = false;
``` ```
## OS based Discovery config ## OS based Discovery config
@@ -130,6 +131,8 @@ configured to be ignored by config options.
`ports-stack`: Same as ports except for stacks. `ports-stack`: Same as ports except for stacks.
`xdsl`: Module to collect more metrics for xDSL interfaces.
`entity-physical`: Module to pick up the devices hardware support. `entity-physical`: Module to pick up the devices hardware support.
`processors`: Processor support for devices. `processors`: Processor support for devices.
@@ -181,7 +184,7 @@ device, with history data.
`libvirt-vminfo`: Detection of libvirt guests. `libvirt-vminfo`: Detection of libvirt guests.
`toner`: Toner levels support. `printer-supplies`: Toner levels support.
`ucd-diskio`: Disk I/O support. `ucd-diskio`: Disk I/O support.

View File

@@ -74,7 +74,7 @@ $config['poller_modules']['ports'] = true;
$config['poller_modules']['nac'] = false; $config['poller_modules']['nac'] = false;
$config['poller_modules']['bgp-peers'] = true; $config['poller_modules']['bgp-peers'] = true;
$config['poller_modules']['junose-atm-vp'] = false; $config['poller_modules']['junose-atm-vp'] = false;
$config['poller_modules']['toner'] = false; $config['poller_modules']['printer-supplies'] = false;
$config['poller_modules']['ucd-diskio'] = true; $config['poller_modules']['ucd-diskio'] = true;
$config['poller_modules']['wireless'] = true; $config['poller_modules']['wireless'] = true;
$config['poller_modules']['ospf'] = true; $config['poller_modules']['ospf'] = true;
@@ -102,6 +102,7 @@ $config['poller_modules']['ntp'] = true;
$config['poller_modules']['services'] = true; $config['poller_modules']['services'] = true;
$config['poller_modules']['loadbalancers'] = false; $config['poller_modules']['loadbalancers'] = false;
$config['poller_modules']['mef'] = false; $config['poller_modules']['mef'] = false;
$config['poller_modules']['mef'] = false;
``` ```
## OS based Poller config ## OS based Poller config
@@ -149,13 +150,15 @@ $config['os']['linux']['poller_modules']['unix-agent'] = true;
`ports`: This module will detect all ports on a device excluding ones `ports`: This module will detect all ports on a device excluding ones
configured to be ignored by config options. configured to be ignored by config options.
`xdsl`: This module will collect more metrics for xdsl interfaces.
`nac`: Network Access Control (NAC) or 802.1X support. `nac`: Network Access Control (NAC) or 802.1X support.
`bgp-peers`: BGP detection and support. `bgp-peers`: BGP detection and support.
`junose-atm-vp`: Juniper ATM support. `junose-atm-vp`: Juniper ATM support.
`toner`: Toner levels support. `printer-supplies`: Toner levels support.
`ucd-diskio`: Disk I/O support. `ucd-diskio`: Disk I/O support.

View File

@@ -5,12 +5,12 @@
"/css/app.css": "/css/app.css?id=bd093a6a2e2682bb59ef", "/css/app.css": "/css/app.css?id=bd093a6a2e2682bb59ef",
"/js/vendor.js": "/js/vendor.js?id=c5fd3d75a63757080dbb", "/js/vendor.js": "/js/vendor.js?id=c5fd3d75a63757080dbb",
"/js/lang/de.js": "/js/lang/de.js?id=613b5ca9cd06ca15e384", "/js/lang/de.js": "/js/lang/de.js?id=613b5ca9cd06ca15e384",
"/js/lang/en.js": "/js/lang/en.js?id=b4dc5539b25bf7a31718", "/js/lang/en.js": "/js/lang/en.js?id=efa23897934359283288",
"/js/lang/fr.js": "/js/lang/fr.js?id=982d149de32e1867610c", "/js/lang/fr.js": "/js/lang/fr.js?id=4540d71a19d8ca7c824b",
"/js/lang/it.js": "/js/lang/it.js?id=e24bb9bad83e288b4617", "/js/lang/it.js": "/js/lang/it.js?id=71c68fae57a4a3647e43",
"/js/lang/ru.js": "/js/lang/ru.js?id=f6b7c078755312a0907c", "/js/lang/ru.js": "/js/lang/ru.js?id=f6b7c078755312a0907c",
"/js/lang/sr.js": "/js/lang/sr.js?id=388e38b41f63e3517506", "/js/lang/sr.js": "/js/lang/sr.js?id=388e38b41f63e3517506",
"/js/lang/uk.js": "/js/lang/uk.js?id=34f8698ff09b869db2f5", "/js/lang/uk.js": "/js/lang/uk.js?id=72f81fcbf77df09d0c82",
"/js/lang/zh-CN.js": "/js/lang/zh-CN.js?id=4e081fbac70d969894bf", "/js/lang/zh-CN.js": "/js/lang/zh-CN.js?id=4e081fbac70d969894bf",
"/js/lang/zh-TW.js": "/js/lang/zh-TW.js?id=ed26425647721a42ee9d" "/js/lang/zh-TW.js": "/js/lang/zh-TW.js?id=ed26425647721a42ee9d"
} }

View File

@@ -12,3 +12,7 @@ discovery:
sysDescr: sysDescr:
- 'AATO' - 'AATO'
- 'AAJZ' - 'AAJZ'
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -13,3 +13,7 @@ discovery:
- -
sysDescr_regex: sysDescr_regex:
- '/^DrayTek/' - '/^DrayTek/'
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -20,3 +20,7 @@ discovery:
mib_dir: checkpoint mib_dir: checkpoint
op: contains op: contains
value: Gaia value: Gaia
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -11,3 +11,7 @@ discovery:
- .1.3.6.1.4.1.890.1.5.13.7 - .1.3.6.1.4.1.890.1.5.13.7
sysDescr: sysDescr:
- IES - IES
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -8,4 +8,7 @@ discovery:
sysObjectID: sysObjectID:
- .1.3.6.1.4.1.890.1.5.13.7 - .1.3.6.1.4.1.890.1.5.13.7
- .1.3.6.1.4.1.890.1.5.13.10 - .1.3.6.1.4.1.890.1.5.13.10
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -14,3 +14,7 @@ discovery:
- .1.3.6.1.4.1.890.1.5.13.15 - .1.3.6.1.4.1.890.1.5.13.15
- .1.3.6.1.4.1.890.1.5.13.13 - .1.3.6.1.4.1.890.1.5.13.13
- .1.3.6.1.4.1.890.1.5.13.16 - .1.3.6.1.4.1.890.1.5.13.16
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -39,6 +39,7 @@ poller_modules:
cisco-otv: true cisco-otv: true
cisco-vpdn: true cisco-vpdn: true
ipmi: false ipmi: false
xdsl: true
discovery_modules: discovery_modules:
cisco-cef: true cisco-cef: true
slas: true slas: true
@@ -47,3 +48,4 @@ discovery_modules:
cisco-pw: true cisco-pw: true
vrf: true vrf: true
cisco-vrf-lite: true cisco-vrf-lite: true
xdsl: true

View File

@@ -24,6 +24,7 @@ poller_modules:
ipmi: false ipmi: false
cisco-vpdn: true cisco-vpdn: true
cisco-qfp: true cisco-qfp: true
xdsl: true
discovery_modules: discovery_modules:
cisco-cef: true cisco-cef: true
slas: true slas: true
@@ -33,6 +34,7 @@ discovery_modules:
vrf: true vrf: true
cisco-vrf-lite: true cisco-vrf-lite: true
cisco-qfp: true cisco-qfp: true
xdsl: true
discovery: discovery:
- -
sysDescr: sysDescr:

View File

@@ -10,3 +10,7 @@ discovery:
- -
sysObjectID: sysObjectID:
- .1.3.6.1.4.1.6066.1. - .1.3.6.1.4.1.6066.1.
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -10,3 +10,7 @@ over:
discovery: discovery:
- sysObjectID: - sysObjectID:
- .1.3.6.1.4.1.13191. - .1.3.6.1.4.1.13191.
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -10,3 +10,7 @@ discovery:
- -
sysObjectID: sysObjectID:
- .1.3.6.1.4.1.6368.2 - .1.3.6.1.4.1.6368.2
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -11,3 +11,7 @@ discovery:
- -
sysObjectID: sysObjectID:
- .1.3.6.1.4.1.2007. - .1.3.6.1.4.1.2007.
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -17,5 +17,7 @@ discovery:
- Versatile Routing Platform Software - Versatile Routing Platform Software
poller_modules: poller_modules:
slas: true slas: true
xdsl: true
discovery_modules: discovery_modules:
slas: true slas: true
xdsl: true

View File

@@ -9,3 +9,7 @@ over:
discovery: discovery:
- -
sysObjectID: [ .1.3.6.1.4.1.3902.1004., .1.3.6.1.4.1.3902.1015. ] sysObjectID: [ .1.3.6.1.4.1.3902.1004., .1.3.6.1.4.1.3902.1015. ]
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -9,3 +9,7 @@ discovery:
- '/^AC/' - '/^AC/'
sysObjectID: sysObjectID:
- '.1.3.6.1.4.1.890' - '.1.3.6.1.4.1.890'
poller_modules:
xdsl: true
discovery_modules:
xdsl: true

View File

@@ -0,0 +1,8 @@
<?php
use LibreNMS\OS;
if (! $os instanceof OS) {
$os = OS::make($device);
}
(new \LibreNMS\Modules\Xdsl())->discover($os);

View File

@@ -0,0 +1,25 @@
<?php
$rrd_filename = get_port_rrdfile_path($device['hostname'], $port['port_id'], 'xdsl2LineStatusAttainableRate');
$rrd_list[0]['filename'] = $rrd_filename;
$rrd_list[0]['descr'] = 'Central to CPE';
$rrd_list[0]['ds'] = 'ds';
$rrd_list[1]['filename'] = $rrd_filename;
$rrd_list[1]['descr'] = 'CPE to Central';
$rrd_list[1]['ds'] = 'us';
$unit_text = 'Bits/sec';
$units = '';
$total_units = '';
$colours = 'mixed';
$scale_min = '0';
$nototal = 1;
if ($rrd_list) {
include 'includes/html/graphs/generic_multi_line.inc.php';
}

View File

@@ -0,0 +1,25 @@
<?php
$rrd_filename = get_port_rrdfile_path($device['hostname'], $port['port_id'], 'xdsl2LineStatusActAtp');
$rrd_list[0]['filename'] = $rrd_filename;
$rrd_list[0]['descr'] = 'Central to CPE';
$rrd_list[0]['ds'] = 'ds';
$rrd_list[1]['filename'] = $rrd_filename;
$rrd_list[1]['descr'] = 'CPE to Central';
$rrd_list[1]['ds'] = 'us';
$unit_text = 'Dbm';
$units = '';
$total_units = '';
$colours = 'mixed';
$scale_min = '0';
$nototal = 1;
if ($rrd_list) {
include 'includes/html/graphs/generic_multi_line.inc.php';
}

View File

@@ -0,0 +1,25 @@
<?php
$rrd_filename = get_port_rrdfile_path($device['hostname'], $port['port_id'], 'xdsl2ChStatusActDataRate');
$rrd_list[0]['filename'] = $rrd_filename;
$rrd_list[0]['descr'] = 'Central to CPE';
$rrd_list[0]['ds'] = 'xtur';
$rrd_list[1]['filename'] = $rrd_filename;
$rrd_list[1]['descr'] = 'CPE to Central';
$rrd_list[1]['ds'] = 'xtuc';
$unit_text = 'Bits/sec';
$units = '';
$total_units = '';
$colours = 'mixed';
$scale_min = '0';
$nototal = 1;
if ($rrd_list) {
include 'includes/html/graphs/generic_multi_line.inc.php';
}

View File

@@ -1,5 +1,9 @@
<?php <?php
use App\Models\Device;
use App\Models\Port;
use App\Models\PortAdsl;
use App\Models\PortVdsl;
use App\Plugins\Hooks\PortTabHook; use App\Plugins\Hooks\PortTabHook;
use LibreNMS\Util\Rewrite; use LibreNMS\Util\Rewrite;
use LibreNMS\Util\Url; use LibreNMS\Util\Url;
@@ -81,11 +85,13 @@ if (dbFetchCell("SELECT COUNT(*) FROM `sensors` WHERE `device_id` = ? AND `entPh
$menu_options['sensors'] = 'Health'; $menu_options['sensors'] = 'Health';
} }
if (dbFetchCell("SELECT COUNT(*) FROM `ports_adsl` WHERE `port_id` = '" . $port->port_id . "'")) { if (PortAdsl::where('port_id', $port->port_id)->exists()) {
$menu_options['adsl'] = 'ADSL'; $menu_options['xdsl'] = 'xDSL';
} elseif (PortVdsl::where('port_id', $port->port_id)->exists()) {
$menu_options['xdsl'] = 'xDSL';
} }
if (dbFetchCell("SELECT COUNT(*) FROM `ports` WHERE `pagpGroupIfIndex` = '" . $port->ifIndex . "' and `device_id` = '" . $device['device_id'] . "'")) { if (DeviceCache::getPrimary()->ports()->where('pagpGroupIfIndex', $port->ifIndex)->exists()) {
$menu_options['pagp'] = 'PAgP'; $menu_options['pagp'] = 'PAgP';
} }
@@ -103,7 +109,7 @@ if (count($components) > 0) {
$menu_options['cbqos'] = 'CBQoS'; $menu_options['cbqos'] = 'CBQoS';
} }
$portModel = \App\Models\Port::find($port->port_id); $portModel = Port::find($port->port_id);
if (LibreNMS\Plugins::countHooks('port_container') || \PluginManager::hasHooks(PortTabHook::class, ['port' => $portModel])) { if (LibreNMS\Plugins::countHooks('port_container') || \PluginManager::hasHooks(PortTabHook::class, ['port' => $portModel])) {
// Checking if any plugin implements the port_container. If yes, allow to display the menu_option // Checking if any plugin implements the port_container. If yes, allow to display the menu_option

View File

@@ -1,6 +1,6 @@
<?php <?php
if (file_exists(get_port_rrdfile_path($device['hostname'], $port['port_id'], 'adsl'))) { if (Rrd::checkRrdExists(Rrd::name($device['hostname'], Rrd::portName($port['port_id'], 'adsl')))) {
echo '<div class=graphhead>ADSL Current Line Speed</div>'; echo '<div class=graphhead>ADSL Current Line Speed</div>';
$graph_type = 'port_adsl_speed'; $graph_type = 'port_adsl_speed';
@@ -26,3 +26,20 @@ if (file_exists(get_port_rrdfile_path($device['hostname'], $port['port_id'], 'ad
include 'includes/html/print-interface-graphs.inc.php'; include 'includes/html/print-interface-graphs.inc.php';
} }
if (Rrd::checkRrdExists(Rrd::name($device['hostname'], Rrd::portName($port['port_id'], 'xdsl2LineStatusAttainableRate')))) {
echo '<div class=graphhead>VDSL Current Line Speed</div>';
$graph_type = 'port_vdsl_speed';
include 'includes/html/print-interface-graphs.inc.php';
echo '<div class=graphhead>VDSL Attainable Speed</div>';
$graph_type = 'port_vdsl_attainable';
include 'includes/html/print-interface-graphs.inc.php';
echo '<div class=graphhead>VDSL Output Powers</div>';
$graph_type = 'port_vdsl_power';
include 'includes/html/print-interface-graphs.inc.php';
}

View File

@@ -33,8 +33,8 @@ if (dbFetchCell("SELECT * FROM links AS L, ports AS I WHERE I.device_id = '" . $
$menu_options['neighbours'] = 'Neighbours'; $menu_options['neighbours'] = 'Neighbours';
} }
if (dbFetchCell("SELECT COUNT(*) FROM `ports` WHERE `ifType` = 'adsl'")) { if (DeviceCache::getPrimary()->portsAdsl()->exists() || DeviceCache::getPrimary()->portsVdsl()->exists()) {
$menu_options['adsl'] = 'ADSL'; $menu_options['xdsl'] = 'xDSL';
} }
$sep = ''; $sep = '';
@@ -123,7 +123,7 @@ if ($vars['view'] == 'minigraphs') {
} }
echo '</div>'; echo '</div>';
} elseif ($vars['view'] == 'arp' || $vars['view'] == 'adsl' || $vars['view'] == 'neighbours' || $vars['view'] == 'fdb') { } elseif ($vars['view'] == 'arp' || $vars['view'] == 'xdsl' || $vars['view'] == 'neighbours' || $vars['view'] == 'fdb') {
include 'ports/' . $vars['view'] . '.inc.php'; include 'ports/' . $vars['view'] . '.inc.php';
} else { } else {
if ($vars['view'] == 'details') { if ($vars['view'] == 'details') {

View File

@@ -1,15 +0,0 @@
<?php
echo "<div style='margin: 5px;'><table border=0 cellspacing=0 cellpadding=5 width=100%>";
echo '<tr><th>Port</th><th>Traffic</th><th>Sync Speed</th><th>Attainable Speed</th><th>Attenuation</th><th>SNR Margin</th><th>Output Powers</th></tr>';
$i = '0';
$ports = dbFetchRows("select * from `ports` AS P, `ports_adsl` AS A WHERE P.device_id = ? AND A.port_id = P.port_id AND P.deleted = '0' ORDER BY `ifIndex` ASC", [$device['device_id']]);
foreach ($ports as $port) {
include 'includes/html/print-interface-adsl.inc.php';
$i++;
}
echo '</table></div>';
echo "<div style='min-height: 150px;'></div>";

View File

@@ -0,0 +1,28 @@
<?php
echo "<div style='margin: 5px;'><table border=0 cellspacing=0 cellpadding=5 width=100%>";
echo '<tr><th>Port</th><th>Traffic</th><th>Sync Speed</th><th>Attainable Speed</th><th>Attenuation</th><th>SNR Margin</th><th>Output Powers</th></tr>';
$i = '0';
$ports = DeviceCache::getPrimary()->ports()->join('ports_adsl', 'ports.port_id', 'ports_adsl.port_id')
->where('ports.deleted', '0')
->orderby('ports.ifIndex', 'ASC')
->get();
foreach ($ports as $port) {
include 'includes/html/print-interface-adsl.inc.php';
$i++;
}
$ports = DeviceCache::getPrimary()->ports()->join('ports_vdsl', 'ports.port_id', '=', 'ports_vdsl.port_id')
->where('ports.deleted', '0')
->orderby('ports.ifIndex', 'ASC')
->get();
foreach ($ports as $port) {
include 'includes/html/print-interface-vdsl.inc.php';
$i++;
}
echo '</table></div>';
echo "<div style='min-height: 150px;'></div>";

View File

@@ -13,6 +13,7 @@
* @author LibreNMS Contributors * @author LibreNMS Contributors
*/ */
use App\Models\Device;
use App\Models\Port; use App\Models\Port;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
@@ -92,11 +93,11 @@ if ((isset($vars['searchbar']) && $vars['searchbar'] != 'hide') || ! isset($vars
$output .= "<select name='device_id' id='device_id' class='form-control input-sm'>"; $output .= "<select name='device_id' id='device_id' class='form-control input-sm'>";
$output .= "<option value=''>All Devices</option>"; $output .= "<option value=''>All Devices</option>";
if (Auth::user()->hasGlobalRead()) { // if (Auth::user()->hasGlobalRead()) {
$results = dbFetchRows('SELECT `device_id`,`hostname`, `sysName` FROM `devices` ORDER BY `hostname`'); $results = Device::hasAccess(Auth::user())->select('device_id', 'hostname', 'sysName')->orderBy('hostname');
} else { // } else {
$results = dbFetchRows('SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysname` FROM `devices` AS `D`, `devices_perms` AS `P` WHERE `P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id` ORDER BY `hostname`', [Auth::id()]); // $results = dbFetchRows('SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysname` FROM `devices` AS `D`, `devices_perms` AS `P` WHERE `P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id` ORDER BY `hostname`', [Auth::id()]);
} // }
foreach ($results as $data) { foreach ($results as $data) {
$deviceselected = isset($vars['device_id']) && $data['device_id'] == $vars['device_id'] ? 'selected' : ''; $deviceselected = isset($vars['device_id']) && $data['device_id'] == $vars['device_id'] ? 'selected' : '';
$ui_device = strlen(format_hostname($data)) > 15 ? substr(format_hostname($data), 0, 15) . '...' : format_hostname($data); $ui_device = strlen(format_hostname($data)) > 15 ? substr(format_hostname($data), 0, 15) . '...' : format_hostname($data);

View File

@@ -23,8 +23,7 @@ if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) {
$error_img = ''; $error_img = '';
} }
echo "<tr style=\"background-color: $row_colour; padding: 5px;\" valign=top onmouseover=\"this.style.backgroundColor='" . Config::get('list_colour.highlight') . "';\" onmouseout=\"this.style.backgroundColor='$row_colour';\" echo "<tr style=\"background-color: $row_colour; padding: 5px;\" valign=top onmouseover=\"this.style.backgroundColor='" . Config::get('list_colour.highlight') . "';\" onmouseout=\"this.style.backgroundColor='$row_colour';\" style='cursor: pointer;'>
onclick=\"location.href='device/" . $device['device_id'] . '/port/' . $port['port_id'] . "/'\" style='cursor: pointer;'>
<td valign=top width=350>"; <td valign=top width=350>";
echo ' <span class=list-large> echo ' <span class=list-large>
' . generate_port_link($port, $port['ifIndex'] . '. ' . $port['label']) . ' ' . generate_port_link($port, $port['ifIndex'] . '. ' . $port['label']) . '
@@ -64,7 +63,7 @@ echo generate_port_link(
); );
echo '</td><td width=135>'; echo '</td><td width=135>';
echo '' . \LibreNMS\Util\Number::formatSi($port['adslAturChanCurrTxRate'], 2, 3, 'bps') . '/' . \LibreNMS\Util\Number::formatSi($port['adslAtucChanCurrTxRate'], 2, 3, 'bps'); echo '' . \LibreNMS\Util\Number::formatSi($port['adslAtucChanCurrTxRate'], 2, 3, 'bps') . '/' . \LibreNMS\Util\Number::formatSi($port['adslAturChanCurrTxRate'], 2, 3, 'bps');
echo '<br />'; echo '<br />';
$port['graph_type'] = 'port_adsl_speed'; $port['graph_type'] = 'port_adsl_speed';
echo generate_port_link( echo generate_port_link(

View File

@@ -0,0 +1,117 @@
<?php
// This file prints a table row for each interface
use app\Models\Ipv4Address;
use app\Models\Ipv6Address;
use LibreNMS\Config;
use LibreNMS\Util\IP;
$port['device_id'] = $device['device_id'];
$port['hostname'] = $device['hostname'];
$if_id = $port['port_id'];
$port = cleanPort($port);
if (! is_integer($i / 2)) {
$row_colour = Config::get('list_colour.even');
} else {
$row_colour = Config::get('list_colour.odd');
}
if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) {
$error_img = generate_port_link($port, "<i class='fa fa-flag fa-lg' style='color:red' aria-hidden='true'></i>", 'port_errors');
} else {
$error_img = '';
}
echo "<tr style=\"background-color: $row_colour; padding: 5px;\" valign=top onmouseover=\"this.style.backgroundColor='" . Config::get('list_colour.highlight') . "';\" onmouseout=\"this.style.backgroundColor='$row_colour';\" style='cursor: pointer;'>
<td valign=top width=350>";
echo ' <span class=list-large>
' . generate_port_link($port, $port['ifIndex'] . '. ' . $port['label']) . '
</span><br /><span class=interface-desc>' . \LibreNMS\Util\Clean::html($port['ifAlias'], []) . '</span>';
if ($port['ifAlias']) {
echo '<br />';
}
$break = '';
if ($port_details) {
foreach (Ipv4Address::where('port_id', (string) $port['port_id']) as $ip) {
echo "$break <a class=interface-desc href=\"javascript:popUp('ajax/netcmd?cmd=whois&amp;query=" . $ip['ipv4_address'] . "')\">" . $ip['ipv4_address'] . '/' . $ip['ipv4_prefixlen'] . '</a>';
$break = ',';
}
foreach (Ipv6Address::where('port_id', (string) $port['port_id']) as $ip6) {
echo "$break <a class=interface-desc href=\"javascript:popUp('ajax/netcmd?cmd=whois&amp;query=" . $ip6['ipv6_address'] . "')\">" . IP::parse($ip6['ipv6_address'], true) . '/' . $ip6['ipv6_prefixlen'] . '</a>';
$break = ',';
}
}
echo '</span>';
$width = '120';
$height = '40';
$from = Config::get('time.day');
echo '</td><td width=135>';
echo \LibreNMS\Util\Number::formatSi(($port['ifInOctets_rate'] * 8), 2, 3, 'bps') . " <i class='fa fa-arrows-v fa-lg icon-theme' aria-hidden='true'></i> " . \LibreNMS\Util\Number::formatSi(($port['ifOutOctets_rate'] * 8), 2, 3, 'bps');
echo '<br />';
$port['graph_type'] = 'port_bits';
echo generate_port_link(
$port,
"<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
$port['graph_type']
);
echo '</td><td width=135>';
echo '' . \LibreNMS\Util\Number::formatSi($port['xdsl2ChStatusActDataRateXtur'], 2, 3, 'bps') . '/' . \LibreNMS\Util\Number::formatSi($port['xdsl2ChStatusActDataRateXtuc'], 2, 3, 'bps');
echo '<br />';
$port['graph_type'] = 'port_vdsl_speed';
echo generate_port_link(
$port,
"<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
$port['graph_type']
);
echo '</td><td width=135>';
echo '' . \LibreNMS\Util\Number::formatSi($port['xdsl2LineStatusAttainableRateDs'], 2, 3, 'bps') . '/' . \LibreNMS\Util\Number::formatSi($port['xdsl2LineStatusAttainableRateUs'], 2, 3, 'bps');
echo '<br />';
$port['graph_type'] = 'port_vdsl_attainable';
echo generate_port_link(
$port,
"<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
$port['graph_type']
);
echo '</td><td width=135>';
//echo '' . $port['adslAturCurrAtn'] . 'dB/' . $port['adslAtucCurrAtn'] . 'dB';
//echo '<br />';
//$port['graph_type'] = 'port_adsl_attenuation';
//echo generate_port_link(
// $port,
// "<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
// $port['graph_type']
//);
echo '</td><td width=135>';
//echo '' . $port['adslAturCurrSnrMgn'] . 'dB/' . $port['adslAtucCurrSnrMgn'] . 'dB';
//echo '<br />';
//$port['graph_type'] = 'port_adsl_snr';
//echo generate_port_link(
// $port,
// "<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
// $port['graph_type']
//);
echo '</td><td width=135>';
echo '' . $port['xdsl2LineStatusActAtpDs'] . 'dBm/' . $port['xdsl2LineStatusActAtpUs'] . 'dBm';
echo '<br />';
$port['graph_type'] = 'port_vdsl_power';
echo generate_port_link(
$port,
"<img src='graph.php?type=" . $port['graph_type'] . '&amp;id=' . $port['port_id'] . '&amp;from=' . $from . '&amp;to=' . Config::get('time.now') . '&amp;width=' . $width . '&amp;height=' . $height . '&amp;legend=no&amp;bg=' . str_replace('#', '', $row_colour) . "'>",
$port['graph_type']
);
echo '</td>';

View File

@@ -6,6 +6,8 @@ $(function () {
<?php <?php
use App\Models\Port; use App\Models\Port;
use App\Models\PortAdsl;
use App\Models\PortVdsl;
use LibreNMS\Config; use LibreNMS\Config;
use LibreNMS\Util\IP; use LibreNMS\Util\IP;
use LibreNMS\Util\Number; use LibreNMS\Util\Number;
@@ -30,7 +32,8 @@ if (isset($int_colour)) {
$i++; $i++;
} }
$port_adsl = dbFetchRow('SELECT * FROM `ports_adsl` WHERE `port_id` = ?', [$port['port_id']]); $port_adsl = PortAdsl::where('port_id', '=', $port['port_id']);
$port_vdsl = PortVdsl::where('port_id', '=', $port['port_id']);
if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) { if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) {
$error_img = generate_port_link($port, "<i class='fa fa-flag fa-lg' style='color:red' aria-hidden='true'></i>", 'port_errors'); $error_img = generate_port_link($port, "<i class='fa fa-flag fa-lg' style='color:red' aria-hidden='true'></i>", 'port_errors');
@@ -141,22 +144,30 @@ if ($vlan_count > 1) {
echo "<p style='color: green;'>" . $vrf['vrf_name'] . '</p>'; echo "<p style='color: green;'>" . $vrf['vrf_name'] . '</p>';
}//end if }//end if
if (! empty($port_adsl['adslLineCoding'])) { if (! empty($port_adsl->adslLineCoding)) {
echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >"; echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >";
echo $port_adsl['adslLineCoding'] . '/' . rewrite_adslLineType($port_adsl['adslLineType']); echo $port_adsl->adslLineCoding . '/' . rewrite_adslLineType($port_adsl->adslLineType);
echo '<br />'; echo '<br />';
// ATU-C is CO -> ATU-C TX is the download speed for the CPE // ATU-C is CO -> ATU-C TX is the download speed for the CPE
// ATU-R is the CPE -> ATU-R TX is the upload speed of the CPE // ATU-R is the CPE -> ATU-R TX is the upload speed of the CPE
echo 'Sync:' . Number::formatSi($port_adsl['adslAtucChanCurrTxRate'], 2, 3, 'bps') . '/' . Number::formatSi($port_adsl['adslAturChanCurrTxRate'], 2, 3, 'bps'); echo 'Sync:' . Number::formatSi($port_adsl->adslAtucChanCurrTxRate, 2, 3, 'bps') . '/' . Number::formatSi($port_adsl->adslAturChanCurrTxRate, 2, 3, 'bps');
echo '<br />'; echo '<br />';
// This is the Receive Max AttainableRate, so : // This is the Receive Max AttainableRate, so :
// adslAturCurrAttainableRate is DownloadMaxRate // adslAturCurrAttainableRate is DownloadMaxRate
// adslAtucCurrAttainableRate is UploadMaxRate // adslAtucCurrAttainableRate is UploadMaxRate
echo 'Max:' . Number::formatSi($port_adsl['adslAturCurrAttainableRate'], 2, 3, 'bps') . '/' . Number::formatSi($port_adsl['adslAtucCurrAttainableRate'], 2, 3, 'bps'); echo 'Max:' . Number::formatSi($port_adsl->adslAturCurrAttainableRate, 2, 3, 'bps') . '/' . Number::formatSi($port_adsl->adslAtucCurrAttainableRate, 2, 3, 'bps');
echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >"; echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >";
echo 'Atten:' . $port_adsl['adslAturCurrAtn'] . 'dB/' . $port_adsl['adslAtucCurrAtn'] . 'dB'; echo 'Atten:' . $port_adsl->adslAturCurrAtn . 'dB/' . $port_adsl->adslAtucCurrAtn . 'dB';
echo '<br />'; echo '<br />';
echo 'SNR:' . $port_adsl['adslAturCurrSnrMgn'] . 'dB/' . $port_adsl['adslAtucCurrSnrMgn'] . 'dB'; echo 'SNR:' . $port_adsl->adslAturCurrSnrMgn . 'dB/' . $port_adsl->adslAtucCurrSnrMgn . 'dB';
} elseif (! empty($port_vdsl->xdsl2LineStatusAttainableRateDs)) {
echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >";
echo '<br />';
// ATU-C is CO -> ATU-C TX is the download speed for the CPE
// ATU-R is the CPE -> ATU-R TX is the upload speed of the CPE
echo 'Sync:' . Number::formatSi($port_vdsl->xdsl2ChStatusActDataRateXtur, 2, 3, 'bps') . '/' . Number::formatSi($port_vdsl->xdsl2ChStatusActDataRateXtuc, 2, 3, 'bps');
echo '<br />';
echo 'Max:' . Number::formatSi($port_vdsl->xdsl2LineStatusAttainableRateDs, 2, 3, 'bps') . '/' . Number::formatSi($port_vdsl->xdsl2LineStatusAttainableRateUs, 2, 3, 'bps');
} else { } else {
echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >"; echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >";
if ($port['ifType'] && $port['ifType'] != '') { if ($port['ifType'] && $port['ifType'] != '') {

View File

@@ -331,15 +331,6 @@ if (file_exists($os_file)) {
require $os_file; require $os_file;
} }
if (Config::get('enable_ports_adsl')) {
$device['xdsl_count'] = dbFetchCell("SELECT COUNT(*) FROM `ports` WHERE `device_id` = ? AND `ifType` in ('adsl','vdsl','vdsl2')", [$device['device_id']]);
}
if ($device['xdsl_count'] > '0') {
echo 'ADSL ';
$port_stats = snmpwalk_cache_oid($device, '.1.3.6.1.2.1.10.94.1', $port_stats, 'ADSL-LINE-MIB');
}//end if
if (Config::get('enable_ports_poe')) { if (Config::get('enable_ports_poe')) {
// Code by OS device // Code by OS device
@@ -913,11 +904,6 @@ foreach ($ports as $port) {
include 'ports/port-etherlike.inc.php'; include 'ports/port-etherlike.inc.php';
} }
// Do ADSL MIB
if (Config::get('enable_ports_adsl')) {
include 'ports/port-adsl.inc.php';
}
// Do PoE MIBs // Do PoE MIBs
if (Config::get('enable_ports_poe')) { if (Config::get('enable_ports_poe')) {
include 'ports/port-poe.inc.php'; include 'ports/port-poe.inc.php';

View File

@@ -1,167 +0,0 @@
<?php
use LibreNMS\RRD\RrdDefinition;
use LibreNMS\Util\Number;
// Example snmpwalk with units
// "Interval" oids have been filtered out
// adslLineCoding.1 = dmt
// adslLineType.1 = fastOrInterleaved
// adslLineSpecific.1 = zeroDotZero
// adslLineConfProfile.1 = "qwer"
// adslAtucInvSerialNumber.1 = "IES-1000 AAM1008-61"
// adslAtucInvVendorID.1 = "4"
// adslAtucInvVersionNumber.1 = "0"
// adslAtucCurrSnrMgn.1 = 150 tenth dB
// adslAtucCurrAtn.1 = 20 tenth dB
// adslAtucCurrStatus.1 = "00 00 "
// adslAtucCurrOutputPwr.1 = 100 tenth dBm
// adslAtucCurrAttainableRate.1 = 10272000 bps
// adslAturInvVendorID.1 = "0"
// adslAturInvVersionNumber.1 = "0"
// adslAturCurrSnrMgn.1 = 210 tenth dB
// adslAturCurrAtn.1 = 20 tenth dB
// adslAturCurrStatus.1 = "00 00 "
// adslAturCurrOutputPwr.1 = 0 tenth dBm
// adslAturCurrAttainableRate.1 = 1056000 bps
// adslAtucChanInterleaveDelay.1 = 6 milli-seconds
// adslAtucChanCurrTxRate.1 = 8064000 bps
// adslAtucChanPrevTxRate.1 = 0 bps
// adslAturChanInterleaveDelay.1 = 9 milli-seconds
// adslAturChanCurrTxRate.1 = 512000 bps
// adslAturChanPrevTxRate.1 = 0 bps
// adslAtucPerfLofs.1 = 0
// adslAtucPerfLoss.1 = 0
// adslAtucPerfLols.1 = 0
// adslAtucPerfLprs.1 = 0
// adslAtucPerfESs.1 = 0
// adslAtucPerfInits.1 = 1
// adslAtucPerfValidIntervals.1 = 0
// adslAtucPerfInvalidIntervals.1 = 0
// adslAturPerfLoss.1 = 0 seconds
// adslAturPerfESs.1 = 0 seconds
// adslAturPerfValidIntervals.1 = 0
// adslAturPerfInvalidIntervals.1 = 0
if (isset($this_port['adslLineCoding'])) {
$rrd_name = Rrd::portName($port_id, 'adsl');
$rrd_def = RrdDefinition::make()->disableNameChecking()
->addDataset('AtucCurrSnrMgn', 'GAUGE', 0, 635)
->addDataset('AtucCurrAtn', 'GAUGE', 0, 635)
->addDataset('AtucCurrOutputPwr', 'GAUGE', 0, 635)
->addDataset('AtucCurrAttainableR', 'GAUGE', 0)
->addDataset('AtucChanCurrTxRate', 'GAUGE', 0)
->addDataset('AturCurrSnrMgn', 'GAUGE', 0, 635)
->addDataset('AturCurrAtn', 'GAUGE', 0, 635)
->addDataset('AturCurrOutputPwr', 'GAUGE', 0, 635)
->addDataset('AturCurrAttainableR', 'GAUGE', 0)
->addDataset('AturChanCurrTxRate', 'GAUGE', 0)
->addDataset('AtucPerfLofs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfLoss', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfLprs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfESs', 'COUNTER', null, 100000000000)
->addDataset('AtucPerfInits', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLofs', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLoss', 'COUNTER', null, 100000000000)
->addDataset('AturPerfLprs', 'COUNTER', null, 100000000000)
->addDataset('AturPerfESs', 'COUNTER', null, 100000000000)
->addDataset('AtucChanCorrectedBl', 'COUNTER', null, 100000000000)
->addDataset('AtucChanUncorrectBl', 'COUNTER', null, 100000000000)
->addDataset('AturChanCorrectedBl', 'COUNTER', null, 100000000000)
->addDataset('AturChanUncorrectBl', 'COUNTER', null, 100000000000);
$adsl_oids = [
'AtucCurrSnrMgn',
'AtucCurrAtn',
'AtucCurrOutputPwr',
'AtucCurrAttainableRate',
'AtucChanCurrTxRate',
'AturCurrSnrMgn',
'AturCurrAtn',
'AturCurrOutputPwr',
'AturCurrAttainableRate',
'AturChanCurrTxRate',
'AtucPerfLofs',
'AtucPerfLoss',
'AtucPerfLprs',
'AtucPerfESs',
'AtucPerfInits',
'AturPerfLofs',
'AturPerfLoss',
'AturPerfLprs',
'AturPerfESs',
'AtucChanCorrectedBlks',
'AtucChanUncorrectBlks',
'AturChanCorrectedBlks',
'AturChanUncorrectBlks',
];
$adsl_db_oids = [
'adslLineCoding',
'adslLineType',
'adslAtucInvVendorID',
'adslAtucInvVersionNumber',
'adslAtucCurrSnrMgn',
'adslAtucCurrAtn',
'adslAtucCurrOutputPwr',
'adslAtucCurrAttainableRate',
'adslAturInvSerialNumber',
'adslAturInvVendorID',
'adslAturInvVersionNumber',
'adslAtucChanCurrTxRate',
'adslAturChanCurrTxRate',
'adslAturCurrSnrMgn',
'adslAturCurrAtn',
'adslAturCurrOutputPwr',
'adslAturCurrAttainableRate',
];
$adsl_tenth_oids = [
'adslAtucCurrSnrMgn',
'adslAtucCurrAtn',
'adslAtucCurrOutputPwr',
'adslAturCurrSnrMgn',
'adslAturCurrAtn',
'adslAturCurrOutputPwr',
];
foreach ($adsl_tenth_oids as $oid) {
$this_port[$oid] = ($this_port[$oid] / 10);
}
if (dbFetchCell('SELECT COUNT(*) FROM `ports_adsl` WHERE `port_id` = ?', [$port_id]) == '0') {
dbInsert(['port_id' => $port_id], 'ports_adsl');
}
$port['adsl_update'] = ['port_adsl_updated' => ['NOW()']];
foreach ($adsl_db_oids as $oid) {
$data = str_replace('"', '', $this_port[$oid]);
// FIXME - do we need this?
$port['adsl_update'][$oid] = $data;
}
dbUpdate($port['adsl_update'], 'ports_adsl', '`port_id` = ?', [$port_id]);
if ($this_port['adslAtucCurrSnrMgn'] > '1280') {
$this_port['adslAtucCurrSnrMgn'] = 'U';
}
if ($this_port['adslAturCurrSnrMgn'] > '1280') {
$this_port['adslAturCurrSnrMgn'] = 'U';
}
$fields = [];
foreach ($adsl_oids as $oid) {
$oid = 'adsl' . $oid;
$data = str_replace('"', '', $this_port[$oid]);
// Set data to be "unknown" if it's garbled, unexistant or zero
if (! is_numeric($data)) {
$data = 'U';
}
$fields[$oid] = $data;
}
$tags = compact('ifName', 'rrd_name', 'rrd_def');
data_update($device, 'adsl', $tags, $fields);
echo 'ADSL (' . $this_port['adslLineCoding'] . '/' . Number::formatSi($this_port['adslAtucChanCurrTxRate'], 2, 3, 'bps') . '/' . Number::formatSi($this_port['adslAturChanCurrTxRate'], 2, 3, 'bps') . ')';
}//end if

View File

@@ -0,0 +1,8 @@
<?php
use LibreNMS\OS;
if (! $os instanceof OS) {
$os = OS::make($device);
}
(new \LibreNMS\Modules\Xdsl())->poll($os);

View File

@@ -1066,6 +1066,13 @@
"default": true, "default": true,
"type": "boolean" "type": "boolean"
}, },
"discovery_modules.xdsl": {
"order": 255,
"group": "discovery",
"section": "discovery_modules",
"default": false,
"type": "boolean"
},
"discovery_modules.entity-physical": { "discovery_modules.entity-physical": {
"order": 110, "order": 110,
"group": "discovery", "group": "discovery",
@@ -4505,6 +4512,13 @@
"default": true, "default": true,
"type": "boolean" "type": "boolean"
}, },
"poller_modules.xdsl": {
"order": 345,
"group": "poller",
"section": "poller_modules",
"default": false,
"type": "boolean"
},
"poller_modules.customoid": { "poller_modules.customoid": {
"default": true, "default": true,
"type": "boolean" "type": "boolean"

View File

@@ -1505,23 +1505,23 @@ ports_adsl:
Columns: Columns:
- { Field: port_id, Type: 'int unsigned', 'Null': false, Extra: '' } - { Field: port_id, Type: 'int unsigned', 'Null': false, Extra: '' }
- { Field: port_adsl_updated, Type: timestamp, 'Null': false, Extra: '', Default: CURRENT_TIMESTAMP } - { Field: port_adsl_updated, Type: timestamp, 'Null': false, Extra: '', Default: CURRENT_TIMESTAMP }
- { Field: adslLineCoding, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslLineCoding, Type: varchar(8), 'Null': false, Extra: '', Default: '' }
- { Field: adslLineType, Type: varchar(16), 'Null': false, Extra: '' } - { Field: adslLineType, Type: varchar(16), 'Null': false, Extra: '', Default: '' }
- { Field: adslAtucInvVendorID, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslAtucInvVendorID, Type: varchar(16), 'Null': false, Extra: '', Default: '' }
- { Field: adslAtucInvVersionNumber, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslAtucInvVersionNumber, Type: varchar(16), 'Null': false, Extra: '', Default: '' }
- { Field: adslAtucCurrSnrMgn, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAtucCurrSnrMgn, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAtucCurrAtn, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAtucCurrAtn, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAtucCurrOutputPwr, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAtucCurrOutputPwr, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAtucCurrAttainableRate, Type: int, 'Null': false, Extra: '' } - { Field: adslAtucCurrAttainableRate, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: adslAtucChanCurrTxRate, Type: int, 'Null': false, Extra: '' } - { Field: adslAtucChanCurrTxRate, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: adslAturInvSerialNumber, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslAturInvSerialNumber, Type: varchar(32), 'Null': false, Extra: '', Default: '' }
- { Field: adslAturInvVendorID, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslAturInvVendorID, Type: varchar(16), 'Null': false, Extra: '', Default: '' }
- { Field: adslAturInvVersionNumber, Type: varchar(8), 'Null': false, Extra: '' } - { Field: adslAturInvVersionNumber, Type: varchar(16), 'Null': false, Extra: '', Default: '' }
- { Field: adslAturChanCurrTxRate, Type: int, 'Null': false, Extra: '' } - { Field: adslAturChanCurrTxRate, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: adslAturCurrSnrMgn, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAturCurrSnrMgn, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAturCurrAtn, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAturCurrAtn, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAturCurrOutputPwr, Type: 'decimal(5,1)', 'Null': false, Extra: '' } - { Field: adslAturCurrOutputPwr, Type: 'decimal(5,1)', 'Null': false, Extra: '', Default: '0.0' }
- { Field: adslAturCurrAttainableRate, Type: int, 'Null': false, Extra: '' } - { Field: adslAturCurrAttainableRate, Type: int, 'Null': false, Extra: '', Default: '0' }
Indexes: Indexes:
ports_adsl_port_id_unique: { Name: ports_adsl_port_id_unique, Columns: [port_id], Unique: true, Type: BTREE } ports_adsl_port_id_unique: { Name: ports_adsl_port_id_unique, Columns: [port_id], Unique: true, Type: BTREE }
ports_fdb: ports_fdb:
@@ -1637,6 +1637,18 @@ ports_stp:
Indexes: Indexes:
PRIMARY: { Name: PRIMARY, Columns: [port_stp_id], Unique: true, Type: BTREE } PRIMARY: { Name: PRIMARY, Columns: [port_stp_id], Unique: true, Type: BTREE }
ports_stp_device_id_vlan_port_index_unique: { Name: ports_stp_device_id_vlan_port_index_unique, Columns: [device_id, vlan, port_index], Unique: true, Type: BTREE } ports_stp_device_id_vlan_port_index_unique: { Name: ports_stp_device_id_vlan_port_index_unique, Columns: [device_id, vlan, port_index], Unique: true, Type: BTREE }
ports_vdsl:
Columns:
- { Field: port_id, Type: 'int unsigned', 'Null': false, Extra: '' }
- { Field: port_vdsl_updated, Type: timestamp, 'Null': false, Extra: '', Default: CURRENT_TIMESTAMP }
- { Field: xdsl2LineStatusAttainableRateDs, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: xdsl2LineStatusAttainableRateUs, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: xdsl2ChStatusActDataRateXtur, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: xdsl2ChStatusActDataRateXtuc, Type: int, 'Null': false, Extra: '', Default: '0' }
- { Field: xdsl2LineStatusActAtpDs, Type: 'decimal(8,2)', 'Null': false, Extra: '', Default: '0.00' }
- { Field: xdsl2LineStatusActAtpUs, Type: 'decimal(8,2)', 'Null': false, Extra: '', Default: '0.00' }
Indexes:
ports_vdsl_port_id_unique: { Name: ports_vdsl_port_id_unique, Columns: [port_id], Unique: true, Type: BTREE }
ports_vlans: ports_vlans:
Columns: Columns:
- { Field: port_vlan_id, Type: 'int unsigned', 'Null': false, Extra: auto_increment } - { Field: port_vlan_id, Type: 'int unsigned', 'Null': false, Extra: auto_increment }

View File

@@ -83,5 +83,10 @@
<description>Improvements to routeros wireless polling will lose historical data for 60GHz rate, frequency, and distance wireless sensors. See https://github.com/librenms/librenms/pull/12976 for more information.</description> <description>Improvements to routeros wireless polling will lose historical data for 60GHz rate, frequency, and distance wireless sensors. See https://github.com/librenms/librenms/pull/12976 for more information.</description>
<pubDate>Wed, 19 Oct 2021 18:00:00 +0000</pubDate> <pubDate>Wed, 19 Oct 2021 18:00:00 +0000</pubDate>
</item> </item>
<item>
<title>ADSL discovery and polling moved to a new module</title>
<description>Adsl statistics are now discovered and polled in a new module. Vdsl stats were also added. `lnms config:set enable_ports_adsl true`is not supported anymore. See https://github.com/librenms/librenms/pull/14207 for more information.</description>
<pubDate>Wed, 7 Sept 2022 18:00:00 +0000</pubDate>
</item>
</channel> </channel>
</rss> </rss>

View File

@@ -212,6 +212,9 @@
}, },
"netscaler-vsvr": { "netscaler-vsvr": {
"type": "boolean" "type": "boolean"
},
"xdsl": {
"type": "boolean"
} }
}, },
"additionalProperties": false "additionalProperties": false
@@ -353,6 +356,9 @@
}, },
"ip6-addresses": { "ip6-addresses": {
"type": "boolean" "type": "boolean"
},
"xdsl": {
"type": "boolean"
} }
}, },
"additionalProperties": false "additionalProperties": false

View File

@@ -586,9 +586,6 @@ return [
'stp' => [ 'stp' => [
'description' => 'STP', 'description' => 'STP',
], ],
'toner' => [
'description' => 'Toner',
],
'ucd-diskio' => [ 'ucd-diskio' => [
'description' => 'UCD DiskIO', 'description' => 'UCD DiskIO',
], ],
@@ -604,6 +601,12 @@ return [
'wireless' => [ 'wireless' => [
'description' => 'Wireless', 'description' => 'Wireless',
], ],
'xdsl' => [
'description' => 'xDSL',
],
'printer-supplies' => [
'description' => 'Printer Supplies',
],
], ],
'distributed_poller' => [ 'distributed_poller' => [
'description' => 'Enable Distributed Polling (requires additional setup)', 'description' => 'Enable Distributed Polling (requires additional setup)',
@@ -1095,9 +1098,6 @@ return [
'junose-atm-vp' => [ 'junose-atm-vp' => [
'description' => 'JunOS ATM VP', 'description' => 'JunOS ATM VP',
], ],
'toner' => [
'description' => 'Toner',
],
'ucd-diskio' => [ 'ucd-diskio' => [
'description' => 'UCD DiskIO', 'description' => 'UCD DiskIO',
], ],
@@ -1191,6 +1191,12 @@ return [
'mpls' => [ 'mpls' => [
'description' => 'MPLS', 'description' => 'MPLS',
], ],
'xdsl' => [
'description' => 'xDSL',
],
'printer-supplies' => [
'description' => 'Printer Supplies',
],
], ],
'ports_fdb_purge' => [ 'ports_fdb_purge' => [
'description' => 'Port FDB entries older than', 'description' => 'Port FDB entries older than',

View File

@@ -373,13 +373,13 @@ return [
], ],
'discovery_modules' => [ 'discovery_modules' => [
'arp-table' => [ 'arp-table' => [
'description' => 'ARP Table', 'description' => 'Table ARP',
], ],
'applications' => [ 'applications' => [
'description' => 'Applications', 'description' => 'Applications',
], ],
'bgp-peers' => [ 'bgp-peers' => [
'description' => 'BGP Peers', 'description' => 'Adjacences BGP',
], ],
'cisco-cbqos' => [ 'cisco-cbqos' => [
'description' => 'Cisco CBQOS', 'description' => 'Cisco CBQOS',
@@ -406,10 +406,10 @@ return [
'description' => 'Cisco VRF Lite', 'description' => 'Cisco VRF Lite',
], ],
'discovery-arp' => [ 'discovery-arp' => [
'description' => 'Discovery ARP', 'description' => 'Découverte ARP',
], ],
'discovery-protocols' => [ 'discovery-protocols' => [
'description' => 'Discovery Protocols', 'description' => 'Protocoles de découverte',
], ],
'entity-physical' => [ 'entity-physical' => [
'description' => 'Entity Physical', 'description' => 'Entity Physical',
@@ -459,8 +459,11 @@ return [
'ports-stack' => [ 'ports-stack' => [
'description' => 'Ports Stack', 'description' => 'Ports Stack',
], ],
'printer-supplies' => [
'description' => 'Ressources d\'impression',
],
'processors' => [ 'processors' => [
'description' => 'Processors', 'description' => 'Processeurs',
], ],
'route' => [ 'route' => [
@@ -475,15 +478,11 @@ return [
'description' => 'Services', 'description' => 'Services',
], ],
'storage' => [ 'storage' => [
'description' => 'Storage', 'description' => 'Stockage',
], ],
'stp' => [ 'stp' => [
'description' => 'STP', 'description' => 'STP',
], ],
'toner' => [
'description' => 'Toner',
],
'ucd-diskio' => [ 'ucd-diskio' => [
'description' => 'UCD DiskIO', 'description' => 'UCD DiskIO',
], ],
@@ -499,6 +498,9 @@ return [
'wireless' => [ 'wireless' => [
'description' => 'Wireless', 'description' => 'Wireless',
], ],
'xdsl' => [
'description' => 'xDSL',
],
], ],
'distributed_poller' => [ 'distributed_poller' => [
'description' => 'Activation des sondeurs distribués (`Distributed Pollers`, nécessite des configurations additionnelles)', 'description' => 'Activation des sondeurs distribués (`Distributed Pollers`, nécessite des configurations additionnelles)',
@@ -778,6 +780,146 @@ return [
'ping' => [ 'ping' => [
'description' => 'Chemin vers `ping`', 'description' => 'Chemin vers `ping`',
], ],
'poller_modules' => [
'unix-agent' => [
'description' => 'Unix Agent',
],
'os' => [
'description' => 'OS',
],
'ipmi' => [
'description' => 'IPMI',
],
'sensors' => [
'description' => 'Sensors',
],
'processors' => [
'description' => 'Processeurs',
],
'mempools' => [
'description' => 'Mempools',
],
'storage' => [
'description' => 'Stockage',
],
'netstats' => [
'description' => 'Netstats',
],
'hr-mib' => [
'description' => 'HR Mib',
],
'ucd-mib' => [
'description' => 'Ucd Mib',
],
'ipSystemStats' => [
'description' => 'ipSystemStats',
],
'ports' => [
'description' => 'Ports',
],
'bgp-peers' => [
'description' => 'Adjacences BGP',
],
'junose-atm-vp' => [
'description' => 'JunOS ATM VP',
],
'ucd-diskio' => [
'description' => 'UCD DiskIO',
],
'wifi' => [
'description' => 'Wifi',
],
'wireless' => [
'description' => 'Wireless',
],
'ospf' => [
'description' => 'OSPF',
],
'isis' => [
'description' => 'ISIS',
],
'cisco-ipsec-flow-monitor' => [
'description' => 'Cisco IPSec flow Monitor',
],
'cisco-remote-access-monitor' => [
'description' => 'Cisco remote access Monitor',
],
'cisco-cef' => [
'description' => 'Cisco CEF',
],
'slas' => [
'description' => 'Service Level Agreement Tracking',
],
'cisco-mac-accounting' => [
'description' => 'Cisco MAC Accounting',
],
'cipsec-tunnels' => [
'description' => 'Ipsec Tunnels',
],
'cisco-ace-serverfarms' => [
'description' => 'Cisco ACE Serverfarms',
],
'cisco-asa-firewall' => [
'description' => 'Cisco ASA Firewall',
],
'cisco-voice' => [
'description' => 'Cisco Voice',
],
'cisco-cbqos' => [
'description' => 'Cisco CBQOS',
],
'cisco-otv' => [
'description' => 'Cisco OTV',
],
'cisco-qfp' => [
'description' => 'Cisco QFP',
],
'cisco-vpdn' => [
'description' => 'Cisco VPDN',
],
'nac' => [
'description' => 'NAC',
],
'netscaler-vsvr' => [
'description' => 'Netscaler VSVR',
],
'aruba-controller' => [
'description' => 'Contrôleur Aruba',
],
'availability' => [
'description' => 'Disponibilité',
],
'entity-physical' => [
'description' => 'Entity Physical',
],
'entity-state' => [
'description' => 'Entity State',
],
'applications' => [
'description' => 'Applications',
],
'stp' => [
'description' => 'STP',
],
'ntp' => [
'description' => 'NTP',
],
'loadbalancers' => [
'description' => 'Loadbalancers',
],
'mef' => [
'description' => 'MEF',
],
'mpls' => [
'description' => 'MPLS',
],
'xdsl' => [
'description' => 'xDSL',
],
'printer-supplies' => [
'description' => 'Ressources d\'impression',
],
],
'ports_fdb_purge' => [ 'ports_fdb_purge' => [
'description' => 'Table port FDB, entrées plus anciennes que', 'description' => 'Table port FDB, entrées plus anciennes que',
'help' => 'Nettoyage effectué par daily.sh', 'help' => 'Nettoyage effectué par daily.sh',

2399
tests/data/draytek_vdsl.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1822,8 +1822,8 @@
"ifName": "cellular1/0", "ifName": "cellular1/0",
"portName": null, "portName": null,
"ifIndex": 3, "ifIndex": 3,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "down", "ifOperStatus": "down",
@@ -1927,8 +1927,8 @@
"ifName": "cellular1/1", "ifName": "cellular1/1",
"portName": null, "portName": null,
"ifIndex": 4, "ifIndex": 4,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "down", "ifOperStatus": "down",
@@ -2032,8 +2032,8 @@
"ifName": "loopback600", "ifName": "loopback600",
"portName": null, "portName": null,
"ifIndex": 5, "ifIndex": 5,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "false", "ifConnectorPresent": "false",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "up", "ifOperStatus": "up",
@@ -2767,8 +2767,8 @@
"ifName": "ethernet0/0", "ifName": "ethernet0/0",
"portName": null, "portName": null,
"ifIndex": 64537, "ifIndex": 64537,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "up", "ifOperStatus": "up",
@@ -2872,8 +2872,8 @@
"ifName": "ethernet0/0", "ifName": "ethernet0/0",
"portName": null, "portName": null,
"ifIndex": 64538, "ifIndex": 64538,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "down", "ifOperStatus": "down",
@@ -2977,8 +2977,8 @@
"ifName": "ethernet0/0", "ifName": "ethernet0/0",
"portName": null, "portName": null,
"ifIndex": 64539, "ifIndex": 64539,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "down", "ifOperStatus": "down",
@@ -3082,8 +3082,8 @@
"ifName": "ethernet0/0", "ifName": "ethernet0/0",
"portName": null, "portName": null,
"ifIndex": 64540, "ifIndex": 64540,
"ifSpeed": null, "ifSpeed": 0,
"ifSpeed_prev": 0, "ifSpeed_prev": null,
"ifConnectorPresent": "true", "ifConnectorPresent": "true",
"ifPromiscuousMode": "false", "ifPromiscuousMode": "false",
"ifOperStatus": "down", "ifOperStatus": "down",

View File

@@ -6192,5 +6192,26 @@
} }
] ]
} }
},
"os": {
"discovery": {
"devices": [
{
"sysName": "<private>",
"sysObjectID": ".1.3.6.1.4.1.2007.1.1.236",
"sysDescr": "Router model RS123w-4G S/N: RNPFDK019380272 SWL: BASE Teldat (c)1996 - 2019",
"sysContact": null,
"version": null,
"hardware": null,
"features": null,
"os": "teldat",
"type": "network",
"serial": "RNPFDK019380272",
"icon": "teldat.png",
"location": null
}
]
},
"poller": "matches discovery"
} }
} }

View File

@@ -4962,5 +4962,72 @@
] ]
}, },
"poller": "matches discovery" "poller": "matches discovery"
},
"xdsl": {
"discovery": {
"ports_adsl": [
{
"adslLineCoding": "2",
"adslLineType": "0",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "<private>",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "13.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 17
},
{
"adslLineCoding": "",
"adslLineType": "",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "0.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 18
},
{
"adslLineCoding": "",
"adslLineType": "",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "0.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 19
}
]
},
"poller": "matches discovery"
} }
} }

View File

@@ -3630,5 +3630,93 @@
} }
] ]
} }
},
"os": {
"discovery": {
"devices": [
{
"sysName": "<private>",
"sysObjectID": ".1.3.6.1.4.1.2007.1.1.191",
"sysDescr": "Router model TV BASE VDSL2/ADSL WLAN 30 10 CPU MIPS32 S/N: 792/09606 Teldat (c)1996 - 2017",
"sysContact": null,
"version": null,
"hardware": null,
"features": null,
"os": "teldat",
"type": "network",
"serial": "792/09606",
"icon": "teldat.png",
"location": null
}
]
},
"poller": "matches discovery"
},
"xdsl": {
"discovery": {
"ports_adsl": [
{
"adslLineCoding": "2",
"adslLineType": "0",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "792/09606",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "13.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 11
},
{
"adslLineCoding": "",
"adslLineType": "",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "0.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 12
},
{
"adslLineCoding": "",
"adslLineType": "",
"adslAtucInvVendorID": "",
"adslAtucInvVersionNumber": "",
"adslAtucCurrSnrMgn": "0.0",
"adslAtucCurrAtn": "0.0",
"adslAtucCurrOutputPwr": "0.0",
"adslAtucCurrAttainableRate": 0,
"adslAtucChanCurrTxRate": 0,
"adslAturInvSerialNumber": "",
"adslAturInvVendorID": "",
"adslAturInvVersionNumber": "",
"adslAturChanCurrTxRate": 0,
"adslAturCurrSnrMgn": "0.0",
"adslAturCurrAtn": "0.0",
"adslAturCurrOutputPwr": "0.0",
"adslAturCurrAttainableRate": 0,
"ifIndex": 13
}
]
},
"poller": "matches discovery"
} }
} }

View File

@@ -0,0 +1,415 @@
1.3.6.1.2.1.1.1.0|4|DrayTek Corporation, Router Model: Vigor165, Version: r13107_788_b947ce1af_beta, Build Date/Time:Jul 25 2022 15:55:31
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.7367
1.3.6.1.2.1.1.3.0|67|24800
1.3.6.1.2.1.1.4.0|4|
1.3.6.1.2.1.1.5.0|4|modem01
1.3.6.1.2.1.1.6.0|4|
1.3.6.1.2.1.1.7.0|2|78
1.3.6.1.2.1.2.1.0|2|11
1.3.6.1.2.1.2.2.1.1.1|2|1
1.3.6.1.2.1.2.2.1.1.4|2|4
1.3.6.1.2.1.2.2.1.1.5|2|5
1.3.6.1.2.1.2.2.1.1.6|2|6
1.3.6.1.2.1.2.2.1.1.7|2|7
1.3.6.1.2.1.2.2.1.1.8|2|8
1.3.6.1.2.1.2.2.1.1.9|2|9
1.3.6.1.2.1.2.2.1.1.10|2|10
1.3.6.1.2.1.2.2.1.1.11|2|11
1.3.6.1.2.1.2.2.1.1.12|2|12
1.3.6.1.2.1.2.2.1.1.13|2|13
1.3.6.1.2.1.2.2.1.2.1|4|LAN
1.3.6.1.2.1.2.2.1.2.4|4|VDSL 08-0B-00-0F-00-07
1.3.6.1.2.1.2.2.1.2.5|4|Resrved
1.3.6.1.2.1.2.2.1.2.6|4|V-WAN3
1.3.6.1.2.1.2.2.1.2.7|4|V-WAN4
1.3.6.1.2.1.2.2.1.2.8|4|V-WAN5
1.3.6.1.2.1.2.2.1.2.9|4|PVC channel 6
1.3.6.1.2.1.2.2.1.2.10|4|PVC channel 7
1.3.6.1.2.1.2.2.1.2.11|4|PVC channel 8
1.3.6.1.2.1.2.2.1.2.12|4|LAN_PORT1
1.3.6.1.2.1.2.2.1.2.13|4|LAN_PORT2
1.3.6.1.2.1.2.2.1.3.1|2|6
1.3.6.1.2.1.2.2.1.3.4|2|251
1.3.6.1.2.1.2.2.1.3.5|2|6
1.3.6.1.2.1.2.2.1.3.6|2|53
1.3.6.1.2.1.2.2.1.3.7|2|53
1.3.6.1.2.1.2.2.1.3.8|2|53
1.3.6.1.2.1.2.2.1.3.9|2|53
1.3.6.1.2.1.2.2.1.3.10|2|53
1.3.6.1.2.1.2.2.1.3.11|2|53
1.3.6.1.2.1.2.2.1.3.12|2|6
1.3.6.1.2.1.2.2.1.3.13|2|6
1.3.6.1.2.1.2.2.1.4.1|2|1500
1.3.6.1.2.1.2.2.1.4.4|2|1500
1.3.6.1.2.1.2.2.1.4.5|2|1500
1.3.6.1.2.1.2.2.1.4.6|2|1500
1.3.6.1.2.1.2.2.1.4.7|2|1500
1.3.6.1.2.1.2.2.1.4.8|2|1500
1.3.6.1.2.1.2.2.1.4.9|2|1500
1.3.6.1.2.1.2.2.1.4.10|2|1500
1.3.6.1.2.1.2.2.1.4.11|2|1500
1.3.6.1.2.1.2.2.1.4.12|2|1500
1.3.6.1.2.1.2.2.1.4.13|2|1500
1.3.6.1.2.1.2.2.1.5.1|66|1000000000
1.3.6.1.2.1.2.2.1.5.4|66|110162000
1.3.6.1.2.1.2.2.1.5.5|66|1000000000
1.3.6.1.2.1.2.2.1.5.6|66|0
1.3.6.1.2.1.2.2.1.5.7|66|0
1.3.6.1.2.1.2.2.1.5.8|66|0
1.3.6.1.2.1.2.2.1.5.9|66|1000000000
1.3.6.1.2.1.2.2.1.5.10|66|1000000000
1.3.6.1.2.1.2.2.1.5.11|66|1000000000
1.3.6.1.2.1.2.2.1.5.12|66|1000000000
1.3.6.1.2.1.2.2.1.5.13|66|1000000000
1.3.6.1.2.1.2.2.1.6.1|4x|001daa943004
1.3.6.1.2.1.2.2.1.6.4|4x|001daa943005
1.3.6.1.2.1.2.2.1.6.5|4|
1.3.6.1.2.1.2.2.1.6.6|4x|001daa943007
1.3.6.1.2.1.2.2.1.6.7|4x|001daa943008
1.3.6.1.2.1.2.2.1.6.8|4x|001daa943009
1.3.6.1.2.1.2.2.1.6.9|4|
1.3.6.1.2.1.2.2.1.6.10|4|
1.3.6.1.2.1.2.2.1.6.11|4|
1.3.6.1.2.1.2.2.1.6.12|4x|001daa943004
1.3.6.1.2.1.2.2.1.6.13|4x|001daa943004
1.3.6.1.2.1.2.2.1.7.1|2|1
1.3.6.1.2.1.2.2.1.7.4|2|1
1.3.6.1.2.1.2.2.1.7.5|2|2
1.3.6.1.2.1.2.2.1.7.6|2|2
1.3.6.1.2.1.2.2.1.7.7|2|2
1.3.6.1.2.1.2.2.1.7.8|2|2
1.3.6.1.2.1.2.2.1.7.9|2|0
1.3.6.1.2.1.2.2.1.7.10|2|0
1.3.6.1.2.1.2.2.1.7.11|2|0
1.3.6.1.2.1.2.2.1.7.12|2|1
1.3.6.1.2.1.2.2.1.7.13|2|2
1.3.6.1.2.1.2.2.1.8.1|2|1
1.3.6.1.2.1.2.2.1.8.4|2|1
1.3.6.1.2.1.2.2.1.8.5|2|2
1.3.6.1.2.1.2.2.1.8.6|2|2
1.3.6.1.2.1.2.2.1.8.7|2|2
1.3.6.1.2.1.2.2.1.8.8|2|2
1.3.6.1.2.1.2.2.1.8.9|2|0
1.3.6.1.2.1.2.2.1.8.10|2|0
1.3.6.1.2.1.2.2.1.8.11|2|0
1.3.6.1.2.1.2.2.1.8.12|2|1
1.3.6.1.2.1.2.2.1.8.13|2|2
1.3.6.1.2.1.2.2.1.9.1|67|0
1.3.6.1.2.1.2.2.1.9.4|67|0
1.3.6.1.2.1.2.2.1.9.5|67|0
1.3.6.1.2.1.2.2.1.9.6|67|0
1.3.6.1.2.1.2.2.1.9.7|67|0
1.3.6.1.2.1.2.2.1.9.8|67|0
1.3.6.1.2.1.2.2.1.9.9|67|0
1.3.6.1.2.1.2.2.1.9.10|67|0
1.3.6.1.2.1.2.2.1.9.11|67|0
1.3.6.1.2.1.2.2.1.9.12|67|0
1.3.6.1.2.1.2.2.1.9.13|67|0
1.3.6.1.2.1.2.2.1.10.1|65|4509363
1.3.6.1.2.1.2.2.1.10.4|65|0
1.3.6.1.2.1.2.2.1.10.5|65|0
1.3.6.1.2.1.2.2.1.10.6|65|0
1.3.6.1.2.1.2.2.1.10.7|65|0
1.3.6.1.2.1.2.2.1.10.8|65|0
1.3.6.1.2.1.2.2.1.10.9|65|0
1.3.6.1.2.1.2.2.1.10.10|65|0
1.3.6.1.2.1.2.2.1.10.11|65|0
1.3.6.1.2.1.2.2.1.10.12|65|4518898
1.3.6.1.2.1.2.2.1.10.13|65|0
1.3.6.1.2.1.2.2.1.11.1|65|1277
1.3.6.1.2.1.2.2.1.11.4|65|0
1.3.6.1.2.1.2.2.1.11.5|65|0
1.3.6.1.2.1.2.2.1.11.6|65|0
1.3.6.1.2.1.2.2.1.11.7|65|0
1.3.6.1.2.1.2.2.1.11.8|65|0
1.3.6.1.2.1.2.2.1.11.9|65|0
1.3.6.1.2.1.2.2.1.11.10|65|0
1.3.6.1.2.1.2.2.1.11.11|65|0
1.3.6.1.2.1.2.2.1.11.12|65|13763
1.3.6.1.2.1.2.2.1.11.13|65|0
1.3.6.1.2.1.2.2.1.12.1|65|801
1.3.6.1.2.1.2.2.1.12.4|65|0
1.3.6.1.2.1.2.2.1.12.5|65|0
1.3.6.1.2.1.2.2.1.12.6|65|0
1.3.6.1.2.1.2.2.1.12.7|65|0
1.3.6.1.2.1.2.2.1.12.8|65|0
1.3.6.1.2.1.2.2.1.12.9|65|0
1.3.6.1.2.1.2.2.1.12.10|65|0
1.3.6.1.2.1.2.2.1.12.11|65|0
1.3.6.1.2.1.2.2.1.12.12|65|0
1.3.6.1.2.1.2.2.1.12.13|65|0
1.3.6.1.2.1.2.2.1.13.1|65|0
1.3.6.1.2.1.2.2.1.13.4|65|0
1.3.6.1.2.1.2.2.1.13.5|65|0
1.3.6.1.2.1.2.2.1.13.6|65|0
1.3.6.1.2.1.2.2.1.13.7|65|0
1.3.6.1.2.1.2.2.1.13.8|65|0
1.3.6.1.2.1.2.2.1.13.9|65|0
1.3.6.1.2.1.2.2.1.13.10|65|0
1.3.6.1.2.1.2.2.1.13.11|65|0
1.3.6.1.2.1.2.2.1.13.12|65|0
1.3.6.1.2.1.2.2.1.13.13|65|0
1.3.6.1.2.1.2.2.1.14.1|65|0
1.3.6.1.2.1.2.2.1.14.4|65|0
1.3.6.1.2.1.2.2.1.14.5|65|0
1.3.6.1.2.1.2.2.1.14.6|65|0
1.3.6.1.2.1.2.2.1.14.7|65|0
1.3.6.1.2.1.2.2.1.14.8|65|0
1.3.6.1.2.1.2.2.1.14.9|65|0
1.3.6.1.2.1.2.2.1.14.10|65|0
1.3.6.1.2.1.2.2.1.14.11|65|0
1.3.6.1.2.1.2.2.1.14.12|65|0
1.3.6.1.2.1.2.2.1.14.13|65|0
1.3.6.1.2.1.2.2.1.15.1|65|137
1.3.6.1.2.1.2.2.1.15.4|65|0
1.3.6.1.2.1.2.2.1.15.5|65|0
1.3.6.1.2.1.2.2.1.15.6|65|0
1.3.6.1.2.1.2.2.1.15.7|65|0
1.3.6.1.2.1.2.2.1.15.8|65|0
1.3.6.1.2.1.2.2.1.15.9|65|0
1.3.6.1.2.1.2.2.1.15.10|65|0
1.3.6.1.2.1.2.2.1.15.11|65|0
1.3.6.1.2.1.2.2.1.15.12|65|0
1.3.6.1.2.1.2.2.1.15.13|65|0
1.3.6.1.2.1.2.2.1.16.1|65|12229826
1.3.6.1.2.1.2.2.1.16.4|65|0
1.3.6.1.2.1.2.2.1.16.5|65|0
1.3.6.1.2.1.2.2.1.16.6|65|0
1.3.6.1.2.1.2.2.1.16.7|65|0
1.3.6.1.2.1.2.2.1.16.8|65|0
1.3.6.1.2.1.2.2.1.16.9|65|0
1.3.6.1.2.1.2.2.1.16.10|65|0
1.3.6.1.2.1.2.2.1.16.11|65|0
1.3.6.1.2.1.2.2.1.16.12|65|12232151
1.3.6.1.2.1.2.2.1.16.13|65|0
1.3.6.1.2.1.2.2.1.17.1|65|1432
1.3.6.1.2.1.2.2.1.17.4|65|0
1.3.6.1.2.1.2.2.1.17.5|65|0
1.3.6.1.2.1.2.2.1.17.6|65|0
1.3.6.1.2.1.2.2.1.17.7|65|0
1.3.6.1.2.1.2.2.1.17.8|65|0
1.3.6.1.2.1.2.2.1.17.9|65|0
1.3.6.1.2.1.2.2.1.17.10|65|0
1.3.6.1.2.1.2.2.1.17.11|65|0
1.3.6.1.2.1.2.2.1.17.12|65|15596
1.3.6.1.2.1.2.2.1.17.13|65|0
1.3.6.1.2.1.2.2.1.18.1|65|25
1.3.6.1.2.1.2.2.1.18.4|65|0
1.3.6.1.2.1.2.2.1.18.5|65|0
1.3.6.1.2.1.2.2.1.18.6|65|0
1.3.6.1.2.1.2.2.1.18.7|65|0
1.3.6.1.2.1.2.2.1.18.8|65|0
1.3.6.1.2.1.2.2.1.18.9|65|0
1.3.6.1.2.1.2.2.1.18.10|65|0
1.3.6.1.2.1.2.2.1.18.11|65|0
1.3.6.1.2.1.2.2.1.18.12|65|0
1.3.6.1.2.1.2.2.1.18.13|65|0
1.3.6.1.2.1.2.2.1.19.1|65|0
1.3.6.1.2.1.2.2.1.19.4|65|0
1.3.6.1.2.1.2.2.1.19.5|65|0
1.3.6.1.2.1.2.2.1.19.6|65|0
1.3.6.1.2.1.2.2.1.19.7|65|0
1.3.6.1.2.1.2.2.1.19.8|65|0
1.3.6.1.2.1.2.2.1.19.9|65|0
1.3.6.1.2.1.2.2.1.19.10|65|0
1.3.6.1.2.1.2.2.1.19.11|65|0
1.3.6.1.2.1.2.2.1.19.12|65|0
1.3.6.1.2.1.2.2.1.19.13|65|0
1.3.6.1.2.1.2.2.1.20.1|65|0
1.3.6.1.2.1.2.2.1.20.4|65|0
1.3.6.1.2.1.2.2.1.20.5|65|0
1.3.6.1.2.1.2.2.1.20.6|65|0
1.3.6.1.2.1.2.2.1.20.7|65|0
1.3.6.1.2.1.2.2.1.20.8|65|0
1.3.6.1.2.1.2.2.1.20.9|65|0
1.3.6.1.2.1.2.2.1.20.10|65|0
1.3.6.1.2.1.2.2.1.20.11|65|0
1.3.6.1.2.1.2.2.1.20.12|65|0
1.3.6.1.2.1.2.2.1.20.13|65|0
1.3.6.1.2.1.2.2.1.21.1|66|0
1.3.6.1.2.1.2.2.1.21.4|66|0
1.3.6.1.2.1.2.2.1.21.5|66|0
1.3.6.1.2.1.2.2.1.21.6|66|0
1.3.6.1.2.1.2.2.1.21.7|66|0
1.3.6.1.2.1.2.2.1.21.8|66|0
1.3.6.1.2.1.2.2.1.21.9|66|0
1.3.6.1.2.1.2.2.1.21.10|66|0
1.3.6.1.2.1.2.2.1.21.11|66|0
1.3.6.1.2.1.2.2.1.21.12|66|0
1.3.6.1.2.1.2.2.1.21.13|66|0
1.3.6.1.2.1.2.2.1.22.1|6|0.0
1.3.6.1.2.1.2.2.1.22.4|6|0.0
1.3.6.1.2.1.2.2.1.22.5|6|0.0
1.3.6.1.2.1.2.2.1.22.6|6|0.0
1.3.6.1.2.1.2.2.1.22.7|6|0.0
1.3.6.1.2.1.2.2.1.22.8|6|0.0
1.3.6.1.2.1.2.2.1.22.9|6|0.0
1.3.6.1.2.1.2.2.1.22.10|6|0.0
1.3.6.1.2.1.2.2.1.22.11|6|0.0
1.3.6.1.2.1.2.2.1.22.12|6|0.0
1.3.6.1.2.1.2.2.1.22.13|6|0.0
1.3.6.1.2.1.4.1.0|2|1
1.3.6.1.2.1.4.2.0|2|255
1.3.6.1.2.1.4.3.0|65|2342
1.3.6.1.2.1.4.4.0|65|0
1.3.6.1.2.1.4.5.0|65|0
1.3.6.1.2.1.4.6.0|65|0
1.3.6.1.2.1.4.7.0|65|0
1.3.6.1.2.1.4.8.0|65|125
1.3.6.1.2.1.4.9.0|65|2299
1.3.6.1.2.1.4.10.0|65|1503
1.3.6.1.2.1.4.11.0|65|0
1.3.6.1.2.1.4.12.0|65|0
1.3.6.1.2.1.4.13.0|2|0
1.3.6.1.2.1.4.14.0|65|0
1.3.6.1.2.1.4.15.0|65|0
1.3.6.1.2.1.4.16.0|65|0
1.3.6.1.2.1.4.17.0|65|0
1.3.6.1.2.1.4.18.0|65|0
1.3.6.1.2.1.4.19.0|65|0
1.3.6.1.2.1.4.20.1.1.10.30.0.2|64x|0a1e0002
1.3.6.1.2.1.4.20.1.2.10.30.0.2|2|1
1.3.6.1.2.1.4.20.1.3.10.30.0.2|64x|ffffff00
1.3.6.1.2.1.4.20.1.4.10.30.0.2|2|1
1.3.6.1.2.1.4.20.1.5.10.30.0.2|2|65535
1.3.6.1.2.1.4.23.0|65|0
1.3.6.1.2.1.5.1.0|65|35
1.3.6.1.2.1.5.2.0|65|0
1.3.6.1.2.1.5.3.0|65|14
1.3.6.1.2.1.5.4.0|65|0
1.3.6.1.2.1.5.5.0|65|0
1.3.6.1.2.1.5.6.0|65|0
1.3.6.1.2.1.5.7.0|65|0
1.3.6.1.2.1.5.8.0|65|21
1.3.6.1.2.1.5.9.0|65|0
1.3.6.1.2.1.5.10.0|65|0
1.3.6.1.2.1.5.11.0|65|0
1.3.6.1.2.1.5.12.0|65|0
1.3.6.1.2.1.5.13.0|65|0
1.3.6.1.2.1.5.14.0|65|21
1.3.6.1.2.1.5.15.0|65|0
1.3.6.1.2.1.5.16.0|65|0
1.3.6.1.2.1.5.17.0|65|0
1.3.6.1.2.1.5.18.0|65|0
1.3.6.1.2.1.5.19.0|65|0
1.3.6.1.2.1.5.20.0|65|0
1.3.6.1.2.1.5.21.0|65|0
1.3.6.1.2.1.5.22.0|65|21
1.3.6.1.2.1.5.23.0|65|0
1.3.6.1.2.1.5.24.0|65|0
1.3.6.1.2.1.5.25.0|65|0
1.3.6.1.2.1.5.26.0|65|0
1.3.6.1.2.1.6.1.0|2|1
1.3.6.1.2.1.6.2.0|2|0
1.3.6.1.2.1.6.3.0|2|0
1.3.6.1.2.1.6.4.0|2|-1
1.3.6.1.2.1.6.5.0|65|0
1.3.6.1.2.1.6.6.0|65|73
1.3.6.1.2.1.6.7.0|65|0
1.3.6.1.2.1.6.8.0|65|0
1.3.6.1.2.1.6.9.0|66|0
1.3.6.1.2.1.6.10.0|65|1111
1.3.6.1.2.1.6.11.0|65|1104
1.3.6.1.2.1.6.12.0|65|4
1.3.6.1.2.1.6.14.0|65|0
1.3.6.1.2.1.6.15.0|65|0
1.3.6.1.2.1.7.1.0|65|328
1.3.6.1.2.1.7.2.0|65|0
1.3.6.1.2.1.7.3.0|65|0
1.3.6.1.2.1.7.4.0|65|355
1.3.6.1.2.1.10.94.1.1.1.1.1.4|2|2
1.3.6.1.2.1.10.94.1.1.1.1.2.4|2|2
1.3.6.1.2.1.10.94.1.1.1.1.3.4|6|0.0
1.3.6.1.2.1.10.94.1.1.1.1.4.4|4x|44454656414c0000000000000000000000
1.3.6.1.2.1.10.94.1.1.1.1.5.4|4x|44454656414c0000000000000000000000
1.3.6.1.2.1.10.94.1.1.2.1.1.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.2.1.2.4|4x|4452415954454b00000000000000000000
1.3.6.1.2.1.10.94.1.1.2.1.3.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.2.1.4.4|2|5
1.3.6.1.2.1.10.94.1.1.2.1.5.4|66|13
1.3.6.1.2.1.10.94.1.1.2.1.6.4|4x|53484f5754494d45000000000000000000
1.3.6.1.2.1.10.94.1.1.2.1.7.4|2|12
1.3.6.1.2.1.10.94.1.1.2.1.8.4|66|113648992
1.3.6.1.2.1.10.94.1.1.3.1.1.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.3.1.2.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.3.1.3.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.3.1.4.4|2|5
1.3.6.1.2.1.10.94.1.1.3.1.5.4|66|16
1.3.6.1.2.1.10.94.1.1.3.1.6.4|4x|0000000000000000000000000000000000
1.3.6.1.2.1.10.94.1.1.3.1.7.4|2|9
1.3.6.1.2.1.10.94.1.1.3.1.8.4|66|34066000
1.3.6.1.2.1.10.94.1.1.4.1.1.4|66|0
1.3.6.1.2.1.10.94.1.1.4.1.2.4|66|0
1.3.6.1.2.1.10.94.1.1.4.1.3.4|66|0
1.3.6.1.2.1.10.94.1.1.4.1.4.4|66|0
1.3.6.1.2.1.10.94.1.1.5.1.1.4|66|0
1.3.6.1.2.1.10.94.1.1.5.1.2.4|66|0
1.3.6.1.2.1.10.94.1.1.5.1.3.4|66|0
1.3.6.1.2.1.10.94.1.1.5.1.4.4|66|0
1.3.6.1.2.1.10.251.1.2.2.1.1.4.1|2|1
1.3.6.1.2.1.10.251.1.2.2.1.1.4.2|2|2
1.3.6.1.2.1.10.251.1.2.2.1.2.4.1|66|110162000
1.3.6.1.2.1.10.251.1.2.2.1.2.4.2|66|33029000
1.3.6.1.2.1.10.251.1.2.2.1.3.4.1|66|0
1.3.6.1.2.1.10.251.1.2.2.1.3.4.2|66|0
1.3.6.1.2.1.10.251.1.2.2.1.4.4.1|2|13
1.3.6.1.2.1.10.251.1.2.2.1.4.4.2|2|0
1.3.6.1.2.1.10.251.1.2.2.1.5.4.1|2|340
1.3.6.1.2.1.10.251.1.2.2.1.5.4.2|2|400
1.3.6.1.2.1.10.251.1.2.2.1.6.4.1|2|0
1.3.6.1.2.1.10.251.1.2.2.1.6.4.2|2|0
1.3.6.1.2.1.10.251.1.2.2.1.7.4.1|2|32
1.3.6.1.2.1.10.251.1.2.2.1.7.4.2|2|32
1.3.6.1.2.1.10.251.1.2.2.1.8.4.1|2|16
1.3.6.1.2.1.10.251.1.2.2.1.8.4.2|2|16
1.3.6.1.2.1.10.251.1.2.2.1.9.4.1|2|16
1.3.6.1.2.1.10.251.1.2.2.1.9.4.2|2|16
1.3.6.1.2.1.10.251.1.2.2.1.10.4.1|2|1
1.3.6.1.2.1.10.251.1.2.2.1.10.4.2|2|1
1.3.6.1.2.1.10.251.1.2.2.1.11.4.1|2|32
1.3.6.1.2.1.10.251.1.2.2.1.11.4.2|2|32
1.3.6.1.2.1.10.251.1.2.2.1.12.4.1|2|0
1.3.6.1.2.1.10.251.1.2.2.1.12.4.2|2|0
1.3.6.1.2.1.10.251.1.2.2.1.13.4.1|2|0
1.3.6.1.2.1.10.251.1.2.2.1.13.4.2|2|0
1.3.6.1.2.1.10.251.1.2.2.1.14.4.1|2|1
1.3.6.1.2.1.10.251.1.2.2.1.14.4.2|2|1
1.3.6.1.2.1.11.1.0|65|377
1.3.6.1.2.1.11.2.0|65|377
1.3.6.1.2.1.11.3.0|65|0
1.3.6.1.2.1.11.4.0|65|0
1.3.6.1.2.1.11.5.0|65|0
1.3.6.1.2.1.11.6.0|65|0
1.3.6.1.2.1.11.8.0|65|0
1.3.6.1.2.1.11.9.0|65|0
1.3.6.1.2.1.11.10.0|65|0
1.3.6.1.2.1.11.11.0|65|0
1.3.6.1.2.1.11.12.0|65|0
1.3.6.1.2.1.11.13.0|65|387
1.3.6.1.2.1.11.14.0|65|0
1.3.6.1.2.1.11.15.0|65|0
1.3.6.1.2.1.11.16.0|65|391
1.3.6.1.2.1.11.17.0|65|0
1.3.6.1.2.1.11.18.0|65|0
1.3.6.1.2.1.11.19.0|65|0
1.3.6.1.2.1.11.20.0|65|0
1.3.6.1.2.1.11.21.0|65|0
1.3.6.1.2.1.11.22.0|65|0
1.3.6.1.2.1.11.24.0|65|0
1.3.6.1.2.1.11.25.0|65|0
1.3.6.1.2.1.11.26.0|65|0
1.3.6.1.2.1.11.27.0|65|0
1.3.6.1.2.1.11.28.0|65|401
1.3.6.1.2.1.11.29.0|65|0
1.3.6.1.2.1.11.30.0|2|1
1.3.6.1.2.1.25.2.3.1.0|2|73
1.3.6.1.2.1.25.3.3.1.1.0|2|1
1.3.6.1.2.1.25.3.3.1.2.0|2|3
1.3.6.1.4.1.7367.3.1.0|4|Vigor165
1.3.6.1.4.1.7367.3.2.0|4|r13107_788_b947ce1af_beta V421_165166_423FW
1.3.6.1.4.1.7367.3.3.0|4|Jul 25 2022 15:55:31
1.3.6.1.4.1.7367.3.4.0|4|VDSL 08-0B-00-0F-00-07
1.3.6.1.4.1.7367.3.5.0|4|Netherlands
1.3.6.1.4.1.7367.3.7.0|2|73
1.3.6.1.4.1.7367.3.8.0|4|001DAA943004
1.3.6.1.6.3.15.1.2.1.0|2|1