From 8e5f9134563d3310284bf8b3084744b1b2eb2b86 Mon Sep 17 00:00:00 2001 From: Bharat Chakravarty Date: Wed, 30 Nov 2011 17:44:43 +0200 Subject: [PATCH] WPS: Allow RF Bands value to be overridden A new hostapd.conf parameter, wps_rf_bands, can now be used to fix the RF Bands value in cases where hw_mode is not set or when operating a dual band dual concurrent AP. Signed-hostap: Jouni Malinen --- hostapd/config_file.c | 15 +++++++++++++++ hostapd/hostapd.conf | 6 ++++++ src/ap/ap_config.h | 2 ++ src/ap/wps_hostapd.c | 10 ++++++++-- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index 107d37ab8..5eb7b4992 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -1768,6 +1768,21 @@ struct hostapd_config * hostapd_config_read(const char *fname) "hw_mode '%s'", line, pos); errors++; } + } else if (os_strcmp(buf, "wps_rf_bands") == 0) { + if (os_strcmp(pos, "a") == 0) + bss->wps_rf_bands = WPS_RF_50GHZ; + else if (os_strcmp(pos, "g") == 0 || + os_strcmp(pos, "b") == 0) + bss->wps_rf_bands = WPS_RF_24GHZ; + else if (os_strcmp(pos, "ag") == 0 || + os_strcmp(pos, "ga") == 0) + bss->wps_rf_bands = + WPS_RF_24GHZ | WPS_RF_50GHZ; + else { + wpa_printf(MSG_ERROR, "Line %d: unknown " + "wps_rf_band '%s'", line, pos); + errors++; + } } else if (os_strcmp(buf, "channel") == 0) { conf->channel = atoi(pos); } else if (os_strcmp(buf, "beacon_int") == 0) { diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index 7571f4586..2a545180d 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -1011,6 +1011,12 @@ own_ip_addr=127.0.0.1 # 12-digit, all-numeric code that identifies the consumer package. #upc=123456789012 +# WPS RF Bands (a = 5G, b = 2.4G, g = 2.4G, ag = dual band) +# This value should be set according to RF band(s) supported by the AP if +# hw_mode is not set. For dual band dual concurrent devices, this needs to be +# set to ag to allow both RF bands to be advertized. +#wps_rf_bands=ag + ##### Wi-Fi Direct (P2P) ###################################################### # Enable P2P Device management diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index 32c829298..2b201df7e 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -360,6 +360,8 @@ struct hostapd_bss_config { /* IEEE 802.11u - Roaming Consortium list */ unsigned int roaming_consortium_count; struct hostapd_roaming_consortium *roaming_consortium; + + u8 wps_rf_bands; /* RF bands for WPS (WPS_RF_*) */ }; diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c index 87bbd3763..60961fd0b 100644 --- a/src/ap/wps_hostapd.c +++ b/src/ap/wps_hostapd.c @@ -800,8 +800,14 @@ int hostapd_init_wps(struct hostapd_data *hapd, } wps->dev.os_version = WPA_GET_BE32(hapd->conf->os_version); - wps->dev.rf_bands = hapd->iconf->hw_mode == HOSTAPD_MODE_IEEE80211A ? - WPS_RF_50GHZ : WPS_RF_24GHZ; /* FIX: dualband AP */ + + if (conf->wps_rf_bands) { + wps->dev.rf_bands = conf->wps_rf_bands; + } else { + wps->dev.rf_bands = + hapd->iconf->hw_mode == HOSTAPD_MODE_IEEE80211A ? + WPS_RF_50GHZ : WPS_RF_24GHZ; /* FIX: dualband AP */ + } if (conf->wpa & WPA_PROTO_RSN) { if (conf->wpa_key_mgmt & WPA_KEY_MGMT_PSK)