From 2b1b53e5396ad771f9513e330a0e1002c6a9452f Mon Sep 17 00:00:00 2001 From: Andrey Pazychev Date: Wed, 20 May 2020 22:01:40 +0300 Subject: [PATCH] Raisecom RC. Next gen perl coding style. --- lib/SNMP/Info/Layer3/Raisecom.pm | 136 ++++++++++++++----------------- 1 file changed, 60 insertions(+), 76 deletions(-) diff --git a/lib/SNMP/Info/Layer3/Raisecom.pm b/lib/SNMP/Info/Layer3/Raisecom.pm index f10f39fd..5565671a 100755 --- a/lib/SNMP/Info/Layer3/Raisecom.pm +++ b/lib/SNMP/Info/Layer3/Raisecom.pm @@ -47,12 +47,12 @@ $VERSION = '3.70-135'; sub vendor { my $obj = shift; - return $obj->main($obj)->{vendor}; + return main($obj)->{vendor}; } sub os { my $obj = shift; - return $obj->main($obj)->{os}; + return main($obj)->{os}; } sub main { @@ -74,102 +74,86 @@ sub main { if ( $id =~ /41752\.26\.502/ ) { $model = $obj->model_oid_41752 || undef; + $hw = ($obj->hw_oid_41752 =~ /.*\sversion\s(.*)/)[0]; + + $obj->os_ver_oid_41752 =~ /ROS_(.*)\.(\d+)/; + $os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2); + + $obj->brom_oid_41752 =~ /.*_BOOT_(.*)_(\d+)/; + $brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2); + + $serial = $obj->serial_oid_41752 || undef; } elsif ($id =~ /8886\.6\.(140|191|150|21[3,4])$/) { $model = $obj->model_oid_8886_6_140 || undef; - $model = $obj->session()->get('enterprises.8886.1.1.4.1.0') - if not defined($model); - $hw = $obj->hw_oid_8886_6_140; - $hw =~ s/.*\s[v,V]ersion\s(.*)/$1/ - if defined $1; + + $obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/; + $os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2); } + #### + # Here another ways for undetected specific crap. If you not enougth with default, place specific crap upper here + #### + #All another known ways to model + $model = $obj->session()->get('enterprises.8886.1.1.4.1.0') if not defined($model); - $model .= ' HW:' . $hw - if (defined($model) and defined($hw)); + #All another known ways to HW + while (not defined($hw)) { + $hw = $obj->hw_oid_8886_6_140; + $hw =~ s/.*\s[v,V]ersion\s(.*)/$1/ if defined $1; + last; + } + + #All another known ways to OS Version + $os_ver = $obj->os_ver_oid || undef if not defined($os_ver); + while(not defined($os_ver)) { + $obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/; + $os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2); + last if defined($os_ver); + + my $res = $obj->os_ver_oid_8886_6_140; + $res =~ /(\d*\.+\d*)\(Compiled/; + $os_ver = $1 if defined($1); + $res =~ /ROS_(.*\d)\.+ISCOM[\d,\w,-]+\.([\d,\.]*)/; + $os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2); + last if defined($os_ver); + + last; + } + + #All another known ways to Bootrom + $obj->brom_oid_8886_6_140 =~ /Bootstrap_([\d\W]+)\.ISCOM.*\.(\d*\.+\d*)/; + $brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2); + + $brom = $obj->brom_oid || undef if not defined($brom); + + #Serial + $serial = $obj->serial_oid_8886_6_140 || undef; + + #### + #final formatting before output. + #### + $model .= ' HW:' . $hw if defined($model) and defined($hw); + $os_ver .= ' bootrom:' . $brom if defined($os_ver) and defined($brom); return { 'vendor' => $vendor, 'os' => $os, 'model' => $model, 'os_ver' => $os_ver, 'serial' => $serial }; } sub os_ver { my $obj = shift; - my $os_ver; my $brom; - my $id = $obj->id(); - if ($id =~ /41752\.26\.502/) { - $obj->os_ver_oid_41752 =~ /ROS_(.*)\.(\d+)/; - $os_ver = $1 . ' (' . $2 . ')'; - $obj->brom_oid_41752 =~ /.*_BOOT_(.*)_(\d+)/; - $brom = $1 . ' (' . $2 . ')'; - } - elsif ($id =~ /8886\.6\.(140|150)$/) { - $obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/; - $os_ver = $1 . ' (' . $2 . ')'; - $obj->brom_oid_8886_6_140 =~ /Bootstrap_([\d\W]+)\.ISCOM.*\.(\d*\.+\d*)/; - $brom = $1 . ' (' . $2 . ')'; - } - elsif ($id =~ /8886\.6\.(191|21[3,4])$/) { - my $os_ver_oid = $obj->os_ver_oid_8886_6_140; - if ($os_ver_oid =~ /Compiled/) { - $os_ver_oid =~ /(\d*\.+\d*)\(Compiled/; - $os_ver = $1; - } - else { - $os_ver_oid =~ /ROS_(.*\d)\.+ISCOM[\d,\w,-]+\.([\d,\.]*)/; - $os_ver = $1 . ' (' . $2 . ')'; - } - $brom = $obj->brom_oid_8886_6_140; - } - elsif ($id =~ /41752$/) { - return SNMP::Info::Layer3::Rotek::os_ver($obj); - } - else { - $os_ver = $obj->os_ver_oid || undef; - $brom = $obj->brom_oid || undef; - } - - if (defined $os_ver and defined $brom) { - return $os_ver . ' bootrom: ' . $brom; - } - elsif (defined $os_ver) { - return $os_ver; - } - return 'unknown'; + return main($obj)->{os_ver}; } sub model { my $obj = shift; - return $obj->main($obj)->{model}; + return main($obj)->{model}; } sub serial { my $obj = shift; - my $serial = $obj->serial_oid || 'unknown'; - my $id = $obj->id(); - if ($id =~ /41752\.26\.502/) { - return $obj->serial_oid_41752; - } - elsif ($id =~ /8886\.6\.(140|191|150|21[3,4])$/) { - return $obj->serial_oid_8886_6_140; - } - return $obj->SUPER::serial; + return main($obj)->{serial}; } -sub hvver { - my $obj = shift; - my $id = $obj->id(); - if ($id =~ /41752\.26\.502/) { - $obj->hw_oid_41752 =~ /.*\sversion\s(.*)/; - return $1; - } - elsif ($id =~ /8886\.6\./) { - $obj->hw_oid_8886_6_140 =~ /.*\s[v,V]ersion\s(.*)/; - return $1 - if defined $1; - return $obj->hw_oid_8886_6_140; - } - - return $obj->SUPER::hvver() -} 1; __END__