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>
This commit is contained in:
Jouni Malinen 2018-12-08 00:39:00 +02:00 committed by Jouni Malinen
parent 17adac9ef9
commit 6ae04d7b34
5 changed files with 25 additions and 8 deletions

View file

@ -3717,6 +3717,16 @@ static int hostapd_config_fill(struct hostapd_config *conf,
#ifdef CONFIG_HS20 #ifdef CONFIG_HS20
} else if (os_strcmp(buf, "hs20") == 0) { } else if (os_strcmp(buf, "hs20") == 0) {
bss->hs20 = atoi(pos); 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) { } else if (os_strcmp(buf, "disable_dgaf") == 0) {
bss->disable_dgaf = atoi(pos); bss->disable_dgaf = atoi(pos);
} else if (os_strcmp(buf, "na_mcast_to_ucast") == 0) { } else if (os_strcmp(buf, "na_mcast_to_ucast") == 0) {

View file

@ -133,6 +133,10 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)
bss->tls_flags = TLS_CONN_DISABLE_TLSv1_3; bss->tls_flags = TLS_CONN_DISABLE_TLSv1_3;
bss->send_probe_response = 1; bss->send_probe_response = 1;
#ifdef CONFIG_HS20
bss->hs20_release = (HS20_VERSION >> 4) + 1;
#endif /* CONFIG_HS20 */
} }

View file

@ -557,6 +557,7 @@ struct hostapd_bss_config {
int na_mcast_to_ucast; int na_mcast_to_ucast;
#ifdef CONFIG_HS20 #ifdef CONFIG_HS20
int hs20; int hs20;
int hs20_release;
int disable_dgaf; int disable_dgaf;
u16 anqp_domain_id; u16 anqp_domain_id;
unsigned int hs20_oper_friendly_name_count; unsigned int hs20_oper_friendly_name_count;

View file

@ -25,17 +25,20 @@ u8 * hostapd_eid_hs20_indication(struct hostapd_data *hapd, u8 *eid)
if (!hapd->conf->hs20) if (!hapd->conf->hs20)
return eid; return eid;
*eid++ = WLAN_EID_VENDOR_SPECIFIC; *eid++ = WLAN_EID_VENDOR_SPECIFIC;
*eid++ = 7; *eid++ = hapd->conf->hs20_release < 2 ? 5 : 7;
WPA_PUT_BE24(eid, OUI_WFA); WPA_PUT_BE24(eid, OUI_WFA);
eid += 3; eid += 3;
*eid++ = HS20_INDICATION_OUI_TYPE; *eid++ = HS20_INDICATION_OUI_TYPE;
conf = HS20_VERSION; /* Release Number */ conf = (hapd->conf->hs20_release - 1) << 4; /* Release Number */
conf |= HS20_ANQP_DOMAIN_ID_PRESENT; if (hapd->conf->hs20_release >= 2)
conf |= HS20_ANQP_DOMAIN_ID_PRESENT;
if (hapd->conf->disable_dgaf) if (hapd->conf->disable_dgaf)
conf |= HS20_DGAF_DISABLED; conf |= HS20_DGAF_DISABLED;
*eid++ = conf; *eid++ = conf;
WPA_PUT_LE16(eid, hapd->conf->anqp_domain_id); if (hapd->conf->hs20_release >= 2) {
eid += 2; WPA_PUT_LE16(eid, hapd->conf->anqp_domain_id);
eid += 2;
}
return eid; return eid;
} }

View file

@ -682,9 +682,8 @@ void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
#ifdef CONFIG_HS20 #ifdef CONFIG_HS20
if (hapd->conf->hs20) { if (hapd->conf->hs20) {
u8 ver = 1; /* Release 2 */ u8 ver = hapd->conf->hs20_release - 1;
if (HS20_VERSION > 0x10)
ver = 2; /* Release 3 */
if (!radius_msg_add_wfa( if (!radius_msg_add_wfa(
msg, RADIUS_VENDOR_ATTR_WFA_HS20_AP_VERSION, msg, RADIUS_VENDOR_ATTR_WFA_HS20_AP_VERSION,
&ver, 1)) { &ver, 1)) {