source: trunk/package/hostapd/patches/553-ap_sta_support.patch @ 26261

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

hostapd: update to 2011-02-21, use PKG_MIRROR_MD5SUM, includes fixes for WPS

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; 
    122122extern int wpa_debug_timestamp; 
    123123extern struct wpa_driver_ops *wpa_drivers[]; 
    124124 
     125#ifdef MULTICALL 
     126static int hostapd_stop(struct wpa_supplicant *wpa_s) 
     127{ 
     128        const char *cmd = "DOWN"; 
     129        char buf[256]; 
     130        int len = sizeof(buf); 
     131 
     132        if (wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL) < 0) { 
     133                wpa_printf(MSG_ERROR, "\nFailed to stop hostapd AP interfaces\n"); 
     134                return -1; 
     135        } 
     136        return 0; 
     137} 
     138 
     139static int hostapd_reload(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) 
     140{ 
     141        char *cmd = NULL; 
     142        char buf[256]; 
     143        int len = sizeof(buf); 
     144        int channel, hw_mode; 
     145        int ret; 
     146 
     147        if (!bss) 
     148                return; 
     149 
     150        if (bss->freq < 4000) { 
     151                hw_mode = HOSTAPD_MODE_IEEE80211G; 
     152                channel = (bss->freq - 2407) / 5; 
     153        } else { 
     154                hw_mode = HOSTAPD_MODE_IEEE80211A; 
     155                channel = (bss->freq - 5000) / 5; 
     156        } 
     157 
     158        if (asprintf(&cmd, "RELOAD channel=%d sec_chan=0 hw_mode=%d ieee80211n=%d", 
     159                     channel, hw_mode, !!bss->ht_capab) < 0) { 
     160                return -1; 
     161        } 
     162 
     163        ret = wpa_ctrl_request(wpa_s->hostapd, cmd, os_strlen(cmd), buf, &len, NULL); 
     164        free(cmd); 
     165 
     166        if (ret < 0) { 
     167                wpa_printf(MSG_ERROR, "\nFailed to reload hostapd AP interfaces\n"); 
     168                return -1; 
     169        } 
     170        return 0; 
     171} 
     172#endif 
     173 
    125174/* Configure default/group WEP keys for static WEP */ 
    126175int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) 
    127176{ 
    void wpa_supplicant_set_state(struct wpa 
    597646#ifdef CONFIG_P2P 
    598647                wpas_p2p_completed(wpa_s); 
    599648#endif /* CONFIG_P2P */ 
     649#ifdef MULTICALL 
     650                if (wpa_s->hostapd) 
     651                        hostapd_reload(wpa_s, wpa_s->current_bss); 
     652#endif 
    600653        } else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING || 
    601654                   state == WPA_ASSOCIATED) { 
     655#ifdef MULTICALL 
     656                if (wpa_s->hostapd) 
     657                        hostapd_stop(wpa_s); 
     658#endif 
    602659                wpa_s->new_connection = 1; 
    603660                wpa_drv_set_operstate(wpa_s, 0); 
    604661#ifndef IEEE8021X_EAPOL 
    static int wpa_supplicant_init_iface(str 
    21482205                os_strlcpy(wpa_s->bridge_ifname, iface->bridge_ifname, 
    21492206                           sizeof(wpa_s->bridge_ifname)); 
    21502207        } 
     2208#ifdef MULTICALL 
     2209        if (iface->hostapd_ctrl) { 
     2210                char *cmd = "DOWN"; 
     2211                char buf[256]; 
     2212                int len = sizeof(buf); 
     2213 
     2214                wpa_s->hostapd = wpa_ctrl_open(iface->hostapd_ctrl); 
     2215                if (!wpa_s->hostapd) { 
     2216                        wpa_printf(MSG_ERROR, "\nFailed to connect to hostapd\n"); 
     2217                        return -1; 
     2218                } 
     2219                if (hostapd_stop(wpa_s) < 0) 
     2220                        return -1; 
     2221        } 
     2222#endif 
    21512223 
    21522224        /* RSNA Supplicant Key Management - INITIALIZE */ 
    21532225        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.