# -*- perl -*- use strict; package CHIRP::HP::4000m; use lib "/usr/local/cricket/lib"; use snmpUtils; sub GenConfig { my($hostname, $snmp_community, $snmp_port, $options) = @_; $snmp_community = 'public' unless defined($snmp_community); $snmp_port = '161' unless defined($snmp_port); my($snmp) = "$snmp_community\@$hostname:$snmp_port"; my($config) = {}; ################################################# my $interfaces_ref = {}; my $modules_ref = {}; my($ifPort); my($ifMod); ############################ #Get Mapping of Port to Inst # foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.47.1.3.2.1.2")){ my($oid, $value) = split(/:/, $row, 2); my($mapID) = ($oid =~ /([^\.]+)\./); my($ifOID) = ($value =~ /.*\.([^\.]+)/); $ifPort->{$mapID}->{Inst} = $ifOID; } ############################ #Build Module Map List #Get Card ContainedIn info # foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.47.1.1.1.1.4")){ my($oid, $value) = split(/:/, $row, 2); if (defined($ifPort->{$oid})) { $ifPort->{$oid}->{ContainedIn} = $value; $ifMod->{$value}->{mapList} = "" unless defined($ifMod->{$value}->{mapList}); $ifMod->{$value}->{mapList} .= "; " unless ($ifMod->{$value}->{mapList} =~ /^$/); $ifMod->{$value}->{mapList} .= $oid; } } ############################# #Get Descriptions # foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.47.1.1.1.1.2")){ my($oid, $value) = split(/:/, $row, 2); if (defined($ifPort->{$oid})) { $ifPort->{$oid}->{Descr} = $value; } if (defined($ifMod->{$oid})) { $ifMod->{$oid}->{Descr} = $value; } } ############################# #Get Names # foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.47.1.1.1.1.7")){ my($oid, $value) = split(/:/, $row, 2); if (defined($ifPort->{$oid})) { # Pull out "Port " from name (my $trash, $value) = split(/ /, $value, 2); $ifPort->{$oid}->{Name} = $value; } if (defined($ifMod->{$oid})) { # Replace " " with "_" $value = join('_', split(/ /, $value)); $ifMod->{$oid}->{Name} = $value; } } ############################## #Get PortList Names # foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.47.1.1.1.1.4")){ my($oid, $value) = split(/:/, $row, 2); if (defined($ifPort->{$oid})) { $ifMod->{$value}->{portList} = "" unless defined($ifMod->{$value}->{portList}); $ifMod->{$value}->{portList} .= "; " unless ($ifMod->{$value}->{portList} =~ /^$/); $ifMod->{$value}->{portList} .= lc($ifPort->{$oid}->{Name}); $ifMod->{0}->{Descr} = "All Ports on this switch."; $ifMod->{0}->{Name} = "All-Ports"; $ifMod->{0}->{portList} = "" unless defined($ifMod->{0}->{portList}); $ifMod->{0}->{portList} .= "; " unless ($ifMod->{0}->{portList} =~ /^$/); $ifMod->{0}->{portList} .= lc($ifPort->{$oid}->{Name}); } } # OIDs $config->{oid}->{"ifInOctets"} = ".1.3.6.1.2.1.2.2.1.10"; $config->{oid}->{"ifOutOctets"} = ".1.3.6.1.2.1.2.2.1.16"; $config->{oid}->{"AlignmentErrors"} = ".1.3.6.1.2.1.10.7.2.1.2"; $config->{oid}->{"FCSErrors"} = ".1.3.6.1.2.1.10.7.2.1.3"; # DataSources $config->{datasource}->{"--default--"}->{"rrd-ds-type"} = "COUNTER"; $config->{datasource}->{"ifInOctets"}->{"ds-source"} = "snmp://%snmp%/ifInOctets.%inst%"; $config->{datasource}->{"ifOutOctets"}->{"ds-source"} = "snmp://%snmp%/ifOutOctets.%inst%"; $config->{datasource}->{"AlignmentErrors"}->{"ds-source"} = "snmp://%snmp%/AlignmentErrors.%inst%"; $config->{datasource}->{"AlignmentErrors"}->{"desc"} = '"A count of frames received on a particular interface that are not an integral number of octets in length and do not pass the FCS check."'; $config->{datasource}->{"FCSErrors"}->{"ds-source"} = "snmp://%snmp%/FCSErrors.%inst%"; # Graphs $config->{graph}->{"--default--"}->{"bytes"} = "true"; $config->{graph}->{"--default--"}->{"precision"} = "0"; $config->{graph}->{"--default--"}->{"y-min"} = "0"; $config->{graph}->{"ifInOctets"}->{"legend"} = '"Average bits in"'; $config->{graph}->{"ifInOctets"}->{"y-axis"} = '"Bits per second"'; $config->{graph}->{"ifInOctets"}->{"units"} = '"bits/sec"'; $config->{graph}->{"ifInOctets"}->{"draw-as"} = "AREA"; $config->{graph}->{"ifInOctets"}->{"scale"} = '"8,*"'; $config->{graph}->{"ifOutOctets"}->{"legend"} = '"Average bits out"'; $config->{graph}->{"ifOutOctets"}->{"y-axis"} = '"Bits per second"'; $config->{graph}->{"ifOutOctets"}->{"units"} = '"bits/sec"'; $config->{graph}->{"ifOutOctets"}->{"draw-as"} = "LINE3"; $config->{graph}->{"ifOutOctets"}->{"scale"} = '"8,*"'; $config->{graph}->{"AlignmentErrors"}->{"legend"} = '"Errors"'; $config->{graph}->{"AlignmentErrors"}->{"y-axis"} = '"Errors"'; $config->{graph}->{"AlignmentErrors"}->{"units"} = '"Errors"'; $config->{graph}->{"AlignmentErrors"}->{"draw-as"} = "AREA"; $config->{graph}->{"AlignmentErrors"}->{"scale"} = '"%rrd-poll-interval%,*"'; $config->{graph}->{"FCSErrors"}->{"legend"} = '"Errors"'; $config->{graph}->{"FCSErrors"}->{"y-axis"} = '"Errors"'; $config->{graph}->{"FCSErrors"}->{"units"} = '"Errors"'; $config->{graph}->{"FCSErrors"}->{"draw-as"} = "LINE3"; $config->{graph}->{"FCSErrors"}->{"scale"} = '"%rrd-poll-interval%,*"'; # TargetTypes $config->{targettype}->{"HP-Switch-Port"}->{"ds"} = '"ifInOctets, ifOutOctets, AlignmentErrors, FCSErrors"'; $config->{targettype}->{"HP-Switch-Port"}->{"view"} = '"Traffic: ifInOctets ifOutOctets, Errors: AlignmentErrors FCSErrors"'; # Targets $config->{target}->{"--default--"}->{"snmp-host"} = "$hostname"; $config->{target}->{"--default--"}->{"snmp-community"} = "$snmp_community"; $config->{target}->{"--default--"}->{"snmp-port"} = "$snmp_port"; $config->{target}->{"--default--"}->{"snmp"} = "%snmp-community%@%snmp-host%:%snmp-port%"; $config->{target}->{"--default--"}->{"directory-desc"} = '"HP Procurve 4000m"'; $config->{target}->{"--default--"}->{"display-name"} = '"%interface-name%"'; $config->{target}->{"--default--"}->{"target-type"} = '"HP-Switch-Port"'; my(@tmp) = (keys % $ifPort); my($portCount) = $#tmp; @tmp = (keys % $ifMod); my($modCount) = $#tmp; my($ifCount) = ($modCount + $portCount + 2); foreach my $oid (sort {$a <=> $b}(keys % $ifMod)){ $config->{target}->{$ifMod->{$oid}->{Name}}->{"interface-name"} = '"' . $ifMod->{$oid}->{Name} . '"'; $config->{target}->{$ifMod->{$oid}->{Name}}->{"short-desc"} = '"' . $ifMod->{$oid}->{Descr} . '"'; $config->{target}->{$ifMod->{$oid}->{Name}}->{"targets"} = '"' . $ifMod->{$oid}->{portList} . '"'; $config->{target}->{$ifMod->{$oid}->{Name}}->{"order"} = "$ifCount"; $ifCount--; } foreach my $oid (sort {$a <=> $b}(keys % $ifPort)){ $config->{target}->{$ifPort->{$oid}->{Name}}->{"interface-name"} = '"' . $ifPort->{$oid}->{Name} . '"'; $config->{target}->{$ifPort->{$oid}->{Name}}->{"short-desc"} = '"' . $ifPort->{$oid}->{Descr} . '"'; $config->{target}->{$ifPort->{$oid}->{Name}}->{"order"} = "$ifCount"; $config->{target}->{$ifPort->{$oid}->{Name}}->{"inst"} = "$ifPort->{$oid}->{Inst}"; $ifCount--; } return $config; } 1;