Browse 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 13 years ago
parent
commit
c7c178e15e
4 changed files with 23 additions and 0 deletions
  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;
+}