003 File Manager
Current Path:
/usr/src/contrib/wpa/src/common
usr
/
src
/
contrib
/
wpa
/
src
/
common
/
📁
..
📄
cli.c
(5.73 KB)
📄
cli.h
(1.32 KB)
📄
common_module_tests.c
(13.56 KB)
📄
ctrl_iface_common.c
(4.51 KB)
📄
ctrl_iface_common.h
(1.28 KB)
📄
defs.h
(11 KB)
📄
dhcp.h
(6.95 KB)
📄
dpp.c
(262.26 KB)
📄
dpp.h
(17.72 KB)
📄
dragonfly.c
(5.74 KB)
📄
dragonfly.h
(951 B)
📄
eapol_common.h
(2.48 KB)
📄
gas.c
(6.13 KB)
📄
gas.h
(1.49 KB)
📄
gas_server.c
(13.17 KB)
📄
gas_server.h
(1.19 KB)
📄
hw_features_common.c
(15.15 KB)
📄
hw_features_common.h
(1.78 KB)
📄
ieee802_11_common.c
(46.43 KB)
📄
ieee802_11_common.h
(7.55 KB)
📄
ieee802_11_defs.h
(72.71 KB)
📄
ieee802_1x_defs.h
(1.93 KB)
📄
ocv.c
(4.51 KB)
📄
ocv.h
(1001 B)
📄
privsep_commands.h
(2.25 KB)
📄
qca-vendor-attr.h
(685 B)
📄
qca-vendor.h
(297.31 KB)
📄
sae.c
(38.69 KB)
📄
sae.h
(2.54 KB)
📄
tnc.h
(3.69 KB)
📄
version.h
(329 B)
📄
wpa_common.c
(69.07 KB)
📄
wpa_common.h
(16.49 KB)
📄
wpa_ctrl.c
(18.05 KB)
📄
wpa_ctrl.h
(24.43 KB)
📄
wpa_helpers.c
(5.96 KB)
📄
wpa_helpers.h
(1.31 KB)
Editing: gas.c
/* * Generic advertisement service (GAS) (IEEE 802.11u) * Copyright (c) 2009, Atheros Communications * Copyright (c) 2011-2012, Qualcomm Atheros * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #include "includes.h" #include "common.h" #include "ieee802_11_defs.h" #include "gas.h" static struct wpabuf * gas_build_req(u8 action, u8 dialog_token, size_t size) { struct wpabuf *buf; buf = wpabuf_alloc(100 + size); if (buf == NULL) return NULL; wpabuf_put_u8(buf, WLAN_ACTION_PUBLIC); wpabuf_put_u8(buf, action); wpabuf_put_u8(buf, dialog_token); return buf; } struct wpabuf * gas_build_initial_req(u8 dialog_token, size_t size) { return gas_build_req(WLAN_PA_GAS_INITIAL_REQ, dialog_token, size); } struct wpabuf * gas_build_comeback_req(u8 dialog_token) { return gas_build_req(WLAN_PA_GAS_COMEBACK_REQ, dialog_token, 0); } static struct wpabuf * gas_build_resp(u8 action, u8 dialog_token, u16 status_code, u8 frag_id, u8 more, u16 comeback_delay, size_t size) { struct wpabuf *buf; buf = wpabuf_alloc(100 + size); if (buf == NULL) return NULL; wpabuf_put_u8(buf, WLAN_ACTION_PUBLIC); wpabuf_put_u8(buf, action); wpabuf_put_u8(buf, dialog_token); wpabuf_put_le16(buf, status_code); if (action == WLAN_PA_GAS_COMEBACK_RESP) wpabuf_put_u8(buf, frag_id | (more ? 0x80 : 0)); wpabuf_put_le16(buf, comeback_delay); return buf; } struct wpabuf * gas_build_initial_resp(u8 dialog_token, u16 status_code, u16 comeback_delay, size_t size) { return gas_build_resp(WLAN_PA_GAS_INITIAL_RESP, dialog_token, status_code, 0, 0, comeback_delay, size); } struct wpabuf * gas_build_comeback_resp(u8 dialog_token, u16 status_code, u8 frag_id, u8 more, u16 comeback_delay, size_t size) { return gas_build_resp(WLAN_PA_GAS_COMEBACK_RESP, dialog_token, status_code, frag_id, more, comeback_delay, size); } /** * gas_add_adv_proto_anqp - Add an Advertisement Protocol element * @buf: Buffer to which the element is added * @query_resp_len_limit: Query Response Length Limit in units of 256 octets * @pame_bi: Pre-Association Message Exchange BSSID Independent (0/1) * * * @query_resp_len_limit is 0 for request and 1-0x7f for response. 0x7f means * that the maximum limit is determined by the maximum allowable number of * fragments in the GAS Query Response Fragment ID. */ static void gas_add_adv_proto_anqp(struct wpabuf *buf, u8 query_resp_len_limit, u8 pame_bi) { /* Advertisement Protocol IE */ wpabuf_put_u8(buf, WLAN_EID_ADV_PROTO); wpabuf_put_u8(buf, 2); /* Length */ wpabuf_put_u8(buf, (query_resp_len_limit & 0x7f) | (pame_bi ? 0x80 : 0)); /* Advertisement Protocol */ wpabuf_put_u8(buf, ACCESS_NETWORK_QUERY_PROTOCOL); } struct wpabuf * gas_anqp_build_initial_req(u8 dialog_token, size_t size) { struct wpabuf *buf; buf = gas_build_initial_req(dialog_token, 4 + size); if (buf == NULL) return NULL; gas_add_adv_proto_anqp(buf, 0, 0); wpabuf_put(buf, 2); /* Query Request Length to be filled */ return buf; } struct wpabuf * gas_anqp_build_initial_resp(u8 dialog_token, u16 status_code, u16 comeback_delay, size_t size) { struct wpabuf *buf; buf = gas_build_initial_resp(dialog_token, status_code, comeback_delay, 4 + size); if (buf == NULL) return NULL; gas_add_adv_proto_anqp(buf, 0x7f, 0); wpabuf_put(buf, 2); /* Query Response Length to be filled */ return buf; } struct wpabuf * gas_anqp_build_initial_resp_buf(u8 dialog_token, u16 status_code, u16 comeback_delay, struct wpabuf *payload) { struct wpabuf *buf; buf = gas_anqp_build_initial_resp(dialog_token, status_code, comeback_delay, payload ? wpabuf_len(payload) : 0); if (buf == NULL) return NULL; if (payload) wpabuf_put_buf(buf, payload); gas_anqp_set_len(buf); return buf; } struct wpabuf * gas_anqp_build_comeback_resp(u8 dialog_token, u16 status_code, u8 frag_id, u8 more, u16 comeback_delay, size_t size) { struct wpabuf *buf; buf = gas_build_comeback_resp(dialog_token, status_code, frag_id, more, comeback_delay, 4 + size); if (buf == NULL) return NULL; gas_add_adv_proto_anqp(buf, 0x7f, 0); wpabuf_put(buf, 2); /* Query Response Length to be filled */ return buf; } struct wpabuf * gas_anqp_build_comeback_resp_buf(u8 dialog_token, u16 status_code, u8 frag_id, u8 more, u16 comeback_delay, struct wpabuf *payload) { struct wpabuf *buf; buf = gas_anqp_build_comeback_resp(dialog_token, status_code, frag_id, more, comeback_delay, payload ? wpabuf_len(payload) : 0); if (buf == NULL) return NULL; if (payload) wpabuf_put_buf(buf, payload); gas_anqp_set_len(buf); return buf; } /** * gas_anqp_set_len - Set Query Request/Response Length * @buf: GAS message * * This function is used to update the Query Request/Response Length field once * the payload has been filled. */ void gas_anqp_set_len(struct wpabuf *buf) { u8 action; size_t offset; u8 *len; if (buf == NULL || wpabuf_len(buf) < 2) return; action = *(wpabuf_head_u8(buf) + 1); switch (action) { case WLAN_PA_GAS_INITIAL_REQ: offset = 3 + 4; break; case WLAN_PA_GAS_INITIAL_RESP: offset = 7 + 4; break; case WLAN_PA_GAS_COMEBACK_RESP: offset = 8 + 4; break; default: return; } if (wpabuf_len(buf) < offset + 2) return; len = wpabuf_mhead_u8(buf) + offset; WPA_PUT_LE16(len, (u8 *) wpabuf_put(buf, 0) - len - 2); } /** * gas_anqp_add_element - Add ANQP element header * @buf: GAS message * @info_id: ANQP Info ID * Returns: Pointer to the Length field for gas_anqp_set_element_len() */ u8 * gas_anqp_add_element(struct wpabuf *buf, u16 info_id) { wpabuf_put_le16(buf, info_id); return wpabuf_put(buf, 2); /* Length to be filled */ } /** * gas_anqp_set_element_len - Update ANQP element Length field * @buf: GAS message * @len_pos: Length field position from gas_anqp_add_element() * * This function is called after the ANQP element payload has been added to the * buffer. */ void gas_anqp_set_element_len(struct wpabuf *buf, u8 *len_pos) { WPA_PUT_LE16(len_pos, (u8 *) wpabuf_put(buf, 0) - len_pos - 2); }
Upload File
Create Folder