wpa_supplicant AP/P2P: Enable WMM param configuration

In case of P2P GO and AP mode, wpa_supplicant uses the default hostapd
parameters for WMM. In the default parameters the ACM bit for video and
voice are set to 1, meaning, P2P devices and stations which are
connected to the GO cannot pass voice or video data packets. Allow this
to be changed through wpa_supplicant configuration file with wmm_ac_*
parameters.

Signed-hostap: Yoni Divinsky <yoni.divinsky@ti.com>
This commit is contained in:
Yoni Divinsky 2012-08-12 11:34:07 +03:00 committed by Jouni Malinen
parent eda070f14f
commit c26effe15f
3 changed files with 39 additions and 0 deletions

View File

@ -490,6 +490,10 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
return -1; return -1;
} }
os_memcpy(wpa_s->ap_iface->conf->wmm_ac_params,
wpa_s->conf->wmm_ac_params,
sizeof(wpa_s->conf->wmm_ac_params));
if (params.uapsd > 0) { if (params.uapsd > 0) {
conf->bss->wmm_enabled = 1; conf->bss->wmm_enabled = 1;
conf->bss->wmm_uapsd = 1; conf->bss->wmm_uapsd = 1;

View File

@ -2549,6 +2549,15 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
const char *driver_param) const char *driver_param)
{ {
struct wpa_config *config; struct wpa_config *config;
const int aCWmin = 4, aCWmax = 10;
const struct hostapd_wmm_ac_params ac_bk =
{ aCWmin, aCWmax, 7, 0, 0 }; /* background traffic */
const struct hostapd_wmm_ac_params ac_be =
{ aCWmin, aCWmax, 3, 0, 0 }; /* best effort traffic */
const struct hostapd_wmm_ac_params ac_vi = /* video traffic */
{ aCWmin - 1, aCWmin, 2, 3000 / 32, 1 };
const struct hostapd_wmm_ac_params ac_vo = /* voice traffic */
{ aCWmin - 2, aCWmin - 1, 2, 1500 / 32, 1 };
config = os_zalloc(sizeof(*config)); config = os_zalloc(sizeof(*config));
if (config == NULL) if (config == NULL)
@ -2564,6 +2573,10 @@ struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
config->bss_expiration_scan_count = DEFAULT_BSS_EXPIRATION_SCAN_COUNT; config->bss_expiration_scan_count = DEFAULT_BSS_EXPIRATION_SCAN_COUNT;
config->max_num_sta = DEFAULT_MAX_NUM_STA; config->max_num_sta = DEFAULT_MAX_NUM_STA;
config->access_network_type = DEFAULT_ACCESS_NETWORK_TYPE; config->access_network_type = DEFAULT_ACCESS_NETWORK_TYPE;
config->wmm_ac_params[0] = ac_be;
config->wmm_ac_params[1] = ac_bk;
config->wmm_ac_params[2] = ac_vi;
config->wmm_ac_params[3] = ac_vo;
if (ctrl_interface) if (ctrl_interface)
config->ctrl_interface = os_strdup(ctrl_interface); config->ctrl_interface = os_strdup(ctrl_interface);
@ -3021,6 +3034,25 @@ int wpa_config_process_global(struct wpa_config *config, char *pos, int line)
break; break;
} }
if (i == NUM_GLOBAL_FIELDS) { if (i == NUM_GLOBAL_FIELDS) {
#ifdef CONFIG_AP
if (os_strncmp(pos, "wmm_ac_", 7) == 0) {
char *tmp = os_strchr(pos, '=');
if (tmp == NULL) {
if (line < 0)
return -1;
wpa_printf(MSG_ERROR, "Line %d: invalid line "
"'%s'", line, pos);
return -1;
}
*tmp++ = '\0';
if (hostapd_config_wmm_ac(config->wmm_ac_params, pos,
tmp)) {
wpa_printf(MSG_ERROR, "Line %d: invalid WMM "
"AC item", line);
return -1;
}
}
#endif /* CONFIG_AP */
if (line < 0) if (line < 0)
return -1; return -1;
wpa_printf(MSG_ERROR, "Line %d: unknown global field '%s'.", wpa_printf(MSG_ERROR, "Line %d: unknown global field '%s'.",

View File

@ -27,6 +27,7 @@
#include "config_ssid.h" #include "config_ssid.h"
#include "wps/wps.h" #include "wps/wps.h"
#include "common/ieee802_11_common.h"
struct wpa_cred { struct wpa_cred {
@ -733,6 +734,8 @@ struct wpa_config {
* By default: 300 seconds. * By default: 300 seconds.
*/ */
int p2p_go_max_inactivity; int p2p_go_max_inactivity;
struct hostapd_wmm_ac_params wmm_ac_params[4];
}; };