Add a netgear class, based on Zoltan Erszenyi's work with the
GSM 7224 and my brief encounter with an FSM 726.
This commit is contained in:
		
							
								
								
									
										183
									
								
								Info/Layer2/Netgear.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								Info/Layer2/Netgear.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,183 @@ | ||||
| # SNMP::Info::Layer2::Netgear | ||||
| # Bill Fenner and Zoltan Erszenyi | ||||
| # | ||||
| #  | ||||
| # 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::Layer2::Netgear; | ||||
| # $Id$ | ||||
|  | ||||
| use strict; | ||||
|  | ||||
| use Exporter; | ||||
| use SNMP::Info::Layer2; | ||||
|  | ||||
|  | ||||
| use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE $INIT/; | ||||
|  | ||||
| $VERSION = '1.04'; | ||||
| @SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::Layer2 Exporter/; | ||||
| @SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//; | ||||
|  | ||||
| %MIBS    = ( | ||||
|             %SNMP::Info::Layer2::MIBS, | ||||
|            ); | ||||
|  | ||||
| %GLOBALS = ( | ||||
|             %SNMP::Info::Layer2::GLOBALS, | ||||
|            ); | ||||
|  | ||||
| %FUNCS   = ( | ||||
| 	    %SNMP::Info::Layer2::FUNCS, | ||||
|            ); | ||||
|  | ||||
| %MUNGE   = ( | ||||
| 	    %SNMP::Info::Layer2::MUNGE, | ||||
|            ); | ||||
|  | ||||
| sub vendor { | ||||
|     return 'netgear'; | ||||
| } | ||||
|  | ||||
| sub os { | ||||
|     return 'netgear'; | ||||
| } | ||||
|  | ||||
| # Wish the OID-based method worked, but netgear scatters | ||||
| # the sysObjectID values across all the device MIBs, and | ||||
| # makes the device MIBs state secrets. | ||||
| # They seem to set sysDescr to the model number, though, | ||||
| # so we'll use that. | ||||
| sub model { | ||||
|     my $netgear = shift; | ||||
|     return $netgear->description(); | ||||
| } | ||||
|  | ||||
| # | ||||
| # This is model-dependent.  Some netgear brand devices don't implement | ||||
| # the bridge MIB forwarding table, so we use the Q-BRIDGE-MIB forwarding | ||||
| # table.  Fall back to the orig functions if the qb versions don't | ||||
| # return anything. | ||||
| sub fw_mac { | ||||
|     my $netgear = shift; | ||||
|     my $ret = $netgear->qb_fw_mac(); | ||||
|     $ret = $netgear->orig_fw_mac() if (!defined($ret)); | ||||
|     return $ret; | ||||
| } | ||||
|  | ||||
| sub fw_port { | ||||
|     my $netgear = shift; | ||||
|     my $ret = $netgear->qb_fw_port(); | ||||
|     $ret = $netgear->orig_fw_port() if (!defined($ret)); | ||||
|     return $ret; | ||||
| } | ||||
|  | ||||
| 1; | ||||
|    | ||||
| __END__ | ||||
|  | ||||
| =head1 NAME | ||||
|  | ||||
| SNMP::Info::Layer2::Netgear - SNMP Interface to Netgear switches | ||||
|  | ||||
| =head1 AUTHOR | ||||
|  | ||||
| Bill Fenner and Zoltan Erszenyi | ||||
|  | ||||
| =head1 SYNOPSIS | ||||
|  | ||||
|  # Let SNMP::Info determine the correct subclass for you.  | ||||
|  my $netgear = new SNMP::Info( | ||||
|                           AutoSpecify => 1, | ||||
|                           Debug       => 1, | ||||
|                           # These arguments are passed directly on to SNMP::Session | ||||
|                           DestHost    => 'myswitch', | ||||
|                           Community   => 'public', | ||||
|                           Version     => 2 | ||||
|                         )  | ||||
|     or die "Can't connect to DestHost.\n"; | ||||
|  | ||||
|  my $class      = $netgear->class(); | ||||
|  print "SNMP::Info determined this device to fall under subclass : $class\n"; | ||||
|  | ||||
| =head1 DESCRIPTION | ||||
|  | ||||
| Provides abstraction to the configuration information obtainable from a  | ||||
| Netgear device through SNMP. See inherited classes' documentation for  | ||||
| inherited methods. | ||||
|  | ||||
| =head2 Inherited Classes | ||||
|  | ||||
| =over | ||||
|  | ||||
| =item SNMP::Info::Layer2 | ||||
|  | ||||
| =back | ||||
|  | ||||
| =head2 Required MIBs | ||||
|  | ||||
| =over | ||||
|  | ||||
| =item Inherited Classes' MIBs | ||||
|  | ||||
| MIBs listed in L<SNMP::Info::Layer2/"Required MIBs"> and its inherited classes. | ||||
|  | ||||
| =back | ||||
|  | ||||
| =head1 GLOBALS | ||||
|  | ||||
| These are methods that return scalar value from SNMP | ||||
|  | ||||
| =head2 Overrides | ||||
|  | ||||
| =over | ||||
|  | ||||
| =item $netgear->vendor() | ||||
|  | ||||
| Returns 'netgear' | ||||
|  | ||||
| =item $netgear->os() | ||||
|  | ||||
| Returns 'netgear'  | ||||
|  | ||||
| =item $netgear->model() | ||||
|  | ||||
| Returns description() | ||||
|  | ||||
| =back | ||||
|  | ||||
| =head2 Global Methods imported from SNMP::Info::Layer2 | ||||
|  | ||||
| See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details. | ||||
|  | ||||
| =head1 TABLE METHODS | ||||
|  | ||||
| These are methods that return tables of information in the form of | ||||
| a reference to a hash. | ||||
|  | ||||
| =head2 Table Methods imported from SNMP::Info::Layer2 | ||||
|  | ||||
| See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details. | ||||
|  | ||||
| =cut | ||||
		Reference in New Issue
	
	Block a user
	 Bill Fenner
					Bill Fenner