xref: /freebsd/contrib/wpa/src/ap/gas_serv.h (revision a90b9d0159070121c221b966469c3e36d912bf82)
1f05cddf9SRui Paulo /*
2f05cddf9SRui Paulo  * Generic advertisement service (GAS) server
35b9c547cSRui Paulo  * Copyright (c) 2011-2013, Qualcomm Atheros, Inc.
4f05cddf9SRui Paulo  *
5f05cddf9SRui Paulo  * This software may be distributed under the terms of the BSD license.
6f05cddf9SRui Paulo  * See README for more details.
7f05cddf9SRui Paulo  */
8f05cddf9SRui Paulo 
9f05cddf9SRui Paulo #ifndef GAS_SERV_H
10f05cddf9SRui Paulo #define GAS_SERV_H
11f05cddf9SRui Paulo 
12780fb4a2SCy Schubert /* First 16 ANQP InfoIDs can be included in the optimized bitmap */
13f05cddf9SRui Paulo #define ANQP_REQ_CAPABILITY_LIST \
14f05cddf9SRui Paulo 	(1 << (ANQP_CAPABILITY_LIST - ANQP_QUERY_LIST))
15f05cddf9SRui Paulo #define ANQP_REQ_VENUE_NAME \
16f05cddf9SRui Paulo 	(1 << (ANQP_VENUE_NAME - ANQP_QUERY_LIST))
17780fb4a2SCy Schubert #define ANQP_REQ_EMERGENCY_CALL_NUMBER \
18780fb4a2SCy Schubert 	(1 << (ANQP_EMERGENCY_CALL_NUMBER - ANQP_QUERY_LIST))
19f05cddf9SRui Paulo #define ANQP_REQ_NETWORK_AUTH_TYPE \
20f05cddf9SRui Paulo 	(1 << (ANQP_NETWORK_AUTH_TYPE - ANQP_QUERY_LIST))
21f05cddf9SRui Paulo #define ANQP_REQ_ROAMING_CONSORTIUM \
22f05cddf9SRui Paulo 	(1 << (ANQP_ROAMING_CONSORTIUM - ANQP_QUERY_LIST))
23f05cddf9SRui Paulo #define ANQP_REQ_IP_ADDR_TYPE_AVAILABILITY \
24f05cddf9SRui Paulo 	(1 << (ANQP_IP_ADDR_TYPE_AVAILABILITY - ANQP_QUERY_LIST))
25f05cddf9SRui Paulo #define ANQP_REQ_NAI_REALM \
26f05cddf9SRui Paulo 	(1 << (ANQP_NAI_REALM - ANQP_QUERY_LIST))
27f05cddf9SRui Paulo #define ANQP_REQ_3GPP_CELLULAR_NETWORK \
28f05cddf9SRui Paulo 	(1 << (ANQP_3GPP_CELLULAR_NETWORK - ANQP_QUERY_LIST))
29780fb4a2SCy Schubert #define ANQP_REQ_AP_GEOSPATIAL_LOCATION \
30780fb4a2SCy Schubert 	(1 << (ANQP_AP_GEOSPATIAL_LOCATION - ANQP_QUERY_LIST))
31780fb4a2SCy Schubert #define ANQP_REQ_AP_CIVIC_LOCATION \
32780fb4a2SCy Schubert 	(1 << (ANQP_AP_CIVIC_LOCATION - ANQP_QUERY_LIST))
33780fb4a2SCy Schubert #define ANQP_REQ_AP_LOCATION_PUBLIC_URI \
34780fb4a2SCy Schubert 	(1 << (ANQP_AP_LOCATION_PUBLIC_URI - ANQP_QUERY_LIST))
35f05cddf9SRui Paulo #define ANQP_REQ_DOMAIN_NAME \
36f05cddf9SRui Paulo 	(1 << (ANQP_DOMAIN_NAME - ANQP_QUERY_LIST))
37780fb4a2SCy Schubert #define ANQP_REQ_EMERGENCY_ALERT_URI \
38780fb4a2SCy Schubert 	(1 << (ANQP_EMERGENCY_ALERT_URI - ANQP_QUERY_LIST))
39780fb4a2SCy Schubert #define ANQP_REQ_TDLS_CAPABILITY \
40780fb4a2SCy Schubert 	(1 << (ANQP_TDLS_CAPABILITY - ANQP_QUERY_LIST))
41780fb4a2SCy Schubert #define ANQP_REQ_EMERGENCY_NAI \
42780fb4a2SCy Schubert 	(1 << (ANQP_EMERGENCY_NAI - ANQP_QUERY_LIST))
43780fb4a2SCy Schubert /*
4485732ac8SCy Schubert  * First 15 Hotspot 2.0 vendor specific ANQP-elements can be included in the
45780fb4a2SCy Schubert  * optimized bitmap.
46780fb4a2SCy Schubert  */
47f05cddf9SRui Paulo #define ANQP_REQ_HS_CAPABILITY_LIST \
48f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_CAPABILITY_LIST)
49f05cddf9SRui Paulo #define ANQP_REQ_OPERATOR_FRIENDLY_NAME \
50f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_OPERATOR_FRIENDLY_NAME)
51f05cddf9SRui Paulo #define ANQP_REQ_WAN_METRICS \
52f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_WAN_METRICS)
53f05cddf9SRui Paulo #define ANQP_REQ_CONNECTION_CAPABILITY \
54f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_CONNECTION_CAPABILITY)
55f05cddf9SRui Paulo #define ANQP_REQ_NAI_HOME_REALM \
56f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_NAI_HOME_REALM_QUERY)
57f05cddf9SRui Paulo #define ANQP_REQ_OPERATING_CLASS \
58f05cddf9SRui Paulo 	(0x10000 << HS20_STYPE_OPERATING_CLASS)
595b9c547cSRui Paulo #define ANQP_REQ_OSU_PROVIDERS_LIST \
605b9c547cSRui Paulo 	(0x10000 << HS20_STYPE_OSU_PROVIDERS_LIST)
615b9c547cSRui Paulo #define ANQP_REQ_ICON_REQUEST \
625b9c547cSRui Paulo 	(0x10000 << HS20_STYPE_ICON_REQUEST)
6385732ac8SCy Schubert #define ANQP_REQ_OPERATOR_ICON_METADATA \
6485732ac8SCy Schubert 	(0x10000 << HS20_STYPE_OPERATOR_ICON_METADATA)
6585732ac8SCy Schubert #define ANQP_REQ_OSU_PROVIDERS_NAI_LIST \
6685732ac8SCy Schubert 	(0x10000 << HS20_STYPE_OSU_PROVIDERS_NAI_LIST)
6785732ac8SCy Schubert /* The first MBO ANQP-element can be included in the optimized bitmap. */
6885732ac8SCy Schubert #define ANQP_REQ_MBO_CELL_DATA_CONN_PREF \
6985732ac8SCy Schubert 	(BIT(29) << MBO_ANQP_SUBTYPE_CELL_CONN_PREF)
70f05cddf9SRui Paulo 
71f05cddf9SRui Paulo struct gas_dialog_info {
72f05cddf9SRui Paulo 	u8 valid;
73f05cddf9SRui Paulo 	struct wpabuf *sd_resp; /* Fragmented response */
74f05cddf9SRui Paulo 	u8 dialog_token;
75f05cddf9SRui Paulo 	size_t sd_resp_pos; /* Offset in sd_resp */
76f05cddf9SRui Paulo 	u8 sd_frag_id;
775b9c547cSRui Paulo 	int prot; /* whether Protected Dual of Public Action frame is used */
7885732ac8SCy Schubert 	int dpp; /* whether this is a DPP Config Response */
79f05cddf9SRui Paulo };
80f05cddf9SRui Paulo 
81f05cddf9SRui Paulo struct hostapd_data;
82f05cddf9SRui Paulo 
83f05cddf9SRui Paulo struct gas_dialog_info *
84f05cddf9SRui Paulo gas_serv_dialog_find(struct hostapd_data *hapd, const u8 *addr,
85f05cddf9SRui Paulo 		     u8 dialog_token);
86f05cddf9SRui Paulo void gas_serv_dialog_clear(struct gas_dialog_info *dialog);
87f05cddf9SRui Paulo 
88f05cddf9SRui Paulo int gas_serv_init(struct hostapd_data *hapd);
89f05cddf9SRui Paulo void gas_serv_deinit(struct hostapd_data *hapd);
90f05cddf9SRui Paulo 
91206b73d0SCy Schubert void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
92206b73d0SCy Schubert 				 const u8 *sa, u8 dialog_token,
93*a90b9d01SCy Schubert 				 int prot, struct wpabuf *buf, int freq);
94206b73d0SCy Schubert 
95f05cddf9SRui Paulo #endif /* GAS_SERV_H */
96