|
@@ -605,18 +605,23 @@ u8 * hostapd_eid_fils_indic(struct hostapd_data *hapd, u8 *eid, int hessid)
|
|
|
#ifdef CONFIG_FILS
|
|
|
u8 *len;
|
|
|
u16 fils_info = 0;
|
|
|
+ size_t realms;
|
|
|
+ struct fils_realm *realm;
|
|
|
|
|
|
if (!(hapd->conf->wpa & WPA_PROTO_RSN) ||
|
|
|
!wpa_key_mgmt_fils(hapd->conf->wpa_key_mgmt))
|
|
|
return pos;
|
|
|
|
|
|
+ realms = dl_list_len(&hapd->conf->fils_realms);
|
|
|
+ if (realms > 7)
|
|
|
+ realms = 7; /* 3 bit count field limits this to max 7 */
|
|
|
+
|
|
|
*pos++ = WLAN_EID_FILS_INDICATION;
|
|
|
len = pos++;
|
|
|
/* TODO: B0..B2: Number of Public Key Identifiers */
|
|
|
if (hapd->conf->erp_domain) {
|
|
|
- /* TODO: Support for setting multiple domain identifiers */
|
|
|
/* B3..B5: Number of Realm Identifiers */
|
|
|
- fils_info |= BIT(3);
|
|
|
+ fils_info |= realms << 3;
|
|
|
}
|
|
|
/* TODO: B6: FILS IP Address Configuration */
|
|
|
if (hapd->conf->fils_cache_id_set)
|
|
@@ -638,8 +643,13 @@ u8 * hostapd_eid_fils_indic(struct hostapd_data *hapd, u8 *eid, int hessid)
|
|
|
os_memcpy(pos, hapd->conf->hessid, ETH_ALEN);
|
|
|
pos += ETH_ALEN;
|
|
|
}
|
|
|
- if (hapd->conf->erp_domain) {
|
|
|
- fils_domain_name_hash(hapd->conf->erp_domain, pos);
|
|
|
+
|
|
|
+ dl_list_for_each(realm, &hapd->conf->fils_realms, struct fils_realm,
|
|
|
+ list) {
|
|
|
+ if (realms == 0)
|
|
|
+ break;
|
|
|
+ realms--;
|
|
|
+ os_memcpy(pos, realm->hash, 2);
|
|
|
pos += 2;
|
|
|
}
|
|
|
*len = pos - len - 1;
|