source: trunk/package/hostapd/patches/452-ctrl_iface_reload.patch @ 23602

Last change on this file since 23602 was 23602, checked in by nbd, 6 years ago

hostapd/mac80211: implement support for AP+STA

File size: 2.4 KB
  • hostapd/ctrl_iface.c

    a b  
    3535#include "ap/wps_hostapd.h" 
    3636#include "ap/ctrl_iface_ap.h" 
    3737#include "ctrl_iface.h" 
     38#include "config_file.h" 
    3839 
    3940 
    4041struct wpa_ctrl_dst { 
    struct wpa_ctrl_dst { 
    4546        int errors; 
    4647}; 
    4748 
     49static char *reload_opts = NULL; 
    4850 
    4951static void hostapd_ctrl_iface_send(struct hostapd_data *hapd, int level, 
    5052                                    const char *buf, size_t len); 
    static int hostapd_ctrl_iface_wps_oob(st 
    315317#endif /* CONFIG_WPS_OOB */ 
    316318#endif /* CONFIG_WPS */ 
    317319 
     320static int hostapd_ctrl_iface_set_down(struct hostapd_data *hapd) 
     321{ 
     322        if (hapd->driver->stop_ap) 
     323                hapd->driver->stop_ap(hapd->drv_priv); 
     324        return 0; 
     325} 
     326 
     327static char *get_option(char *opt, char *str) 
     328{ 
     329        int len = strlen(str); 
     330 
     331        if (!strncmp(opt, str, len)) 
     332                return opt + len; 
     333        else 
     334                return NULL; 
     335} 
     336 
     337static struct hostapd_config *hostapd_ctrl_iface_config_read(const char *fname) 
     338{ 
     339        struct hostapd_config *conf; 
     340        char *opt, *val; 
     341 
     342        conf = hostapd_config_read(fname); 
     343        if (!conf) 
     344                return NULL; 
     345 
     346        for (opt = strtok(reload_opts, " "); 
     347             opt; 
     348                 opt = strtok(NULL, " ")) { 
     349 
     350                if ((val = get_option(opt, "channel="))) 
     351                        conf->channel = atoi(val); 
     352                else if ((val = get_option(opt, "ht_capab="))) 
     353                        conf->ht_capab = atoi(val); 
     354                else if ((val = get_option(opt, "ht_capab_mask="))) 
     355                        conf->ht_capab &= atoi(val); 
     356                else if ((val = get_option(opt, "sec_chan="))) 
     357                        conf->secondary_channel = atoi(val); 
     358                else if ((val = get_option(opt, "hwmode="))) 
     359                        conf->hw_mode = atoi(val); 
     360                else if ((val = get_option(opt, "ieee80211n="))) 
     361                        conf->ieee80211n = atoi(val); 
     362                else 
     363                        break; 
     364        } 
     365 
     366        return conf; 
     367} 
     368 
     369static int hostapd_ctrl_iface_reload(struct hostapd_data *hapd, char *txt) 
     370{ 
     371        struct hostapd_iface *iface = hapd->iface; 
     372 
     373        iface->config_read_cb = hostapd_ctrl_iface_config_read; 
     374        reload_opts = txt; 
     375 
     376        hostapd_reload_config(iface); 
     377 
     378        iface->config_read_cb = hostapd_config_read; 
     379} 
    318380 
    319381static void hostapd_ctrl_iface_receive(int sock, void *eloop_ctx, 
    320382                                       void *sock_ctx) 
    static void hostapd_ctrl_iface_receive(i 
    379441                                reply_len += res; 
    380442                } 
    381443#endif /* CONFIG_NO_RADIUS */ 
     444        } else if (os_strcmp(buf, "DOWN") == 0) { 
     445                hostapd_ctrl_iface_set_down(hapd); 
     446        } else if (os_strncmp(buf, "RELOAD ", 7) == 0) { 
     447                hostapd_ctrl_iface_reload(hapd, buf + 7); 
    382448        } else if (os_strcmp(buf, "STA-FIRST") == 0) { 
    383449                reply_len = hostapd_ctrl_iface_sta_first(hapd, reply, 
    384450                                                         reply_size); 
Note: See TracBrowser for help on using the repository browser.