# -*- perl -*- use strict; package CHIRP::Fore::ASX; use lib "/usr/local/cricket/lib"; use snmpUtils; # Most of this was created by referencing ftp://ftp.fore.com/pub/snmp/mibs/atm_switch my $oid_iso = ".1"; # .1 my $oid_org = "$oid_iso.3"; # .1.3 my $oid_dod = "$oid_org.6"; # .1.3.6 my $oid_internet = "$oid_dod.1"; # .1.3.6.1 my $oid_mgmt = "$oid_internet.2"; # .1.3.6.1.2 my $oid_mib_2 = "$oid_mgmt.1"; # .1.3.6.1.2.1 my $oid_system = "$oid_mib_2.1"; # .1.3.6.1.2.1.1 my $oid_sysDescr = "$oid_system.1"; # .1.3.6.1.2.1.1.1 my $oid_private = "$oid_internet.4"; # .1.3.6.1.4 my $oid_enterprise = "$oid_private.1"; # .1.3.6.1.4.1 my $oid_fore = "$oid_enterprise.326"; # .1.3.6.1.4.1.326 my $oid_admin = "$oid_fore.1"; # .326.1 my $oid_systems = "$oid_fore.2"; # .326.2 my $oid_atmAdapter = "$oid_systems.1"; # .326.2.1 my $oid_atmSwitch = "$oid_systems.2"; # .326.2.2 my $oid_hardware = "$oid_atmSwitch.1"; # .326.2.2.1 my $oid_asx = "$oid_hardware.1"; # .326.2.2.1.1 my $oid_boardGroup = "$oid_asx.1"; # .326.2.2.1.1.1 my $oid_boardTable = "$oid_boardGroup.1"; # .326.2.2.1.1.1.1 my $oid_boardEntry = "$oid_boardTable.1"; # .326.2.2.1.1.1.1.1 my $oid_boardIndex = "$oid_boardEntry.1"; # .326.2.2.1.1.1.1.1.1.board my $oid_boardVersion = "$oid_boardEntry.2"; # .326.2.2.1.1.1.1.1.2.board my $oid_boardModel = "$oid_boardEntry.3"; # .326.2.2.1.1.1.1.1.3.board my $oid_boardSerialNumber = "$oid_boardEntry.4"; # .326.2.2.1.1.1.1.1.4.board my $oid_numberOfModules = "$oid_boardEntry.5"; # .326.2.2.1.1.1.1.1.5.board my $oid_vpiLookupErrors = "$oid_boardEntry.6"; # .326.2.2.1.1.1.1.1.6.board my $oid_vciLookupErrors = "$oid_boardEntry.7"; # .326.2.2.1.1.1.1.1.7.board my $oid_boardControlPort = "$oid_boardEntry.8"; # .326.2.2.1.1.1.1.1.8.board my $oid_boardHDCOMPAsicVersion = "$oid_boardEntry.9"; # .326.2.2.1.1.1.1.1.9.board my $oid_boardMcastSpaceIndex = "$oid_boardEntry.10"; # .326.2.2.1.1.1.1.1.10.board my $oid_numberOfBoards = "$oid_boardGroup.2.0"; # .326.2.2.1.1.1.2.0 my $oid_moduleGroup = "$oid_asx.2"; # .326.2.2.1.1.2 my $oid_moduleTable = "$oid_moduleGroup.1"; # .326.2.2.1.1.2.1 my $oid_moduleEntry = "$oid_moduleTable.1"; # .326.2.2.1.1.2.1.1 my $oid_moduleBoard = "$oid_moduleEntry.1"; # .326.2.2.1.1.2.1.1.1.board.module my $oid_moduleNumber = "$oid_moduleEntry.2"; # .326.2.2.1.1.2.1.1.2.board.module my $oid_moduleName = "$oid_moduleEntry.3"; # .326.2.2.1.1.2.1.1.3.board.module my $oid_moduleSpeed = "$oid_moduleEntry.4"; # .326.2.2.1.1.2.1.1.4.board.module my $oid_moduleNumberOfPorts = "$oid_moduleEntry.5"; # .326.2.2.1.1.2.1.1.5.board.module my $oid_moduleUptime = "$oid_moduleEntry.6"; # .326.2.2.1.1.2.1.1.6.board.module my $oid_moduleHwMajorRev = "$oid_moduleEntry.7"; # .326.2.2.1.1.2.1.1.7.board.module my $oid_moduleHwMinorRev = "$oid_moduleEntry.8"; # .326.2.2.1.1.2.1.1.8.board.module my $oid_moduleVersion = "$oid_moduleEntry.9"; # .326.2.2.1.1.2.1.1.9.board.module my $oid_moduleTimingSupport = "$oid_moduleEntry.10"; # .326.2.2.1.1.2.1.1.10.board.module my $oid_moduleProductNumber = "$oid_moduleEntry.11"; # .326.2.2.1.1.2.1.1.11.board.module my $oid_moduleState = "$oid_moduleEntry.12"; # .326.2.2.1.1.2.1.1.12.board.module my $oid_moduleSerialNumber = "$oid_moduleEntry.13"; # .326.2.2.1.1.2.1.1.13.board.module my $oid_moduleTestAdminStatus = "$oid_moduleEntry.14"; # .326.2.2.1.1.2.1.1.14.board.module my $oid_moduleTestOperStatus = "$oid_moduleEntry.15"; # .326.2.2.1.1.2.1.1.15.board.module my $oid_moduleTestStatusText = "$oid_moduleEntry.16"; # .326.2.2.1.1.2.1.1.16.board.module my $oid_moduleAttachState = "$oid_moduleEntry.17"; # .326.2.2.1.1.2.1.1.17.board.module my $oid_hwPortTable = "$oid_moduleGroup.3"; # .326.2.2.1.1.2.3 my $oid_hwPortEntry = "$oid_hwPortTable.1"; # .326.2.2.1.1.2.3.1 my $oid_hwPortModel = "$oid_hwPortEntry.5"; # .326.2.2.1.1.2.3.1.5.board.module.port my $oid_hwPortGlobalIndex = "$oid_hwPortEntry.12"; # .326.2.2.1.1.2.3.1.12.board.module.port my $oid_hwPortName = "$oid_hwPortEntry.13"; # .326.2.2.1.1.2.3.1.13.board.module.port my $oid_software = "$oid_atmSwitch.2"; # .326.2.2.2 my $oid_asxd = "$oid_software.1"; # .326.2.2.2.1 my $oid_switchGroup = "$oid_asxd.1"; # .326.2.2.2.1.1 my $oid_portGroup = "$oid_asxd.2"; # .326.2.2.2.1.2 my $oid_numberOfPorts = "$oid_portGroup.1"; # .326.2.2.2.1.2.1.board my $oid_portTable = "$oid_portGroup.2"; # .326.2.2.2.1.2.2 my $oid_portEntry = "$oid_portTable.1"; # .326.2.2.2.1.2.2.1 my $oid_portNumber = "$oid_portEntry.1"; # .326.2.2.2.1.2.2.1.1.port my $oid_portAdminStatus = "$oid_portEntry.2"; # .326.2.2.2.1.2.2.1.2.port my $oid_portOperStatus = "$oid_portEntry.3"; # .326.2.2.2.1.2.2.1.3.port my $oid_portTime = "$oid_portEntry.4"; # .326.2.2.2.1.2.2.1.4.port my $oid_portRemoteAtmAddress = "$oid_portEntry.5"; # .326.2.2.2.1.2.2.1.5.port my $oid_portRemoteIpAddress = "$oid_portEntry.6"; # .326.2.2.2.1.2.2.1.6.port my $oid_portMaxPathsIn = "$oid_portEntry.7"; # .326.2.2.2.1.2.2.1.7.port my $oid_portNumPathsIn = "$oid_portEntry.8"; # .326.2.2.2.1.2.2.1.8.port my $oid_portMaxBandwidthIn = "$oid_portEntry.9"; # .326.2.2.2.1.2.2.1.9.port my $oid_portAllocBandwidthIn = "$oid_portEntry.10"; # .326.2.2.2.1.2.2.1.10.port my $oid_portUsedBandwidthIn = "$oid_portEntry.11"; # .326.2.2.2.1.2.2.1.11.port my $oid_portReceivedCells = "$oid_portEntry.12"; # .326.2.2.2.1.2.2.1.12.port my $oid_portMaxPathsOut = "$oid_portEntry.13"; # .326.2.2.2.1.2.2.1.13.port my $oid_portNumPathsOut = "$oid_portEntry.14"; # .326.2.2.2.1.2.2.1.14.port my $oid_portMaxBandwidthOut = "$oid_portEntry.15"; # .326.2.2.2.1.2.2.1.15.port my $oid_portAllocBandwidthOut = "$oid_portEntry.16"; # .326.2.2.2.1.2.2.1.16.port my $oid_portUsedBandwidthOut = "$oid_portEntry.17"; # .326.2.2.2.1.2.2.1.17.port my $oid_portTransmittedCells = "$oid_portEntry.18"; # .326.2.2.2.1.2.2.1.18.port my $oid_portHwBoard = "$oid_portEntry.19"; # .326.2.2.2.1.2.2.1.19.port my $oid_portHwModule = "$oid_portEntry.20"; # .326.2.2.2.1.2.2.1.20.port my $oid_portHwNumber = "$oid_portEntry.21"; # .326.2.2.2.1.2.2.1.21.port my $value_hwPortModel = {}; $value_hwPortModel->{1} = "model-TAXI-100"; $value_hwPortModel->{2} = "model-TAXI-140"; $value_hwPortModel->{3} = "model-DS3"; $value_hwPortModel->{4} = "model-OC3"; $value_hwPortModel->{5} = "model-8B10B"; $value_hwPortModel->{6} = "model-6port-TAXI-100"; $value_hwPortModel->{7} = "model-ASX-CTL"; $value_hwPortModel->{8} = "model-OC12"; $value_hwPortModel->{9} = "model-OC48"; $value_hwPortModel->{16} = "model-DS3-PDH"; $value_hwPortModel->{17} = "model-E3"; $value_hwPortModel->{18} = "model-J2"; $value_hwPortModel->{19} = "model-DS1"; $value_hwPortModel->{20} = "model-E1"; $value_hwPortModel->{21} = "model-TP25"; $value_hwPortModel->{22} = "model-ASX-BP"; $value_hwPortModel->{23} = "model-CESDS1"; $value_hwPortModel->{24} = "model-CESE1"; $value_hwPortModel->{25} = "model-FRAMDS1"; $value_hwPortModel->{26} = "model-FRAME1"; 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($device) = {}; my($config) = {}; my($row); $device = Collect($hostname, $snmp_community, $snmp_port); $config->{oid}->{"ForeReceivedCells"} = $oid_portReceivedCells; $config->{oid}->{"ForeTransmittedCells"} = $oid_portTransmittedCells; $config->{datasource}->{"ForeIfInOctets"}->{"ds-source"} = "snmp://%snmp%/ForeReceivedCells.%inst%"; $config->{datasource}->{"ForeIfInOctets"}->{"rrd-ds-type"} = "COUNTER"; $config->{datasource}->{"ForeIfOutOctets"}->{"ds-source"} = "snmp://%snmp%/ForeTransmittedCells.%inst%"; $config->{datasource}->{"ForeIfOutOctets"}->{"rrd-ds-type"} = "COUNTER"; # Use this to graph cell counts (You'll have to modify $config->{targettype}->{"Fore-ATM-Port"}->{"view"} below) # $config->{datasource}->{"ForeReceivedCells"}->{"ds-source"} = "snmp://%snmp%/ForeReceivedCells.%inst%"; # $config->{datasource}->{"ForeReceivedCells"}->{"rrd-ds-type"} = "COUNTER"; # $config->{datasource}->{"ForeTransmittedCells"}->{"ds-source"} = "snmp://%snmp%/ForeTransmittedCells.%inst%"; # $config->{datasource}->{"ForeTransmittedCells"}->{"rrd-ds-type"} = "COUNTER"; $config->{graph}->{"ForeIfInOctets"}->{"draw-as"} = "AREA"; $config->{graph}->{"ForeIfInOctets"}->{"y-axis"} = '"bits per second"'; $config->{graph}->{"ForeIfInOctets"}->{"legend"} = '"Average bits in"'; $config->{graph}->{"ForeIfInOctets"}->{"units"} = '"bits/sec"'; $config->{graph}->{"ForeIfInOctets"}->{"precision"} = "0"; $config->{graph}->{"ForeIfInOctets"}->{"scale"} = "53,*,8,*"; $config->{graph}->{"ForeIfInOctets"}->{"y-min"} = "0"; $config->{graph}->{"ForeIfInOctets"}->{"bytes"} = "true"; $config->{graph}->{"ForeIfOutOctets"}->{"draw-as"} = "LINE3"; $config->{graph}->{"ForeIfOutOctets"}->{"y-axis"} = '"bits per second"'; $config->{graph}->{"ForeIfOutOctets"}->{"legend"} = '"Average bits out"'; $config->{graph}->{"ForeIfOutOctets"}->{"units"} = '"bits/sec"'; $config->{graph}->{"ForeIfOutOctets"}->{"precision"} = "0"; $config->{graph}->{"ForeIfOutOctets"}->{"scale"} = "53,*,8,*"; $config->{graph}->{"ForeIfOutOctets"}->{"y-min"} = "0"; $config->{graph}->{"ForeIfOutOctets"}->{"bytes"} = "true"; # Use this to graph cell counts (You'll have to modify $config->{targettype}->{"Fore-ATM-Port"}->{"view"} below) # $config->{graph}->{"ForeReceivedCells"}->{"draw-as"} = "AREA"; # $config->{graph}->{"ForeReceivedCells"}->{"y-axis"} = '"Cells"'; # $config->{graph}->{"ForeReceivedCells"}->{"legend"} = '"Received ATM cells"'; # $config->{graph}->{"ForeReceivedCells"}->{"precision"} = "0"; # $config->{graph}->{"ForeReceivedCells"}->{"y-min"} = "0"; # $config->{graph}->{"ForeTransmittedCells"}->{"draw-as"} = "LINE3"; # $config->{graph}->{"ForeTransmittedCells"}->{"y-axis"} = '"Cells"'; # $config->{graph}->{"ForeTransmittedCells"}->{"legend"} = '"Transmitted ATM cells"'; # $config->{graph}->{"ForeTransmittedCells"}->{"precision"} = "0"; # $config->{graph}->{"ForeTransmittedCells"}->{"y-min"} = "0"; $config->{targettype}->{"Fore-ATM-Port"}->{"ds"} = '"ForeIfInOctets, ForeIfOutOctets"'; $config->{targettype}->{"Fore-ATM-Port"}->{"view"} = '"Traffic: ForeIfInOctets ForeIfOutOctets"'; $config->{target}->{"--default--"}->{"target-type"} = "Fore-ATM-Port"; $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--"}->{"display-name"} = '"%interface-name%"'; $config->{target}->{"--default--"}->{"directory-desc"} = '"' . $device->{SysDescr} . '"'; $config->{target}->{"All-Ports"}->{"interface-name"} = '"All Ports"'; $config->{target}->{"All-Ports"}->{"short-desc"} = '"All Ports on this switch."'; my($names) = ""; foreach my $port (keys % {$device->{Port}}) { $names .= "; " if($names !~ /^$/); $names .= "port_" . $device->{Port}->{$port}->{Name}; } $config->{target}->{"All-Ports"}->{"targets"} = '"' . $names . '"'; $config->{target}->{"All-Ports"}->{"order"} = "100000"; foreach my $board (keys % {$device->{Board}}) { foreach my $module (keys % {$device->{Board}->{$board}->{Module}}) { my($targetName) = "Module_" . ($board + 1) . chr($module + 65); my($intName) = "Module " . ($board + 1) . chr($module + 65); $config->{target}->{$targetName}->{"interface-name"} = '"' . $intName . '"'; if (defined($device->{Board}->{$board}->{Module}->{$module}->{Name})) { $config->{target}->{$targetName}->{"short-desc"} = '"' . $device->{Board}->{$board}->{Module}->{$module}->{Name} . '"'; } else { $config->{target}->{$targetName}->{"short-desc"} = '"Unknown module model"'; } $names = ""; foreach my $port (keys % {$device->{Board}->{$board}->{Module}->{$module}->{Port}}) { $names .= "; " if($names !~ /^$/); $names .= "port_" . $device->{Port}->{ $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} }->{Name}; } $config->{target}->{$targetName}->{"targets"} = '"' . $names . '"'; $config->{target}->{$targetName}->{"order"} = 10000 - (100 * $board + 10 * $module); } } foreach my $port (keys % {$device->{Port}}) { my($targetName) = "Port_" . $device->{Port}->{$port}->{Name}; my($intName) = "Port " . $device->{Port}->{$port}->{Name}; $config->{target}->{$targetName}->{"interface-name"} = '"' . $intName . '"'; $config->{target}->{$targetName}->{"short-desc"} = '"' . $device->{Port}->{$port}->{ModelName} . '"'; $config->{target}->{$targetName}->{"inst"} = $port; $config->{target}->{$targetName}->{"order"} = 1000 - $port; } return $config } sub Collect { my($hostname, $snmp_community, $snmp_port) = @_; my($snmp) = "$snmp_community\@$hostname:$snmp_port"; my($device) = {}; my($row); # Get System SysDescr my($sysDescr) = snmpUtils::get($snmp, "$oid_sysDescr.0"); $device->{SysDescr} = $sysDescr; # Get Boards, Modules, Ports, Insts foreach $row (snmpUtils::walk($snmp, "$oid_hwPortGlobalIndex")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} = $value; $device->{Port}->{$value}->{Inst} = $value; } # Get Module Name foreach $row (snmpUtils::walk($snmp, "$oid_moduleName")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{Name} = $value; } # Get Module Speed foreach $row (snmpUtils::walk($snmp, "$oid_moduleSpeed")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{Speed} = $value; } # Get Module Version foreach $row (snmpUtils::walk($snmp, "$oid_moduleVersion")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{Version} = $value; } # Get Module Hardware Major Rev foreach $row (snmpUtils::walk($snmp, "$oid_moduleHwMajorRev")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{HwMajorRev} = $value; } # Get Module Hardware Minor Rev foreach $row (snmpUtils::walk($snmp, "$oid_moduleHwMinorRev")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{HwMinorRev} = $value; } # Get Module Product Number foreach $row (snmpUtils::walk($snmp, "$oid_moduleProductNumber")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{ProductNumber} = $value; } # Get Module Serial Number foreach $row (snmpUtils::walk($snmp, "$oid_moduleSerialNumber")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Board}->{$board}->{Module}->{$module}->{SerialNumber} = $value; } # Get Port Names foreach $row (snmpUtils::walk($snmp, "$oid_hwPortName")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); $device->{Port}->{ $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} }->{Name} = $value; } # Get Port Model Number and Name foreach $row (snmpUtils::walk($snmp, "$oid_hwPortModel")) { my($oid, $value) = split(/:/, $row); my($board, $module, $port) = split(/\./, $oid); # ASX Control Port if($value == 7) { $device->{Board}->{$board}->{Module}->{$module}->{Name} = "Unknown module model"; $device->{Board}->{$board}->{Module}->{$module}->{Speed} = ""; $device->{Board}->{$board}->{Module}->{$module}->{Version} = ""; $device->{Board}->{$board}->{Module}->{$module}->{HwMajorVer} = ""; $device->{Board}->{$board}->{Module}->{$module}->{HwMinorVer} = ""; $device->{Board}->{$board}->{Module}->{$module}->{ProductNumber} = ""; $device->{Board}->{$board}->{Module}->{$module}->{SerialNumber} = ""; } $device->{Port}->{ $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} }->{ModelNum} = $value; if(!defined($value_hwPortModel->{$value})) { $device->{Port}->{ $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} }->{ModelName} = "Unknown port model"; } else { $device->{Port}->{ $device->{Board}->{$board}->{Module}->{$module}->{Port}->{$port} }->{ModelName} = $value_hwPortModel->{$value}; } } return $device; } 1;