From 004de3d29b00354b0be5bfb21be671396b6868dc Mon Sep 17 00:00:00 2001 From: Eric Miller <> Date: Mon, 26 Nov 2007 03:32:11 +0000 Subject: [PATCH] Add support for e_name() in Psuedo ENTITY-MIB methods --- Info/Layer1/Bayhub.pm | 7 +++++ Info/Layer2/Baystack.pm | 7 +++++ Info/Layer3/Passport.pm | 59 ++++++++++++++++++++++++++++++++++------- Info/NortelStack.pm | 57 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 116 insertions(+), 14 deletions(-) diff --git a/Info/Layer1/Bayhub.pm b/Info/Layer1/Bayhub.pm index 7cad4ea7..8669f9b5 100644 --- a/Info/Layer1/Bayhub.pm +++ b/Info/Layer1/Bayhub.pm @@ -391,6 +391,13 @@ sub e_descr { return $stack->ns_e_descr($partial); } +sub e_name { + my $stack = shift; + my $partial = shift; + + return $stack->ns_e_name($partial); +} + sub e_fwver { my $stack = shift; my $partial = shift; diff --git a/Info/Layer2/Baystack.pm b/Info/Layer2/Baystack.pm index cc92ab7f..dc7ce79f 100644 --- a/Info/Layer2/Baystack.pm +++ b/Info/Layer2/Baystack.pm @@ -367,6 +367,13 @@ sub e_descr { return $stack->SUPER::e_descr($partial) || $stack->ns_e_descr($partial); } +sub e_name { + my $stack = shift; + my $partial = shift; + + return $stack->SUPER::e_name($partial) || $stack->ns_e_name($partial); +} + sub e_fwver { my $stack = shift; my $partial = shift; diff --git a/Info/Layer3/Passport.pm b/Info/Layer3/Passport.pm index aa516b24..147c5a03 100644 --- a/Info/Layer3/Passport.pm +++ b/Info/Layer3/Passport.pm @@ -623,10 +623,10 @@ sub e_class { if ($iid == 1) { $rc_e_class{$iid} = 'chassis'; } - elsif ($iid =~/^9/) { + elsif ($iid =~/^9(\d)/ and length $iid > 5) { $rc_e_class{$iid} = 'powerSupply'; } - elsif ($iid =~/00$/) { + elsif ($iid =~/0000$/) { $rc_e_class{$iid} = 'container'; } else { @@ -665,7 +665,7 @@ sub e_descr { my $type = $rc_c_t->{$idx}; next unless $type; my $index = "$idx"."0000"; - $rc_e_descr{$index} = "slot"."$idx"; + $rc_e_descr{$index} = "Slot "."$idx"; $index++; $rc_e_descr{$index} = $type; } @@ -683,7 +683,7 @@ sub e_descr { my $cb = $rc2_cb->{$idx}; my $index = "$idx"."0000"; - $rc_e_descr{$index} = "slot"."$idx"; + $rc_e_descr{$index} = "Slot "."$idx"; $index++; $rc_e_descr{$index} = $cf; $index++; @@ -769,6 +769,45 @@ sub e_type { return \%rc_e_type; } +sub e_name { + my $passport = shift; + + my $model = $passport->model(); + my $rc_e_idx = $passport->e_index() || {}; + + my %rc_e_name; + foreach my $iid (keys %$rc_e_idx){ + + if ($iid == 1) { + $rc_e_name{$iid} = 'Chassis'; + next; + } + + my $mod = int (substr($iid, -4, 2)); + my $slot = substr($iid, -6, 2); + + if ($iid =~/^9(\d)/ and length $iid > 5) { + $rc_e_name{$iid} = "Power Supply $1"; + } + elsif ($iid =~/(00){2}$/) { + $rc_e_name{$iid} = "Slot $slot"; + } + elsif ($iid =~/(00){1}$/) { + $rc_e_name{$iid} = "Card $slot, MDA $mod"; + } + elsif (defined $model and $model =~ /(105|11[05]0|12[05])/ and $iid =~ /1$/) { + $rc_e_name{$iid} = "Card $slot"; + } + elsif ($iid =~ /1$/) { + $rc_e_name{$iid} = "Card $slot (front)"; + } + elsif ($iid =~ /2$/) { + $rc_e_name{$iid} = "Card $slot (back)"; + } + } + return \%rc_e_name; +} + sub e_hwver { my $passport = shift; @@ -915,11 +954,15 @@ sub e_pos { $rc_e_pos{$iid} = -1; next; } - my $sub = substr($iid, -1); + my $sub = int (substr($iid, -2, 2)); + my $mod = int (substr($iid, -4, 2)); my $slot = substr($iid, -6, 2); - if ($iid =~/(00){1,2}$/) { + if ($iid =~/(00){2}$/) { $rc_e_pos{$iid} = $slot; } + elsif ($iid =~/(00){1}$/) { + $rc_e_pos{$iid} = $mod * 100; + } else { $rc_e_pos{$iid} = $sub; } @@ -939,14 +982,10 @@ sub e_parent { $rc_e_parent{$iid} = 0; next; } - my $mod = substr($iid, -4, 2); my $slot = substr($iid, -6, 2); if ($iid =~/(00){1,2}$/) { $rc_e_parent{$iid} = 1; } - elsif ($mod != 0) { - $rc_e_parent{$iid} = "$slot"."$mod"."00"; - } else { $rc_e_parent{$iid} = "$slot"."0000"; } diff --git a/Info/NortelStack.pm b/Info/NortelStack.pm index fb4b797c..67fbdf77 100644 --- a/Info/NortelStack.pm +++ b/Info/NortelStack.pm @@ -229,6 +229,55 @@ sub ns_e_descr { return \%ns_e_descr; } +sub ns_e_name { + my $stack = shift; + my $partial = shift; + + my $ns_class = $stack->ns_e_class() || {}; + my $ns_e_idx = $stack->ns_e_index() || {}; + my $ns_grp_enc = $stack->s5ChasGrpEncodeFactor($partial) || {}; + my $is_virtual = $stack->ns_e_is_virtual(); + + my %ns_e_name; + foreach my $iid (keys %$ns_e_idx){ + + my ($grp, $idx, $sub) = split (/\./,$iid); + my $class = $ns_class->{$iid}; + next unless defined $class; + my $enc = $ns_grp_enc->{$grp}; + + if ((!$is_virtual) and ($grp == 1)) { + $ns_e_name{$iid} = 'Supervisory Module'; + } + elsif ($class eq 'stack') { + $ns_e_name{$iid} = 'Stack Master Unit'; + } + elsif ($class eq 'chassis') { + if ($is_virtual) { + my $unit = $idx / $enc; + $ns_e_name{$iid} = "Switch Unit $unit"; + } + else { + $ns_e_name{$iid} = "Chassis"; + } + } + elsif ($class eq 'module') { + if ($is_virtual) { + my $unit = int ($idx / $enc); + my $mda = $idx % $enc; + $ns_e_name{$iid} = "Switch Unit $unit, MDA $mda"; + } + elsif ($sub != 0) { + $ns_e_name{$iid} = "Module Slot $idx, Subcomponent $sub"; + } + else { + $ns_e_name{$iid} = "Module Slot $idx"; + } + } + } + return \%ns_e_name; +} + sub ns_e_hwver { my $stack = shift; my $partial = shift; @@ -325,15 +374,15 @@ sub ns_e_pos { } elsif ($grp == 3 and $idx == 0 ) { my $enc = $ns_grp_enc->{$grp}; - if ($is_stack and ($pos % $enc)) { + if ($is_virtual and ($pos % $enc)) { $pos = int ($pos % $enc); } - elsif ($is_stack and !($pos % $enc)) { - $pos = ($pos / $enc); - } elsif ($is_virtual and !$is_stack and !($pos % $enc)) { $pos = -1; } + elsif ($is_virtual and !($pos % $enc)) { + $pos = ($pos / $enc); + } } elsif (!$is_stack and $grp == 3) { $pos = $idx;