summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--accel-pppd/accel-ppp.conf1
-rw-r--r--accel-pppd/accel-ppp.conf.53
-rw-r--r--accel-pppd/radius/acct.c43
-rw-r--r--accel-pppd/radius/radius.c13
-rw-r--r--accel-pppd/radius/radius_p.h1
5 files changed, 41 insertions, 20 deletions
diff --git a/accel-pppd/accel-ppp.conf b/accel-pppd/accel-ppp.conf
index 1f3e7f8..c1bace8 100644
--- a/accel-pppd/accel-ppp.conf
+++ b/accel-pppd/accel-ppp.conf
@@ -74,6 +74,7 @@ verbose=1
#timeout=3
#max-try=3
#acct-timeout=120
+#acct-delay-time=0
[client-ip-range]
10.0.0.0/8
diff --git a/accel-pppd/accel-ppp.conf.5 b/accel-pppd/accel-ppp.conf.5
index 1c12078..eadb5bc 100644
--- a/accel-pppd/accel-ppp.conf.5
+++ b/accel-pppd/accel-ppp.conf.5
@@ -291,6 +291,9 @@ Specifies number of tries to send Access-Request/Accounting-Request queries.
.BI "acct-timeout=" n
Specifies timeout of accounting interim update.
.TP
+.BI "acct-delay-time=" 0|1
+Specifies whether radius client should include Acct-Delay-Time attribute to accounting requests (default 0).
+.TP
.SH [log]
.br
Configuration of log and log_file modules.
diff --git a/accel-pppd/radius/acct.c b/accel-pppd/radius/acct.c
index 2c12d2a..31ab298 100644
--- a/accel-pppd/radius/acct.c
+++ b/accel-pppd/radius/acct.c
@@ -144,10 +144,12 @@ static void rad_acct_timeout(struct triton_timer_t *t)
}
}
- req->pack->id++;
-
- rad_packet_change_int(req->pack, NULL, "Acct-Delay-Time", dt);
- req_set_RA(req, conf_acct_secret);
+ if (conf_acct_delay_time) {
+ req->pack->id++;
+ rad_packet_change_int(req->pack, NULL, "Acct-Delay-Time", dt);
+ req_set_RA(req, conf_acct_secret);
+ }
+
rad_req_send(req, conf_interim_verbose);
__sync_add_and_fetch(&stat_interim_sent, 1);
}
@@ -171,12 +173,13 @@ static void rad_acct_interim_update(struct triton_timer_t *t)
rpd->acct_req->pack->id++;
rad_packet_change_val(rpd->acct_req->pack, NULL, "Acct-Status-Type", "Interim-Update");
- rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", 0);
+ if (conf_acct_delay_time)
+ rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", 0);
req_set_RA(rpd->acct_req, conf_acct_secret);
rad_req_send(rpd->acct_req, conf_interim_verbose);
__sync_add_and_fetch(&stat_interim_sent, 1);
if (conf_acct_timeout) {
- rpd->acct_req->timeout.period = conf_acct_timeout * 1000;
+ rpd->acct_req->timeout.period = conf_timeout * 1000;
triton_timer_add(rpd->ppp->ctrl->ctx, &rpd->acct_req->timeout, 0);
}
}
@@ -213,17 +216,23 @@ int rad_acct_start(struct radius_pd_t *rpd)
time(&rpd->acct_timestamp);
+ if (req_set_RA(rpd->acct_req, conf_acct_secret))
+ goto out_err;
+
for (i = 0; i < conf_max_try; i++) {
- time(&ts);
- rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", ts - rpd->acct_timestamp);
- if (req_set_RA(rpd->acct_req, conf_acct_secret))
- goto out_err;
+ if (conf_acct_delay_time) {
+ time(&ts);
+ rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", ts - rpd->acct_timestamp);
+ if (req_set_RA(rpd->acct_req, conf_acct_secret))
+ goto out_err;
+ }
if (rad_req_send(rpd->acct_req, conf_verbose))
goto out_err;
__sync_add_and_fetch(&stat_acct_sent, 1);
rad_req_wait(rpd->acct_req, conf_timeout);
if (!rpd->acct_req->reply) {
- rpd->acct_req->pack->id++;
+ if (conf_acct_delay_time)
+ rpd->acct_req->pack->id++;
__sync_add_and_fetch(&stat_acct_lost, 1);
stat_accm_add(stat_acct_lost_1m, 1);
stat_accm_add(stat_acct_lost_5m, 1);
@@ -332,11 +341,13 @@ void rad_acct_stop(struct radius_pd_t *rpd)
time(&rpd->acct_timestamp);
for(i = 0; i < conf_max_try; i++) {
- time(&ts);
- rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", ts - rpd->acct_timestamp);
- rpd->acct_req->pack->id++;
- if (req_set_RA(rpd->acct_req, conf_acct_secret))
- break;
+ if (conf_acct_delay_time) {
+ time(&ts);
+ rad_packet_change_int(rpd->acct_req->pack, NULL, "Acct-Delay-Time", ts - rpd->acct_timestamp);
+ rpd->acct_req->pack->id++;
+ if (req_set_RA(rpd->acct_req, conf_acct_secret))
+ break;
+ }
if (rad_req_send(rpd->acct_req, conf_verbose))
break;
__sync_add_and_fetch(&stat_acct_sent, 1);
diff --git a/accel-pppd/radius/radius.c b/accel-pppd/radius/radius.c
index d3f1248..5663af9 100644
--- a/accel-pppd/radius/radius.c
+++ b/accel-pppd/radius/radius.c
@@ -26,6 +26,7 @@
int conf_max_try = 3;
int conf_timeout = 3;
int conf_acct_timeout = 3;
+int conf_acct_delay_time;
char *conf_nas_identifier;
in_addr_t conf_nas_ip_address;
in_addr_t conf_gw_ip_address;
@@ -521,17 +522,21 @@ static int load_config(void)
}
opt = conf_get_opt("radius", "sid_in_auth");
- if (opt && atoi(opt) > 0)
- conf_sid_in_auth = 1;
+ if (opt)
+ conf_sid_in_auth = atoi(opt);
opt = conf_get_opt("radius", "require-nas-identification");
- if (opt && atoi(opt) > 0)
- conf_require_nas_ident = 1;
+ if (opt)
+ conf_require_nas_ident = atoi(opt);
opt = conf_get_opt("radius", "acct-interim-interval");
if (opt && atoi(opt) > 0)
conf_acct_interim_interval = atoi(opt);
+ opt = conf_get_opt("radius", "acct-delay-time");
+ if (opt)
+ conf_acct_delay_time = atoi(opt);
+
return 0;
}
diff --git a/accel-pppd/radius/radius_p.h b/accel-pppd/radius/radius_p.h
index 32acd49..929fe8e 100644
--- a/accel-pppd/radius/radius_p.h
+++ b/accel-pppd/radius/radius_p.h
@@ -62,6 +62,7 @@ struct rad_req_t
extern int conf_max_try;
extern int conf_timeout;
extern int conf_acct_timeout;
+extern int conf_acct_delay_time;
extern int conf_verbose;
extern int conf_interim_verbose;
extern char *conf_nas_identifier;