• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/wpa/wpa_supplicant/

Lines Matching defs:gas

16 #include "common/gas.h"
38 struct gas_query *gas;
77 static void gas_query_tx_initial_req(struct gas_query *gas,
79 static int gas_query_new_dialog_token(struct gas_query *gas, const u8 *dst);
99 struct gas_query *gas;
101 gas = os_zalloc(sizeof(*gas));
102 if (gas == NULL)
105 gas->wpa_s = wpa_s;
106 dl_list_init(&gas->pending);
108 return gas;
137 struct gas_query *gas = query->gas;
142 if (gas->work && gas->work->ctx == query) {
143 radio_work_done(gas->work);
144 gas->work = NULL;
154 static void gas_query_done(struct gas_query *gas,
158 wpa_msg(gas->wpa_s, MSG_INFO, GAS_QUERY_DONE "addr=" MACSTR
162 if (gas->current == query)
163 gas->current = NULL;
165 offchannel_send_action_done(gas->wpa_s);
166 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
167 eloop_cancel_timeout(gas_query_timeout, gas, query);
168 eloop_cancel_timeout(gas_query_rx_comeback_timeout, gas, query);
178 * @gas: GAS query data from gas_query_init()
180 void gas_query_deinit(struct gas_query *gas)
184 if (gas == NULL)
187 dl_list_for_each_safe(query, next, &gas->pending,
189 gas_query_done(gas, query, GAS_QUERY_DELETED_AT_DEINIT);
191 os_free(gas);
196 gas_query_get_pending(struct gas_query *gas, const u8 *addr, u8 dialog_token)
199 dl_list_for_each(q, &gas->pending, struct gas_query_pending, list) {
227 struct gas_query *gas = wpa_s->gas;
230 if (gas->current == NULL) {
237 query = gas->current;
251 eloop_cancel_timeout(gas_query_timeout, gas, query);
255 gas_query_timeout, gas, query);
258 gas_query_timeout, gas, query);
262 gas, query);
265 gas_query_rx_comeback_timeout, gas, query);
269 eloop_cancel_timeout(gas_query_timeout, gas, query);
270 eloop_register_timeout(0, 0, gas_query_timeout, gas, query);
285 static int gas_query_tx(struct gas_query *gas, struct gas_query_pending *query,
288 int res, prot = pmf_in_use(gas->wpa_s, query->addr);
303 if (gas->wpa_s->max_remain_on_chan &&
304 wait_time > gas->wpa_s->max_remain_on_chan)
305 wait_time = gas->wpa_s->max_remain_on_chan;
307 (!gas->wpa_s->conf->gas_address3 ||
308 (gas->wpa_s->current_ssid &&
309 gas->wpa_s->wpa_state >= WPA_ASSOCIATED &&
310 os_memcmp(query->addr, gas->wpa_s->bssid, ETH_ALEN) == 0)))
315 res = offchannel_send_action(gas->wpa_s, query->freq, query->addr,
326 static void gas_query_tx_comeback_req(struct gas_query *gas,
334 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
341 if (gas_query_tx(gas, query, req, wait_time) < 0) {
344 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
353 struct gas_query *gas = eloop_data;
360 if (gas->current != query || query->retry)
362 dialog_token = gas_query_new_dialog_token(gas, query->addr);
374 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
375 eloop_cancel_timeout(gas_query_timeout, gas, query);
376 gas_query_tx_initial_req(gas, query);
382 struct gas_query *gas = eloop_data;
387 gas_query_tx_comeback_req(gas, query);
391 static void gas_query_tx_comeback_req_delay(struct gas_query *gas,
398 offchannel_send_action_done(gas->wpa_s);
406 eloop_cancel_timeout(gas_query_tx_comeback_timeout, gas, query);
408 gas, query);
412 static void gas_query_rx_initial(struct gas_query *gas,
423 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
428 eloop_cancel_timeout(gas_query_timeout, gas, query);
430 gas_query_tx_comeback_req_delay(gas, query, comeback_delay);
436 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
440 gas_query_done(gas, query, GAS_QUERY_SUCCESS);
444 static void gas_query_rx_comeback(struct gas_query *gas,
455 eloop_cancel_timeout(gas_query_rx_comeback_timeout, gas, query);
463 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
472 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
475 gas_query_tx_comeback_req_delay(gas, query, comeback_delay);
487 gas_query_done(gas, query, GAS_QUERY_PEER_ERROR);
493 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
498 gas_query_tx_comeback_req(gas, query);
502 gas_query_done(gas, query, GAS_QUERY_SUCCESS);
508 * @gas: GAS query data from gas_query_init()
518 int gas_query_rx(struct gas_query *gas, const u8 *da, const u8 *sa,
529 if (gas == NULL || len < 4)
541 pmf = pmf_in_use(gas->wpa_s, sa);
551 query = gas_query_get_pending(gas, sa, dialog_token);
585 gas_query_done(gas, query, GAS_QUERY_FAILURE);
643 gas_query_rx_comeback(gas, query, adv_proto, pos, resp_len,
646 gas_query_rx_initial(gas, query, adv_proto, pos, resp_len,
655 struct gas_query *gas = eloop_data;
661 gas_query_done(gas, query, GAS_QUERY_TIMEOUT);
665 static int gas_query_dialog_token_available(struct gas_query *gas,
669 dl_list_for_each(q, &gas->pending, struct gas_query_pending, list) {
682 struct gas_query *gas = query->gas;
683 struct wpa_supplicant *wpa_s = gas->wpa_s;
687 gas->work = NULL;
688 gas_query_done(gas, query, GAS_QUERY_DELETED_AT_DEINIT);
704 gas->work = work;
705 gas_query_tx_initial_req(gas, query);
709 static void gas_query_tx_initial_req(struct gas_query *gas,
712 if (gas_query_tx(gas, query, query->req,
716 gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
719 gas->current = query;
724 gas_query_timeout, gas, query);
728 static int gas_query_new_dialog_token(struct gas_query *gas, const u8 *dst)
735 gas, dst, (next_start + dialog_token) % 256))
746 static int gas_query_set_sa(struct gas_query *gas,
749 struct wpa_supplicant *wpa_s = gas->wpa_s;
764 if (wpa_s->conf->gas_rand_mac_addr == gas->last_rand_sa_type &&
765 gas->last_mac_addr_rand.sec != 0 &&
766 !os_reltime_expired(&now, &gas->last_mac_addr_rand,
770 MACSTR, MAC2STR(gas->rand_addr));
771 os_memcpy(query->sa, gas->rand_addr, ETH_ALEN);
776 random_mac_addr(gas->rand_addr) < 0) {
782 random_mac_addr_keep_oui(gas->rand_addr) < 0) {
789 MACSTR, MAC2STR(gas->rand_addr));
790 os_memcpy(query->sa, gas->rand_addr, ETH_ALEN);
791 os_get_reltime(&gas->last_mac_addr_rand);
792 gas->last_rand_sa_type = wpa_s->conf->gas_rand_mac_addr;
800 * @gas: GAS query data from gas_query_init()
809 int gas_query_req(struct gas_query *gas, const u8 *dst, int freq,
823 dialog_token = gas_query_new_dialog_token(gas, dst);
831 query->gas = gas;
832 if (gas_query_set_sa(gas, query)) {
843 dl_list_add(&gas->pending, &query->list);
847 wpa_msg(gas->wpa_s, MSG_INFO, GAS_QUERY_START "addr=" MACSTR
851 if (radio_add_work(gas->wpa_s, freq, "gas-query", 0, gas_query_start_cb,
862 int gas_query_stop(struct gas_query *gas, u8 dialog_token)
866 dl_list_for_each(query, &gas->pending, struct gas_query_pending, list) {
868 if (!gas->work) {
875 radio_remove_pending_work(gas->wpa_s, query);
877 gas_query_done(gas, query, GAS_QUERY_STOPPED);