mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 10:28:06 +00:00 
			
		
		
		
	Merge pull request #484 from Telecominfraproject/2.7.1-fixes-from-next
2.7.1 fixes from next
This commit is contained in:
		| @@ -65,6 +65,7 @@ static void __client_free(struct interface *iface, struct client *cl) | ||||
| 		avl_delete(&iface->client_ids, &cl->id_node); | ||||
| 	avl_delete(&iface->clients, &cl->node); | ||||
| 	kvlist_free(&cl->kvdata); | ||||
| 	free(cl->device); | ||||
| 	spotfilter_bpf_set_client(iface, &cl->key, NULL); | ||||
| 	free(cl); | ||||
| } | ||||
| @@ -143,8 +144,10 @@ int client_set(struct interface *iface, const void *addr, const char *id, | ||||
|  | ||||
| 		kvlist_set(&cl->kvdata, blobmsg_name(cur), cur); | ||||
| 	} | ||||
| 	if (device) | ||||
| 		cl->device = device; | ||||
| 	if (device) { | ||||
| 		free(cl->device); | ||||
| 		cl->device = strdup(device); | ||||
| 	} | ||||
| 	if (state >= 0) | ||||
| 		cl->data.cur_class = state; | ||||
| 	if (dns_state >= 0) | ||||
|   | ||||
| @@ -17,7 +17,7 @@ struct client { | ||||
|  | ||||
| 	struct spotfilter_client_key key; | ||||
| 	struct spotfilter_client_data data; | ||||
| 	const char *device; | ||||
| 	char *device; | ||||
| }; | ||||
|  | ||||
| int client_set(struct interface *iface, const void *addr, const char *id, | ||||
|   | ||||
| @@ -32,11 +32,15 @@ function get_idle_timeout(mac) { | ||||
| } | ||||
|  | ||||
| function get_session_timeout(mac) { | ||||
| 	if (clients[mac]?.session_timeout) | ||||
| 		return clients[mac].session_timeout; | ||||
| 	if (clients[mac]?.session) | ||||
| 		return clients[mac].session; | ||||
| 	return session_timeout; | ||||
| } | ||||
|  | ||||
| function radius_available(mac) { | ||||
| 	return !!clients[mac]?.radius; | ||||
| } | ||||
|  | ||||
| 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' ]) | ||||
| 		if (clients[mac].radius[key]) | ||||
| @@ -53,6 +57,8 @@ function radius_call(mac, payload) { | ||||
| } | ||||
|  | ||||
| function radius_stop(mac) { | ||||
| 	if (!radius_available(mac)) | ||||
| 		return; | ||||
| 	debug(mac, 'stopping accounting'); | ||||
|  | ||||
| 	let payload = { | ||||
| @@ -88,6 +94,8 @@ function radius_acct(mac, payload) { | ||||
| } | ||||
|  | ||||
| function radius_idle_time(mac) { | ||||
| 	if (!radius_available(mac)) | ||||
| 		return; | ||||
| 	let payload = { | ||||
| 		acct_type: 2, | ||||
| 		terminate_cause: 4, | ||||
| @@ -96,6 +104,8 @@ function radius_idle_time(mac) { | ||||
| } | ||||
|  | ||||
| function radius_session_time(mac) { | ||||
| 	if (!radius_available(mac)) | ||||
| 		return; | ||||
| 	let payload = { | ||||
| 		acct_type: 2, | ||||
| 		terminate_cause: 5, | ||||
| @@ -104,6 +114,8 @@ function radius_session_time(mac) { | ||||
| } | ||||
|  | ||||
| function radius_disconnect(mac) { | ||||
| 	if (!radius_available(mac)) | ||||
| 		return; | ||||
| 	let payload = { | ||||
| 		acct_type: 2, | ||||
| 		terminate_cause: 1, | ||||
| @@ -112,6 +124,8 @@ function radius_disconnect(mac) { | ||||
| } | ||||
|  | ||||
| function radius_interim(mac) { | ||||
| 	if (!radius_available(mac)) | ||||
| 		return; | ||||
| 	let payload = { | ||||
| 		acct_type: 3, | ||||
| 	}; | ||||
| @@ -126,17 +140,25 @@ function client_add(mac, state) { | ||||
| 	if (state.state != 1) | ||||
| 		return; | ||||
|  | ||||
| 	let interval = (state.data?.radius?.reply['Acct-Interim-Interval'] || acct_interval) * 1000; | ||||
| 	let idle = (state.data?.radius?.reply['Idle-Timeout'] || idle_timeout); | ||||
| 	let session = (state.data?.radius?.reply['Session-Timeout'] || session_timeout); | ||||
| 	let interval = acct_interval * 1000; | ||||
| 	let idle = idle_timeout; | ||||
| 	let session = session_timeout; | ||||
| 	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] = { | ||||
| 		accounting, | ||||
| 		radius: state.data.radius.request, | ||||
| 		interval, | ||||
| 		session, | ||||
| 		idle, | ||||
| 	}; | ||||
| 	if (state.data?.radius?.request) | ||||
| 		clients[mac].radius= state.data.radius.request; | ||||
| 	syslog(mac, 'adding client'); | ||||
| 	if (accounting) | ||||
| 		clients[mac].timeout = uloop.timer(interval, () => radius_interim(mac)); | ||||
| @@ -167,6 +189,7 @@ function client_timeout(mac) { | ||||
| 	ubus.call('spotfilter', 'client_set', { | ||||
| 			interface: "hotspot", | ||||
| 			state: 0, | ||||
| 			dns_state: 1, | ||||
| 			address: mac, | ||||
| 			accounting: [], | ||||
| 			flush: true, | ||||
|   | ||||
| @@ -46,7 +46,6 @@ return { | ||||
| 		case 'aa-bb-cc-dd-ee-ff': | ||||
| 		case 'AA-BB-CC-DD-EE-FF': | ||||
| 			mac = replace(mac, ':', '-'); | ||||
| 			warn('uspot: ' + ctx.env.REMOTE_ADDR + ' - ' + msg + '\n'); | ||||
| 			break; | ||||
| 		} | ||||
|  | ||||
| @@ -140,7 +139,7 @@ return { | ||||
| 			acct_server: sprintf('%s:%s:%s', this.config.radius.acct_server, this.config.radius.acct_port, this.config.radius.acct_secret), | ||||
| 			acct_session, | ||||
| 			client_ip: ctx.env.REMOTE_ADDR, | ||||
| 			called_station: this.config.uam.nasmac, | ||||
| 			called_station: this.config.uam.nasmac + ':' + ctx.ssid, | ||||
| 			calling_station: this.format_mac(ctx.mac), | ||||
| 			nas_ip: ctx.env.SERVER_ADDR, | ||||
| 			nas_id: this.config.uam.nasid | ||||
|   | ||||
| @@ -120,7 +120,7 @@ Index: hostapd-2021-02-20-59e9794c/src/ap/sta_info.c | ||||
|  	else | ||||
|  #endif /* CONFIG_P2P */ | ||||
| -		os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr)); | ||||
| +		os_snprintf(buf, sizeof(buf), MACSTR " %d %d", MAC2STR(sta->addr), sta->bandwidth[0] / 1000, sta->bandwidth[1] / 1000); | ||||
| +		os_snprintf(buf, sizeof(buf), MACSTR " %d %d", MAC2STR(sta->addr), sta->bandwidth[0] / 1000000, sta->bandwidth[1] / 1000000); | ||||
|   | ||||
|  	if (hapd->sta_authorized_cb) | ||||
|  		hapd->sta_authorized_cb(hapd->sta_authorized_cb_ctx, | ||||
|   | ||||
| @@ -137,7 +137,7 @@ index 0000000000..f2f4a933d7 | ||||
| + 	else | ||||
| + #endif /* CONFIG_P2P */ | ||||
| +-		os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr)); | ||||
| ++		os_snprintf(buf, sizeof(buf), MACSTR " %d %d", MAC2STR(sta->addr), sta->bandwidth[0] / 1000, sta->bandwidth[1] / 1000); | ||||
| ++		os_snprintf(buf, sizeof(buf), MACSTR " %d %d", MAC2STR(sta->addr), sta->bandwidth[0] / 1000000, sta->bandwidth[1] / 1000000); | ||||
| +  | ||||
| + 	if (hapd->sta_authorized_cb) | ||||
| + 		hapd->sta_authorized_cb(hapd->sta_authorized_cb_ctx, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jaspreetsachdev
					jaspreetsachdev