Changeset 37111


Ignore:
Timestamp:
2013-06-30T23:01:13+02:00 (5 years ago)
Author:
nbd
Message:

hostapd: fix multi-ssid and AP+STA, clean up code

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/package/network/services/hostapd/patches
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/network/services/hostapd/patches/450-reload_freq_change.patch

    r36376 r37111  
    11--- a/src/ap/hostapd.c 
    22+++ b/src/ap/hostapd.c 
    3 @@ -156,6 +156,24 @@ int hostapd_reload_config(struct hostapd 
    4         oldconf = hapd->iconf; 
    5         iface->conf = newconf; 
     3@@ -133,38 +133,51 @@ static void hostapd_clear_old(struct hos 
     4 int hostapd_reload_config(struct hostapd_iface *iface) 
     5 { 
     6        struct hostapd_data *hapd = iface->bss[0]; 
     7-       struct hostapd_config *newconf, *oldconf; 
     8+       struct hostapd_config *conf = hapd->iconf, *oldconf = NULL; 
     9        size_t j; 
    610  
     11-       if (iface->config_fname == NULL) { 
     12-               /* Only in-memory config in use - assume it has been updated */ 
     13+       if (iface->config_fname) { 
     14+               if (iface->interfaces == NULL || 
     15+                       iface->interfaces->config_read_cb == NULL) 
     16+                       return -1; 
     17+               conf = iface->interfaces->config_read_cb(iface->config_fname); 
     18+               if (conf == NULL) 
     19+                       return -1; 
     20+ 
     21                hostapd_clear_old(iface); 
     22-               for (j = 0; j < iface->num_bss; j++) 
     23-                       hostapd_reload_bss(iface->bss[j]); 
     24-               return 0; 
     25-       } 
     26  
     27-       if (iface->interfaces == NULL || 
     28-           iface->interfaces->config_read_cb == NULL) 
     29-               return -1; 
     30-       newconf = iface->interfaces->config_read_cb(iface->config_fname); 
     31-       if (newconf == NULL) 
     32-               return -1; 
     33+               oldconf = hapd->iconf; 
     34+               iface->conf = conf; 
     35+       } 
     36  
     37-       hostapd_clear_old(iface); 
    738+       hostapd_select_hw_mode(iface); 
    8 +       iface->freq = hostapd_hw_get_freq(hapd, newconf->channel); 
    9 + 
    10 +       if (hostapd_set_freq(hapd, newconf->hw_mode, iface->freq, 
    11 +                            newconf->channel, 
    12 +                            newconf->ieee80211n, 
    13 +                            newconf->ieee80211ac, 
    14 +                            newconf->secondary_channel, 
    15 +                            newconf->vht_oper_chwidth, 
    16 +                            newconf->vht_oper_centr_freq_seg0_idx, 
    17 +                            newconf->vht_oper_centr_freq_seg1_idx)) { 
    18 +               wpa_printf(MSG_ERROR, "Could not set channel for " 
    19 +                          "kernel driver"); 
    20 +       } 
    21 + 
     39+       iface->freq = hostapd_hw_get_freq(hapd, conf->channel); 
     40  
     41-       oldconf = hapd->iconf; 
     42-       iface->conf = newconf; 
    2243+       if (iface->current_mode) 
    2344+               hostapd_prepare_rates(iface, iface->current_mode); 
    24 + 
     45  
    2546        for (j = 0; j < iface->num_bss; j++) { 
    2647                hapd = iface->bss[j]; 
    27                 hapd->iconf = newconf; 
     48-               hapd->iconf = newconf; 
     49-               hapd->conf = &newconf->bss[j]; 
     50+               hapd->iconf = iface->conf; 
     51+               hapd->conf = &iface->conf->bss[j]; 
     52+ 
     53+               if (hostapd_set_freq(hapd, conf->hw_mode, iface->freq, 
     54+                                        conf->channel, 
     55+                                        conf->ieee80211n, 
     56+                                        conf->ieee80211ac, 
     57+                                        conf->secondary_channel, 
     58+                                        conf->vht_oper_chwidth, 
     59+                                        conf->vht_oper_centr_freq_seg0_idx, 
     60+                                        conf->vht_oper_centr_freq_seg1_idx)) { 
     61+                       wpa_printf(MSG_ERROR, "Could not set channel for " 
     62+                                  "kernel driver"); 
     63+               } 
     64+ 
     65                hostapd_reload_bss(hapd); 
     66        } 
     67  
     68-       hostapd_config_free(oldconf); 
     69- 
     70+       if (oldconf) 
     71+               hostapd_config_free(oldconf); 
     72  
     73        return 0; 
     74 } 
     75--- a/src/drivers/driver_nl80211.c 
     76+++ b/src/drivers/driver_nl80211.c 
     77@@ -6466,7 +6466,7 @@ static int wpa_driver_nl80211_set_freq(s 
     78  
     79        nl80211_cmd(drv, msg, 0, NL80211_CMD_SET_WIPHY); 
     80  
     81-       NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex); 
     82+       NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, bss->ifindex); 
     83        NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq->freq); 
     84        if (freq->vht_enabled) { 
     85                switch (freq->bandwidth) { 
  • trunk/package/network/services/hostapd/patches/453-ap_sta_support.patch

    r37110 r37111  
    4848--- a/wpa_supplicant/wpa_supplicant.c 
    4949+++ b/wpa_supplicant/wpa_supplicant.c 
    50 @@ -109,6 +109,55 @@ extern int wpa_debug_show_keys; 
     50@@ -109,6 +109,48 @@ extern int wpa_debug_show_keys; 
    5151 extern int wpa_debug_timestamp; 
    5252 extern struct wpa_driver_ops *wpa_drivers[]; 
     
    7171+       char buf[256]; 
    7272+       int len = sizeof(buf); 
    73 +       int channel, hw_mode; 
     73+       enum hostapd_hw_mode hw_mode; 
     74+       u8 channel; 
    7475+       int ret; 
    7576+ 
     
    7778+               return; 
    7879+ 
    79 +       if (bss->freq < 4000) { 
    80 +               hw_mode = HOSTAPD_MODE_IEEE80211G; 
    81 +               channel = (bss->freq - 2407) / 5; 
    82 +       } else { 
    83 +               hw_mode = HOSTAPD_MODE_IEEE80211A; 
    84 +               channel = (bss->freq - 5000) / 5; 
    85 +       } 
    86 + 
     80+       hw_mode = ieee80211_freq_to_chan(bss->freq, &channel); 
    8781+       if (asprintf(&cmd, "UPDATE channel=%d sec_chan=0 hw_mode=%d ieee80211n=%d", 
    88 +                    channel, hw_mode, !!bss->ht_capab) < 0) { 
     82+                    channel, hw_mode, !!bss->ht_capab) < 0) 
    8983+               return -1; 
    90 +       } 
    9184+ 
    9285+       ret = wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL); 
     
    10497 int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 
    10598 { 
    106 @@ -675,8 +724,16 @@ void wpa_supplicant_set_state(struct wpa 
     99@@ -675,8 +717,16 @@ void wpa_supplicant_set_state(struct wpa 
    107100 #endif /* CONFIG_P2P */ 
    108101  
     
    121114                wpa_drv_set_operstate(wpa_s, 0); 
    122115 #ifndef IEEE8021X_EAPOL 
    123 @@ -2866,6 +2923,21 @@ static int wpa_supplicant_init_iface(str 
     116@@ -2866,6 +2916,21 @@ static int wpa_supplicant_init_iface(str 
    124117                os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname, 
    125118                           sizeof(wpa_s->bridge_ifname)); 
  • trunk/package/network/services/hostapd/patches/480-terminate_on_setup_failure.patch

    r37110 r37111  
    11--- a/src/ap/hostapd.c 
    22+++ b/src/ap/hostapd.c 
    3 @@ -979,11 +979,8 @@ int hostapd_setup_interface_complete(str 
     3@@ -974,11 +974,8 @@ int hostapd_setup_interface_complete(str 
    44        size_t j; 
    55        u8 *prev_addr; 
     
    1515        wpa_printf(MSG_DEBUG, "Completing interface initialization"); 
    1616        if (hapd->iconf->channel) { 
    17 @@ -1003,7 +1000,7 @@ int hostapd_setup_interface_complete(str 
     17@@ -998,7 +995,7 @@ int hostapd_setup_interface_complete(str 
    1818                                     hapd->iconf->vht_oper_centr_freq_seg1_idx)) { 
    1919                        wpa_printf(MSG_ERROR, "Could not set channel for " 
     
    2424        } 
    2525  
    26 @@ -1014,7 +1011,7 @@ int hostapd_setup_interface_complete(str 
     26@@ -1009,7 +1006,7 @@ int hostapd_setup_interface_complete(str 
    2727                        hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211, 
    2828                                       HOSTAPD_LEVEL_WARNING, 
     
    3333        } 
    3434  
    35 @@ -1022,14 +1019,14 @@ int hostapd_setup_interface_complete(str 
     35@@ -1017,14 +1014,14 @@ int hostapd_setup_interface_complete(str 
    3636            hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) { 
    3737                wpa_printf(MSG_ERROR, "Could not set RTS threshold for " 
     
    5050  
    5151        prev_addr = hapd->own_addr; 
    52 @@ -1039,7 +1036,7 @@ int hostapd_setup_interface_complete(str 
     52@@ -1034,7 +1031,7 @@ int hostapd_setup_interface_complete(str 
    5353                if (j) 
    5454                        os_memcpy(hapd->own_addr, prev_addr, ETH_ALEN); 
     
    5959                        prev_addr = hapd->own_addr; 
    6060        } 
    61 @@ -1053,7 +1050,7 @@ int hostapd_setup_interface_complete(str 
     61@@ -1048,7 +1045,7 @@ int hostapd_setup_interface_complete(str 
    6262        if (hostapd_driver_commit(hapd) < 0) { 
    6363                wpa_printf(MSG_ERROR, "%s: Failed to commit driver " 
     
    6868  
    6969        /* 
    70 @@ -1074,6 +1071,11 @@ int hostapd_setup_interface_complete(str 
     70@@ -1069,6 +1066,11 @@ int hostapd_setup_interface_complete(str 
    7171                   iface->bss[0]->conf->iface); 
    7272  
  • trunk/package/network/services/hostapd/patches/540-dynamic_20_40_mhz.patch

    r37110 r37111  
    3232 #include "vlan_init.h" 
    3333 #include "wpa_auth.h" 
    34 @@ -348,6 +349,7 @@ static void hostapd_cleanup_iface_pre(st 
     34@@ -343,6 +344,7 @@ static void hostapd_cleanup_iface_pre(st 
    3535  
    3636 static void hostapd_cleanup_iface_partial(struct hostapd_iface *iface) 
  • trunk/package/network/services/hostapd/patches/601-wpa_supplicant-add-new-config-params-to-be-used-with.patch

    r37110 r37111  
    176176--- a/wpa_supplicant/wpa_supplicant.c 
    177177+++ b/wpa_supplicant/wpa_supplicant.c 
    178 @@ -1606,15 +1606,24 @@ void wpa_supplicant_associate(struct wpa 
     178@@ -1599,15 +1599,24 @@ void wpa_supplicant_associate(struct wpa 
    179179                params.ssid_len = ssid->ssid_len; 
    180180        } 
  • trunk/package/network/services/hostapd/patches/604-wpa_s-support-htmode-param.patch

    r37110 r37111  
    146146--- a/wpa_supplicant/wpa_supplicant.c 
    147147+++ b/wpa_supplicant/wpa_supplicant.c 
    148 @@ -1622,6 +1622,8 @@ void wpa_supplicant_associate(struct wpa 
     148@@ -1615,6 +1615,8 @@ void wpa_supplicant_associate(struct wpa 
    149149                        i++; 
    150150                } 
  • trunk/package/network/services/hostapd/patches/700-ubus_support.patch

    r37110 r37111  
    481481--- a/src/ap/hostapd.c 
    482482+++ b/src/ap/hostapd.c 
    483 @@ -270,6 +270,7 @@ static int hostapd_broadcast_wep_set(str 
     483@@ -265,6 +265,7 @@ static int hostapd_broadcast_wep_set(str 
    484484  
    485485 static void hostapd_free_hapd_data(struct hostapd_data *hapd) 
     
    489489        hapd->iapp = NULL; 
    490490        accounting_deinit(hapd); 
    491 @@ -834,6 +835,8 @@ static int hostapd_setup_bss(struct host 
     491@@ -829,6 +830,8 @@ static int hostapd_setup_bss(struct host 
    492492        if (hapd->driver && hapd->driver->set_operstate) 
    493493                hapd->driver->set_operstate(hapd->drv_priv, 1); 
     
    498498 } 
    499499  
    500 @@ -984,6 +987,7 @@ int hostapd_setup_interface_complete(str 
     500@@ -979,6 +982,7 @@ int hostapd_setup_interface_complete(str 
    501501        if (err) 
    502502                goto error; 
     
    506506        if (hapd->iconf->channel) { 
    507507                iface->freq = hostapd_hw_get_freq(hapd, hapd->iconf->channel); 
    508 @@ -1076,6 +1080,7 @@ int hostapd_setup_interface_complete(str 
     508@@ -1071,6 +1075,7 @@ int hostapd_setup_interface_complete(str 
    509509  
    510510 error: 
     
    514514        return -1; 
    515515 } 
    516 @@ -1174,6 +1179,8 @@ void hostapd_interface_deinit_free(struc 
     516@@ -1169,6 +1174,8 @@ void hostapd_interface_deinit_free(struc 
    517517        void *drv_priv; 
    518518        if (iface == NULL) 
Note: See TracChangeset for help on using the changeset viewer.