SF.net SVN: nagiosplug:[2256] nagiosplug/trunk

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
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 <[email protected]>

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.

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.