aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <jouni@codeaurora.org>2018-12-07 22:39:00 (GMT)
committerJouni Malinen <j@w1.fi>2018-12-08 12:06:54 (GMT)
commit6ae04d7b344f85d7b37f073e3e25a584ea94efcd (patch)
tree1b863b41196d95c6f5c68bd22302f0a78fd34733
parent17adac9ef9f7e840a11a8a7df0b928f44dbb7e67 (diff)
downloadhostap-6ae04d7b344f85d7b37f073e3e25a584ea94efcd.zip
hostap-6ae04d7b344f85d7b37f073e3e25a584ea94efcd.tar.gz
hostap-6ae04d7b344f85d7b37f073e3e25a584ea94efcd.tar.bz2
HS 2.0: Allow Hotspot 2.0 release number to be configured
The new hostapd configuration parameter hs20_release can be used to configure the AP to advertise a specific Hotspot 2.0 release number instead of the latest supported release. This is mainly for testing purposes. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
-rw-r--r--hostapd/config_file.c10
-rw-r--r--src/ap/ap_config.c4
-rw-r--r--src/ap/ap_config.h1
-rw-r--r--src/ap/hs20.c13
-rw-r--r--src/ap/ieee802_1x.c5
5 files changed, 25 insertions, 8 deletions
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 1bc835a..0452b78 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -3717,6 +3717,16 @@ static int hostapd_config_fill(struct hostapd_config *conf,
#ifdef CONFIG_HS20
} else if (os_strcmp(buf, "hs20") == 0) {
bss->hs20 = atoi(pos);
+ } else if (os_strcmp(buf, "hs20_release") == 0) {
+ int val = atoi(pos);
+
+ if (val < 1 || val > (HS20_VERSION >> 4) + 1) {
+ wpa_printf(MSG_ERROR,
+ "Line %d: Unsupported hs20_release: %s",
+ line, pos);
+ return 1;
+ }
+ bss->hs20_release = val;
} else if (os_strcmp(buf, "disable_dgaf") == 0) {
bss->disable_dgaf = atoi(pos);
} else if (os_strcmp(buf, "na_mcast_to_ucast") == 0) {
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
index e6b1f10..cf96eb4 100644
--- a/src/ap/ap_config.c
+++ b/src/ap/ap_config.c
@@ -133,6 +133,10 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)
bss->tls_flags = TLS_CONN_DISABLE_TLSv1_3;
bss->send_probe_response = 1;
+
+#ifdef CONFIG_HS20
+ bss->hs20_release = (HS20_VERSION >> 4) + 1;
+#endif /* CONFIG_HS20 */
}
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index bd440af..bd2b967 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -557,6 +557,7 @@ struct hostapd_bss_config {
int na_mcast_to_ucast;
#ifdef CONFIG_HS20
int hs20;
+ int hs20_release;
int disable_dgaf;
u16 anqp_domain_id;
unsigned int hs20_oper_friendly_name_count;
diff --git a/src/ap/hs20.c b/src/ap/hs20.c
index e265569..b2114b3 100644
--- a/src/ap/hs20.c
+++ b/src/ap/hs20.c
@@ -25,17 +25,20 @@ u8 * hostapd_eid_hs20_indication(struct hostapd_data *hapd, u8 *eid)
if (!hapd->conf->hs20)
return eid;
*eid++ = WLAN_EID_VENDOR_SPECIFIC;
- *eid++ = 7;
+ *eid++ = hapd->conf->hs20_release < 2 ? 5 : 7;
WPA_PUT_BE24(eid, OUI_WFA);
eid += 3;
*eid++ = HS20_INDICATION_OUI_TYPE;
- conf = HS20_VERSION; /* Release Number */
- conf |= HS20_ANQP_DOMAIN_ID_PRESENT;
+ conf = (hapd->conf->hs20_release - 1) << 4; /* Release Number */
+ if (hapd->conf->hs20_release >= 2)
+ conf |= HS20_ANQP_DOMAIN_ID_PRESENT;
if (hapd->conf->disable_dgaf)
conf |= HS20_DGAF_DISABLED;
*eid++ = conf;
- WPA_PUT_LE16(eid, hapd->conf->anqp_domain_id);
- eid += 2;
+ if (hapd->conf->hs20_release >= 2) {
+ WPA_PUT_LE16(eid, hapd->conf->anqp_domain_id);
+ eid += 2;
+ }
return eid;
}
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
index 185279f..efcbe6f 100644
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -682,9 +682,8 @@ void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
#ifdef CONFIG_HS20
if (hapd->conf->hs20) {
- u8 ver = 1; /* Release 2 */
- if (HS20_VERSION > 0x10)
- ver = 2; /* Release 3 */
+ u8 ver = hapd->conf->hs20_release - 1;
+
if (!radius_msg_add_wfa(
msg, RADIUS_VENDOR_ATTR_WFA_HS20_AP_VERSION,
&ver, 1)) {