Interworking: Add Advertisement Protocol element
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 17 Oct 2011 20:19:52 +0000 (23:19 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 17 Oct 2011 20:19:52 +0000 (23:19 +0300)
For now, assume that ANQP will always be enabled with Interworking.
This may be made separately configurable in the future.

src/ap/ap_drv_ops.c
src/ap/beacon.c
src/ap/ieee802_11.h
src/ap/ieee802_11_shared.c

index 77d4909..e09c3d8 100644 (file)
@@ -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;
index f15467f..67dbb06 100644 (file)
@@ -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);
index 3f73989..76fb841 100644 (file)
@@ -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 */
index d325da5..1597462 100644 (file)
@@ -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;
+}