Browse Source

restored mikrotik patch

Roman Dmitriev 2 năm trước cách đây
mục cha
commit
f64742e3fe
2 tập tin đã thay đổi với 44 bổ sung17 xóa
  1. 19 5
      html/inc/common.php
  2. 25 12
      scripts/Rstat/snmp.pm

+ 19 - 5
html/inc/common.php

@@ -1721,11 +1721,24 @@ function is_up($ip)
 function get_ifmib_index_table ($ip, $community, $version)
 {
 $ifmib_map = NULL;
-#fdb_index => snmp_index
-$index_map_table = walk_snmp($ip, $community, $version, IFMIB_IFINDEX_MAP);
 
-#get map snmp interfaces to fdb table
-if (isset($index_map_table) and count($index_map_table) > 0) {
+$is_mikrotik = walk_snmp($ip, $community, $version, MIKROTIK_DHCP_SERVER);
+$mk_ros_version = 0;
+
+if ($is_mikrotik) {
+    $mikrotik_version = walk_snmp($ip, $community, $version, MIKROTIK_ROS_VERSION);
+    $mk_ros_version = 6491;
+    $result = preg_match('/RouterOS\s+(\d)\.(\d{1,3})\.(\d{1,3})\s+/',$mikrotik_version[MIKROTIK_ROS_VERSION],$matches);
+    if ($result) {
+        $mk_ros_version = $matches[1]*1000 + $matches[2]*10 + $matches[3];
+        }
+    }
+
+if ($mk_ros_version == 0 or $mk_ros_version>6468) {
+    #fdb_index => snmp_index
+    $index_map_table = walk_snmp($ip, $community, $version, IFMIB_IFINDEX_MAP);
+    #get map snmp interfaces to fdb table
+    if (isset($index_map_table) and count($index_map_table) > 0) {
         foreach ($index_map_table as $key => $value) {
             $key = trim($key);
             $value = intval(trim(str_replace('INTEGER:', '', $value)));
@@ -1736,7 +1749,8 @@ if (isset($index_map_table) and count($index_map_table) > 0) {
                 }
             }
         }
-        
+    }    
+
 #return simple map snmp_port_index = snmp_port_index
 if (empty($ifmib_map)) {
     #ifindex

+ 25 - 12
scripts/Rstat/snmp.pm

@@ -179,18 +179,31 @@ my $community = shift;
 my $version = shift;
 my $ifmib_map;
 
-my $index_map_table =  snmp_get_oid($ip, $community, $ifIndex_map, $version);
-if (!$index_map_table) { $index_map_table =  snmp_walk_oid($ip, $community, $ifIndex_map, $version); }
-
-if ($index_map_table) {
-    foreach my $row (keys(%$index_map_table)) {
-        my $port_index = $index_map_table->{$row};
-        next if (!$port_index);
-   	    my $value;
-        if ($row=~/\.([0-9]{1,10})$/) { $value = $1; }
-        next if (!$value);
-        $ifmib_map->{$value}=$port_index;
-       	}
+my $is_mikrotik = snmp_get_request($ip, '.1.3.6.1.2.1.9999.1.1.1.1.0', $community, 161, $version);
+my $mk_ros_version = 0;
+
+if ($is_mikrotik=~/MikroTik/i) {
+    my $mikrotik_version = snmp_get_request($ip, '.1.0.8802.1.1.2.1.3.4.0', $community, 161, $version);
+    $mk_ros_version = 6491;
+    #"MikroTik RouterOS 6.46.8 (long-term) CRS326-24S+2Q+"
+    if ($mikrotik_version =~/RouterOS\s+(\d)\.(\d{1,3})\.(\d{1,3})\s+/) {
+        $mk_ros_version = $1*1000 + $2*10 + $3;
+        }
+    }
+
+if (!$mk_ros_version or $mk_ros_version > 6468) {
+    my $index_map_table =  snmp_get_oid($ip, $community, $ifIndex_map, $version);
+    if (!$index_map_table) { $index_map_table =  snmp_walk_oid($ip, $community, $ifIndex_map, $version); }
+    if ($index_map_table) {
+        foreach my $row (keys(%$index_map_table)) {
+            my $port_index = $index_map_table->{$row};
+            next if (!$port_index);
+   	        my $value;
+            if ($row=~/\.([0-9]{1,10})$/) { $value = $1; }
+            next if (!$value);
+            $ifmib_map->{$value}=$port_index;
+       	    }
+        }
     }
 
 if (!$ifmib_map) {