summaryrefslogtreecommitdiff
path: root/accel-pppd/radius
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2012-09-05 21:56:53 +0400
committerKozlov Dmitry <xeb@mail.ru>2012-09-05 21:56:53 +0400
commit28c47fa1ccf6a6550f335046349b1716745a2189 (patch)
tree3d9d64efcdfb11fa7c74fa3dcf3db71eba772b8f /accel-pppd/radius
parentf26abc454476bded89de516ebc099a3f62c54fb9 (diff)
downloadaccel-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.c31
-rw-r--r--accel-pppd/radius/radius_p.h5
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;