Changeset 26220


Ignore:
Timestamp:
2011-03-18T12:03:12+01:00 (7 years ago)
Author:
acinonyx
Message:

[package] hostapd: fix non-multicall hostapd compile (#9074)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/hostapd/patches/350-hostap_multicall_fix.patch

    r26203 r26220  
    107107                             int idx, u8 *seq) 
    108108 { 
    109 @@ -1125,21 +1071,14 @@ static struct hostapd_hw_modes * hostap_ 
     109@@ -1125,21 +1071,9 @@ static struct hostapd_hw_modes * hostap_ 
    110110        return mode; 
    111111 } 
     
    120120-       int current_mode; /* infra/adhoc */ 
    121121-}; 
     122- 
     123- 
     124-static int wpa_driver_hostap_set_auth_alg(void *priv, int auth_alg); 
     125- 
    122126+#endif /* HOSTAPD */ 
    123   
    124 +#if !defined(NO_SUPPLICANT) 
    125   
    126  static int wpa_driver_hostap_set_auth_alg(void *priv, int auth_alg); 
    127   
    128127  
    129128-static int hostapd_ioctl(struct wpa_driver_hostap_data *drv, 
     
    132131                         int len, int show_err) 
    133132 { 
    134 @@ -1161,7 +1100,7 @@ static int hostapd_ioctl(struct wpa_driv 
     133@@ -1161,7 +1095,12 @@ static int hostapd_ioctl(struct wpa_driv 
    135134 } 
    136135  
    137136  
    138137-static int wpa_driver_hostap_set_wpa_ie(struct wpa_driver_hostap_data *drv, 
     138+#if !defined(NO_SUPPLICANT) 
     139+ 
     140+static int wpa_driver_hostap_set_auth_alg(void *priv, int auth_alg); 
     141+ 
     142+ 
    139143+static int wpa_driver_hostap_set_wpa_ie(struct hostap_driver_data *drv, 
    140144                                        const u8 *wpa_ie, size_t wpa_ie_len) 
     
    168172  
    169173        wpa_printf(MSG_DEBUG, "%s: enabled=%d", __FUNCTION__, enabled); 
    170 @@ -1260,7 +1199,7 @@ static int wpa_driver_hostap_set_key(con 
    171                                      const u8 *seq, size_t seq_len, 
    172                                      const u8 *key, size_t key_len) 
    173  { 
    174 -       struct wpa_driver_hostap_data *drv = priv; 
    175 +       struct hostap_driver_data *drv = priv; 
    176         struct prism2_hostapd_param *param; 
    177         u8 *buf; 
    178         size_t blen; 
    179 @@ -1305,14 +1244,10 @@ static int wpa_driver_hostap_set_key(con 
    180          * use keyidx 1..3 (i.e., default key with keyidx 0 is not supported). 
    181          * This should be fine for more or less all cases, but for completeness 
    182          * sake, the driver could be enhanced to support the missing key. */ 
     174@@ -1223,125 +1162,15 @@ static int wpa_driver_hostap_set_wpa(voi 
     175 } 
     176  
     177  
     178-static void show_set_key_error(struct prism2_hostapd_param *param) 
     179-{ 
     180-       switch (param->u.crypt.err) { 
     181-       case HOSTAP_CRYPT_ERR_UNKNOWN_ALG: 
     182-               wpa_printf(MSG_INFO, "Unknown algorithm '%s'.", 
     183-                          param->u.crypt.alg); 
     184-               wpa_printf(MSG_INFO, "You may need to load kernel module to " 
     185-                          "register that algorithm."); 
     186-               wpa_printf(MSG_INFO, "E.g., 'modprobe hostap_crypt_wep' for " 
     187-                          "WEP."); 
     188-               break; 
     189-       case HOSTAP_CRYPT_ERR_UNKNOWN_ADDR: 
     190-               wpa_printf(MSG_INFO, "Unknown address " MACSTR ".", 
     191-                          MAC2STR(param->sta_addr)); 
     192-               break; 
     193-       case HOSTAP_CRYPT_ERR_CRYPT_INIT_FAILED: 
     194-               wpa_printf(MSG_INFO, "Crypt algorithm initialization failed."); 
     195-               break; 
     196-       case HOSTAP_CRYPT_ERR_KEY_SET_FAILED: 
     197-               wpa_printf(MSG_INFO, "Key setting failed."); 
     198-               break; 
     199-       case HOSTAP_CRYPT_ERR_TX_KEY_SET_FAILED: 
     200-               wpa_printf(MSG_INFO, "TX key index setting failed."); 
     201-               break; 
     202-       case HOSTAP_CRYPT_ERR_CARD_CONF_FAILED: 
     203-               wpa_printf(MSG_INFO, "Card configuration failed."); 
     204-               break; 
     205-       } 
     206-} 
     207- 
     208- 
     209-static int wpa_driver_hostap_set_key(const char *ifname, void *priv, 
     210-                                    enum wpa_alg alg, const u8 *addr, 
     211-                                    int key_idx, int set_tx, 
     212-                                    const u8 *seq, size_t seq_len, 
     213-                                    const u8 *key, size_t key_len) 
     214-{ 
     215-       struct wpa_driver_hostap_data *drv = priv; 
     216-       struct prism2_hostapd_param *param; 
     217-       u8 *buf; 
     218-       size_t blen; 
     219-       int ret = 0; 
     220-       char *alg_name; 
     221- 
     222-       switch (alg) { 
     223-       case WPA_ALG_NONE: 
     224-               alg_name = "none"; 
     225-               break; 
     226-       case WPA_ALG_WEP: 
     227-               alg_name = "WEP"; 
     228-               break; 
     229-       case WPA_ALG_TKIP: 
     230-               alg_name = "TKIP"; 
     231-               break; 
     232-       case WPA_ALG_CCMP: 
     233-               alg_name = "CCMP"; 
     234-               break; 
     235-       default: 
     236-               return -1; 
     237-       } 
     238- 
     239-       wpa_printf(MSG_DEBUG, "%s: alg=%s key_idx=%d set_tx=%d seq_len=%lu " 
     240-                  "key_len=%lu", __FUNCTION__, alg_name, key_idx, set_tx, 
     241-                  (unsigned long) seq_len, (unsigned long) key_len); 
     242- 
     243-       if (seq_len > 8) 
     244-               return -2; 
     245- 
     246-       blen = sizeof(*param) + key_len; 
     247-       buf = os_zalloc(blen); 
     248-       if (buf == NULL) 
     249-               return -1; 
     250- 
     251-       param = (struct prism2_hostapd_param *) buf; 
     252-       param->cmd = PRISM2_SET_ENCRYPTION; 
     253-       /* TODO: In theory, STA in client mode can use five keys; four default 
     254-        * keys for receiving (with keyidx 0..3) and one individual key for 
     255-        * both transmitting and receiving (keyidx 0) _unicast_ packets. Now, 
     256-        * keyidx 0 is reserved for this unicast use and default keys can only 
     257-        * use keyidx 1..3 (i.e., default key with keyidx 0 is not supported). 
     258-        * This should be fine for more or less all cases, but for completeness 
     259-        * sake, the driver could be enhanced to support the missing key. */ 
    183260-#if 0 
    184         if (addr == NULL) 
    185                 os_memset(param->sta_addr, 0xff, ETH_ALEN); 
    186         else 
    187                 os_memcpy(param->sta_addr, addr, ETH_ALEN); 
     261-       if (addr == NULL) 
     262-               os_memset(param->sta_addr, 0xff, ETH_ALEN); 
     263-       else 
     264-               os_memcpy(param->sta_addr, addr, ETH_ALEN); 
    188265-#else 
    189266-       os_memset(param->sta_addr, 0xff, ETH_ALEN); 
    190267-#endif 
    191         os_strlcpy((char *) param->u.crypt.alg, alg_name, 
    192                    HOSTAP_CRYPT_ALG_NAME_LEN); 
    193         param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; 
    194 @@ -1322,7 +1257,7 @@ static int wpa_driver_hostap_set_key(con 
    195         param->u.crypt.key_len = key_len; 
    196         os_memcpy((u8 *) (param + 1), key, key_len); 
    197   
     268-       os_strlcpy((char *) param->u.crypt.alg, alg_name, 
     269-                  HOSTAP_CRYPT_ALG_NAME_LEN); 
     270-       param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; 
     271-       param->u.crypt.idx = key_idx; 
     272-       if (seq) 
     273-               os_memcpy(param->u.crypt.seq, seq, seq_len); 
     274-       param->u.crypt.key_len = key_len; 
     275-       os_memcpy((u8 *) (param + 1), key, key_len); 
     276- 
    198277-       if (hostapd_ioctl(drv, param, blen, 1)) { 
    199 +       if (wpa_hostapd_ioctl(drv, param, blen, 1)) { 
    200                 wpa_printf(MSG_WARNING, "Failed to set encryption."); 
    201                 show_set_key_error(param); 
    202                 ret = -1; 
    203 @@ -1335,13 +1270,13 @@ static int wpa_driver_hostap_set_key(con 
    204   
     278-               wpa_printf(MSG_WARNING, "Failed to set encryption."); 
     279-               show_set_key_error(param); 
     280-               ret = -1; 
     281-       } 
     282-       os_free(buf); 
     283- 
     284-       return ret; 
     285-} 
     286- 
     287- 
    205288 static int wpa_driver_hostap_set_countermeasures(void *priv, int enabled) 
    206289 { 
     
    217300 { 
    218301        struct iwreq iwr; 
    219 @@ -1362,7 +1297,7 @@ static int wpa_driver_hostap_reset(struc 
     302@@ -1362,7 +1191,7 @@ static int wpa_driver_hostap_reset(struc 
    220303 } 
    221304  
     
    226309 { 
    227310        struct prism2_hostapd_param param; 
    228 @@ -1377,7 +1312,7 @@ static int wpa_driver_hostap_mlme(struct 
     311@@ -1377,7 +1206,7 @@ static int wpa_driver_hostap_mlme(struct 
    229312        os_memcpy(param.sta_addr, addr, ETH_ALEN); 
    230313        param.u.mlme.cmd = cmd; 
     
    235318                os_sleep(0, 100000); 
    236319                ret = wpa_driver_hostap_reset(drv, 2); 
    237 @@ -1389,7 +1324,7 @@ static int wpa_driver_hostap_mlme(struct 
     320@@ -1389,7 +1218,7 @@ static int wpa_driver_hostap_mlme(struct 
    238321 static int wpa_driver_hostap_deauthenticate(void *priv, const u8 *addr, 
    239322                                            int reason_code) 
     
    244327        return wpa_driver_hostap_mlme(drv, addr, MLME_STA_DEAUTH, 
    245328                                      reason_code); 
    246 @@ -1399,7 +1334,7 @@ static int wpa_driver_hostap_deauthentic 
     329@@ -1399,7 +1228,7 @@ static int wpa_driver_hostap_deauthentic 
    247330 static int wpa_driver_hostap_disassociate(void *priv, const u8 *addr, 
    248331                                          int reason_code) 
     
    253336        return wpa_driver_hostap_mlme(drv, addr, MLME_STA_DISASSOC, 
    254337                                      reason_code); 
    255 @@ -1410,7 +1345,7 @@ static int 
     338@@ -1410,7 +1239,7 @@ static int 
    256339 wpa_driver_hostap_associate(void *priv, 
    257340                            struct wpa_driver_associate_params *params) 
     
    262345        int allow_unencrypted_eapol; 
    263346  
    264 @@ -1474,7 +1409,7 @@ wpa_driver_hostap_associate(void *priv, 
     347@@ -1474,7 +1303,7 @@ wpa_driver_hostap_associate(void *priv, 
    265348 static int wpa_driver_hostap_scan(void *priv, 
    266349                                  struct wpa_driver_scan_params *params) 
     
    271354        int ret; 
    272355        const u8 *ssid = params->ssids[0].ssid; 
    273 @@ -1495,7 +1430,7 @@ static int wpa_driver_hostap_scan(void * 
     356@@ -1495,7 +1324,7 @@ static int wpa_driver_hostap_scan(void * 
    274357        param.cmd = PRISM2_HOSTAPD_SCAN_REQ; 
    275358        param.u.scan_req.ssid_len = ssid_len; 
     
    280363        /* Not all drivers generate "scan completed" wireless event, so try to 
    281364         * read results after a timeout. */ 
    282 @@ -1510,7 +1445,7 @@ static int wpa_driver_hostap_scan(void * 
     365@@ -1510,7 +1339,7 @@ static int wpa_driver_hostap_scan(void * 
    283366  
    284367 static int wpa_driver_hostap_set_auth_alg(void *priv, int auth_alg) 
     
    289372  
    290373        if (auth_alg & WPA_AUTH_ALG_OPEN) 
    291 @@ -1528,35 +1463,35 @@ static int wpa_driver_hostap_set_auth_al 
     374@@ -1528,35 +1357,35 @@ static int wpa_driver_hostap_set_auth_al 
    292375  
    293376 static int wpa_driver_hostap_get_bssid(void *priv, u8 *bssid) 
     
    330413        drv = os_zalloc(sizeof(*drv)); 
    331414        if (drv == NULL) 
    332 @@ -1596,14 +1531,14 @@ static void * wpa_driver_hostap_init(voi 
     415@@ -1596,14 +1425,120 @@ static void * wpa_driver_hostap_init(voi 
    333416  
    334417 static void wpa_driver_hostap_deinit(void *priv) 
     
    344427-#endif /* HOSTAPD */ 
    345428+#endif 
     429+ 
     430+ 
     431+static void show_set_key_error(struct prism2_hostapd_param *param) 
     432+{ 
     433+       switch (param->u.crypt.err) { 
     434+       case HOSTAP_CRYPT_ERR_UNKNOWN_ALG: 
     435+               wpa_printf(MSG_INFO, "Unknown algorithm '%s'.", 
     436+                          param->u.crypt.alg); 
     437+               wpa_printf(MSG_INFO, "You may need to load kernel module to " 
     438+                          "register that algorithm."); 
     439+               wpa_printf(MSG_INFO, "E.g., 'modprobe hostap_crypt_wep' for " 
     440+                          "WEP."); 
     441+               break; 
     442+       case HOSTAP_CRYPT_ERR_UNKNOWN_ADDR: 
     443+               wpa_printf(MSG_INFO, "Unknown address " MACSTR ".", 
     444+                          MAC2STR(param->sta_addr)); 
     445+               break; 
     446+       case HOSTAP_CRYPT_ERR_CRYPT_INIT_FAILED: 
     447+               wpa_printf(MSG_INFO, "Crypt algorithm initialization failed."); 
     448+               break; 
     449+       case HOSTAP_CRYPT_ERR_KEY_SET_FAILED: 
     450+               wpa_printf(MSG_INFO, "Key setting failed."); 
     451+               break; 
     452+       case HOSTAP_CRYPT_ERR_TX_KEY_SET_FAILED: 
     453+               wpa_printf(MSG_INFO, "TX key index setting failed."); 
     454+               break; 
     455+       case HOSTAP_CRYPT_ERR_CARD_CONF_FAILED: 
     456+               wpa_printf(MSG_INFO, "Card configuration failed."); 
     457+               break; 
     458+       } 
     459+} 
     460+ 
     461+ 
     462+static int wpa_driver_hostap_set_key(const char *ifname, void *priv, 
     463+                                    enum wpa_alg alg, const u8 *addr, 
     464+                                    int key_idx, int set_tx, 
     465+                                    const u8 *seq, size_t seq_len, 
     466+                                    const u8 *key, size_t key_len) 
     467+{ 
     468+       struct hostap_driver_data *drv = priv; 
     469+       struct prism2_hostapd_param *param; 
     470+       u8 *buf; 
     471+       size_t blen; 
     472+       int ret = 0; 
     473+       char *alg_name; 
     474+ 
     475+       switch (alg) { 
     476+       case WPA_ALG_NONE: 
     477+               alg_name = "none"; 
     478+               break; 
     479+       case WPA_ALG_WEP: 
     480+               alg_name = "WEP"; 
     481+               break; 
     482+       case WPA_ALG_TKIP: 
     483+               alg_name = "TKIP"; 
     484+               break; 
     485+       case WPA_ALG_CCMP: 
     486+               alg_name = "CCMP"; 
     487+               break; 
     488+       default: 
     489+               return -1; 
     490+       } 
     491+ 
     492+       wpa_printf(MSG_DEBUG, "%s: alg=%s key_idx=%d set_tx=%d seq_len=%lu " 
     493+                  "key_len=%lu", __FUNCTION__, alg_name, key_idx, set_tx, 
     494+                  (unsigned long) seq_len, (unsigned long) key_len); 
     495+ 
     496+       if (seq_len > 8) 
     497+               return -2; 
     498+ 
     499+       blen = sizeof(*param) + key_len; 
     500+       buf = os_zalloc(blen); 
     501+       if (buf == NULL) 
     502+               return -1; 
     503+ 
     504+       param = (struct prism2_hostapd_param *) buf; 
     505+       param->cmd = PRISM2_SET_ENCRYPTION; 
     506+       /* TODO: In theory, STA in client mode can use five keys; four default 
     507+        * keys for receiving (with keyidx 0..3) and one individual key for 
     508+        * both transmitting and receiving (keyidx 0) _unicast_ packets. Now, 
     509+        * keyidx 0 is reserved for this unicast use and default keys can only 
     510+        * use keyidx 1..3 (i.e., default key with keyidx 0 is not supported). 
     511+        * This should be fine for more or less all cases, but for completeness 
     512+        * sake, the driver could be enhanced to support the missing key. */ 
     513+       if (addr == NULL) 
     514+               os_memset(param->sta_addr, 0xff, ETH_ALEN); 
     515+       else 
     516+               os_memcpy(param->sta_addr, addr, ETH_ALEN); 
     517+       os_strlcpy((char *) param->u.crypt.alg, alg_name, 
     518+                  HOSTAP_CRYPT_ALG_NAME_LEN); 
     519+       param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; 
     520+       param->u.crypt.idx = key_idx; 
     521+       if (seq) 
     522+               os_memcpy(param->u.crypt.seq, seq, seq_len); 
     523+       param->u.crypt.key_len = key_len; 
     524+       os_memcpy((u8 *) (param + 1), key, key_len); 
     525+ 
     526+       if (wpa_hostapd_ioctl(drv, param, blen, 1)) { 
     527+               wpa_printf(MSG_WARNING, "Failed to set encryption."); 
     528+               show_set_key_error(param); 
     529+               ret = -1; 
     530+       } 
     531+       os_free(buf); 
     532+ 
     533+       return ret; 
     534+} 
    346535  
    347536  
Note: See TracChangeset for help on using the changeset viewer.