diff options
| author | Denys Fedoryshchenko <denys.f@collabora.com> | 2025-12-13 17:06:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-13 17:06:13 +0200 |
| commit | 2e13b0ccfb3b87955ec1cb141435575d87a09570 (patch) | |
| tree | a7829c8236f9dc0b1387c7e46abb16339abbf1f8 | |
| parent | 5e7dfbe6e1c6c2a12c093303a65b8260e5165aaf (diff) | |
| parent | 8c8ddabc22a523fb129e422baa025d720c3b455b (diff) | |
| download | accel-ppp-2e13b0ccfb3b87955ec1cb141435575d87a09570.tar.gz accel-ppp-2e13b0ccfb3b87955ec1cb141435575d87a09570.zip | |
Merge pull request #279 from nuclearcat/fix-acct
acct: Fix losing some data on interface down due wrong sequence
| -rw-r--r-- | accel-pppd/radius/acct.c | 16 | ||||
| -rw-r--r-- | accel-pppd/session.c | 3 |
2 files changed, 7 insertions, 12 deletions
diff --git a/accel-pppd/radius/acct.c b/accel-pppd/radius/acct.c index 803c9454..a45606ea 100644 --- a/accel-pppd/radius/acct.c +++ b/accel-pppd/radius/acct.c @@ -42,7 +42,6 @@ static int req_set_RA(struct rad_req_t *req, const char *secret) static int req_set_stat(struct rad_req_t *req, struct ap_session *ses) { - struct rtnl_link_stats64 stats; struct timespec ts; int ret = 0; @@ -51,15 +50,12 @@ static int req_set_stat(struct rad_req_t *req, struct ap_session *ses) else clock_gettime(CLOCK_MONOTONIC, &ts); - if (ap_session_read_stats(ses, &stats) == 0) { - rad_packet_change_int(req->pack, NULL, "Acct-Input-Octets", (int) (stats.rx_bytes & UINT32_MAX)); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Octets", (int) (stats.tx_bytes & UINT32_MAX)); - rad_packet_change_int(req->pack, NULL, "Acct-Input-Packets", (int) (stats.rx_packets & UINT32_MAX)); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Packets", (int) (stats.tx_packets & UINT32_MAX)); - rad_packet_change_int(req->pack, NULL, "Acct-Input-Gigawords", (int) (stats.rx_bytes >> (sizeof(uint32_t) * 8))); - rad_packet_change_int(req->pack, NULL, "Acct-Output-Gigawords", (int) (stats.tx_bytes >> (sizeof(uint32_t) * 8))); - } else - ret = -1; + rad_packet_change_int(req->pack, NULL, "Acct-Input-Octets", (int) (ses->acct_rx_bytes & UINT32_MAX)); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Octets", (int) (ses->acct_tx_bytes & UINT32_MAX)); + rad_packet_change_int(req->pack, NULL, "Acct-Input-Packets", (int) (ses->acct_rx_packets & UINT32_MAX)); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Packets", (int) (ses->acct_tx_packets & UINT32_MAX)); + rad_packet_change_int(req->pack, NULL, "Acct-Input-Gigawords", (int) (ses->acct_rx_bytes >> (sizeof(uint32_t) * 8))); + rad_packet_change_int(req->pack, NULL, "Acct-Output-Gigawords", (int) (ses->acct_tx_bytes >> (sizeof(uint32_t) * 8))); rad_packet_change_int(req->pack, NULL, "Acct-Session-Time", ts.tv_sec - ses->start_time); diff --git a/accel-pppd/session.c b/accel-pppd/session.c index 74b39475..a1b194a3 100644 --- a/accel-pppd/session.c +++ b/accel-pppd/session.c @@ -186,7 +186,6 @@ void __export ap_session_finished(struct ap_session *ses) if (!ses->down) { ap_session_ifdown(ses); - ap_session_read_stats(ses, NULL); triton_event_fire(EV_SES_FINISHING, ses); } @@ -309,10 +308,10 @@ void __export ap_session_terminate(struct ap_session *ses, int cause, int hard) ses->state = AP_STATE_FINISHING; log_ppp_debug("terminate\n"); + ap_session_read_stats(ses, NULL); if (ses->ctrl->terminate(ses, hard)) { ap_session_ifdown(ses); - ap_session_read_stats(ses, NULL); triton_event_fire(EV_SES_FINISHING, ses); |
