From 06c4d2472fb4ae4186beac108b96cb42da3bd46d Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Mon, 17 Oct 2011 21:03:52 +0300 Subject: [PATCH] Move Ext Capab and Interworking element construction into shared file These needs to be available for drivers that implement SME/MLME. --- src/ap/beacon.c | 40 -------------------- src/ap/ieee802_11.c | 36 ------------------ src/ap/ieee802_11.h | 1 + src/ap/ieee802_11_shared.c | 76 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 76 deletions(-) diff --git a/src/ap/beacon.c b/src/ap/beacon.c index 8c504db8d..23a852df7 100644 --- a/src/ap/beacon.c +++ b/src/ap/beacon.c @@ -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, const struct ieee80211_mgmt *mgmt, size_t len) { diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c index afa870a79..4b7fb2e24 100644 --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c @@ -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) { int i; diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h index ec113759c..3f73989a2 100644 --- a/src/ap/ieee802_11.h +++ b/src/ap/ieee802_11.h @@ -69,5 +69,6 @@ u8 * hostapd_eid_assoc_comeback_time(struct hostapd_data *hapd, void ieee802_11_sa_query_action(struct hostapd_data *hapd, const u8 *sa, const u8 action_type, const u8 *trans_id); +u8 * hostapd_eid_interworking(struct hostapd_data *hapd, u8 *eid); #endif /* IEEE802_11_H */ diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c index 5bb92db0c..d325da591 100644 --- a/src/ap/ieee802_11_shared.c +++ b/src/ap/ieee802_11_shared.c @@ -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; +}