[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