From a97c48546c7f6b5a595c385056c16e78a01e2b93 Mon Sep 17 00:00:00 2001 From: pyro3d Date: Tue, 15 Oct 2019 10:28:32 -0700 Subject: [PATCH] Support for DOCSIS Cable Modems (#368) --- MANIFEST | 1 + lib/SNMP/Info.pm | 11 ++++ lib/SNMP/Info/DocsisCM.pm | 126 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 lib/SNMP/Info/DocsisCM.pm diff --git a/MANIFEST b/MANIFEST index bdf711e3..df6a701e 100644 --- a/MANIFEST +++ b/MANIFEST @@ -26,6 +26,7 @@ lib/SNMP/Info/CiscoStack.pm lib/SNMP/Info/CiscoStats.pm lib/SNMP/Info/CiscoStpExtensions.pm lib/SNMP/Info/CiscoVTP.pm +lib/SNMP/Info/DocsisCM.pm lib/SNMP/Info/DocsisHE.pm lib/SNMP/Info/EDP.pm lib/SNMP/Info/Entity.pm diff --git a/lib/SNMP/Info.pm b/lib/SNMP/Info.pm index 2cbda160..b7312e31 100644 --- a/lib/SNMP/Info.pm +++ b/lib/SNMP/Info.pm @@ -344,6 +344,12 @@ SNMP Interface for DOCSIS CMTS See documentation in L for details. +=item SNMP::Info::DocsisCM + +SNMP Interface for DOCSIS Cable Modems + +See documentation in L for details. + =item SNMP::Info::EDP Extreme Discovery Protocol. F @@ -2046,6 +2052,11 @@ sub device_type { $objtype = 'SNMP::Info::Layer2::ZyXEL_DSLAM' if ( $desc =~ /8-port .DSL Module\(Annex .\)/i ); + # Generic DOCSIS Cable Modem override + # If sysDesc follows the DOCSIS standard + $objtype = 'SNMP::Info::DocsisCM' + if ( $desc =~ /<>/i); + # Generic device classification based upon sysObjectID if ( ( $objtype eq 'SNMP::Info::Layer2' ) and ( defined($id) ) diff --git a/lib/SNMP/Info/DocsisCM.pm b/lib/SNMP/Info/DocsisCM.pm new file mode 100644 index 00000000..eaee46ca --- /dev/null +++ b/lib/SNMP/Info/DocsisCM.pm @@ -0,0 +1,126 @@ +# SNMP::Info::DocsisCM - SNMP Interface to DOCSIS Cable Modems +# +# Copyright (c) 2019 by The Netdisco Developer Team. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the University of California, Santa Cruz nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +package SNMP::Info::DocsisCM; + +use strict; +use warnings; +use Exporter; + +use SNMP::Info::Layer2; + +@SNMP::Info::DocsisCM::ISA = qw/SNMP::Info::Layer2 Exporter/; +@SNMP::Info::DocsisCM::EXPORT_OK = qw//; + +our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE); + +$VERSION = '3.68'; + +%MIBS = ( + %SNMP::Info::Layer2::MIBS +); + +%GLOBALS = ( + %SNMP::Info::Layer2::GLOBALS +); + +%FUNCS = ( + %SNMP::Info::Layer2::FUNCS +); + +%MUNGE = ( + %SNMP::Info::Layer2::MUNGE +); + +sub vendor { + my $cm = shift; + my $descr = $cm->description(); + return $1 if $descr =~ /VENDOR: (.*?);/; +} + +sub model { + my $cm = shift; + my $descr = $cm->description(); + return $1 if $descr =~ /MODEL: (.*?)>>/; +} + +sub os { + return "CM"; +} + +sub os_ver { + my $cm = shift; + my $descr = $cm->description(); + return $1 if $descr =~ /SW_REV: (.*?);/; +} + +1; +__END__ + +=head1 NAME + +SNMP::Info::DocsisCM - SNMP Interface for DOCSIS Cable Modems + +=head1 DESCRIPTION +SNMP::Info::DocsisCM is a subclass of SNMP::Info that provides info +about a given cable modem. Extracts data from the sysDescr, which is +mandated in the DOCSIS specification to match +"HW_REV: ; VENDOR: ; BOOTR: ; SW_REV: ; MODEL: " + +=head2 Inherited Classes + +None. + +=head2 Required MIBs + +None. + +=head1 GLOBALS + +These are methods that return scalar value from SNMP + +=over + +=item $cm->vendor() + +Returns the vendor of the cable modem. + +=item $cm->model() + +Returns the model of the cable modem. + +=item $cm->os() + +Returns 'cm', as the actual os is vendor and model dependent. + +=item $cm->os_ver() + +Returns the version of the software, extracted from the SW_REV field. + +=back +