The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Device::ZyXEL::IES::OID;

use SNMP;
use Capture::Tiny qw/capture/;

=head1 NAME

Device::ZyXEL::IES::OID - Translate names to OIDs for all the OID's used by Device::ZyXEL::IES::*

=head1 VERSION

Version 0.01

=cut

our $VERSION = '0.01';

=head1 SYNOPSIS

Just a method to translate a name to an OID.
 
my $n = Device::ZyXEL::IES::OID->new;

my $oid = $n->translate("ZYXEL-IES5000-MIB::macFilterPortMacCount");
  
=cut

# private map to use when MIB file lookup fails for any reason.
my %oid_map = (
  'IF-MIB::ifOperStatus' => '.1.3.6.1.2.1.2.2.1.8',
  'IF-MIB::ifAdminStatus' => '.1.3.6.1.2.1.2.2.1.7',
  'IF-MIB::ifHCInOctets' => '.1.3.6.1.2.1.31.1.1.1.6',
  'IF-MIB::ifHCOutOctets' => '.1.3.6.1.2.1.31.1.1.1.10',
  'IF-MIB::ifLastChange' => '.1.3.6.1.2.1.2.2.1.9',

  'DISMAN-EVENT-MIB::sysUpTimeInstance' => '.1.3.6.1.2.1.1.3.0',
  'SNMPv2-MIB::sysDescr.0' => '.1.3.6.1.2.1.1.1.0',

  'ADSL-LINE-MIB::adslLineConfProfile' => '.1.3.6.1.2.1.10.94.1.1.1.1.4',
  'ADSL-LINE-MIB::adslAtucCurrAttainableRate' => '.1.3.6.1.2.1.10.94.1.1.2.1.8',
  'ADSL-LINE-MIB::adslAturCurrAttainableRate' => '.1.3.6.1.2.1.10.94.1.1.3.1.8',
  'ADSL-LINE-MIB::adslAtucChanCurrTxRate' => '.1.3.6.1.2.1.10.94.1.1.4.1.2',
  'ADSL-LINE-MIB::adslAturChanCurrTxRate' => '.1.3.6.1.2.1.10.94.1.1.5.1.2',
  'ADSL-LINE-MIB::adslAturCurrSnrMgn' => '.1.3.6.1.2.1.10.94.1.1.3.1.4',
  'ADSL-LINE-MIB::adslAtucCurrSnrMgn' => '.1.3.6.1.2.1.10.94.1.1.2.1.4',
  'ADSL-LINE-MIB::adslAturCurrAtn' => '.1.3.6.1.2.1.10.94.1.1.3.1.5',
  'ADSL-LINE-MIB::adslAtucCurrAtn' => '.1.3.6.1.2.1.10.94.1.1.2.1.5',
  'ADSL-LINE-MIB::adslAtucChanIntervalUncorrectBlks' => '.1.3.6.1.2.1.10.94.1.1.12.1.5',
  'ADSL-LINE-MIB::adslAturChanIntervalUncorrectBlks' => '.1.3.6.1.2.1.10.94.1.1.13.1.5',
  'ADSL-LINE-MIB::adslAtucIntervalESs' => '.1.3.6.1.2.1.10.94.1.1.8.1.6',
  'ADSL-LINE-MIB::adslAturIntervalESs' => '.1.3.6.1.2.1.10.94.1.1.9.1.5',

  'VDSL-LINE-MIB::vdslLineConfProfile' => '.1.3.6.1.2.1.10.97.1.1.1.1.3',
  'VDSL-LINE-MIB::vdslPhysCurrAttainableRate' => '.1.3.6.1.2.1.10.97.1.1.2.1.9',
  'VDSL-LINE-MIB::vdslPhysCurrLineRate' => '.1.3.6.1.2.1.10.97.1.1.2.1.10',
  'VDSL-LINE-MIB::vdslPhysCurrSnrMgn' => '.1.3.6.1.2.1.10.97.1.1.2.1.5',
  'VDSL-LINE-MIB::vdslPhysCurrAtn' => '.1.3.6.1.2.1.10.97.1.1.2.1.6',
  'VDSL-LINE-MIB::vdslChanIntervalBadBlks' => '.1.3.6.1.2.1.10.97.1.1.8.1.3', # <port>.1.x => Vtuc, <port>.2.x => Vtur
  'VDSL-LINE-MIB::vdslPerfIntervalESs' => '.1.3.6.1.2.1.10.97.1.1.5.1.6', # <port>.1.x => Vtuc, <port>.2.x => Vtur

  'HDSL2-SHDSL-LINE-MIB::hdsl2ShdslSpanConfProfile' => '.1.3.6.1.2.1.10.48.1.1.1.2',
  'HDSL2-SHDSL-LINE-MIB::hdsl2ShdslStatusActualLineRate' => '.1.3.6.1.2.1.10.48.1.2.1.3',
  'HDSL2-SHDSL-LINE-MIB::hdsl2ShdslEndpointCurrSnrMgn' => '.1.3.6.1.2.1.10.48.1.5.1.2',
  'HDSL2-SHDSL-LINE-MIB::hdsl2ShdslEndpointCurrAtn' => '.1.3.6.1.2.1.10.48.1.5.1.1',
  'ZYXEL-IES5000-MIB::seltTarget.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.1.0',
  'ZYXEL-IES5000-MIB::seltOps.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.2.0',
  'ZYXEL-IES5000-MIB::seltStatus.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.3.0',
  'ZYXEL-IES5000-MIB::seltCableType.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.4.0',
  'ZYXEL-IES5000-MIB::seltLoopEstimateLengthFt.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.5.0',
  'ZYXEL-IES5000-MIB::seltLoopEstimateLengthMeter.0' => '.1.3.6.1.4.1.890.1.5.13.5.4.3.6.0',
  'ZYXEL-IES5000-MIB::macFilterPortMacCount' => '.1.3.6.1.4.1.890.1.5.13.5.1.3.1.1.2',
  'ZYXEL-IES5000-MIB::dhcpDiscovery' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.2.1.1',
  'ZYXEL-IES5000-MIB::dhcpOffer' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.2.1.2',
  'ZYXEL-IES5000-MIB::dhcpRequest' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.2.1.3',
  'ZYXEL-IES5000-MIB::dhcpAck' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.2.1.4',
  'ZYXEL-IES5000-MIB::dhcpAckBySnoopFull' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.2.1.5',
  'ZYXEL-IES5000-MIB::subrPortName' => '.1.3.6.1.4.1.890.1.5.13.5.8.1.1.1',
  'ZYXEL-IES5000-MIB::slotModuleFWVersion.0' => '.1.3.6.1.4.1.890.1.5.13.5.6.3.1.4.0',
  'ZYXEL-IES5000-MIB::slotModuleDescr.0' => '.1.3.6.1.4.1.890.1.5.13.5.6.3.1.3.0',
  'ZYXEL-IES5000-MIB::dhcpSnoopMac' => '.1.3.6.1.4.1.890.1.5.13.5.13.1.1.1.2',

  'ZYXEL-IES5000-MIB::adslLineStatsAtucQln1' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.4',
  'ZYXEL-IES5000-MIB::adslLineStatsAtucQln2' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.5',
  'ZYXEL-IES5000-MIB::adslLineStatusUpTime' => '.1.3.6.1.4.1.890.1.5.13.5.8.2.4.1.2',
  'ZYXEL-IES5000-MIB::adslLineConfAtucInp' => '.1.3.6.1.4.1.890.1.5.13.5.8.2.1.1.15',
  'ZYXEL-IES5000-MIB::adslLineConfAturInp' => '.1.3.6.1.4.1.890.1.5.13.5.8.2.1.1.14',
  'ZYXEL-IES5000-MIB::adslLineConfAnnexM' => '.1.3.6.1.4.1.890.1.5.13.5.8.2.1.1.3',
  'ZYXEL-IES5000-MIB::adslLineConfAnnexL' => '.1.3.6.1.4.1.890.1.5.13.5.8.2.1.1.2',
  'ZYXEL-IES5000-MIB::adslLineStatsAturHlog' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.3',
  'ZYXEL-IES5000-MIB::adslLineStatsAtucHlog1' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.1',
  'ZYXEL-IES5000-MIB::adslLineStatsAtucHlog2' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.2',
  'ZYXEL-IES5000-MIB::adslLineStatsAturQln' => '.1.3.6.1.4.1.890.1.5.13.5.13.4.3.1.6',

  'ZYXEL-IES5000-MIB::vdslLineStatsVtucSnr' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.29',
  'ZYXEL-IES5000-MIB::vdslLineStatsVtucSnrGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.40',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturSnr' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.30',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturSnrGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.41',
  'ZYXEL-IES5000-MIB::vdslLineConfVturInp' => '.1.3.6.1.4.1.890.1.5.13.5.8.10.1.1.6',
  'ZYXEL-IES5000-MIB::vdslLineConfVtucInp' => '.1.3.6.1.4.1.890.1.5.13.5.8.10.1.1.7',
  'ZYXEL-IES5000-MIB::vdslLineStatsProtocol' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.33',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturHlog' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.26',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturHlogGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.37',
  'ZYXEL-IES5000-MIB::vdslLineStatsVtucHlog' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.25',
  'ZYXEL-IES5000-MIB::vdslLineStatsVtucHlogGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.36',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturQln' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.28',
  'ZYXEL-IES5000-MIB::vdslLineStatsVturQlnGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.39',
  'ZYXEL-IES5000-MIB::vdslLineStatsVtucQln' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.27',
  'ZYXEL-IES5000-MIB::vdslLineStatsVtucQlnGroupSize' => '.1.3.6.1.4.1.890.1.5.13.5.13.8.2.1.38',

  'ZYXEL-IES5000-MIB::shdslLineStatusWirePair' => '.1.3.6.1.4.1.890.1.5.13.5.8.3.3.1.1',
);

