Browse Source

Move Ext Capab and Interworking element construction into shared file

These needs to be available for drivers that implement SME/MLME.
Jouni Malinen 13 years ago
parent
commit
06c4d2472f
4 changed files with 77 additions and 76 deletions
  1. 0 40
      src/ap/beacon.c
  2. 0 36
      src/ap/ieee802_11.c
  3. 1 0
      src/ap/ieee802_11.h
  4. 76 0
      src/ap/ieee802_11_shared.c

+ 0 - 40
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)
 {

+ 0 - 36
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;

+ 1 - 0
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 */

+ 76 - 0
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;
+}