[Nagiosplug-checkins] SF.net SVN: nagiosplug:[2256] nagiosplug/trunk
dermoth at users.sourceforge.net
dermoth at users.sourceforge.net
Fri Oct 16 04:15:12 CEST 2009
Revision: 2256
http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=2256&view=rev
Author: dermoth
Date: 2009-10-16 02:15:12 +0000 (Fri, 16 Oct 2009)
Log Message:
-----------
Increment per-host sequence in check_icmp
From: Thomas Guyot-Sionnest <dermoth at aei.ca>
Modified Paths:
--------------
nagiosplug/trunk/NEWS
nagiosplug/trunk/plugins-root/check_icmp.c
Modified: nagiosplug/trunk/NEWS
===================================================================
--- nagiosplug/trunk/NEWS 2009-10-09 22:13:27 UTC (rev 2255)
+++ nagiosplug/trunk/NEWS 2009-10-16 02:15:12 UTC (rev 2256)
@@ -5,6 +5,7 @@
FIXES
Fix check_ircd binding to wrong interface (#668778)
Add proxy-authorization option to check_http (Marcel Kuiper - #1323230, Bryan Irvine - #2863925)
+ check_icmp now increment the sequence counter in each packet
WARNINGS
Updated developer documentation to say that performance labels should not have an equals sign or
single quote in the label
Modified: nagiosplug/trunk/plugins-root/check_icmp.c
===================================================================
--- nagiosplug/trunk/plugins-root/check_icmp.c 2009-10-09 22:13:27 UTC (rev 2255)
+++ nagiosplug/trunk/plugins-root/check_icmp.c 2009-10-16 02:15:12 UTC (rev 2256)
@@ -333,14 +333,14 @@
* to RFC 792). If it isn't, just ignore it */
memcpy(&sent_icmp, packet + 28, sizeof(sent_icmp));
if(sent_icmp.icmp_type != ICMP_ECHO || sent_icmp.icmp_id != pid ||
- sent_icmp.icmp_seq >= targets)
+ sent_icmp.icmp_seq >= targets*packets)
{
if(debug) printf("Packet is no response to a packet we sent\n");
return 0;
}
/* it is indeed a response for us */
- host = table[sent_icmp.icmp_seq];
+ host = table[sent_icmp.icmp_seq/packets];
if(debug) {
printf("Received \"%s\" from %s for ICMP ECHO sent to %s.\n",
get_icmp_error_msg(p.icmp_type, p.icmp_code),
@@ -624,7 +624,7 @@
table = malloc(sizeof(struct rta_host **) * (argc - 1));
i = 0;
while(host) {
- host->id = i;
+ host->id = i*packets;
table[i] = host;
host = host->next;
i++;
@@ -763,12 +763,7 @@
/* check the response */
memcpy(&icp, buf + hlen, sizeof(icp));
- if(icp.icmp_id != pid) {
- handle_random_icmp(buf + hlen, &resp_addr);
- continue;
- }
-
- if(icp.icmp_type != ICMP_ECHOREPLY || icp.icmp_seq >= targets) {
+ if(icp.icmp_id != pid || icp.icmp_type != ICMP_ECHOREPLY || icp.icmp_seq >= targets*packets) {
if(debug > 2) printf("not a proper ICMP_ECHOREPLY\n");
handle_random_icmp(buf + hlen, &resp_addr);
continue;
@@ -776,8 +771,11 @@
/* this is indeed a valid response */
memcpy(&data, icp.icmp_data, sizeof(data));
+ if (debug > 2)
+ printf("ICMP echo-reply of len %u, id %u, seq %u, cksum 0x%X\n",
+ sizeof(data), icp.icmp_id, icp.icmp_seq, icp.icmp_cksum);
- host = table[icp.icmp_seq];
+ host = table[icp.icmp_seq/packets];
gettimeofday(&now, &tz);
tdiff = get_timevaldiff(&data.stime, &now);
@@ -848,9 +846,13 @@
packet.icp->icmp_code = 0;
packet.icp->icmp_cksum = 0;
packet.icp->icmp_id = pid;
- packet.icp->icmp_seq = host->id;
+ packet.icp->icmp_seq = host->id++;
packet.icp->icmp_cksum = icmp_checksum(packet.cksum_in, icmp_pkt_size);
+ if (debug > 2)
+ printf("Sending ICMP echo-request of len %u, id %u, seq %u, cksum 0x%X to host %s\n",
+ sizeof(data), packet.icp->icmp_id, packet.icp->icmp_seq, packet.icp->icmp_cksum, host->name);
+
len = sendto(sock, packet.buf, icmp_pkt_size, 0, (struct sockaddr *)addr,
sizeof(struct sockaddr));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list