mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 18:07:52 +00:00
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:
committed by
jaspreetsachdev
parent
8ee15d0053
commit
a542660072
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user