throughput.c revision 31343
131272Sbrian/* 231343Sbrian * $Id: throughput.c,v 1.1 1997/11/18 14:52:07 brian Exp $ 331272Sbrian */ 431272Sbrian 531272Sbrian#include <sys/param.h> 631272Sbrian 731272Sbrian#include <stdio.h> 831272Sbrian#include <time.h> 931272Sbrian#include <netinet/in.h> 1031272Sbrian 1131343Sbrian#include "command.h" 1231343Sbrian#include "mbuf.h" 1331343Sbrian#include "log.h" 1431272Sbrian#include "timer.h" 1531272Sbrian#include "throughput.h" 1631272Sbrian#include "defs.h" 1731272Sbrian#include "loadalias.h" 1831272Sbrian#include "vars.h" 1931272Sbrian 2031272Sbrianvoid 2131272Sbrianthroughput_init(struct pppThroughput *t) 2231272Sbrian{ 2331272Sbrian int f; 2431272Sbrian 2531272Sbrian t->OctetsIn = t->OctetsOut = 0; 2631272Sbrian for (f = 0; f < SAMPLE_PERIOD; f++) 2731272Sbrian t->SampleOctets[f] = 0; 2831272Sbrian t->OctetsPerSecond = t->BestOctetsPerSecond = t->nSample = 0; 2931272Sbrian throughput_stop(t); 3031272Sbrian} 3131272Sbrian 3231272Sbrianvoid 3331272Sbrianthroughput_disp(struct pppThroughput *t, FILE *f) 3431272Sbrian{ 3531272Sbrian int secs_up; 3631272Sbrian 3731272Sbrian secs_up = time(NULL) - t->uptime; 3831272Sbrian fprintf(f, "Connect time: %d secs\n", secs_up); 3931272Sbrian if (secs_up == 0) 4031272Sbrian secs_up = 1; 4131272Sbrian fprintf(f, "%ld octets in, %ld octets out\n", t->OctetsIn, t->OctetsOut); 4231272Sbrian if (Enabled(ConfThroughput)) { 4331272Sbrian fprintf(f, " overall %5ld bytes/sec\n", 4431272Sbrian (t->OctetsIn+t->OctetsOut)/secs_up); 4531272Sbrian fprintf(f, " currently %5d bytes/sec\n", t->OctetsPerSecond); 4631272Sbrian fprintf(f, " peak %5d bytes/sec\n", t->BestOctetsPerSecond); 4731272Sbrian } else 4831272Sbrian fprintf(f, "Overall %ld bytes/sec\n", (t->OctetsIn+t->OctetsOut)/secs_up); 4931272Sbrian} 5031272Sbrian 5131272Sbrian 5231272Sbrianvoid 5331272Sbrianthroughput_log(struct pppThroughput *t, int level, const char *title) 5431272Sbrian{ 5531272Sbrian if (t->uptime) { 5631272Sbrian int secs_up; 5731272Sbrian 5831272Sbrian secs_up = time(NULL) - t->uptime; 5931272Sbrian if (title) 6031272Sbrian LogPrintf(level, "%s: Connect time: %d secs: %ld octets in, %ld octets" 6131272Sbrian " out\n", title, secs_up, t->OctetsIn, t->OctetsOut); 6231272Sbrian else 6331272Sbrian LogPrintf(level, "Connect time: %d secs: %ld octets in, %ld octets out\n", 6431272Sbrian secs_up, t->OctetsIn, t->OctetsOut); 6531272Sbrian if (secs_up == 0) 6631272Sbrian secs_up = 1; 6731272Sbrian if (Enabled(ConfThroughput)) 6831272Sbrian LogPrintf(level, " total %ld bytes/sec, peak %d bytes/sec\n", 6931272Sbrian (t->OctetsIn+t->OctetsOut)/secs_up, t->BestOctetsPerSecond); 7031272Sbrian else 7131272Sbrian LogPrintf(level, " total %ld bytes/sec\n", 7231272Sbrian (t->OctetsIn+t->OctetsOut)/secs_up); 7331272Sbrian } 7431272Sbrian} 7531272Sbrian 7631272Sbrianstatic void 7731343Sbrianthroughput_sampler(void *v) 7831272Sbrian{ 7931343Sbrian struct pppThroughput *t = (struct pppThroughput *)v; 8031272Sbrian u_long old; 8131272Sbrian 8231272Sbrian StopTimer(&t->Timer); 8331272Sbrian t->Timer.state = TIMER_STOPPED; 8431272Sbrian 8531272Sbrian old = t->SampleOctets[t->nSample]; 8631272Sbrian t->SampleOctets[t->nSample] = t->OctetsIn + t->OctetsOut; 8731272Sbrian t->OctetsPerSecond = (t->SampleOctets[t->nSample] - old) / SAMPLE_PERIOD; 8831272Sbrian if (t->BestOctetsPerSecond < t->OctetsPerSecond) 8931272Sbrian t->BestOctetsPerSecond = t->OctetsPerSecond; 9031272Sbrian if (++t->nSample == SAMPLE_PERIOD) 9131272Sbrian t->nSample = 0; 9231272Sbrian 9331272Sbrian StartTimer(&t->Timer); 9431272Sbrian} 9531272Sbrian 9631272Sbrianvoid 9731272Sbrianthroughput_start(struct pppThroughput *t) 9831272Sbrian{ 9931272Sbrian throughput_init(t); 10031272Sbrian time(&t->uptime); 10131272Sbrian if (Enabled(ConfThroughput)) { 10231272Sbrian t->Timer.state = TIMER_STOPPED; 10331272Sbrian t->Timer.load = SECTICKS; 10431272Sbrian t->Timer.func = throughput_sampler; 10531272Sbrian t->Timer.arg = t; 10631272Sbrian StartTimer(&t->Timer); 10731272Sbrian } 10831272Sbrian} 10931272Sbrian 11031272Sbrianvoid 11131272Sbrianthroughput_stop(struct pppThroughput *t) 11231272Sbrian{ 11331272Sbrian if (Enabled(ConfThroughput)) 11431272Sbrian StopTimer(&t->Timer); 11531272Sbrian} 11631272Sbrian 11731272Sbrianvoid 11831272Sbrianthroughput_addin(struct pppThroughput *t, int n) 11931272Sbrian{ 12031272Sbrian t->OctetsIn += n; 12131272Sbrian} 12231272Sbrian 12331272Sbrianvoid 12431272Sbrianthroughput_addout(struct pppThroughput *t, int n) 12531272Sbrian{ 12631272Sbrian t->OctetsOut += n; 12731272Sbrian} 128