source: trunk/package/hostapd/patches/552-ctrl_iface_reload.patch @ 28746

Last change on this file since 28746 was 28746, checked in by nbd, 5 years ago

hostapd: update to latest git version

File size: 2.3 KB
  • hostapd/ctrl_iface.c

    a b  
    3939#include "wps/wps_defs.h" 
    4040#include "wps/wps.h" 
    4141#include "ctrl_iface.h" 
     42#include "config_file.h" 
    4243 
    4344 
    4445struct wpa_ctrl_dst { 
    struct wpa_ctrl_dst { 
    4950        int errors; 
    5051}; 
    5152 
     53static char *reload_opts = NULL; 
    5254 
    5355static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level, 
    5456                                    const char *buf, size_t len); 
    static int hostapd_ctrl_iface_disassocia 
    323325        return 0; 
    324326} 
    325327 
     328static int hostapd_ctrl_iface_set_down(struct hostapd_data *hapd) 
     329{ 
     330        if (hapd->driver->stop_ap) 
     331                hapd->driver->stop_ap(hapd->drv_priv); 
     332        return 0; 
     333} 
     334 
     335static char *get_option(char *opt, char *str) 
     336{ 
     337        int len = strlen(str); 
     338 
     339        if (!strncmp(opt, str, len)) 
     340                return opt + len; 
     341        else 
     342                return NULL; 
     343} 
     344 
     345static struct hostapd_config *hostapd_ctrl_iface_config_read(const char *fname) 
     346{ 
     347        struct hostapd_config *conf; 
     348        char *opt, *val; 
     349 
     350        conf = hostapd_config_read(fname); 
     351        if (!conf) 
     352                return NULL; 
     353 
     354        for (opt = strtok(reload_opts, " "); 
     355             opt; 
     356                 opt = strtok(NULL, " ")) { 
     357 
     358                if ((val = get_option(opt, "channel="))) 
     359                        conf->channel = atoi(val); 
     360                else if ((val = get_option(opt, "ht_capab="))) 
     361                        conf->ht_capab = atoi(val); 
     362                else if ((val = get_option(opt, "ht_capab_mask="))) 
     363                        conf->ht_capab &= atoi(val); 
     364                else if ((val = get_option(opt, "sec_chan="))) 
     365                        conf->secondary_channel = atoi(val); 
     366                else if ((val = get_option(opt, "hwmode="))) 
     367                        conf->hw_mode = atoi(val); 
     368                else if ((val = get_option(opt, "ieee80211n="))) 
     369                        conf->ieee80211n = atoi(val); 
     370                else 
     371                        break; 
     372        } 
     373 
     374        return conf; 
     375} 
     376 
     377static int hostapd_ctrl_iface_reload(struct hostapd_data *hapd, char *txt) 
     378{ 
     379        struct hostapd_iface *iface = hapd->iface; 
     380 
     381        iface->config_read_cb = hostapd_ctrl_iface_config_read; 
     382        reload_opts = txt; 
     383 
     384        hostapd_reload_config(iface); 
     385 
     386        iface->config_read_cb = hostapd_config_read; 
     387} 
    326388 
    327389#ifdef CONFIG_IEEE80211W 
    328390#ifdef NEED_AP_MLME 
    static void hostapd_ctrl_iface_receive(i 
    873935                                reply_len += res; 
    874936                } 
    875937#endif /* CONFIG_NO_RADIUS */ 
     938        } else if (os_strcmp(buf, "DOWN") == 0) { 
     939                hostapd_ctrl_iface_set_down(hapd); 
     940        } else if (os_strncmp(buf, "RELOAD ", 7) == 0) { 
     941                hostapd_ctrl_iface_reload(hapd, buf + 7); 
    876942        } else if (os_strcmp(buf, "STA-FIRST") == 0) { 
    877943                reply_len = hostapd_ctrl_iface_sta_first(hapd, reply, 
    878944                                                         reply_size); 
Note: See TracBrowser for help on using the repository browser.