From: Paul Mackerras Date: Thu, 13 May 1999 00:35:23 +0000 (+0000) Subject: set env vars with link stats X-Git-Tag: ppp-2.4.7~698 X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=10d17d19d3f7fe61e3b1f46a97198c521b535589;ds=sidebyside set env vars with link stats --- diff --git a/pppd/ipcp.c b/pppd/ipcp.c index d928c9f..aeac233 100644 --- a/pppd/ipcp.c +++ b/pppd/ipcp.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: ipcp.c,v 1.45 1999/05/04 06:57:27 paulus Exp $"; +static char rcsid[] = "$Id: ipcp.c,v 1.46 1999/05/13 00:35:23 paulus Exp $"; #endif /* @@ -1524,8 +1524,9 @@ ipcp_down(f) fsm *f; { IPCPDEBUG(("ipcp: down")); - if (get_ppp_stats(f->unit, &link_stats)) - link_stats_valid = 1; + /* XXX a bit IPv4-centric here, we only need to get the stats + * before the interface is marked down. */ + update_link_stats(f->unit); if (ipcp_is_up) { ipcp_is_up = 0; np_down(f->unit, PPP_IP); diff --git a/pppd/main.c b/pppd/main.c index cd795fa..7eee192 100644 --- a/pppd/main.c +++ b/pppd/main.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: main.c,v 1.78 1999/05/12 06:19:47 paulus Exp $"; +static char rcsid[] = "$Id: main.c,v 1.79 1999/05/13 00:35:23 paulus Exp $"; #endif #include @@ -120,6 +120,7 @@ int ngroups; /* How many groups valid in groups */ static struct timeval start_time; /* Time when link was started. */ struct pppd_stats link_stats; +int link_connect_time; int link_stats_valid; static int charshunt_pid; /* Process ID for charshunt */ @@ -213,7 +214,6 @@ main(argc, argv) struct protent *protp; struct stat statbuf; char numbuf[16]; - struct timeval now; phase = PHASE_INITIALIZE; @@ -742,6 +742,10 @@ main(argc, argv) */ notice("Connect: %s <--> %s", ifname, ppp_devnam); gettimeofday(&start_time, NULL); + link_stats_valid = 0; + script_unsetenv("CONNECT_TIME"); + script_unsetenv("BYTES_SENT"); + script_unsetenv("BYTES_RCVD"); lcp_lowerup(0); /* @@ -792,12 +796,9 @@ main(argc, argv) /* * Print connect time and statistics. */ - if (gettimeofday(&now, NULL) >= 0) { - int t = now.tv_sec - start_time.tv_sec; - t = (t + 5) / 6; /* now in 1/10ths of minutes */ - info("Connect time %d.%d minutes.", t/10, t%10); - } if (link_stats_valid) { + int t = (link_connect_time + 5) / 6; /* 1/10ths of minutes */ + info("Connect time %d.%d minutes.", t/10, t%10); info("Sent %d bytes, received %d bytes.", link_stats.bytes_out, link_stats.bytes_in); } @@ -1119,6 +1120,30 @@ close_tty() real_ttyfd = -1; } +/* + * update_link_stats - get stats at link termination. + */ +void +update_link_stats(u) + int u; +{ + struct timeval now; + char numbuf[32]; + + if (!get_ppp_stats(u, &link_stats) + || gettimeofday(&now, NULL) < 0) + return; + link_connect_time = now.tv_sec - start_time.tv_sec; + link_stats_valid = 1; + + slprintf(numbuf, sizeof(numbuf), "%d", link_connect_time); + script_setenv("CONNECT_TIME", numbuf); + slprintf(numbuf, sizeof(numbuf), "%d", link_stats.bytes_out); + script_setenv("BYTES_SENT", numbuf); + slprintf(numbuf, sizeof(numbuf), "%d", link_stats.bytes_in); + script_setenv("BYTES_RCVD", numbuf); +} + struct callout { struct timeval c_time; /* time at which to call routine */