|
@@ -167,3 +167,79 @@ void ieee802_11_sa_query_action(struct hostapd_data *hapd, const u8 *sa,
|
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_IEEE80211W */
|
|
|
+
|
|
|
+
|
|
|
+u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid)
|
|
|
+{
|
|
|
+ u8 *pos = eid;
|
|
|
+ u8 len = 0;
|
|
|
+
|
|
|
+ if (hapd->conf->tdls & (TDLS_PROHIBIT | TDLS_PROHIBIT_CHAN_SWITCH))
|
|
|
+ len = 5;
|
|
|
+ if (len < 4 && hapd->conf->interworking)
|
|
|
+ len = 4;
|
|
|
+ if (len == 0)
|
|
|
+ return eid;
|
|
|
+
|
|
|
+ *pos++ = WLAN_EID_EXT_CAPAB;
|
|
|
+ *pos++ = len;
|
|
|
+ *pos++ = 0x00;
|
|
|
+ *pos++ = 0x00;
|
|
|
+ *pos++ = 0x00;
|
|
|
+
|
|
|
+ *pos = 0x00;
|
|
|
+ if (hapd->conf->interworking)
|
|
|
+ *pos |= 0x80; /* Bit 31 - Interworking */
|
|
|
+ pos++;
|
|
|
+
|
|
|
+ if (len < 5)
|
|
|
+ return pos;
|
|
|
+ *pos = 0x00;
|
|
|
+ if (hapd->conf->tdls & TDLS_PROHIBIT)
|
|
|
+ *pos |= 0x40; /* Bit 38 - TDLS Prohibited */
|
|
|
+ if (hapd->conf->tdls & TDLS_PROHIBIT_CHAN_SWITCH)
|
|
|
+ *pos |= 0x80; /* Bit 39 - TDLS Channel Switching Prohibited */
|
|
|
+ pos++;
|
|
|
+
|
|
|
+ return pos;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+u8 * hostapd_eid_interworking(struct hostapd_data *hapd, u8 *eid)
|
|
|
+{
|
|
|
+ u8 *pos = eid;
|
|
|
+#ifdef CONFIG_INTERWORKING
|
|
|
+ u8 *len;
|
|
|
+
|
|
|
+ if (!hapd->conf->interworking)
|
|
|
+ return eid;
|
|
|
+
|
|
|
+ *pos++ = WLAN_EID_INTERWORKING;
|
|
|
+ len = pos++;
|
|
|
+
|
|
|
+ *pos = hapd->conf->access_network_type;
|
|
|
+ if (hapd->conf->internet)
|
|
|
+ *pos |= INTERWORKING_ANO_INTERNET;
|
|
|
+ if (hapd->conf->asra)
|
|
|
+ *pos |= INTERWORKING_ANO_ASRA;
|
|
|
+ if (hapd->conf->esr)
|
|
|
+ *pos |= INTERWORKING_ANO_ESR;
|
|
|
+ if (hapd->conf->uesa)
|
|
|
+ *pos |= INTERWORKING_ANO_UESA;
|
|
|
+ pos++;
|
|
|
+
|
|
|
+ if (hapd->conf->venue_info_set) {
|
|
|
+ *pos++ = hapd->conf->venue_group;
|
|
|
+ *pos++ = hapd->conf->venue_type;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!is_zero_ether_addr(hapd->conf->hessid)) {
|
|
|
+ os_memcpy(pos, hapd->conf->hessid, ETH_ALEN);
|
|
|
+ pos += ETH_ALEN;
|
|
|
+ }
|
|
|
+
|
|
|
+ *len = pos - len - 1;
|
|
|
+#endif /* CONFIG_INTERWORKING */
|
|
|
+
|
|
|
+ return pos;
|
|
|
+}
|