1 /* 2 * Copyright (c) 1983 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)networkdelta.c 2.4 (Berkeley) 06/01/90"; 10 #endif /* not lint */ 11 12 #include "globals.h" 13 #include <protocols/timed.h> 14 15 extern int machup; 16 17 /* 18 * `networkdelta' selects the largest set of deltas that fall within the 19 * interval RANGE, and uses them to compute the network average delta 20 */ 21 22 long networkdelta() 23 { 24 int i, j, maxind, minind; 25 int ext; 26 int tempind; 27 long tempdata; 28 long x[NHOSTS]; 29 long average; 30 31 for (i=0; i<slvcount; i++) 32 x[i] = hp[i].delta; 33 for (i=0; i<slvcount-1; i++) { 34 tempdata = x[i]; 35 tempind = i; 36 for (j=i+1; j<slvcount; j++) { 37 if (x[j] < tempdata) { 38 tempdata = x[j]; 39 tempind = j; 40 } 41 } 42 x[tempind] = x[i]; 43 x[i] = tempdata; 44 } 45 46 /* this piece of code is critical: DO NOT TOUCH IT! */ 47 /****/ 48 i=0; j=1; minind=0; maxind=1; 49 if (machup == 2) 50 goto compute; 51 do { 52 if (x[j]-x[i] <= RANGE) 53 j++; 54 else { 55 if (j > i+1) 56 j--; 57 if ((x[j]-x[i] <= RANGE) && (j-i >= maxind-minind)) { 58 minind=i; 59 maxind=j; 60 } 61 i++; 62 if(i = j) 63 j++; 64 } 65 } while (j < machup); 66 if ((x[machup-1] - x[i] <= RANGE) && (machup-i-1 >= maxind-minind)) { 67 minind=i; maxind=machup-1; 68 } 69 /****/ 70 compute: 71 ext = maxind - minind + 1; 72 average = 0; 73 for (i=minind; i<=maxind; i++) 74 average += x[i]; 75 average /= ext; 76 return(average); 77 } 78