source: ocsinventory-agent/trunk/fuentes/lib/Ocsinventory/Agent/Modules/Snmp/Entity_Mib.pm @ 468

Last change on this file since 468 was 468, checked in by mabarracus, 4 years ago

Copyt trusty code

File size: 4.3 KB
Line 
1###
2# SNMP: OID: 47 SYSTEM: Entity_Mib
3###
4# Version 0.5
5###
6package Ocsinventory::Agent::Modules::Snmp::Entity_Mib;
7
8use strict;
9use warnings;
10
11sub snmp_run {
12   my ($session , $snmp )= @_;
13   my $logger=$snmp->{logger};
14   my $common=$snmp->{common};
15
16   $logger->debug("Running Entity MIB module");
17
18   # OID
19   my $snmp_entPhysicalClass="1.3.6.1.2.1.47.1.1.1.1.5";
20   my $translation_entPhysicalClass={
21        #1 => "other",
22        #2 => "unknown",
23        3 => "chassis",
24        #4 => "backplane",
25        #5 => "container",
26        6 => "powerSupply",
27        7 => "fan",
28        #8 => "sensor",
29        9 => "module",
30        #10 => "port",
31        #11 => "stack",
32        #12 => "cpu",
33        };
34
35   my $result_snmp;
36   my $result;
37   my $nbr_switch=0;
38
39   # We are looking for physical elements
40   $result_snmp=$session->get_entries(-columns => [$snmp_entPhysicalClass]);
41   foreach my $result ( keys  %{$result_snmp} ) {
42      if ( $result =~ /1\.3\.6\.1\.2\.1\.47\.1\.1\.1\.1\.5\.(\S+)/ ) {
43         my $ref=$1;
44         my $PhysicalClass=$result_snmp->{$snmp_entPhysicalClass.".".$ref};
45
46         my $info = {};
47         if ( $PhysicalClass =~ /^[3,6,7,9,11]$/ ) {
48            info_element($info,$session,$ref,$logger);
49            $info->{TYPE}=$translation_entPhysicalClass->{$PhysicalClass};
50            if ( $PhysicalClass == 3 ) {
51                # We have a switch
52                $nbr_switch++;
53                $common->addSnmpSwitch( $info ); 
54                # Infos for a switch: DESCRIPTION, REFERENCE, REVISION, FIRMWARE, SERIALNUMBER, MANUFACTURER, TYPE
55            } elsif ( $PhysicalClass == 6 ) {
56                # Infos for an alimentation DESCRIPTION, REFERENCE, REVISION, SERIALNUMBER, MANUFACTURER, TYPE
57                $common->addSnmpPowerSupply( $info );
58            } elsif ( $PhysicalClass == 7 ) {
59                # Infos for a Fan: DESCRIPTION, REFERENCE, REVISION, SERIALNUMBER, MANUFACTURER, TYPE
60                $common->addSnmpFan( $info );
61            } elsif ( $PhysicalClass == 9 && defined ($info->{SERIALNUMBER}) ) {
62                if ( ! ($info->{DESCRIPTION} =~ /[CF]PU/ )) {
63                   # Infor for a card: DESCRIPTION, REFERENCE,  REVISION, FIRMWARE, SOFTWARE, SERIALNUMBER, MANUFACTURER, TYPE
64                   $common->addSnmpCard( $info );
65                }
66            }
67         }
68      }
69   } 
70   # We have scaned all equipment, we know now if we have a switch or a stack of switch
71   if ( $nbr_switch == 1 ) {
72      $common->setSnmpSwitchInfos({TYPE=>"Switch"});
73   }
74   elsif ( $nbr_switch > 1 ) {
75      $common->setSnmpSwitchInfos({TYPE=>"Switchs Stack"});
76   }
77}
78
79
80sub info_element()
81{
82   my ($info ,$session, $ref, $logger)=@_;
83
84   my $snmp_info="1.3.6.1.2.1.47.1.1.1.1.2.";
85   my $snmp_ref="1.3.6.1.2.1.47.1.1.1.1.7.";
86   my $snmp_hardware="1.3.6.1.2.1.47.1.1.1.1.8.";
87   my $snmp_firmware="1.3.6.1.2.1.47.1.1.1.1.9.";
88   my $snmp_software="1.3.6.1.2.1.47.1.1.1.1.10.";
89   my $snmp_serial="1.3.6.1.2.1.47.1.1.1.1.11.";
90   my $snmp_entPhysicalMfgName="1.3.6.1.2.1.47.1.1.1.1.12.";
91   #my $snmp_entPhysicalModelName="1.3.6.1.2.1.47.1.1.1.1.13.";
92
93   my $result;
94   # We have a good element
95   $result=$session->get_request(-varbindlist => [$snmp_info.$ref]);
96   if ( defined( $result) ) {
97      $info->{DESCRIPTION} = $result->{$snmp_info.$ref};
98   }
99   $result=$session->get_request(-varbindlist => [$snmp_ref.$ref]);
100   if ( defined( $result ) ) {
101      $info->{REFERENCE} = $result->{$snmp_ref.$ref};
102   }
103   $result=$session->get_request(-varbindlist => [$snmp_hardware.$ref]);
104   if ( defined( $result ) ) {
105      $info->{REVISION} = $result->{$snmp_hardware.$ref};
106   }
107   $result=$session->get_request(-varbindlist => [$snmp_serial.$ref]);
108   if ( defined( $result ) ) {
109      $info->{SERIALNUMBER} = $result->{$snmp_serial.$ref};
110   }
111   $result=$session->get_request(-varbindlist => [$snmp_firmware.$ref]);
112   if ( defined( $result) ) {
113      $info->{FIRMWARE} = $result->{$snmp_firmware.$ref};
114   }
115   $result=$session->get_request(-varbindlist => [$snmp_software.$ref]);
116   if ( defined( $result ) ) {
117      $info->{SOFTWARE} = $result->{$snmp_software.$ref};
118   }
119   $result=$session->get_request(-varbindlist => [$snmp_entPhysicalMfgName.$ref]);
120   if ( defined( $result ) ) {
121      $info->{MANUFACTURER} = $result->{$snmp_entPhysicalMfgName.$ref};
122   }
123   #$result=$session->get_request(-varbindlist => [$snmp_entPhysicalModelName.$ref]);
124   #if ( defined( $result ) ) {
125      #$info->{TYPE} = $result->{$snmp_entPhysicalModelName.$ref};
126   #}
127}
1281;
Note: See TracBrowser for help on using the repository browser.