File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / hping2 / rtt.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:11:37 2012 UTC (12 years, 3 months ago) by misho
Branches: hping2, MAIN
CVS tags: v2_0_0rc3p7, v2_0_0rc3p5, v2_0_0rc3p4, v2_0_0rc3p0, v2_0_0rc3, HEAD
hping2

    1: /* 
    2:  * $smu-mark$ 
    3:  * $name: rtt.c$ 
    4:  * $author: Salvatore Sanfilippo <antirez@invece.org>$ 
    5:  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$ 
    6:  * $license: This software is under GPL version 2 of license$ 
    7:  * $date: Fri Nov  5 11:55:49 MET 1999$ 
    8:  * $rev: 3$ 
    9:  */ 
   10: 
   11: #include <time.h>
   12: #include <stdio.h>
   13: 
   14: #include "hping2.h"
   15: #include "globals.h"
   16: 
   17: void minavgmax(float ms_delay)
   18: {
   19: 	static int avg_counter = 0;
   20: 
   21: 	if (rtt_min == 0 || ms_delay < rtt_min)
   22: 		rtt_min = ms_delay;
   23: 	if (rtt_max == 0 || ms_delay > rtt_max)
   24: 		rtt_max = ms_delay;
   25: 	avg_counter++;
   26: 	rtt_avg = (rtt_avg*(avg_counter-1)/avg_counter)+(ms_delay/avg_counter);
   27: }
   28: 
   29: int rtt(int *seqp, int recvport, float *ms_delay)
   30: {
   31: 	long sec_delay = 0, usec_delay = 0;
   32: 	int i, tablepos = -1, status;
   33: 
   34: 	if (*seqp != 0) {
   35: 		for (i = 0; i < TABLESIZE; i++)
   36: 			if (delaytable[i].seq == *seqp) {
   37: 				tablepos = i;
   38: 				break;
   39: 			}
   40: 	} else {
   41: 		for (i=0; i<TABLESIZE; i++)
   42: 			if (delaytable[i].src == recvport) {
   43: 				tablepos = i;
   44: 				break;
   45: 			}
   46: 			if (i != TABLESIZE)
   47: 				*seqp = delaytable[i].seq;
   48: 	}
   49: 
   50: 	if (tablepos != -1)
   51: 	{
   52: 		status = delaytable[tablepos].status;
   53: 		delaytable[tablepos].status = S_RECV;
   54: 
   55: 		sec_delay = time(NULL) - delaytable[tablepos].sec;
   56: 		usec_delay = get_usec() - delaytable[tablepos].usec;
   57: 		if (sec_delay == 0 && usec_delay < 0)
   58: 			usec_delay += 1000000;
   59: 
   60: 		*ms_delay = (sec_delay * 1000) + ((float)usec_delay / 1000);
   61: 		minavgmax(*ms_delay);
   62: 	}
   63: 	else
   64: 	{
   65: 		*ms_delay = 0;	/* not in table.. */
   66: 		status = 0;	/* we don't know if it's DUP */
   67: 	}
   68: 
   69: 	/* SANITY CHECK */
   70: 	if (*ms_delay < 0)
   71: 	{
   72: 		printf("\n\nSANITY CHECK in rtt.c FAILED!\n");
   73: 		printf("- seqnum = %d\n", *seqp);
   74: 		printf("- status = %d\n", status);
   75: 		printf("- get_usec() = %ld\n", (long int) get_usec());
   76: 		printf("- delaytable.usec = %ld\n", 
   77:                        (long int) delaytable[tablepos].usec);
   78: 		printf("- usec_delay = %ld\n", usec_delay);
   79: 		printf("- time(NULL) = %ld\n", (long int) time(NULL));
   80: 		printf("- delaytable.sec = %ld\n", 
   81:                        (long int) delaytable[tablepos].sec);
   82: 		printf("- sec_delay = %ld\n", sec_delay);
   83: 		printf("- ms_delay = %f\n", *ms_delay);
   84: 		printf("END SANITY CHECK REPORT\n\n");
   85: 	}
   86: 
   87: 	return status;
   88: }
   89: 
   90: void delaytable_add(int seq, int src, time_t sec, time_t usec, int status)
   91: {
   92: 	delaytable[delaytable_index % TABLESIZE].seq = seq;
   93: 	delaytable[delaytable_index % TABLESIZE].src = src;
   94: 	delaytable[delaytable_index % TABLESIZE].sec = sec;
   95: 	delaytable[delaytable_index % TABLESIZE].usec = usec;
   96: 	delaytable[delaytable_index % TABLESIZE].status = status;
   97: 	delaytable_index++;
   98: }
   99: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>