mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
Move WMM AC parameter parser into a common file
This allows the same implementation to be used for wpa_supplicant, too. Signed-hostap: Yoni Divinsky <yoni.divinsky@ti.com>
This commit is contained in:
parent
504a5839ea
commit
eda070f14f
@ -909,78 +909,6 @@ static int hostapd_config_tx_queue(struct hostapd_config *conf, char *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_config_wmm_ac(struct hostapd_config *conf, char *name,
|
|
||||||
char *val)
|
|
||||||
{
|
|
||||||
int num, v;
|
|
||||||
char *pos;
|
|
||||||
struct hostapd_wmm_ac_params *ac;
|
|
||||||
|
|
||||||
/* skip 'wme_ac_' or 'wmm_ac_' prefix */
|
|
||||||
pos = name + 7;
|
|
||||||
if (os_strncmp(pos, "be_", 3) == 0) {
|
|
||||||
num = 0;
|
|
||||||
pos += 3;
|
|
||||||
} else if (os_strncmp(pos, "bk_", 3) == 0) {
|
|
||||||
num = 1;
|
|
||||||
pos += 3;
|
|
||||||
} else if (os_strncmp(pos, "vi_", 3) == 0) {
|
|
||||||
num = 2;
|
|
||||||
pos += 3;
|
|
||||||
} else if (os_strncmp(pos, "vo_", 3) == 0) {
|
|
||||||
num = 3;
|
|
||||||
pos += 3;
|
|
||||||
} else {
|
|
||||||
wpa_printf(MSG_ERROR, "Unknown WMM name '%s'", pos);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ac = &conf->wmm_ac_params[num];
|
|
||||||
|
|
||||||
if (os_strcmp(pos, "aifs") == 0) {
|
|
||||||
v = atoi(val);
|
|
||||||
if (v < 1 || v > 255) {
|
|
||||||
wpa_printf(MSG_ERROR, "Invalid AIFS value %d", v);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ac->aifs = v;
|
|
||||||
} else if (os_strcmp(pos, "cwmin") == 0) {
|
|
||||||
v = atoi(val);
|
|
||||||
if (v < 0 || v > 12) {
|
|
||||||
wpa_printf(MSG_ERROR, "Invalid cwMin value %d", v);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ac->cwmin = v;
|
|
||||||
} else if (os_strcmp(pos, "cwmax") == 0) {
|
|
||||||
v = atoi(val);
|
|
||||||
if (v < 0 || v > 12) {
|
|
||||||
wpa_printf(MSG_ERROR, "Invalid cwMax value %d", v);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ac->cwmax = v;
|
|
||||||
} else if (os_strcmp(pos, "txop_limit") == 0) {
|
|
||||||
v = atoi(val);
|
|
||||||
if (v < 0 || v > 0xffff) {
|
|
||||||
wpa_printf(MSG_ERROR, "Invalid txop value %d", v);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ac->txop_limit = v;
|
|
||||||
} else if (os_strcmp(pos, "acm") == 0) {
|
|
||||||
v = atoi(val);
|
|
||||||
if (v < 0 || v > 1) {
|
|
||||||
wpa_printf(MSG_ERROR, "Invalid acm value %d", v);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ac->admission_control_mandatory = v;
|
|
||||||
} else {
|
|
||||||
wpa_printf(MSG_ERROR, "Unknown wmm_ac_ field '%s'", pos);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R
|
||||||
static int add_r0kh(struct hostapd_bss_config *bss, char *value)
|
static int add_r0kh(struct hostapd_bss_config *bss, char *value)
|
||||||
{
|
{
|
||||||
@ -2164,7 +2092,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
|||||||
bss->wmm_uapsd = atoi(pos);
|
bss->wmm_uapsd = atoi(pos);
|
||||||
} else if (os_strncmp(buf, "wme_ac_", 7) == 0 ||
|
} else if (os_strncmp(buf, "wme_ac_", 7) == 0 ||
|
||||||
os_strncmp(buf, "wmm_ac_", 7) == 0) {
|
os_strncmp(buf, "wmm_ac_", 7) == 0) {
|
||||||
if (hostapd_config_wmm_ac(conf, buf, pos)) {
|
if (hostapd_config_wmm_ac(conf->wmm_ac_params, buf,
|
||||||
|
pos)) {
|
||||||
wpa_printf(MSG_ERROR, "Line %d: invalid WMM "
|
wpa_printf(MSG_ERROR, "Line %d: invalid WMM "
|
||||||
"ac item", line);
|
"ac item", line);
|
||||||
errors++;
|
errors++;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "common/defs.h"
|
#include "common/defs.h"
|
||||||
#include "ip_addr.h"
|
#include "ip_addr.h"
|
||||||
#include "common/wpa_common.h"
|
#include "common/wpa_common.h"
|
||||||
|
#include "common/ieee802_11_common.h"
|
||||||
#include "wps/wps.h"
|
#include "wps/wps.h"
|
||||||
|
|
||||||
#define MAX_STA_COUNT 2007
|
#define MAX_STA_COUNT 2007
|
||||||
@ -136,14 +137,6 @@ struct hostapd_tx_queue_params {
|
|||||||
int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
|
int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hostapd_wmm_ac_params {
|
|
||||||
int cwmin;
|
|
||||||
int cwmax;
|
|
||||||
int aifs;
|
|
||||||
int txop_limit; /* in units of 32us */
|
|
||||||
int admission_control_mandatory;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#define MAX_ROAMING_CONSORTIUM_LEN 15
|
#define MAX_ROAMING_CONSORTIUM_LEN 15
|
||||||
|
|
||||||
|
@ -405,3 +405,75 @@ const u8 * get_hdr_bssid(const struct ieee80211_hdr *hdr, size_t len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hostapd_config_wmm_ac(struct hostapd_wmm_ac_params wmm_ac_params[],
|
||||||
|
const char *name, const char *val)
|
||||||
|
{
|
||||||
|
int num, v;
|
||||||
|
const char *pos;
|
||||||
|
struct hostapd_wmm_ac_params *ac;
|
||||||
|
|
||||||
|
/* skip 'wme_ac_' or 'wmm_ac_' prefix */
|
||||||
|
pos = name + 7;
|
||||||
|
if (os_strncmp(pos, "be_", 3) == 0) {
|
||||||
|
num = 0;
|
||||||
|
pos += 3;
|
||||||
|
} else if (os_strncmp(pos, "bk_", 3) == 0) {
|
||||||
|
num = 1;
|
||||||
|
pos += 3;
|
||||||
|
} else if (os_strncmp(pos, "vi_", 3) == 0) {
|
||||||
|
num = 2;
|
||||||
|
pos += 3;
|
||||||
|
} else if (os_strncmp(pos, "vo_", 3) == 0) {
|
||||||
|
num = 3;
|
||||||
|
pos += 3;
|
||||||
|
} else {
|
||||||
|
wpa_printf(MSG_ERROR, "Unknown WMM name '%s'", pos);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ac = &wmm_ac_params[num];
|
||||||
|
|
||||||
|
if (os_strcmp(pos, "aifs") == 0) {
|
||||||
|
v = atoi(val);
|
||||||
|
if (v < 1 || v > 255) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid AIFS value %d", v);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ac->aifs = v;
|
||||||
|
} else if (os_strcmp(pos, "cwmin") == 0) {
|
||||||
|
v = atoi(val);
|
||||||
|
if (v < 0 || v > 12) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid cwMin value %d", v);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ac->cwmin = v;
|
||||||
|
} else if (os_strcmp(pos, "cwmax") == 0) {
|
||||||
|
v = atoi(val);
|
||||||
|
if (v < 0 || v > 12) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid cwMax value %d", v);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ac->cwmax = v;
|
||||||
|
} else if (os_strcmp(pos, "txop_limit") == 0) {
|
||||||
|
v = atoi(val);
|
||||||
|
if (v < 0 || v > 0xffff) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid txop value %d", v);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ac->txop_limit = v;
|
||||||
|
} else if (os_strcmp(pos, "acm") == 0) {
|
||||||
|
v = atoi(val);
|
||||||
|
if (v < 0 || v > 1) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid acm value %d", v);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ac->admission_control_mandatory = v;
|
||||||
|
} else {
|
||||||
|
wpa_printf(MSG_ERROR, "Unknown wmm_ac_ field '%s'", pos);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -85,4 +85,15 @@ struct wpabuf * ieee802_11_vendor_ie_concat(const u8 *ies, size_t ies_len,
|
|||||||
struct ieee80211_hdr;
|
struct ieee80211_hdr;
|
||||||
const u8 * get_hdr_bssid(const struct ieee80211_hdr *hdr, size_t len);
|
const u8 * get_hdr_bssid(const struct ieee80211_hdr *hdr, size_t len);
|
||||||
|
|
||||||
|
struct hostapd_wmm_ac_params {
|
||||||
|
int cwmin;
|
||||||
|
int cwmax;
|
||||||
|
int aifs;
|
||||||
|
int txop_limit; /* in units of 32us */
|
||||||
|
int admission_control_mandatory;
|
||||||
|
};
|
||||||
|
|
||||||
|
int hostapd_config_wmm_ac(struct hostapd_wmm_ac_params wmm_ac_params[],
|
||||||
|
const char *name, const char *val);
|
||||||
|
|
||||||
#endif /* IEEE802_11_COMMON_H */
|
#endif /* IEEE802_11_COMMON_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user