104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt/* 204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * WPA Supplicant - auto scan periodic module 304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * Copyright (c) 2012, Intel Corporation. All rights reserved. 404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * 504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * This software may be distributed under the terms of the BSD license. 604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * See README for more details. 704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt */ 804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#include "includes.h" 1004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 1104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#include "common.h" 1204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#include "wpa_supplicant_i.h" 1304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#include "autoscan.h" 1404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 1504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 1604949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct autoscan_periodic_data { 1704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt int periodic_interval; 1804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}; 1904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 2004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 2104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic int autoscan_periodic_get_params(struct autoscan_periodic_data *data, 2204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const char *params) 2304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 2404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt int interval; 2504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 2604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (params == NULL) 2704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return -1; 2804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 2904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt interval = atoi(params); 3004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 3104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (interval < 0) 3204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return -1; 3304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 3404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt data->periodic_interval = interval; 3504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 3604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return 0; 3704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 3804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 3904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 4004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic void * autoscan_periodic_init(struct wpa_supplicant *wpa_s, 4104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const char *params) 4204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 4304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct autoscan_periodic_data *data; 4404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 4504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt data = os_zalloc(sizeof(struct autoscan_periodic_data)); 4604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (data == NULL) 4704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return NULL; 4804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 4904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt if (autoscan_periodic_get_params(data, params) < 0) { 5004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt os_free(data); 5104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return NULL; 5204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt } 5304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 5404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt wpa_printf(MSG_DEBUG, "autoscan periodic: interval is %d", 5504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt data->periodic_interval); 5604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 5704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return data; 5804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 5904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 6004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 6104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic void autoscan_periodic_deinit(void *priv) 6204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 6304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct autoscan_periodic_data *data = priv; 6404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 6504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt os_free(data); 6604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 6704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 6804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 6904949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic int autoscan_periodic_notify_scan(void *priv, 7004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpa_scan_results *scan_res) 7104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 7204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct autoscan_periodic_data *data = priv; 7304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 7404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt wpa_printf(MSG_DEBUG, "autoscan periodic: scan result notification"); 7504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 7604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return data->periodic_interval; 7704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 7804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 7904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 8004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtconst struct autoscan_ops autoscan_periodic_ops = { 8104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt .name = "periodic", 8204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt .init = autoscan_periodic_init, 8304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt .deinit = autoscan_periodic_deinit, 8404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt .notify_scan = autoscan_periodic_notify_scan, 8504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}; 86