Allow hostapd config file for dynamically added interface
authorJouni Malinen <jouni@qca.qualcomm.com>
Wed, 25 Sep 2013 16:07:29 +0000 (19:07 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 25 Sep 2013 16:07:29 +0000 (19:07 +0300)
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 <ifname> <control path|config=<path to config>>

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 <jouni@qca.qualcomm.com>

src/ap/hostapd.c

index af44a1d..97dab43 100644 (file)
@@ -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;