uspot: idle-timeout failed for non radius backed clients

Fixes: WIIF-11208
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin
2022-10-14 08:50:40 +02:00
committed by jaspreetsachdev
parent 8ee15d0053
commit a542660072

View File

@@ -37,6 +37,10 @@ function get_session_timeout(mac) {
return session_timeout; return session_timeout;
} }
function radius_available(mac) {
return !!clients[mac]?.radius;
}
function radius_init(mac, payload) { function radius_init(mac, payload) {
for (let key in [ 'server', 'acct_server', 'acct_session', 'client_ip', 'called_station', 'calling_station', 'nas_ip', 'nas_id', 'username' ]) for (let key in [ 'server', 'acct_server', 'acct_session', 'client_ip', 'called_station', 'calling_station', 'nas_ip', 'nas_id', 'username' ])
if (clients[mac].radius[key]) if (clients[mac].radius[key])
@@ -53,6 +57,8 @@ function radius_call(mac, payload) {
} }
function radius_stop(mac) { function radius_stop(mac) {
if (!radius_available(mac))
return;
debug(mac, 'stopping accounting'); debug(mac, 'stopping accounting');
let payload = { let payload = {
@@ -88,6 +94,8 @@ function radius_acct(mac, payload) {
} }
function radius_idle_time(mac) { function radius_idle_time(mac) {
if (!radius_available(mac))
return;
let payload = { let payload = {
acct_type: 2, acct_type: 2,
terminate_cause: 4, terminate_cause: 4,
@@ -96,6 +104,8 @@ function radius_idle_time(mac) {
} }
function radius_session_time(mac) { function radius_session_time(mac) {
if (!radius_available(mac))
return;
let payload = { let payload = {
acct_type: 2, acct_type: 2,
terminate_cause: 5, terminate_cause: 5,
@@ -104,6 +114,8 @@ function radius_session_time(mac) {
} }
function radius_disconnect(mac) { function radius_disconnect(mac) {
if (!radius_available(mac))
return;
let payload = { let payload = {
acct_type: 2, acct_type: 2,
terminate_cause: 1, terminate_cause: 1,
@@ -112,6 +124,8 @@ function radius_disconnect(mac) {
} }
function radius_interim(mac) { function radius_interim(mac) {
if (!radius_available(mac))
return;
let payload = { let payload = {
acct_type: 3, acct_type: 3,
}; };
@@ -126,17 +140,24 @@ function client_add(mac, state) {
if (state.state != 1) if (state.state != 1)
return; return;
let interval = (state.data?.radius?.reply['Acct-Interim-Interval'] || acct_interval) * 1000; let interval = acct_interval * 1000;
let idle = (state.data?.radius?.reply['Idle-Timeout'] || idle_timeout); let idle = idle_timeout;
let session = (state.data?.radius?.reply['Session-Timeout'] || session_timeout); let session = session_timeout;
let accounting = (config.radius?.acct_server && config.radius?.acct_secret); let accounting = (config.radius?.acct_server && config.radius?.acct_secret);
if (state.data?.radius?.reply) {
interval = (state.data?.radius?.reply['Acct-Interim-Interval'] || acct_interval) * 1000;
idle = (state.data?.radius?.reply['Idle-Timeout'] || idle_timeout);
session = (state.data?.radius?.reply['Session-Timeout'] || session_timeout);
}
clients[mac] = { clients[mac] = {
accounting, accounting,
radius: state.data.radius.request,
interval, interval,
idle, idle,
}; };
if (state.data?.radius?.request)
clients[mac].radius= state.data.radius.request;
syslog(mac, 'adding client'); syslog(mac, 'adding client');
if (accounting) if (accounting)
clients[mac].timeout = uloop.timer(interval, () => radius_interim(mac)); clients[mac].timeout = uloop.timer(interval, () => radius_interim(mac));