diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2012-09-05 21:56:53 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2012-09-05 21:56:53 +0400 |
commit | 28c47fa1ccf6a6550f335046349b1716745a2189 (patch) | |
tree | 3d9d64efcdfb11fa7c74fa3dcf3db71eba772b8f /accel-pppd/radius | |
parent | f26abc454476bded89de516ebc099a3f62c54fb9 (diff) | |
download | accel-ppp-28c47fa1ccf6a6550f335046349b1716745a2189.tar.gz accel-ppp-28c47fa1ccf6a6550f335046349b1716745a2189.zip |
gather interface statistics via netlink
Diffstat (limited to 'accel-pppd/radius')
-rw-r--r-- | accel-pppd/radius/acct.c | 31 | ||||
-rw-r--r-- | accel-pppd/radius/radius_p.h | 5 |
2 files changed, 8 insertions, 28 deletions
diff --git a/accel-pppd/radius/acct.c b/accel-pppd/radius/acct.c index 76ad3299..9a832a9c 100644 --- a/accel-pppd/radius/acct.c +++ b/accel-pppd/radius/acct.c @@ -34,7 +34,7 @@ static int req_set_RA(struct rad_req_t *req, const char *secret) static void req_set_stat(struct rad_req_t *req, struct ppp_t *ppp) { - struct ifpppstatsreq ifreq; + struct rtnl_link_stats stats; time_t stop_time; if (ppp->stop_time) @@ -42,29 +42,14 @@ static void req_set_stat(struct rad_req_t *req, struct ppp_t *ppp) else time(&stop_time); - memset(&ifreq, 0, sizeof(ifreq)); - ifreq.stats_ptr = (void *)&ifreq.stats; - strcpy(ifreq.ifr__name, ppp->ifname); - - if (ioctl(sock_fd, SIOCGPPPSTATS, &ifreq)) { - log_ppp_error("radius: failed to get ppp statistics: %s\n", strerror(errno)); - return; + if (ppp_read_stats(ppp, &stats) == 0) { + rad_packet_change_int(req->pack, NULL, "Acct-Input-Octets", stats.rx_bytes); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Octets", stats.tx_bytes); + rad_packet_change_int(req->pack, NULL, "Acct-Input-Packets", stats.rx_packets); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Packets", stats.tx_packets); + rad_packet_change_int(req->pack, NULL, "Acct-Input-Gigawords", ppp->acct_input_gigawords); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Gigawords", ppp->acct_output_gigawords); } - - if (ifreq.stats.p.ppp_ibytes < req->rpd->acct_input_octets) - req->rpd->acct_input_gigawords++; - req->rpd->acct_input_octets = ifreq.stats.p.ppp_ibytes; - - if (ifreq.stats.p.ppp_obytes < req->rpd->acct_output_octets) - req->rpd->acct_output_gigawords++; - req->rpd->acct_output_octets = ifreq.stats.p.ppp_obytes; - - rad_packet_change_int(req->pack, NULL, "Acct-Input-Octets", ifreq.stats.p.ppp_ibytes); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Octets", ifreq.stats.p.ppp_obytes); - rad_packet_change_int(req->pack, NULL, "Acct-Input-Packets", ifreq.stats.p.ppp_ipackets); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Packets", ifreq.stats.p.ppp_opackets); - rad_packet_change_int(req->pack, NULL, "Acct-Input-Gigawords", req->rpd->acct_input_gigawords); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Gigawords", req->rpd->acct_output_gigawords); rad_packet_change_int(req->pack, NULL, "Acct-Session-Time", stop_time - ppp->start_time); } diff --git a/accel-pppd/radius/radius_p.h b/accel-pppd/radius/radius_p.h index 7422bbf3..65d9b6a3 100644 --- a/accel-pppd/radius/radius_p.h +++ b/accel-pppd/radius/radius_p.h @@ -23,11 +23,6 @@ struct radius_pd_t struct rad_req_t *auth_req; struct rad_req_t *acct_req; struct triton_timer_t acct_interim_timer; - uint32_t acct_input_octets; - uint32_t acct_output_octets; - uint32_t acct_input_gigawords; - uint32_t acct_output_gigawords; - struct triton_timer_t session_timeout; struct rad_packet_t *dm_coa_req; |