mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +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:
		 John Crispin
					John Crispin
				
			
				
					committed by
					
						 jaspreetsachdev
						jaspreetsachdev
					
				
			
			
				
	
			
			
			 jaspreetsachdev
						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