wpa_supplicant: add new config params to be used with the ibss join command
Signed-hostap: Antonio Quartulli <ordex@autistici.org>
This commit is contained in:
parent
8580056c28
commit
f8778360f8
4 changed files with 106 additions and 0 deletions
|
@ -1004,6 +1004,9 @@ struct wpa_driver_associate_params {
|
|||
* responsible for selecting with which BSS to associate. */
|
||||
const u8 *bssid;
|
||||
|
||||
unsigned char rates[WLAN_SUPP_RATES_MAX];
|
||||
int mcast_rate;
|
||||
|
||||
/**
|
||||
* bssid_hint - BSSID of a proposed AP
|
||||
*
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "eap_peer/eap.h"
|
||||
#include "p2p/p2p.h"
|
||||
#include "fst/fst.h"
|
||||
#include "ap/sta_info.h"
|
||||
#include "config.h"
|
||||
|
||||
|
||||
|
@ -2421,6 +2422,97 @@ static char * wpa_config_write_mac_value(const struct parse_data *data,
|
|||
#endif /* NO_CONFIG_WRITE */
|
||||
|
||||
|
||||
static int wpa_config_parse_mcast_rate(const struct parse_data *data,
|
||||
struct wpa_ssid *ssid, int line,
|
||||
const char *value)
|
||||
{
|
||||
ssid->mcast_rate = (int)(strtod(value, NULL) * 10);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef NO_CONFIG_WRITE
|
||||
static char * wpa_config_write_mcast_rate(const struct parse_data *data,
|
||||
struct wpa_ssid *ssid)
|
||||
{
|
||||
char *value;
|
||||
int res;
|
||||
|
||||
if (!ssid->mcast_rate == 0)
|
||||
return NULL;
|
||||
|
||||
value = os_malloc(6); /* longest: 300.0 */
|
||||
if (value == NULL)
|
||||
return NULL;
|
||||
res = os_snprintf(value, 5, "%.1f", (double)ssid->mcast_rate / 10);
|
||||
if (res < 0) {
|
||||
os_free(value);
|
||||
return NULL;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
#endif /* NO_CONFIG_WRITE */
|
||||
|
||||
static int wpa_config_parse_rates(const struct parse_data *data,
|
||||
struct wpa_ssid *ssid, int line,
|
||||
const char *value)
|
||||
{
|
||||
int i;
|
||||
char *pos, *r, *sptr, *end;
|
||||
double rate;
|
||||
|
||||
pos = (char *)value;
|
||||
r = strtok_r(pos, ",", &sptr);
|
||||
i = 0;
|
||||
while (pos && i < WLAN_SUPP_RATES_MAX) {
|
||||
rate = 0.0;
|
||||
if (r)
|
||||
rate = strtod(r, &end);
|
||||
ssid->rates[i] = rate * 2;
|
||||
if (*end != '\0' || rate * 2 != ssid->rates[i])
|
||||
return 1;
|
||||
|
||||
i++;
|
||||
r = strtok_r(NULL, ",", &sptr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef NO_CONFIG_WRITE
|
||||
static char * wpa_config_write_rates(const struct parse_data *data,
|
||||
struct wpa_ssid *ssid)
|
||||
{
|
||||
char *value, *pos;
|
||||
int res, i;
|
||||
|
||||
if (ssid->rates[0] <= 0)
|
||||
return NULL;
|
||||
|
||||
value = os_malloc(6 * WLAN_SUPP_RATES_MAX + 1);
|
||||
if (value == NULL)
|
||||
return NULL;
|
||||
pos = value;
|
||||
for (i = 0; i < WLAN_SUPP_RATES_MAX - 1; i++) {
|
||||
res = os_snprintf(pos, 6, "%.1f,", (double)ssid->rates[i] / 2);
|
||||
if (res < 0) {
|
||||
os_free(value);
|
||||
return NULL;
|
||||
}
|
||||
pos += res;
|
||||
}
|
||||
res = os_snprintf(pos, 6, "%.1f",
|
||||
(double)ssid->rates[WLAN_SUPP_RATES_MAX - 1] / 2);
|
||||
if (res < 0) {
|
||||
os_free(value);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
value[6 * WLAN_SUPP_RATES_MAX] = '\0';
|
||||
return value;
|
||||
}
|
||||
#endif /* NO_CONFIG_WRITE */
|
||||
|
||||
/* Helper macros for network block parser */
|
||||
|
||||
#ifdef OFFSET
|
||||
|
@ -2713,6 +2805,8 @@ static const struct parse_data ssid_fields[] = {
|
|||
{ INT(ap_max_inactivity) },
|
||||
{ INT(dtim_period) },
|
||||
{ INT(beacon_int) },
|
||||
{ FUNC(rates) },
|
||||
{ FUNC(mcast_rate) },
|
||||
#ifdef CONFIG_MACSEC
|
||||
{ INT_RANGE(macsec_policy, 0, 1) },
|
||||
{ INT_RANGE(macsec_integ_only, 0, 1) },
|
||||
|
|
|
@ -879,6 +879,9 @@ struct wpa_ssid {
|
|||
*/
|
||||
void *parent_cred;
|
||||
|
||||
unsigned char rates[WLAN_SUPP_RATES_MAX];
|
||||
double mcast_rate;
|
||||
|
||||
#ifdef CONFIG_MACSEC
|
||||
/**
|
||||
* macsec_policy - Determines the policy for MACsec secure session
|
||||
|
|
|
@ -4435,6 +4435,12 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||
params.beacon_int = ssid->beacon_int;
|
||||
else
|
||||
params.beacon_int = wpa_s->conf->beacon_int;
|
||||
int i = 0;
|
||||
while (i < WLAN_SUPP_RATES_MAX) {
|
||||
params.rates[i] = ssid->rates[i];
|
||||
i++;
|
||||
}
|
||||
params.mcast_rate = ssid->mcast_rate;
|
||||
}
|
||||
|
||||
if (bss && ssid->enable_edmg)
|
||||
|
|
Loading…
Add table
Reference in a new issue