summaryrefslogtreecommitdiff
path: root/torrus/perllib/Torrus/DevDiscover/AxxessIT.pm
diff options
context:
space:
mode:
Diffstat (limited to 'torrus/perllib/Torrus/DevDiscover/AxxessIT.pm')
-rw-r--r--torrus/perllib/Torrus/DevDiscover/AxxessIT.pm351
1 files changed, 351 insertions, 0 deletions
diff --git a/torrus/perllib/Torrus/DevDiscover/AxxessIT.pm b/torrus/perllib/Torrus/DevDiscover/AxxessIT.pm
new file mode 100644
index 000000000..12dc05957
--- /dev/null
+++ b/torrus/perllib/Torrus/DevDiscover/AxxessIT.pm
@@ -0,0 +1,351 @@
+# Copyright (C) 2002 Stanislav Sinyagin
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+# $Id: AxxessIT.pm,v 1.1 2010-12-27 00:03:55 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# AxxessIT Ethernet over SDH switches, also known as
+# Cisco ONS 15305 and 15302 (by January 2005)
+# Probably later Cisco will update the software and it will need
+# another Torrus discovery module.
+# Company website: http://www.axxessit.no/
+
+# Tested with:
+#
+# Cisco ONS 15305 software release 1.1.1
+# Cisco ONS 15302
+
+
+
+
+package Torrus::DevDiscover::AxxessIT;
+
+use strict;
+use Torrus::Log;
+
+
+$Torrus::DevDiscover::registry{'AxxessIT'} = {
+ 'sequence' => 500,
+ 'checkdevtype' => \&checkdevtype,
+ 'discover' => \&discover,
+ 'buildConfig' => \&buildConfig
+ };
+
+
+our %oiddef =
+ (
+ # AXXEDGE-MIB
+ 'axxEdgeTypes' => '1.3.6.1.4.1.7546.1.4.1.1',
+
+ 'axxEdgeWanPortMapTable' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.2',
+ 'axxEdgeWanPortMapSlotNumber' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.2.1.1',
+ 'axxEdgeWanPortMapPortNumber' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.2.1.2',
+
+ 'axxEdgeWanXPortMapTable' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.11',
+ 'axxEdgeWanXPortMapSlotNumber' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.11.1.1',
+ 'axxEdgeWanXPortMapPortNumber' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.11.1.2',
+
+ 'axxEdgeWanPortDescription' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.3.1.4',
+ 'axxEdgeWanXPortDescription' => '1.3.6.1.4.1.7546.1.4.1.2.5.1.12.1.4',
+
+ 'axxEdgeEthPortMapTable' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.2',
+ 'axxEdgeEthPortMapSlotNumber' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.2.1.1',
+ 'axxEdgeEthPortMapPortNumber' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.2.1.2',
+
+ 'axxEdgeEthLanXPortMapTable' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.4',
+ 'axxEdgeEthLanXPortMapSlotNumber' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.4.1.1',
+ 'axxEdgeEthLanXPortMapPortNumber' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.4.1.2',
+
+ 'axxEdgeEthPortDescription' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.3.1.4',
+ 'axxEdgeEthLanXPortDescription' => '1.3.6.1.4.1.7546.1.4.1.2.6.1.5.1.4',
+
+ 'axxEdgeDcnManagementPortMode' => '1.3.6.1.4.1.7546.1.4.1.2.3.2.1.0',
+ 'axxEdgeDcnManagementPortIfIndex' => '1.3.6.1.4.1.7546.1.4.1.2.3.2.2.0',
+
+ # AXX155E-MIB (ONS 15302)
+ 'axx155EDevices' => '1.3.6.1.4.1.7546.1.5.1.1',
+
+ 'axx155EEthPortTable' => '1.3.6.1.4.1.7546.1.5.1.2.6.1.2',
+ 'axx155EEthPortIfIndex' => '1.3.6.1.4.1.7546.1.5.1.2.6.1.2.1.2',
+ 'axx155EEthPortName' => '1.3.6.1.4.1.7546.1.5.1.2.6.1.2.1.3',
+ 'axx155EEthPortType' => '1.3.6.1.4.1.7546.1.5.1.2.6.1.2.1.4',
+
+ 'axx155EDcnManagementPortMode' => '1.3.6.1.4.1.7546.1.5.1.2.2.2.2.0',
+ 'axx155EDcnManagementPortIfIndex' => '1.3.6.1.4.1.7546.1.5.1.2.2.2.3.0'
+ );
+
+
+sub checkdevtype
+{
+ my $dd = shift;
+ my $devdetails = shift;
+
+ my $sysObjID = $devdetails->snmpVar( $dd->oiddef('sysObjectID') );
+ if( index( $sysObjID, $dd->oiddef('axxEdgeTypes') ) == 0 )
+ {
+ $devdetails->setCap('axxEdge');
+ }
+ elsif( index( $sysObjID, $dd->oiddef('axx155EDevices') ) == 0 )
+ {
+ $devdetails->setCap('axx155E');
+ }
+ else
+ {
+ return 0;
+ }
+
+ $devdetails->setCap('interfaceIndexingManaged');
+
+ return 1;
+}
+
+
+sub discover
+{
+ my $dd = shift;
+ my $devdetails = shift;
+
+ my $data = $devdetails->data();
+ my $session = $dd->session();
+
+ $data->{'param'}{'ifindex-map'} = '$IFIDX_IFINDEX';
+
+ $data->{'nameref'}{'ifNick'} = 'axxInterfaceNick';
+ $data->{'nameref'}{'ifSubtreeName'} = 'axxInterfaceNick';
+ $data->{'nameref'}{'ifComment'} = 'axxInterfaceComment';
+ $data->{'nameref'}{'ifReferenceName'} = 'axxInterfaceHumanName';
+
+ if( $devdetails->hasCap('axxEdge') )
+ {
+ my %map =
+ ( 'Wan' => {
+ 'MapTable' => 'axxEdgeWanPortMapTable',
+ 'MapSlotNumber' => 'axxEdgeWanPortMapSlotNumber',
+ 'MapPortNumber' => 'axxEdgeWanPortMapPortNumber',
+ 'Description' => 'axxEdgeWanPortDescription',
+ 'ifNick' => 'Wan_%d_%d',
+ 'ifHuman' => 'WAN %d/%d',
+ 'ifComment' => 'WAN slot %d, port %d' },
+
+ 'WanX' => {
+ 'MapTable' => 'axxEdgeWanXPortMapTable',
+ 'MapSlotNumber' => 'axxEdgeWanXPortMapSlotNumber',
+ 'MapPortNumber' => 'axxEdgeWanXPortMapPortNumber',
+ 'Description' => 'axxEdgeWanXPortDescription',
+ 'ifNick' => 'WanX_%d_%d',
+ 'ifHuman' => 'WANX %d/%d',
+ 'ifComment' => 'WANX slot %d, port %d' },
+
+ 'Eth' => {
+ 'MapTable' => 'axxEdgeEthPortMapTable',
+ 'MapSlotNumber' => 'axxEdgeEthPortMapSlotNumber',
+ 'MapPortNumber' => 'axxEdgeEthPortMapPortNumber',
+ 'Description' => 'axxEdgeEthPortDescription',
+ 'ifNick' => 'Eth_%d_%d',
+ 'ifHuman' => 'Ethernet %d/%d',
+ 'ifComment' => 'Ethernet interface: slot %d, port %d' },
+
+ 'EthLanX' => {
+ 'MapTable' => 'axxEdgeEthLanXPortMapTable',
+ 'MapSlotNumber' => 'axxEdgeEthLanXPortMapSlotNumber',
+ 'MapPortNumber' => 'axxEdgeEthLanXPortMapPortNumber',
+ 'Description' => 'axxEdgeEthLanXPortDescription',
+ 'ifNick' => 'EthLanX_%d_%d',
+ 'ifHuman' => 'Ethernet LANX %d/%d',
+ 'ifComment' => 'Ethernet LANX interface: slot %d, port %d' }
+ );
+
+ foreach my $type ( keys %map )
+ {
+ my $mapTable =
+ $session->get_table( -baseoid =>
+ $dd->oiddef($map{$type}{'MapTable'}) );
+ $devdetails->storeSnmpVars( $mapTable );
+
+ my $descTable =
+ $session->get_table( -baseoid =>
+ $dd->oiddef($map{$type}{'Description'}) );
+ $devdetails->storeSnmpVars( $descTable );
+
+ foreach my $ifIndex
+ ( $devdetails->
+ getSnmpIndices($dd->oiddef($map{$type}{'MapSlotNumber'})) )
+ {
+ my $interface = $data->{'interfaces'}{$ifIndex};
+ next if not defined( $interface );
+
+ my $slot =
+ $devdetails->snmpVar
+ ($dd->oiddef($map{$type}{'MapSlotNumber'}) .'.'. $ifIndex);
+ my $port =
+ $devdetails->snmpVar
+ ($dd->oiddef($map{$type}{'MapPortNumber'}) .'.'. $ifIndex);
+
+ my $desc =
+ $devdetails->snmpVar
+ ($dd->oiddef($map{$type}{'Description'}) .'.'.
+ $slot .'.'. $port);
+
+ $interface->{'param'}{'interface-index'} = $ifIndex;
+
+ $interface->{'axxInterfaceNick'} =
+ sprintf( $map{$type}{'ifNick'}, $slot, $port );
+
+ $interface->{'axxInterfaceHumanName'} =
+ sprintf( $map{$type}{'ifHuman'}, $slot, $port );
+
+ $interface->{'axxInterfaceComment'} =
+ sprintf( $map{$type}{'ifComment'}, $slot, $port );
+ if( length( $desc ) > 0 )
+ {
+ $interface->{'axxInterfaceComment'} .= ' (' . $desc . ')';
+ }
+ }
+ }
+
+ # Management interface
+ {
+ my $result = $dd->retrieveSnmpOIDs
+ ( 'axxEdgeDcnManagementPortMode',
+ 'axxEdgeDcnManagementPortIfIndex');
+
+ if( defined( $result ) )
+ {
+ if( $result->{'axxEdgeDcnManagementPortMode'} != 2 )
+ {
+ Warning('Non-IP mode of Management port is not supported');
+ }
+ else
+ {
+ my $ifIndex = $result->{'axxEdgeDcnManagementPortIfIndex'};
+
+ my $interface = $data->{'interfaces'}{$ifIndex};
+
+ $interface->{'param'}{'interface-index'} = $ifIndex;
+
+ $interface->{'axxInterfaceNick'} = 'Management';
+
+ $interface->{'axxInterfaceHumanName'} = 'Management';
+
+ $interface->{'axxInterfaceComment'} = 'Management port';
+ }
+ }
+ }
+ }
+
+ if( $devdetails->hasCap('axx155E') )
+ {
+ my $ethTable =
+ $session->get_table( -baseoid =>
+ $dd->oiddef('axx155EEthPortTable') );
+ $devdetails->storeSnmpVars( $ethTable );
+
+ foreach my $port
+ ( $devdetails->
+ getSnmpIndices($dd->oiddef('axx155EEthPortIfIndex')) )
+ {
+ my $ifIndex =
+ $devdetails->snmpVar
+ ($dd->oiddef('axx155EEthPortIfIndex') .'.'. $port);
+
+ my $interface = $data->{'interfaces'}{$ifIndex};
+ next if not defined( $interface );
+
+ my $portName =
+ $devdetails->snmpVar
+ ($dd->oiddef('axx155EEthPortName') .'.'. $port);
+
+ my $portType =
+ $devdetails->snmpVar
+ ($dd->oiddef('axx155EEthPortType') .'.'. $port);
+
+ $interface->{'param'}{'interface-index'} = $ifIndex;
+
+ my $type = $portType == 1 ? 'Eth':'Wan';
+
+ $interface->{'axxInterfaceNick'} =
+ sprintf( '%s_%d', $type, $port );
+
+ $interface->{'axxInterfaceHumanName'} =
+ sprintf( '%s %d', $type, $port );
+
+ $interface->{'axxInterfaceComment'} = '';
+ if( length( $portName ) > 0 )
+ {
+ $interface->{'axxInterfaceComment'} = $portName;
+ }
+ }
+
+ # Management interface
+ {
+ my $result = $dd->retrieveSnmpOIDs
+ ( 'axx155EDcnManagementPortMode',
+ 'axx155EDcnManagementPortIfIndex');
+
+ if( defined( $result ) )
+ {
+ if( $result->{'axx155EDcnManagementPortMode'} != 2 )
+ {
+ Warning('Non-IP mode of Management port is not supported');
+ }
+ else
+ {
+ my $ifIndex = $result->{'axx155EDcnManagementPortIfIndex'};
+
+ my $interface = $data->{'interfaces'}{$ifIndex};
+
+ $interface->{'param'}{'interface-index'} = $ifIndex;
+
+ $interface->{'axxInterfaceNick'} = 'Management';
+
+ $interface->{'axxInterfaceHumanName'} = 'Management';
+
+ $interface->{'axxInterfaceComment'} = 'Management port';
+ }
+ }
+ }
+ }
+
+ foreach my $ifIndex ( keys %{$data->{'interfaces'}} )
+ {
+ if( not defined( $data->{'interfaces'}{$ifIndex}->
+ {'param'}{'interface-index'} ) )
+ {
+ delete $data->{'interfaces'}{$ifIndex};
+ }
+ }
+
+ return 1;
+}
+
+
+sub buildConfig
+{
+ my $devdetails = shift;
+ my $cb = shift;
+ my $devNode = shift;
+
+}
+
+
+1;
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End: