@@ -51,12 +51,10 @@ our $mibSupport = [
5151 }
5252];
5353
54- my $sysobjectid ;
55-
5654sub _getOlderSysInfo {
5755 my ($self , $info ) = @_ ;
58- $sysobjectid = $self -> get(sysObjectID) unless $sysobjectid ;
59- return $self -> get($sysobjectid . " .1.1.1." . $info );
56+ $self -> { _sysobjectid } = $self -> get(sysObjectID) unless $self -> { _sysobjectid } ;
57+ return $self -> get($self -> { _sysobjectid } . " .1.1.1." . $info );
6058}
6159
6260sub getFirmware {
@@ -75,6 +73,8 @@ sub getMacAddress {
7573 or return ;
7674
7775 $macaddr = getCanonicalString($macaddr );
76+ # On some older devices, mac address may be shifted by a bootutil software
77+ $macaddr = getCanonicalString($self -> _getOlderSysInfo(" 8.0" )) if $macaddr =~ / ^TP-LINK/ ;
7878 $macaddr =~ s / -/ :/ g ;
7979
8080 return getCanonicalMacAddress($macaddr );
@@ -105,7 +105,13 @@ sub getSerial {
105105 my $serial = $self -> get(tpSysInfoSerialNum) || $self -> _getOlderSysInfo(" 7.0" )
106106 or return ;
107107
108- return getCanonicalString($serial );
108+ $serial = getCanonicalString($serial );
109+ # On some older devices, mac address may be shifted by a bootutil software
110+ $serial = getCanonicalString($self -> _getOlderSysInfo(" 8.0" )) if $serial =~ / ^TP-LINK/ ;
111+ # On some older devices from new generation, tpSysInfoSerialNum may still not be present
112+ $serial = getCanonicalString($self -> get(tpSysInfoMacAddr)) if $serial =~ / days/ ;
113+
114+ return $serial ;
109115}
110116
111117sub run {
@@ -127,7 +133,7 @@ sub run {
127133
128134 # Older TP-Link device won't find data under recent oid and it seems we have to
129135 # look for values under oid given by sysObjectID
130- if ($sysobjectid ) {
136+ if ($self -> { _sysobjectid } ) {
131137 my $hardware_version = $self -> _getOlderSysInfo(" 5.0" );
132138 if ($hardware_version ) {
133139 $device -> addFirmware({
0 commit comments