Move Ext Capab and Interworking element construction into shared file
These needs to be available for drivers that implement SME/MLME.
This commit is contained in:
parent
c2ff13c533
commit
06c4d2472f
4 changed files with 77 additions and 76 deletions
|
@ -198,46 +198,6 @@ static u8 * hostapd_eid_wpa(struct hostapd_data *hapd, u8 *eid, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void handle_probe_req(struct hostapd_data *hapd,
|
void handle_probe_req(struct hostapd_data *hapd,
|
||||||
const struct ieee80211_mgmt *mgmt, size_t len)
|
const struct ieee80211_mgmt *mgmt, size_t len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -163,42 +163,6 @@ u16 hostapd_own_capab_info(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ieee802_11_print_ssid(char *buf, const u8 *ssid, u8 len)
|
void ieee802_11_print_ssid(char *buf, const u8 *ssid, u8 len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -69,5 +69,6 @@ u8 * hostapd_eid_assoc_comeback_time(struct hostapd_data *hapd,
|
||||||
void ieee802_11_sa_query_action(struct hostapd_data *hapd,
|
void ieee802_11_sa_query_action(struct hostapd_data *hapd,
|
||||||
const u8 *sa, const u8 action_type,
|
const u8 *sa, const u8 action_type,
|
||||||
const u8 *trans_id);
|
const u8 *trans_id);
|
||||||
|
u8 * hostapd_eid_interworking(struct hostapd_data *hapd, u8 *eid);
|
||||||
|
|
||||||
#endif /* IEEE802_11_H */
|
#endif /* IEEE802_11_H */
|
||||||
|
|
|
@ -167,3 +167,79 @@ void ieee802_11_sa_query_action(struct hostapd_data *hapd, const u8 *sa,
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_IEEE80211W */
|
#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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue