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:
parent
17adac9ef9
commit
6ae04d7b34
5 changed files with 25 additions and 8 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue