Parcourir la source

Interworking: Add Advertisement Protocol element

For now, assume that ANQP will always be enabled with Interworking.
This may be made separately configurable in the future.
Jouni Malinen il y a 13 ans
Parent
commit
c7c178e15e
4 fichiers modifiés avec 23 ajouts et 0 suppressions
  1. 1 0
      src/ap/ap_drv_ops.c
  2. 2 0
      src/ap/beacon.c
  3. 1 0
      src/ap/ieee802_11.h
  4. 19 0
      src/ap/ieee802_11_shared.c

+ 1 - 0
src/ap/ap_drv_ops.c

@@ -59,6 +59,7 @@ int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
 		wpabuf_put_data(assocresp, buf, pos - buf);
 	}
 	pos = hostapd_eid_interworking(hapd, pos);
+	pos = hostapd_eid_adv_proto(hapd, pos);
 	if (pos != buf) {
 		if (wpabuf_resize(&beacon, pos - buf) != 0)
 			goto fail;

+ 2 - 0
src/ap/beacon.c

@@ -358,6 +358,7 @@ void handle_probe_req(struct hostapd_data *hapd,
 	pos = hostapd_eid_ext_capab(hapd, pos);
 
 	pos = hostapd_eid_interworking(hapd, pos);
+	pos = hostapd_eid_adv_proto(hapd, pos);
 
 	/* Wi-Fi Alliance WMM */
 	pos = hostapd_eid_wmm(hapd, pos);
@@ -493,6 +494,7 @@ void ieee802_11_set_beacon(struct hostapd_data *hapd)
 	tailpos = hostapd_eid_ext_capab(hapd, tailpos);
 
 	tailpos = hostapd_eid_interworking(hapd, tailpos);
+	tailpos = hostapd_eid_adv_proto(hapd, tailpos);
 
 	/* Wi-Fi Alliance WMM */
 	tailpos = hostapd_eid_wmm(hapd, tailpos);

+ 1 - 0
src/ap/ieee802_11.h

@@ -70,5 +70,6 @@ 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);
+u8 * hostapd_eid_adv_proto(struct hostapd_data *hapd, u8 *eid);
 
 #endif /* IEEE802_11_H */

+ 19 - 0
src/ap/ieee802_11_shared.c

@@ -243,3 +243,22 @@ u8 * hostapd_eid_interworking(struct hostapd_data *hapd, u8 *eid)
 
 	return pos;
 }
+
+
+u8 * hostapd_eid_adv_proto(struct hostapd_data *hapd, u8 *eid)
+{
+	u8 *pos = eid;
+#ifdef CONFIG_INTERWORKING
+
+	/* TODO: Separate configuration for ANQP? */
+	if (!hapd->conf->interworking)
+		return eid;
+
+	*pos++ = WLAN_EID_ADV_PROTO;
+	*pos++ = 2;
+	*pos++ = 0; /* Query Response Length Limit | PAME-BI */
+	*pos++ = ACCESS_NETWORK_QUERY_PROTOCOL;
+#endif /* CONFIG_INTERWORKING */
+
+	return pos;
+}