source: branches/backfire/package/hostapd/patches/553-ap_sta_support.patch @ 27031

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

hostapd: backport current version from trunk as of r27021

File size: 5.9 KB
  • wpa_supplicant/wpa_supplicant_i.h

    a b struct wpa_interface { 
    9999         * receiving of EAPOL frames from an additional interface. 
    100100         */ 
    101101        const char *bridge_ifname; 
     102 
     103        const char *hostapd_ctrl; 
    102104}; 
    103105 
    104106/** 
    struct wpa_supplicant { 
    337339#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ 
    338340        char bridge_ifname[16]; 
    339341 
     342        struct wpa_ctrl *hostapd; 
     343 
    340344        char *confname; 
    341345        struct wpa_config *conf; 
    342346        int countermeasures; 
  • wpa_supplicant/Makefile

    a b OBJS_p += ../src/utils/wpabuf.o 
    5252OBJS_c = wpa_cli.o ../src/common/wpa_ctrl.o 
    5353OBJS_c += ../src/utils/wpa_debug.o 
    5454 
     55ifdef MULTICALL 
     56OBJS += ../src/common/wpa_ctrl.o 
     57CFLAGS += -DMULTICALL 
     58endif 
     59 
    5560-include .config 
    5661-include $(if $(MULTICALL),../hostapd/.config) 
    5762 
  • wpa_supplicant/wpa_supplicant.c

    a b extern int wpa_debug_show_keys; 
    123123extern int wpa_debug_timestamp; 
    124124extern struct wpa_driver_ops *wpa_drivers[]; 
    125125 
     126#ifdef MULTICALL 
     127static int hostapd_stop(struct wpa_supplicant *wpa_s) 
     128{ 
     129        const char *cmd = "DOWN"; 
     130        char buf[256]; 
     131        int len = sizeof(buf); 
     132 
     133        if (wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL) < 0) { 
     134                wpa_printf(MSG_ERROR, "\nFailed to stop hostapd AP interfaces\n"); 
     135                return -1; 
     136        } 
     137        return 0; 
     138} 
     139 
     140static int hostapd_reload(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) 
     141{ 
     142        char *cmd = NULL; 
     143        char buf[256]; 
     144        int len = sizeof(buf); 
     145        int channel, hw_mode; 
     146        int ret; 
     147 
     148        if (!bss) 
     149                return; 
     150 
     151        if (bss->freq < 4000) { 
     152                hw_mode = HOSTAPD_MODE_IEEE80211G; 
     153                channel = (bss->freq - 2407) / 5; 
     154        } else { 
     155                hw_mode = HOSTAPD_MODE_IEEE80211A; 
     156                channel = (bss->freq - 5000) / 5; 
     157        } 
     158 
     159        if (asprintf(&cmd, "RELOAD channel=%d sec_chan=0 hw_mode=%d ieee80211n=%d", 
     160                     channel, hw_mode, !!bss->ht_capab) < 0) { 
     161                return -1; 
     162        } 
     163 
     164        ret = wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL); 
     165        free(cmd); 
     166 
     167        if (ret < 0) { 
     168                wpa_printf(MSG_ERROR, "\nFailed to reload hostapd AP interfaces\n"); 
     169                return -1; 
     170        } 
     171        return 0; 
     172} 
     173#endif 
     174 
    126175/* Configure default/group WEP keys for static WEP */ 
    127176int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 
    128177{ 
    void wpa_supplicant_set_state(struct wpa 
    598647#ifdef CONFIG_P2P 
    599648                wpas_p2p_completed(wpa_s); 
    600649#endif /* CONFIG_P2P */ 
     650#ifdef MULTICALL 
     651                if (wpa_s->hostapd) 
     652                        hostapd_reload(wpa_s, wpa_s->current_bss); 
     653#endif 
    601654        } else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING || 
    602655                   state == WPA_ASSOCIATED) { 
     656#ifdef MULTICALL 
     657                if (wpa_s->hostapd) 
     658                        hostapd_stop(wpa_s); 
     659#endif 
    603660                wpa_s->new_connection = 1; 
    604661                wpa_drv_set_operstate(wpa_s, 0); 
    605662#ifndef IEEE8021X_EAPOL 
    static int wpa_supplicant_init_iface(str 
    21572214                os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname, 
    21582215                           sizeof(wpa_s->bridge_ifname)); 
    21592216        } 
     2217#ifdef MULTICALL 
     2218        if (iface->hostapd_ctrl) { 
     2219                char *cmd = "DOWN"; 
     2220                char buf[256]; 
     2221                int len = sizeof(buf); 
     2222 
     2223                wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl); 
     2224                if (!wpa_s->hostapd) { 
     2225                        wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n"); 
     2226                        return -1; 
     2227                } 
     2228                if (hostapd_stop(wpa_s) < 0) 
     2229                        return -1; 
     2230        } 
     2231#endif 
    21602232 
    21612233        /* RSNA Supplicant Key Management - INITIALIZE */ 
    21622234        eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE); 
  • wpa_supplicant/bss.c

    a b  
    1717#include "utils/common.h" 
    1818#include "utils/eloop.h" 
    1919#include "common/ieee802_11_defs.h" 
     20#include "common/ieee802_11_common.h" 
    2021#include "drivers/driver.h" 
    2122#include "wpa_supplicant_i.h" 
    2223#include "config.h" 
    struct wpa_bss * wpa_bss_get(struct wpa_ 
    7071 
    7172static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src) 
    7273{ 
     74        struct ieee80211_ht_capabilities *capab; 
     75        struct ieee802_11_elems elems; 
    7376        os_time_t usec; 
    7477 
    7578        dst->flags = src->flags; 
    static void wpa_bss_copy_res(struct wpa_ 
    8285        dst->level = src->level; 
    8386        dst->tsf = src->tsf; 
    8487 
     88        memset(&elems, 0, sizeof(elems)); 
     89        ieee802_11_parse_elems((u8 *) (src + 1), src->ie_len, &elems, 0); 
     90        capab = (struct ieee80211_ht_capabilities *) elems.ht_capabilities; 
     91        if (capab) 
     92                dst->ht_capab = le_to_host16(capab->ht_capabilities_info); 
     93 
    8594        os_get_time(&dst->last_update); 
    8695        dst->last_update.sec -= src->age / 1000; 
    8796        usec = (src->age % 1000) * 1000; 
  • wpa_supplicant/bss.h

    a b struct wpa_bss { 
    5656        unsigned int flags; 
    5757        u8 bssid[ETH_ALEN]; 
    5858        u8 ssid[32]; 
     59        u16 ht_capab; 
    5960        size_t ssid_len; 
    6061        int freq; 
    6162        u16 beacon_int; 
  • wpa_supplicant/main.c

    a b static void usage(void) 
    3131               "usage:\n" 
    3232               "  wpa_supplicant [-BddhKLqqstuvW] [-P<pid file>] " 
    3333               "[-g<global ctrl>] \\\n" 
    34                "        -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] " 
     34               "        -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-H<hostapd path>]" 
    3535               "[-p<driver_param>] \\\n" 
    3636               "        [-b<br_ifname>] [-f<debug file>] \\\n" 
    3737               "        [-o<override driver>] [-O<override ctrl>] \\\n" 
    static void usage(void) 
    6767#endif /* CONFIG_DEBUG_SYSLOG */ 
    6868        printf("  -t = include timestamp in debug messages\n" 
    6969               "  -h = show this help text\n" 
     70                   "  -H = connect to a hostapd instance to manage state changes\n" 
    7071               "  -L = show license (GPL and BSD)\n" 
    7172               "  -o = override driver parameter for new interfaces\n" 
    7273               "  -O = override ctrl_interface parameter for new interfaces\n" 
    int main(int argc, char *argv[]) 
    143144        wpa_supplicant_fd_workaround(); 
    144145 
    145146        for (;;) { 
    146                 c = getopt(argc, argv, "b:Bc:C:D:df:g:hi:KLNo:O:p:P:qstuvW"); 
     147                c = getopt(argc, argv, "b:Bc:C:D:df:g:hH:i:KLNo:O:p:P:qstuvW"); 
    147148                if (c < 0) 
    148149                        break; 
    149150                switch (c) { 
    int main(int argc, char *argv[]) 
    184185                        usage(); 
    185186                        exitcode = 0; 
    186187                        goto out; 
     188                case 'H': 
     189                        iface->hostapd_ctrl = optarg; 
     190                        break; 
    187191                case 'i': 
    188192                        iface->ifname = optarg; 
    189193                        break; 
Note: See TracBrowser for help on using the repository browser.