Hi, I add a zone with IP 192.168.2.0/24 and
manually running jffnms/engine$ php -q autodiscovery_network.php master
5
the nad_networks table has the following record.
+----+--------------------+------+-------------+--------+------+--------
-------------+
| id | network | deep | oper_status | parent | seed |
oper_status_changed |
+----+--------------------+------+-------------+--------+------+--------
-------------+
| 1 | 127.255.255.255/22 | 1 | 0 | 1 | 2 |
1131113262 |
+----+--------------------+------+-------------+--------+------+--------
-------------+
The nad_ips and nad_hosts tables are empty.
Again running manually, the table nad_networks has the following
records:
+----+--------------------+------+-------------+--------+------+--------
-------------+
| id | network | deep | oper_status | parent | seed |
oper_status_changed |
+----+--------------------+------+-------------+--------+------+--------
-------------+
| 1 | 127.255.255.255/22 | 1 | 0 | 1 | 2 |
1131114074 |
| 2 | 127.255.255.255/22 | 1 | 3 | 1 | 2 |
1131114119 |
+----+--------------------+------+-------------+--------+------+--------
-------------+
and the tables nad* are non empty with wrong value.
I do some changes to the file autodiscovery_network.php and now the
NAD works almost well
om my network. There is another bug: some hosts are not displayed.
Can you test my module on your networks?
The changes are:
--- autodiscovery_network.php 2005-11-07 11:53:27.384740520 +0100
+++ autodiscovery_network.php.good 2005-11-07 12:08:42.794577072 +0100
@@ -35,7 +35,7 @@
}
function ip_to_str2 ($ip_ip) {
- $ip_bin = decbin($ip_ip);
+ $ip_bin = base_convert($ip_ip, 10, 2);
$ip_bin = str_pad($ip_bin,32,"0",STR_PAD_LEFT);
$parte1 = substr($ip_bin,0,8);
$parte2 = substr($ip_bin,8,8);
@@ -57,7 +57,10 @@
}
function bitsmask_to_mask ($bmask) {
- $b = round(pow(2,32) - pow(2,32 - $bmask));
+ $appo = 32 - $bmask;
+ $appo1 = pow(2,32);
+ $appo2 = pow(2,$appo);
+ $b = $appo1 -$appo2;
$b = ip_to_str2 ($b);
return $b;
}
@@ -85,7 +89,9 @@
if (
(ip_same_network($net, $private_net,
bitsmask_to_mask($private_mask))) || // base net is the same network as a
private net
- (ip_same_network($net, "0.0.0.0", bitsmask_to_mask($net_mask)))
// base net is 0.0.0.0
+ (ip_same_network($net, "0.0.0.0", bitsmask_to_mask($net_mask)))
|| // base net is 0.0.0.0
+ (ip_same_network($net, "0.0.0.0", bitsmask_to_mask(24)))
// base net is 0.0.0.0
+
)
return true;
}
@@ -117,7 +123,9 @@
$hosts_up = 0;
$hosts_unique = 0;
- $net_data = current(nad_load_networks($network));
+ $tmp_data = nad_load_networks($network);
+ $net_data = current($tmp_data);
+
if (!$output) ob_start();
@@ -204,6 +213,9 @@
// Create IPs Table
foreach ($snmp_ips_data as $key=>$aux_ip) {
+ $aux_ip = trim($aux_ip);
+
+ if (strpos(" ", $aux_ip)!==false)
list(,$aux_ip) = explode (" ",$aux_ip);
if (!in_array($aux_ip,$invalid_ips)) {
@@ -225,13 +237,16 @@
// Populate the IPs table with Mask and Type data
foreach ($host_ips as $aux_ip=>$ipd) {
+ if (strpos(" ", $aux_mask)!==false)
list(,$aux_mask) = explode ("
",$snmp_mask_data[$ipd["pos"]]);
+ else
+ $aux_mask = $snmp_mask_data[$ipd["pos"]];
+
if (empty($aux_mask)) $aux_mask = "255.255.255.0"; //
Fix for broken IP-MIB implementations
$if_index = $snmp_int_data[$ipd["pos"]];
list(,$if_status) = split("[()]",snmp_get($host_ip, $comm,
$intstatus_oid.".".$if_index));
- //$if_status = 1;
if ($if_status == 1) { // Its UP
unset ($if_type);
list(,$if_type) = split("[()]",snmp_get($host_ip, $comm,
$inttype_oid.".".$if_index));
@@ -323,10 +341,11 @@
$ip_bit = str_to_ip($ip);
$mask_bit = str_to_ip($mask);
- $net_bit = $ip_bit & $mask_bit;
+ $net_bit = base_convert(( (base_convert($ip_bit,10,2)) &
(base_convert($mask_bit, 10, 2))), 2, 10);
+
$net = ip_to_str2 ($net_bit);
- if ($net != "127.0.0.0") {
+ if ( ($net != "127.0.0.0") && ($net!="0.0.0.0")) {
$oper_status = 0;
$mask_prefix = ip_to_bitsmask ($mask_bit);
@@ -348,11 +367,23 @@
"via NET_ID $parent_net, Deep $deep\n");
*/
- if (!isset($networks[$aux]))
- return db_insert("nad_networks",array("network"=>$aux, "deep"=>$deep,
"parent"=>$parent_net,
- "oper_status"=>$oper_status, "seed"=>$seed_id,
"oper_status_changed"=>time(), "id"=>$id));
- else
- return $networks[$aux]["id"]; // return the network id
+ if (!isset($networks[$aux])) {
+
+ $fields = array("network"=>$aux, "deep"=>$deep,
"parent"=>$parent_net,
+ "oper_status"=>$oper_status, "seed"=>$seed_id,
"oper_status_changed"=>time());
+
+ if ($id!==NULL) $fields["id"] = $id;
+
+ $appo = db_insert("nad_networks",$fields);
+
+ return $appo;
+
+ } else
+ {
+ $appo = $networks[$aux]["id"]; // return the network
ida
+
+ return $appo;
+ }
}
}
@@ -469,7 +500,8 @@
db_repair("nad_hosts");
db_repair("nad_ips");
- nad_load_seeds(nad_load_networks());
+ $tmp_networks = nad_load_networks();
+ nad_load_seeds($tmp_networks);
return true;
}
@@ -555,7 +587,7 @@
if (($net_data["oper_status"] == 2) &&
// if its Running
!isset($pending_items[$network])) {
// and its not in the pending list
- nad_network_status ($net_data["id"], 5);
// mark it as error
+ //nad_network_status ($net_data["id"], 5);
// mark it as error
logger("Changed Network $network to Error, because it was hanged
running\n");
}
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
jffnms-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jffnms-users