# assume mibs are installed and loaded.
our $mib_loaded = 1;

=head2 new
 
 Just calls SNMP::initMib() to read the mib files of the system.

=cut
sub new {
  my $class = shift;
  SNMP::initMib();
  return bless {}, $class;
}


sub translate {
  my ($self,$name,$postfix) = @_;
  my $oid;
  if ( $mib_loaded ) {
    my ($stdout,$stderr) = capture {
      $oid = SNMP::translateObj($name);
    };
    $mib_loaded = 0 if $stderr ne '';
  }
  if ( !defined( $oid ) && defined( $oid_map{$name} ) ) {
    $oid = $oid_map{$name};
  }
  if ( defined( $oid ) && defined( $postfix ) && $postfix ne '' ) {
    $oid = $oid . '.' . $postfix;
  }
  return $oid;
}

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Device::ZyXEL::IES::OID

		  You can also look for information at:

=over 4

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Device-ZyXEL-IES>

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Device-ZyXEL-IES>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/Device-ZyXEL-IES>

=item * Search CPAN

L<http://search.cpan.org/dist/Device-ZyXEL-IES/>

=back


=head1 ACKNOWLEDGEMENTS

Fullrate (http://www.fullrate.dk) 

  Thanks for allowing me to be introduced to the "wonderful" device ;)
  And thanks for donating some of my work time to create this module and 
  sharing it with the world.
			
=head1 COPYRIGHT & LICENSE
			
  Copyright 2012 Jesper Dalberg,   all rights reserved.
			
  This program is free software; you can redistribute it and/or modify it
  under the same terms as Perl itself.

=cut

1;