Lines Matching refs:wpa_s

22 wpas_get_tx_interface(struct wpa_supplicant *wpa_s, const u8 *src)
26 if (os_memcmp(src, wpa_s->own_addr, ETH_ALEN) == 0) {
28 if (wpa_s->p2p_mgmt && wpa_s != wpa_s->parent &&
29 wpa_s->parent->ap_iface &&
30 os_memcmp(wpa_s->parent->own_addr,
31 wpa_s->own_addr, ETH_ALEN) == 0 &&
32 wpabuf_len(wpa_s->pending_action_tx) >= 2 &&
33 *wpabuf_head_u8(wpa_s->pending_action_tx) !=
43 wpa_s->parent->ifname, wpa_s->ifname);
44 return wpa_s->parent;
47 return wpa_s;
53 iface = wpa_s->global->ifaces;
62 iface->ifname, wpa_s->ifname);
66 return wpa_s;
72 struct wpa_supplicant *wpa_s = eloop_ctx;
77 without_roc = wpa_s->pending_action_without_roc;
78 wpa_s->pending_action_without_roc = 0;
81 without_roc, wpa_s->pending_action_tx,
82 !!wpa_s->pending_action_tx_done);
84 if (wpa_s->pending_action_tx == NULL || wpa_s->pending_action_tx_done)
96 iface = wpas_get_tx_interface(wpa_s, wpa_s->pending_action_src);
98 if (wpa_s->off_channel_freq != wpa_s->pending_action_freq &&
99 wpa_s->pending_action_freq != 0 &&
100 wpa_s->pending_action_freq != iface->assoc_freq) {
104 wpa_s->pending_action_freq,
105 wpa_s->off_channel_freq,
107 if (without_roc && wpa_s->off_channel_freq == 0) {
117 if (wpa_s->extra_roc_dur) {
121 duration + wpa_s->extra_roc_dur);
122 duration += wpa_s->extra_roc_dur;
126 wpa_s, wpa_s->pending_action_freq,
131 "TX", wpa_s->pending_action_freq);
133 wpa_s->off_channel_freq = 0;
134 wpa_s->roc_waiting_drv_freq =
135 wpa_s->pending_action_freq;
143 MAC2STR(wpa_s->pending_action_dst), iface->ifname,
144 wpa_s->pending_action_tx);
145 res = wpa_drv_send_action(iface, wpa_s->pending_action_freq, 0,
146 wpa_s->pending_action_dst,
147 wpa_s->pending_action_src,
148 wpa_s->pending_action_bssid,
149 wpabuf_head(wpa_s->pending_action_tx),
150 wpabuf_len(wpa_s->pending_action_tx),
151 wpa_s->pending_action_no_cck);
160 wpa_s, wpa_s->pending_action_dst,
161 wpabuf_head(wpa_s->pending_action_tx),
162 wpabuf_len(wpa_s->pending_action_tx),
170 * @wpa_s: Pointer to wpa_supplicant data
180 struct wpa_supplicant *wpa_s, const u8 *dst, const u8 *data,
183 if (wpa_s->pending_action_tx == NULL) {
189 if (os_memcmp(dst, wpa_s->pending_action_dst, ETH_ALEN) != 0) {
196 if (data_len - wpabuf_len(wpa_s->pending_action_tx) != 24 ||
197 os_memcmp(data + 24, wpabuf_head(wpa_s->pending_action_tx),
198 wpabuf_len(wpa_s->pending_action_tx)) != 0) {
204 wpa_s->pending_action_tx);
211 wpa_s->pending_action_tx);
213 wpa_s->pending_action_tx);
214 wpabuf_free(wpa_s->pending_action_tx);
215 wpa_s->pending_action_tx = NULL;
218 result, wpa_s->pending_action_tx_status_cb);
220 if (wpa_s->pending_action_tx_status_cb) {
221 wpa_s->pending_action_tx_status_cb(
222 wpa_s, wpa_s->pending_action_freq,
223 wpa_s->pending_action_dst, wpa_s->pending_action_src,
224 wpa_s->pending_action_bssid,
229 if (wpa_s->p2p_long_listen > 0) {
232 wpas_p2p_listen_start(wpa_s, wpa_s->p2p_long_listen);
240 * @wpa_s: Pointer to wpa_supplicant data
259 int offchannel_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
262 void (*tx_cb)(struct wpa_supplicant *wpa_s,
275 wpa_s->pending_action_tx_status_cb = tx_cb;
277 if (wpa_s->pending_action_tx) {
280 MAC2STR(wpa_s->pending_action_dst),
281 wpa_s->pending_action_tx);
283 wpa_s->pending_action_tx);
284 wpabuf_free(wpa_s->pending_action_tx);
286 wpa_s->pending_action_tx_done = 0;
287 wpa_s->pending_action_tx = wpabuf_alloc(len);
288 if (wpa_s->pending_action_tx == NULL) {
294 wpabuf_put_data(wpa_s->pending_action_tx, buf, len);
295 os_memcpy(wpa_s->pending_action_src, src, ETH_ALEN);
296 os_memcpy(wpa_s->pending_action_dst, dst, ETH_ALEN);
297 os_memcpy(wpa_s->pending_action_bssid, bssid, ETH_ALEN);
298 wpa_s->pending_action_freq = freq;
299 wpa_s->pending_action_no_cck = no_cck;
303 MAC2STR(dst), wpa_s->pending_action_tx);
305 wpa_s->pending_action_tx);
307 if (freq != 0 && wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) {
311 iface = wpas_get_tx_interface(wpa_s, src);
312 wpa_s->action_tx_wait_time = wait_time;
314 wpa_s->action_tx_wait_time_used = 1;
317 iface, wpa_s->pending_action_freq,
318 wait_time, wpa_s->pending_action_dst,
319 wpa_s->pending_action_src, wpa_s->pending_action_bssid,
320 wpabuf_head(wpa_s->pending_action_tx),
321 wpabuf_len(wpa_s->pending_action_tx),
322 wpa_s->pending_action_no_cck);
324 wpa_s->pending_action_tx_done = 1;
330 tx_iface = wpas_get_tx_interface(wpa_s, src);
339 if (wpa_s->off_channel_freq == freq || freq == 0) {
344 wpa_s->pending_action_without_roc = 1;
345 eloop_cancel_timeout(wpas_send_action_cb, wpa_s, NULL);
346 eloop_register_timeout(0, 0, wpas_send_action_cb, wpa_s, NULL);
349 wpa_s->pending_action_without_roc = 0;
351 if (wpa_s->roc_waiting_drv_freq == freq) {
361 if (wait_time > wpa_s->max_remain_on_chan)
362 wait_time = wpa_s->max_remain_on_chan;
366 if (wpa_s->extra_roc_dur) {
368 wait_time, wait_time + wpa_s->extra_roc_dur);
369 wait_time += wpa_s->extra_roc_dur;
372 if (wpa_drv_remain_on_channel(wpa_s, freq, wait_time) < 0) {
378 wpa_s->off_channel_freq = 0;
379 wpa_s->roc_waiting_drv_freq = freq;
387 * @wpa_s: Pointer to wpa_supplicant data
392 void offchannel_send_action_done(struct wpa_supplicant *wpa_s)
396 wpa_s->pending_action_tx,
397 !!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX),
398 wpa_s->action_tx_wait_time, wpa_s->off_channel_freq,
399 wpa_s->roc_waiting_drv_freq);
400 wpabuf_free(wpa_s->pending_action_tx);
401 wpa_s->pending_action_tx = NULL;
402 if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX &&
403 (wpa_s->action_tx_wait_time || wpa_s->action_tx_wait_time_used))
404 wpa_drv_send_action_cancel_wait(wpa_s);
405 else if (wpa_s->off_channel_freq || wpa_s->roc_waiting_drv_freq) {
406 wpa_drv_cancel_remain_on_channel(wpa_s);
407 wpa_s->off_channel_freq = 0;
408 wpa_s->roc_waiting_drv_freq = 0;
410 wpa_s->action_tx_wait_time_used = 0;
416 * @wpa_s: Pointer to wpa_supplicant data
423 void offchannel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
426 wpa_s->roc_waiting_drv_freq = 0;
427 wpa_s->off_channel_freq = freq;
428 wpas_send_action_cb(wpa_s, NULL);
434 * @wpa_s: Pointer to wpa_supplicant data
440 void offchannel_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
443 wpa_s->off_channel_freq = 0;
449 * @wpa_s: Pointer to wpa_supplicant data
457 const void * offchannel_pending_action_tx(struct wpa_supplicant *wpa_s)
459 return wpa_s->pending_action_tx;
465 * @wpa_s: Pointer to wpa_supplicant data
467 void offchannel_clear_pending_action_tx(struct wpa_supplicant *wpa_s)
471 wpa_s->pending_action_tx);
472 wpabuf_free(wpa_s->pending_action_tx);
473 wpa_s->pending_action_tx = NULL;
479 * @wpa_s: Pointer to wpa_supplicant data
484 void offchannel_deinit(struct wpa_supplicant *wpa_s)
486 offchannel_clear_pending_action_tx(wpa_s);
487 eloop_cancel_timeout(wpas_send_action_cb, wpa_s, NULL);