source: trunk/package/hostapd/patches/601-wpa_supplicant-add-new-config-params-to-be-used-with.patch @ 32828

Last change on this file since 32828 was 32828, checked in by blogic, 4 years ago

hostapd: add pending patches

add patched needed to pass more parameters to the IBSS JOIN command

Signed-off-by: Antonio Quartulli <ordex@…>

File size: 5.7 KB
  • src/drivers/driver.h

    From 4bb69d15477e0f2b00e166845341dc933de47c58 Mon Sep 17 00:00:00 2001
    From: Antonio Quartulli <ordex@autistici.org>
    Date: Sun, 3 Jun 2012 18:22:56 +0200
    Subject: [PATCHv2 601/602] wpa_supplicant: add new config params to be used
     with the ibss join command
    
    Signed-hostap: Antonio Quartulli <ordex@autistici.org>
    ---
     src/drivers/driver.h            |    6 +++
     wpa_supplicant/config.c         |   96 +++++++++++++++++++++++++++++++++++++++
     wpa_supplicant/config_ssid.h    |    6 +++
     wpa_supplicant/wpa_supplicant.c |   23 +++++++---
     4 files changed, 124 insertions(+), 7 deletions(-)
    
    diff --git a/src/drivers/driver.h b/src/drivers/driver.h
    index 5ee92f7..d204148 100644
    a b  
    1919 
    2020#define WPA_SUPPLICANT_DRIVER_VERSION 4 
    2121 
     22#include "drivers/nl80211_copy.h" 
    2223#include "common/defs.h" 
    2324 
    2425#define HOSTAPD_CHAN_DISABLED 0x00000001 
    struct wpa_driver_associate_params { 
    332333         */ 
    333334        int freq; 
    334335 
     336        int beacon_interval; 
     337        int fixed_freq; 
     338        unsigned char rates[NL80211_MAX_SUPP_RATES]; 
     339        int mcast_rate; 
     340 
    335341        /** 
    336342         * bg_scan_period - Background scan period in seconds, 0 to disable 
    337343         * background scan, or -1 to indicate no change to default driver 
  • wpa_supplicant/config.c

    diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
    index c423bc3..be566ee 100644
    a b  
    1414#include "rsn_supp/wpa.h" 
    1515#include "eap_peer/eap.h" 
    1616#include "p2p/p2p.h" 
     17#include "drivers/nl80211_copy.h" 
    1718#include "config.h" 
    1819 
    1920 
    static char * wpa_config_write_p2p_client_list(const struct parse_data *data, 
    14311432 
    14321433#endif /* CONFIG_P2P */ 
    14331434 
     1435static int wpa_config_parse_mcast_rate(const struct parse_data *data, 
     1436                                       struct wpa_ssid *ssid, int line, 
     1437                                       const char *value) 
     1438{ 
     1439        ssid->mcast_rate = (int)(strtod(value, NULL) * 10); 
     1440 
     1441        return 0; 
     1442} 
     1443 
     1444#ifndef NO_CONFIG_WRITE 
     1445static char * wpa_config_write_mcast_rate(const struct parse_data *data, 
     1446                                          struct wpa_ssid *ssid) 
     1447{ 
     1448        char *value; 
     1449        int res; 
     1450 
     1451        if (!ssid->mcast_rate == 0) 
     1452                return NULL; 
     1453 
     1454        value = os_malloc(6); /* longest: 300.0 */ 
     1455        if (value == NULL) 
     1456                return NULL; 
     1457        res = os_snprintf(value, 5, "%.1f", (double)ssid->mcast_rate / 10); 
     1458        if (res < 0) { 
     1459                os_free(value); 
     1460                return NULL; 
     1461        } 
     1462        return value; 
     1463} 
     1464#endif /* NO_CONFIG_WRITE */ 
     1465 
     1466static int wpa_config_parse_rates(const struct parse_data *data, 
     1467                                  struct wpa_ssid *ssid, int line, 
     1468                                  const char *value) 
     1469{ 
     1470        int i; 
     1471        char *pos, *r, *sptr, *end; 
     1472        double rate; 
     1473 
     1474        pos = (char *)value; 
     1475        r = strtok_r(pos, ",", &sptr); 
     1476        i = 0; 
     1477        while (pos && i < NL80211_MAX_SUPP_RATES) { 
     1478                rate = 0.0; 
     1479                if (r) 
     1480                        rate = strtod(r, &end); 
     1481                ssid->rates[i] = rate * 2; 
     1482                if (*end != '\0' || rate * 2 != ssid->rates[i]) 
     1483                        return 1; 
     1484 
     1485                i++; 
     1486                r = strtok_r(NULL, ",", &sptr); 
     1487        } 
     1488 
     1489        return 0; 
     1490} 
     1491 
     1492#ifndef NO_CONFIG_WRITE 
     1493static char * wpa_config_write_rates(const struct parse_data *data, 
     1494                                     struct wpa_ssid *ssid) 
     1495{ 
     1496        char *value, *pos; 
     1497        int res, i; 
     1498 
     1499        if (ssid->rates[0] <= 0) 
     1500                return NULL; 
     1501 
     1502        value = os_malloc(6 * NL80211_MAX_SUPP_RATES + 1); 
     1503        if (value == NULL) 
     1504                return NULL; 
     1505        pos = value; 
     1506        for (i = 0; i < NL80211_MAX_SUPP_RATES - 1; i++) { 
     1507                res = os_snprintf(pos, 6, "%.1f,", (double)ssid->rates[i] / 2); 
     1508                if (res < 0) { 
     1509                        os_free(value); 
     1510                        return NULL; 
     1511                } 
     1512                pos += res; 
     1513        } 
     1514        res = os_snprintf(pos, 6, "%.1f", 
     1515                          (double)ssid->rates[NL80211_MAX_SUPP_RATES - 1] / 2); 
     1516        if (res < 0) { 
     1517                os_free(value); 
     1518                return NULL; 
     1519        } 
     1520 
     1521        value[6 * NL80211_MAX_SUPP_RATES] = '\0'; 
     1522        return value; 
     1523} 
     1524#endif /* NO_CONFIG_WRITE */ 
     1525 
    14341526/* Helper macros for network block parser */ 
    14351527 
    14361528#ifdef OFFSET 
    static const struct parse_data ssid_fields[] = { 
    16051697        { STR(ht_mcs) }, 
    16061698#endif /* CONFIG_HT_OVERRIDES */ 
    16071699        { INT(ap_max_inactivity) }, 
     1700        { INT_RANGE(fixed_freq, 0, 1) }, 
     1701        { INT_RANGE(beacon_interval, 0, 1000) }, 
     1702        { FUNC(rates) }, 
     1703        { FUNC(mcast_rate) }, 
    16081704}; 
    16091705 
    16101706#undef OFFSET 
  • wpa_supplicant/config_ssid.h

    diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
    index 80d4382..8d152a4 100644
    a b  
    1111 
    1212#include "common/defs.h" 
    1313#include "eap_peer/eap_config.h" 
     14#include "drivers/nl80211_copy.h" 
    1415 
    1516#define MAX_SSID_LEN 32 
    1617 
    struct wpa_ssid { 
    499500         * By default: 300 seconds. 
    500501         */ 
    501502        int ap_max_inactivity; 
     503 
     504        int fixed_freq; 
     505        int beacon_interval; 
     506        unsigned char rates[NL80211_MAX_SUPP_RATES]; 
     507        double mcast_rate; 
    502508}; 
    503509 
    504510#endif /* CONFIG_SSID_H */ 
  • wpa_supplicant/wpa_supplicant.c

    diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
    index cc85f1e..1473d91 100644
    a b void wpa_supplicant_associate(struct wpa_supplicant *wpa_s, 
    13951395                params.ssid_len = ssid->ssid_len; 
    13961396        } 
    13971397 
    1398         if (ssid->mode == WPAS_MODE_IBSS && ssid->bssid_set && 
    1399             wpa_s->conf->ap_scan == 2) { 
    1400                 params.bssid = ssid->bssid; 
    1401                 params.fixed_bssid = 1; 
     1398        if (ssid->mode == WPAS_MODE_IBSS) { 
     1399                if (ssid->bssid_set && wpa_s->conf->ap_scan == 2) { 
     1400                        params.bssid = ssid->bssid; 
     1401                        params.fixed_bssid = 1; 
     1402                } 
     1403                if (ssid->frequency > 0 && params.freq == 0) 
     1404                        /* Initial channel for IBSS */ 
     1405                        params.freq = ssid->frequency; 
     1406                params.fixed_freq = ssid->fixed_freq; 
     1407                params.beacon_interval = ssid->beacon_interval; 
     1408                i = 0; 
     1409                while (i < NL80211_MAX_SUPP_RATES) { 
     1410                        params.rates[i] = ssid->rates[i]; 
     1411                        i++; 
     1412                } 
     1413                params.mcast_rate = ssid->mcast_rate; 
    14021414        } 
    14031415 
    1404         if (ssid->mode == WPAS_MODE_IBSS && ssid->frequency > 0 && 
    1405             params.freq == 0) 
    1406                 params.freq = ssid->frequency; /* Initial channel for IBSS */ 
    14071416        params.wpa_ie = wpa_ie; 
    14081417        params.wpa_ie_len = wpa_ie_len; 
    14091418        params.pairwise_suite = cipher_pairwise; 
Note: See TracBrowser for help on using the repository browser.