>From 850a3d8a4732beda8171e934760d1b8e66c3cafe Mon Sep 17 00:00:00 2001 From: Mikael Kanstrup Date: Thu, 30 Jun 2016 12:37:33 +0200 Subject: [PATCH 2/5] wpa_supplicant: Support multiple driver parameters Support multiple driver parameters for driver_param config option. The option can now be a comma separated list of parameters. --- wpa_supplicant/main.c | 2 +- wpa_supplicant/wpa_supplicant.c | 38 +++++++++++++++++++++++++++++++++++++- wpa_supplicant/wpa_supplicant.conf | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/wpa_supplicant/main.c b/wpa_supplicant/main.c index e08c2fd..3524990 100644 --- a/wpa_supplicant/main.c +++ b/wpa_supplicant/main.c @@ -87,7 +87,7 @@ static void usage(void) " -N = start describing new interface\n" " -o = override driver parameter for new interfaces\n" " -O = override ctrl_interface parameter for new interfaces\n" - " -p = driver parameters\n" + " -p = driver parameters (comma separated if multiple)\n" " -P = PID file\n" " -q = decrease debugging verbosity (-qq even less)\n" #ifdef CONFIG_DEBUG_SYSLOG diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 6999bbb..70dc07b 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -4505,6 +4505,42 @@ radio_work_pending(struct wpa_supplicant *wpa_s, const char *type) } +static int wpas_driver_set_params(struct wpa_supplicant *wpa_s) +{ + int ret = 0; + size_t len; + const char *pos; + const char* driver_param = wpa_s->conf->driver_param; + char* param; + + if (!driver_param) + return 0; + param = os_malloc(os_strlen(driver_param)); + if (!param) + return -1; + + do { + pos = os_strchr(driver_param, ','); + if (pos) + len = pos - driver_param; + else + len = os_strlen(driver_param); + + os_memcpy(param, driver_param, len); + param[len] = '\0'; + + if (wpa_drv_set_param(wpa_s, param) < 0) { + ret = -1; + break; + } + driver_param = pos + 1; + } while (pos); + + os_free(param); + return ret; +} + + static int wpas_init_driver(struct wpa_supplicant *wpa_s, struct wpa_interface *iface) { @@ -4529,7 +4565,7 @@ next_driver: "interface"); return -1; } - if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) { + if (wpas_driver_set_params(wpa_s) < 0) { wpa_msg(wpa_s, MSG_ERROR, "Driver interface rejected " "driver_param '%s'", wpa_s->conf->driver_param); return -1; diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf index 1d86a71..c7f20d7 100644 --- a/wpa_supplicant/wpa_supplicant.conf +++ b/wpa_supplicant/wpa_supplicant.conf @@ -203,7 +203,7 @@ fast_reauth=1 # This field can be used to configure arbitrary driver interace parameters. The # format is specific to the selected driver interface. This field is not used # in most cases. -#driver_param="field=value" +#driver_param="field=value,field2=value2" # Country code # The ISO/IEC alpha2 country code for the country in which this device is -- 2.4.2