From ed1bf011da898b1f377bf15caa01398c72ee185d Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Wed, 25 Sep 2013 19:07:29 +0300 Subject: [PATCH] Allow hostapd config file for dynamically added interface This extends hostapd global control interface command "ADD" to use a configuration file instead of requiring configuration to be built using SET command. The command format is now following: ADD > For example: ADD wlan0 /var/run/hostapd ADD wlan0 config=/tmp/hostapd.conf When using the configuration file option, ctrl_interface parameter in the file needs to be set to allow ENABLE command to be issued on the new interface. Signed-hostap: Jouni Malinen --- src/ap/hostapd.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index af44a1d97..97dab436f 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -1323,12 +1323,16 @@ int hostapd_add_iface(struct hapd_interfaces *interfaces, char *buf) struct hostapd_iface *hapd_iface = NULL; char *ptr; size_t i; + const char *conf_file = NULL; ptr = os_strchr(buf, ' '); if (ptr == NULL) return -1; *ptr++ = '\0'; + if (os_strncmp(ptr, "config=", 7) == 0) + conf_file = ptr + 7; + for (i = 0; i < interfaces->count; i++) { if (!os_strcmp(interfaces->iface[i]->conf->bss[0].iface, buf)) { @@ -1345,8 +1349,14 @@ int hostapd_add_iface(struct hapd_interfaces *interfaces, char *buf) goto fail; } - conf = hostapd_config_alloc(interfaces, buf, ptr); - if (conf == NULL) { + if (conf_file && interfaces->config_read_cb) { + conf = interfaces->config_read_cb(conf_file); + if (conf && conf->bss) + os_strlcpy(conf->bss->iface, buf, + sizeof(conf->bss->iface)); + } else + conf = hostapd_config_alloc(interfaces, buf, ptr); + if (conf == NULL || conf->bss == NULL) { wpa_printf(MSG_ERROR, "%s: Failed to allocate memory " "for configuration", __func__); goto fail;