diff options
author | brian <brian@FreeBSD.org> | 1997-11-18 14:52:08 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1997-11-18 14:52:08 +0000 |
commit | 7a358d8b024e6ebd90807720438c539bcac14855 (patch) | |
tree | baa2a2ef6ea91adf2c59b11bbffbd706f85ced30 /usr.sbin/ppp/throughput.c | |
parent | 907dcc5c043baddb164e2c76f04097ea096b9c3a (diff) | |
download | FreeBSD-src-7a358d8b024e6ebd90807720438c539bcac14855.zip FreeBSD-src-7a358d8b024e6ebd90807720438c539bcac14855.tar.gz |
Add throughput logging (disabled by default).
Use "enable throughput" to see modem & IPCP throughput.
Removed an extraneous prompt()
Diffstat (limited to 'usr.sbin/ppp/throughput.c')
-rw-r--r-- | usr.sbin/ppp/throughput.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/usr.sbin/ppp/throughput.c b/usr.sbin/ppp/throughput.c new file mode 100644 index 0000000..d356709 --- /dev/null +++ b/usr.sbin/ppp/throughput.c @@ -0,0 +1,126 @@ +/* + * $Id$ + */ + +#include <sys/param.h> + +#include <stdio.h> +#include <time.h> +#include <netinet/in.h> + +#include "timer.h" +#include "throughput.h" +#include "defs.h" +#include "loadalias.h" +#include "command.h" +#include "vars.h" +#include "mbuf.h" +#include "log.h" + +void +throughput_init(struct pppThroughput *t) +{ + int f; + + t->OctetsIn = t->OctetsOut = 0; + for (f = 0; f < SAMPLE_PERIOD; f++) + t->SampleOctets[f] = 0; + t->OctetsPerSecond = t->BestOctetsPerSecond = t->nSample = 0; + throughput_stop(t); +} + +void +throughput_disp(struct pppThroughput *t, FILE *f) +{ + int secs_up; + + secs_up = time(NULL) - t->uptime; + fprintf(f, "Connect time: %d secs\n", secs_up); + if (secs_up == 0) + secs_up = 1; + fprintf(f, "%ld octets in, %ld octets out\n", t->OctetsIn, t->OctetsOut); + if (Enabled(ConfThroughput)) { + fprintf(f, " overall %5ld bytes/sec\n", + (t->OctetsIn+t->OctetsOut)/secs_up); + fprintf(f, " currently %5d bytes/sec\n", t->OctetsPerSecond); + fprintf(f, " peak %5d bytes/sec\n", t->BestOctetsPerSecond); + } else + fprintf(f, "Overall %ld bytes/sec\n", (t->OctetsIn+t->OctetsOut)/secs_up); +} + + +void +throughput_log(struct pppThroughput *t, int level, const char *title) +{ + if (t->uptime) { + int secs_up; + + secs_up = time(NULL) - t->uptime; + if (title) + LogPrintf(level, "%s: Connect time: %d secs: %ld octets in, %ld octets" + " out\n", title, secs_up, t->OctetsIn, t->OctetsOut); + else + LogPrintf(level, "Connect time: %d secs: %ld octets in, %ld octets out\n", + secs_up, t->OctetsIn, t->OctetsOut); + if (secs_up == 0) + secs_up = 1; + if (Enabled(ConfThroughput)) + LogPrintf(level, " total %ld bytes/sec, peak %d bytes/sec\n", + (t->OctetsIn+t->OctetsOut)/secs_up, t->BestOctetsPerSecond); + else + LogPrintf(level, " total %ld bytes/sec\n", + (t->OctetsIn+t->OctetsOut)/secs_up); + } +} + +static void +throughput_sampler(struct pppThroughput *t) +{ + u_long old; + + StopTimer(&t->Timer); + t->Timer.state = TIMER_STOPPED; + + old = t->SampleOctets[t->nSample]; + t->SampleOctets[t->nSample] = t->OctetsIn + t->OctetsOut; + t->OctetsPerSecond = (t->SampleOctets[t->nSample] - old) / SAMPLE_PERIOD; + if (t->BestOctetsPerSecond < t->OctetsPerSecond) + t->BestOctetsPerSecond = t->OctetsPerSecond; + if (++t->nSample == SAMPLE_PERIOD) + t->nSample = 0; + + StartTimer(&t->Timer); +} + +void +throughput_start(struct pppThroughput *t) +{ + throughput_init(t); + time(&t->uptime); + if (Enabled(ConfThroughput)) { + t->Timer.state = TIMER_STOPPED; + t->Timer.load = SECTICKS; + t->Timer.func = throughput_sampler; + t->Timer.arg = t; + StartTimer(&t->Timer); + } +} + +void +throughput_stop(struct pppThroughput *t) +{ + if (Enabled(ConfThroughput)) + StopTimer(&t->Timer); +} + +void +throughput_addin(struct pppThroughput *t, int n) +{ + t->OctetsIn += n; +} + +void +throughput_addout(struct pppThroughput *t, int n) +{ + t->OctetsOut += n; +} |