# -*- perl -*- use strict; package CHIRP::HP::AdvanceStack; use lib "/usr/local/cricket/lib"; use snmpUtils; sub GenConfig { my($hostname, $snmp_community, $snmp_port) = @_; $snmp_community = 'public' unless defined($snmp_community); $snmp_port = '161' unless defined($snmp_port); my($snmp) = "$snmp_community\@$hostname:$snmp_port"; my($config) = {}; ################################################# # What am I looking at? # # .snmpDot3RptrMgt.rptrBasicPackage.rptrGroupInfo.rptrGroupTable # .rptrGroupEntry.rptrGroupDescr # .1.3.6.1.2.1.22.1.2.1.1.2 my($Descr) = (split(/:/,(snmpUtils::getnext($snmp, ".1.3.6.1.2.1.22.1.2.1.1.2"))[0],2))[1]; # ################################################# my($ifPort); my($ifMod); ############################ #Get Mapping of Inst # .snmpDot3RptrMgt.rptrBasicPackage.rptrPortInfo # .rptrPortTable.rptrPortEntry.rptrPortIndex # .1.3.6.1.2.1.22.1.3.1.1.2 foreach my $row (snmpUtils::walk($snmp, ".1.3.6.1.2.1.22.1.3.1.1.2")){ my($oid, $value) = split(/:/, $row, 2); $ifPort->{$value}->{Inst} = $oid; } # ############################ ############################ #Set Port Names # my $tmp = 0; my @list = keys % $ifPort; my $portCount = $#list + 1; my $extraPorts = $portCount % 12; foreach my $row (sort {$a <=> $b} (keys % $ifPort)) { if ($row > $portCount - $extraPorts) { delete $ifPort->{$row}; next; } if ($row > 36) { $ifPort->{$row}->{Name} = "D" . ($row - 36); } elsif ($row > 24) { $ifPort->{$row}->{Name} = "C" . ($row - 24); } elsif ($row > 12) { $ifPort->{$row}->{Name} = "B" . ($row - 12); } else { $ifPort->{$row}->{Name} = "A" . $row; } ############################## #Set PortList Names # $ifMod->{0}->{Descr} = "All Ports on this hub."; $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->{$row}->{Name}); # ############################## } # ########################## ################################################# #Device creation # # .snmpDot3RptrMgt.rptrMonitorPackage.rptrMonitorPortInfo # .rptrMonitorPortTable.rptrMonitorPortEntry # .rptrMonitorPortReadableOctets # .1.3.6.1.2.1.22.2.3.1.1.4 # # .rptrMonitorPortCollisions # .1.3.6.1.2.1.22.2.3.1.1.10 # OIDs $config->{oid}->{"ReadableOctets"} = ".1.3.6.1.2.1.22.2.3.1.1.4"; $config->{oid}->{"Collisions"} = ".1.3.6.1.2.1.22.2.3.1.1.10"; # DataSources $config->{datasource}->{"--default--"}->{"rrd-ds-type"} = "COUNTER"; $config->{datasource}->{"ReadableOctets"}->{"ds-source"} = "snmp://%snmp%/ReadableOctets.%inst%"; $config->{datasource}->{"Collisions"}->{"ds-source"} = "snmp://%snmp%/Collisions.%inst%"; # Graphs $config->{graph}->{"--default--"}->{"y-min"} = "0"; $config->{graph}->{"ReadableOctets"}->{"legend"} = '"Average bits"'; $config->{graph}->{"ReadableOctets"}->{"y-axis"} = '"Bits per second"'; $config->{graph}->{"ReadableOctets"}->{"units"} = '"bits/sec"'; $config->{graph}->{"ReadableOctets"}->{"draw-as"} = "AREA"; $config->{graph}->{"ReadableOctets"}->{"scale"} = '"8,*"'; $config->{graph}->{"ReadableOctets"}->{"precision"} = "0"; $config->{graph}->{"ReadableOctets"}->{"bytes"} = "true"; $config->{graph}->{"Collisions"}->{"legend"} = '"Average Collisions"'; $config->{graph}->{"Collisions"}->{"y-axis"} = '"Collisions per second"'; $config->{graph}->{"Collisions"}->{"units"} = '"Collisions/sec"'; $config->{graph}->{"Collisions"}->{"draw-as"} = "AREA"; $config->{graph}->{"Collisions"}->{"bytes"} = "false"; # TargetTypes $config->{targettype}->{"HP-AS-Port"}->{"ds"} = '"ReadableOctets, Collisions"'; $config->{targettype}->{"HP-AS-Port"}->{"view"} = '"Traffic: ReadableOctets, Collisions: Collisions"'; # Targets # --default-- $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"} = '"' . $Descr . '"'; $config->{target}->{"--default--"}->{"display-name"} = '"%interface-name%"'; $config->{target}->{"--default--"}->{"target-type"} = '"HP-AS-Port"'; # Modules my(@tmp) = (keys % $ifPort); $portCount = $#tmp; @tmp = (keys % $ifMod); my($modCount) = $#tmp; my($ifCount) = ($modCount + $portCount + 2); $config->{target}->{$ifMod->{0}->{Name}}->{"interface-name"} = '"' . $ifMod->{0}->{Name} . '"'; $config->{target}->{$ifMod->{0}->{Name}}->{"short-desc"} = '"' . $ifMod->{0}->{Descr} . '"'; $config->{target}->{$ifMod->{0}->{Name}}->{"targets"} = '"' . $ifMod->{0}->{portList} . '"'; $config->{target}->{$ifMod->{0}->{Name}}->{"order"} = "$ifCount"; $ifCount--; # Ports 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"} = '"Port-' . $ifPort->{$oid}->{Name} . '"'; $config->{target}->{$ifPort->{$oid}->{Name}}->{"order"} = "$ifCount"; $config->{target}->{$ifPort->{$oid}->{Name}}->{"inst"} = "$ifPort->{$oid}->{Inst}"; $ifCount--; } # ################################################# return $config; } 1;