]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Remove experimental non-AP STA code from hostapd
authorJouni Malinen <j@w1.fi>
Fri, 21 Nov 2008 18:48:58 +0000 (20:48 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 21 Nov 2008 18:48:58 +0000 (20:48 +0200)
This was used to allow hostapd to associate as a non-AP STA to another
AP one the same channel while still acting as an AP with the Host AP
driver. This was very experimental and did not work with all firmware
versions. Nowadays, much better way of doing this is to use mac80211
virtual non-AP STA interface. As such, this experimental code can be
removed from hostapd to reduce the code size and make MLME code easier
to understand since it is now only handling AP functionality.

hostapd/config.c
hostapd/config.h
hostapd/driver_hostap.c
hostapd/hostapd.c
hostapd/hostapd.conf
hostapd/hostapd.h
hostapd/ieee802_11.c

index 4b59b939b8345503954f18f3ba5dda8be16bc519..2e890b44acfd510673736e932ce62fbe0b5c4cf4 100644 (file)
@@ -1445,13 +1445,6 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                        conf->country[2] = ' ';
                } else if (os_strcmp(buf, "ieee80211d") == 0) {
                        conf->ieee80211d = atoi(pos);
-               } else if (os_strcmp(buf, "assoc_ap_addr") == 0) {
-                       if (hwaddr_aton(pos, bss->assoc_ap_addr)) {
-                               printf("Line %d: invalid MAC address '%s'\n",
-                                      line, pos);
-                               errors++;
-                       }
-                       bss->assoc_ap = 1;
                } else if (os_strcmp(buf, "ieee8021x") == 0) {
                        bss->ieee802_1x = atoi(pos);
                } else if (os_strcmp(buf, "eapol_version") == 0) {
index cc39335be0f11b6b26c0463ba3f935ce71a795bf..86f88c18dc45d9f2896968c6fa9fb8a18eec1c62 100644 (file)
@@ -189,9 +189,6 @@ struct hostapd_bss_config {
        char iapp_iface[IFNAMSIZ + 1]; /* interface used with IAPP broadcast
                                        * frames */
 
-       u8 assoc_ap_addr[ETH_ALEN];
-       int assoc_ap; /* whether assoc_ap_addr is set */
-
        enum {
                ACCEPT_UNLESS_DENIED = 0,
                DENY_UNLESS_ACCEPTED = 1,
index de8e23c8471030d66e6527a1b9b432218a808e56..04b0b9433b2cfc9663b3ac719ec97ab93b8dedde 100644 (file)
@@ -1095,15 +1095,6 @@ static void * hostap_init(struct hostapd_data *hapd)
                return NULL;
        }
 
-       if (hapd->conf->assoc_ap &&
-           hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD_STA, 1)) {
-               printf("Could not enable hostapd STA mode for interface %s\n",
-                      drv->iface);
-               close(drv->ioctl_sock);
-               free(drv);
-               return NULL;
-       }
-
        if (hostap_init_sockets(drv)) {
                close(drv->ioctl_sock);
                free(drv);
index d6163f8d5f1b799856589ad6f737408a316e690c..a4fad98a70af7adfa6c74079cfff0824d9842f77 100644 (file)
@@ -1700,9 +1700,6 @@ hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface,
        }
 #endif /* EAP_SERVER */
 
-       if (hapd->conf->assoc_ap)
-               hapd->assoc_ap_state = WAIT_BEACON;
-
        hapd->driver = hapd->iconf->driver;
 
        return hapd;
index 90381c8dfd351b4474a991375fc9b28b8091c392..8bd2c56763a506ba05a4c0446beef652bd73cf43 100644 (file)
@@ -308,10 +308,6 @@ wme_ac_vo_txop_limit=47
 wme_ac_vo_acm=0
 # Note: for IEEE 802.11b mode: cWmin=3 cWmax=4 burst=102
 
-# Associate as a station to another AP while still acting as an AP on the same
-# channel.
-#assoc_ap_addr=00:12:34:56:78:9a
-
 # Static WEP key configuration
 #
 # The key number to use when transmitting.
index 87b18cd0a0fd93e6ef15c13eca7bb7201e83ee10..74a30dcad259cbefb452193a8ee506d32e3646d6 100644 (file)
@@ -138,12 +138,6 @@ struct hostapd_data {
 
        struct iapp_data *iapp;
 
-       enum { DO_NOT_ASSOC = 0, WAIT_BEACON, AUTHENTICATE, ASSOCIATE,
-              ASSOCIATED } assoc_ap_state;
-       char assoc_ap_ssid[33];
-       int assoc_ap_ssid_len;
-       u16 assoc_ap_aid;
-
        struct hostapd_cached_radius_acl *acl_cache;
        struct hostapd_acl_query_data *acl_queries;
 
index 1ea0aacc31d18384ede853ebc5e8a7c0e6841cf1..894d2bc5645cd296eb8afdb4c57013812bd6a4ff 100644 (file)
@@ -340,84 +340,6 @@ void ieee802_11_send_deauth(struct hostapd_data *hapd, u8 *addr, u16 reason)
 }
 
 
-static void ieee802_11_sta_authenticate(void *eloop_ctx, void *timeout_ctx)
-{
-       struct hostapd_data *hapd = eloop_ctx;
-       struct ieee80211_mgmt mgmt;
-       char ssid_txt[33];
-
-       if (hapd->assoc_ap_state == WAIT_BEACON)
-               hapd->assoc_ap_state = AUTHENTICATE;
-       if (hapd->assoc_ap_state != AUTHENTICATE)
-               return;
-
-       ieee802_11_print_ssid(ssid_txt, (u8 *) hapd->assoc_ap_ssid,
-                             hapd->assoc_ap_ssid_len);
-       printf("Authenticate with AP " MACSTR " SSID=%s (as station)\n",
-              MAC2STR(hapd->conf->assoc_ap_addr), ssid_txt);
-
-       os_memset(&mgmt, 0, sizeof(mgmt));
-       mgmt.frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
-                                         WLAN_FC_STYPE_AUTH);
-       os_memcpy(mgmt.da, hapd->conf->assoc_ap_addr, ETH_ALEN);
-       os_memcpy(mgmt.sa, hapd->own_addr, ETH_ALEN);
-       os_memcpy(mgmt.bssid, hapd->conf->assoc_ap_addr, ETH_ALEN);
-       mgmt.u.auth.auth_alg = host_to_le16(WLAN_AUTH_OPEN);
-       mgmt.u.auth.auth_transaction = host_to_le16(1);
-       mgmt.u.auth.status_code = host_to_le16(0);
-       if (hostapd_send_mgmt_frame(hapd, &mgmt, IEEE80211_HDRLEN +
-                                   sizeof(mgmt.u.auth), 0) < 0)
-               perror("ieee802_11_sta_authenticate: send");
-
-       /* Try to authenticate again, if this attempt fails or times out. */
-       eloop_register_timeout(5, 0, ieee802_11_sta_authenticate, hapd, NULL);
-}
-
-
-static void ieee802_11_sta_associate(void *eloop_ctx, void *timeout_ctx)
-{
-       struct hostapd_data *hapd = eloop_ctx;
-       u8 buf[256];
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) buf;
-       u8 *p;
-       char ssid_txt[33];
-
-       if (hapd->assoc_ap_state == AUTHENTICATE)
-               hapd->assoc_ap_state = ASSOCIATE;
-       if (hapd->assoc_ap_state != ASSOCIATE)
-               return;
-
-       ieee802_11_print_ssid(ssid_txt, (u8 *) hapd->assoc_ap_ssid,
-                             hapd->assoc_ap_ssid_len);
-       printf("Associate with AP " MACSTR " SSID=%s (as station)\n",
-              MAC2STR(hapd->conf->assoc_ap_addr), ssid_txt);
-
-       os_memset(mgmt, 0, sizeof(*mgmt));
-       mgmt->frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
-                                         WLAN_FC_STYPE_ASSOC_REQ);
-       os_memcpy(mgmt->da, hapd->conf->assoc_ap_addr, ETH_ALEN);
-       os_memcpy(mgmt->sa, hapd->own_addr, ETH_ALEN);
-       os_memcpy(mgmt->bssid, hapd->conf->assoc_ap_addr, ETH_ALEN);
-       mgmt->u.assoc_req.capab_info = host_to_le16(0);
-       mgmt->u.assoc_req.listen_interval = host_to_le16(1);
-       p = &mgmt->u.assoc_req.variable[0];
-
-       *p++ = WLAN_EID_SSID;
-       *p++ = hapd->assoc_ap_ssid_len;
-       os_memcpy(p, hapd->assoc_ap_ssid, hapd->assoc_ap_ssid_len);
-       p += hapd->assoc_ap_ssid_len;
-
-       p = hostapd_eid_supp_rates(hapd, p);
-       p = hostapd_eid_ext_supp_rates(hapd, p);
-
-       if (hostapd_send_mgmt_frame(hapd, mgmt, p - (u8 *) mgmt, 0) < 0)
-               perror("ieee802_11_sta_associate: send");
-
-       /* Try to authenticate again, if this attempt fails or times out. */
-       eloop_register_timeout(5, 0, ieee802_11_sta_associate, hapd, NULL);
-}
-
-
 static u16 auth_shared_key(struct hostapd_data *hapd, struct sta_info *sta,
                           u16 auth_transaction, u8 *challenge, int iswep)
 {
@@ -578,22 +500,6 @@ static void handle_auth(struct hostapd_data *hapd, struct ieee80211_mgmt *mgmt,
                   status_code, !!(fc & WLAN_FC_ISWEP),
                   challenge ? " challenge" : "");
 
-       if (hapd->assoc_ap_state == AUTHENTICATE && auth_transaction == 2 &&
-           os_memcmp(mgmt->sa, hapd->conf->assoc_ap_addr, ETH_ALEN) == 0 &&
-           os_memcmp(mgmt->bssid, hapd->conf->assoc_ap_addr, ETH_ALEN) == 0) {
-               if (status_code != 0) {
-                       printf("Authentication (as station) with AP "
-                              MACSTR " failed (status_code=%d)\n",
-                              MAC2STR(hapd->conf->assoc_ap_addr),
-                              status_code);
-                       return;
-               }
-               printf("Authenticated (as station) with AP " MACSTR "\n",
-                      MAC2STR(hapd->conf->assoc_ap_addr));
-               ieee802_11_sta_associate(hapd, NULL);
-               return;
-       }
-
        if (hapd->tkip_countermeasures) {
                resp = WLAN_REASON_MICHAEL_MIC_FAILURE;
                goto fail;
@@ -1167,57 +1073,6 @@ static void handle_assoc(struct hostapd_data *hapd,
 }
 
 
-static void handle_assoc_resp(struct hostapd_data *hapd,
-                             struct ieee80211_mgmt *mgmt, size_t len)
-{
-       u16 status_code, aid;
-
-       if (hapd->assoc_ap_state != ASSOCIATE) {
-               printf("Unexpected association response received from " MACSTR
-                      "\n", MAC2STR(mgmt->sa));
-               return;
-       }
-
-       if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.assoc_resp)) {
-               printf("handle_assoc_resp - too short payload (len=%lu)\n",
-                      (unsigned long) len);
-               return;
-       }
-
-       if (os_memcmp(mgmt->sa, hapd->conf->assoc_ap_addr, ETH_ALEN) != 0 ||
-           os_memcmp(mgmt->bssid, hapd->conf->assoc_ap_addr, ETH_ALEN) != 0) {
-               printf("Received association response from unexpected address "
-                      "(SA=" MACSTR " BSSID=" MACSTR "\n",
-                      MAC2STR(mgmt->sa), MAC2STR(mgmt->bssid));
-               return;
-       }
-
-       status_code = le_to_host16(mgmt->u.assoc_resp.status_code);
-       aid = le_to_host16(mgmt->u.assoc_resp.aid);
-       aid &= ~(BIT(14) | BIT(15));
-
-       if (status_code != 0) {
-               printf("Association (as station) with AP " MACSTR " failed "
-                      "(status_code=%d)\n",
-                      MAC2STR(hapd->conf->assoc_ap_addr), status_code);
-               /* Try to authenticate again */
-               hapd->assoc_ap_state = AUTHENTICATE;
-               eloop_register_timeout(5, 0, ieee802_11_sta_authenticate,
-                                      hapd, NULL);
-       }
-
-       printf("Associated (as station) with AP " MACSTR " (aid=%d)\n",
-              MAC2STR(hapd->conf->assoc_ap_addr), aid);
-       hapd->assoc_ap_aid = aid;
-       hapd->assoc_ap_state = ASSOCIATED;
-
-       if (hostapd_set_assoc_ap(hapd, hapd->conf->assoc_ap_addr)) {
-               printf("Could not set associated AP address to kernel "
-                      "driver.\n");
-       }
-}
-
-
 static void handle_disassoc(struct hostapd_data *hapd,
                            struct ieee80211_mgmt *mgmt, size_t len)
 {
@@ -1233,19 +1088,6 @@ static void handle_disassoc(struct hostapd_data *hapd,
                   MAC2STR(mgmt->sa),
                   le_to_host16(mgmt->u.disassoc.reason_code));
 
-       if (hapd->assoc_ap_state != DO_NOT_ASSOC &&
-           os_memcmp(mgmt->sa, hapd->conf->assoc_ap_addr, ETH_ALEN) == 0) {
-               printf("Assoc AP " MACSTR " sent disassociation "
-                      "(reason_code=%d) - try to authenticate\n",
-                      MAC2STR(hapd->conf->assoc_ap_addr),
-                      le_to_host16(mgmt->u.disassoc.reason_code));
-               hapd->assoc_ap_state = AUTHENTICATE;
-               ieee802_11_sta_authenticate(hapd, NULL);
-               eloop_register_timeout(0, 500000, ieee802_11_sta_authenticate,
-                                      hapd, NULL);
-               return;
-       }
-
        sta = ap_get_sta(hapd, mgmt->sa);
        if (sta == NULL) {
                printf("Station " MACSTR " trying to disassociate, but it "
@@ -1294,18 +1136,6 @@ static void handle_deauth(struct hostapd_data *hapd,
                   MAC2STR(mgmt->sa),
                   le_to_host16(mgmt->u.deauth.reason_code));
 
-       if (hapd->assoc_ap_state != DO_NOT_ASSOC &&
-           os_memcmp(mgmt->sa, hapd->conf->assoc_ap_addr, ETH_ALEN) == 0) {
-               printf("Assoc AP " MACSTR " sent deauthentication "
-                      "(reason_code=%d) - try to authenticate\n",
-                      MAC2STR(hapd->conf->assoc_ap_addr),
-                      le_to_host16(mgmt->u.deauth.reason_code));
-               hapd->assoc_ap_state = AUTHENTICATE;
-               eloop_register_timeout(0, 500000, ieee802_11_sta_authenticate,
-                                      hapd, NULL);
-               return;
-       }
-
        sta = ap_get_sta(hapd, mgmt->sa);
        if (sta == NULL) {
                printf("Station " MACSTR " trying to deauthenticate, but it "
@@ -1342,17 +1172,6 @@ static void handle_beacon(struct hostapd_data *hapd,
                                             sizeof(mgmt->u.beacon)), &elems,
                                      0);
 
-       if (hapd->assoc_ap_state == WAIT_BEACON &&
-           os_memcmp(mgmt->sa, hapd->conf->assoc_ap_addr, ETH_ALEN) == 0) {
-               if (elems.ssid && elems.ssid_len <= 32) {
-                       os_memcpy(hapd->assoc_ap_ssid, elems.ssid,
-                                 elems.ssid_len);
-                       hapd->assoc_ap_ssid[elems.ssid_len] = '\0';
-                       hapd->assoc_ap_ssid_len = elems.ssid_len;
-               }
-               ieee802_11_sta_authenticate(hapd, NULL);
-       }
-
        ap_list_process_beacon(hapd->iface, mgmt, &elems, fi);
 }
 
@@ -1505,10 +1324,7 @@ void ieee802_11_mgmt(struct hostapd_data *hapd, u8 *buf, size_t len, u16 stype,
                mgmt->bssid[4] == 0xff && mgmt->bssid[5] == 0xff;
 
        if (!broadcast &&
-           os_memcmp(mgmt->bssid, hapd->own_addr, ETH_ALEN) != 0 &&
-           (hapd->assoc_ap_state == DO_NOT_ASSOC ||
-            os_memcmp(mgmt->bssid, hapd->conf->assoc_ap_addr, ETH_ALEN) != 0))
-       {
+           os_memcmp(mgmt->bssid, hapd->own_addr, ETH_ALEN) != 0) {
                printf("MGMT: BSSID=" MACSTR " not our address\n",
                       MAC2STR(mgmt->bssid));
                return;
@@ -1537,10 +1353,6 @@ void ieee802_11_mgmt(struct hostapd_data *hapd, u8 *buf, size_t len, u16 stype,
                wpa_printf(MSG_DEBUG, "mgmt::assoc_req");
                handle_assoc(hapd, mgmt, len, 0);
                break;
-       case WLAN_FC_STYPE_ASSOC_RESP:
-               wpa_printf(MSG_DEBUG, "mgmt::assoc_resp");
-               handle_assoc_resp(hapd, mgmt, len);
-               break;
        case WLAN_FC_STYPE_REASSOC_REQ:
                wpa_printf(MSG_DEBUG, "mgmt::reassoc_req");
                handle_assoc(hapd, mgmt, len, 1);