Add Acct-Session-Id to Accounting-On/Off

An Acct-Session-Id is required on Accounting-On and Accounting-Off forms
of Accounting-Request.

Signed-off-by: Nick Lowe <nick.lowe@lugatech.com>
This commit is contained in:
Nick Lowe 2016-01-25 10:43:33 +00:00 committed by Jouni Malinen
parent d72a00539c
commit 4260e1a1ff
2 changed files with 20 additions and 0 deletions

View File

@ -448,6 +448,16 @@ static void accounting_report_state(struct hostapd_data *hapd, int on)
if (!msg) if (!msg)
return; return;
if (hapd->acct_session_id) {
char buf[20];
os_snprintf(buf, sizeof(buf), "%016lX",
(long unsigned int) hapd->acct_session_id);
if (!radius_msg_add_attr(msg, RADIUS_ATTR_ACCT_SESSION_ID,
(u8 *) buf, os_strlen(buf)))
wpa_printf(MSG_ERROR, "Could not add Acct-Session-Id");
}
if (radius_client_send(hapd->radius, msg, RADIUS_ACCT, NULL) < 0) if (radius_client_send(hapd->radius, msg, RADIUS_ACCT, NULL) < 0)
radius_msg_free(msg); radius_msg_free(msg);
} }
@ -460,6 +470,15 @@ static void accounting_report_state(struct hostapd_data *hapd, int on)
*/ */
int accounting_init(struct hostapd_data *hapd) int accounting_init(struct hostapd_data *hapd)
{ {
/*
* Acct-Session-Id should be globally and temporarily unique.
* A high quality random number is required therefore.
* This could be be improved by switching to a GUID.
*/
if (os_get_random((u8 *) &hapd->acct_session_id,
sizeof(hapd->acct_session_id)) < 0)
return -1;
if (radius_client_register(hapd->radius, RADIUS_ACCT, if (radius_client_register(hapd->radius, RADIUS_ACCT,
accounting_receive, hapd)) accounting_receive, hapd))
return -1; return -1;

View File

@ -138,6 +138,7 @@ struct hostapd_data {
void *msg_ctx_parent; /* parent interface ctx for wpa_msg() calls */ void *msg_ctx_parent; /* parent interface ctx for wpa_msg() calls */
struct radius_client_data *radius; struct radius_client_data *radius;
u64 acct_session_id;
struct radius_das_data *radius_das; struct radius_das_data *radius_das;
struct iapp_data *iapp; struct iapp_data *iapp;