Lines Matching full:l2

56 	struct l2_packet_data *l2[2];  member
84 int l2_packet_get_own_addr(struct l2_packet_data *l2, u8 *addr) in l2_packet_get_own_addr() argument
86 os_memcpy(addr, l2->own_addr, ETH_ALEN); in l2_packet_get_own_addr()
91 int l2_packet_send(struct l2_packet_data *l2, const u8 *dst_addr, u16 proto, in l2_packet_send() argument
102 if (l2 == NULL) in l2_packet_send()
112 if (l2->l2_hdr) { in l2_packet_send()
122 os_memcpy(eth->h_source, l2->own_addr, ETH_ALEN); in l2_packet_send()
134 wpa_printf(MSG_DEBUG, "L2(NDISUIO): Wait for pending " in l2_packet_send()
140 wpa_printf(MSG_DEBUG, "L2(NDISUIO): " in l2_packet_send()
148 wpa_printf(MSG_DEBUG, "L2(NDISUIO): WriteFile failed: %d", in l2_packet_send()
157 static void l2_packet_callback(struct l2_packet_data *l2);
160 static void l2_packet_rx_thread_try_read(struct l2_packet_data *l2) in l2_packet_rx_thread_try_read() argument
165 if (!ReadFile(driver_ndis_get_ndisuio_handle(), l2->rx_buf, in l2_packet_rx_thread_try_read()
166 sizeof(l2->rx_buf), &l2->rx_written, NULL)) { in l2_packet_rx_thread_try_read()
182 (int) l2->rx_written); in l2_packet_rx_thread_try_read()
188 SetEvent(l2->rx_avail); in l2_packet_rx_thread_try_read()
198 struct l2_packet_data *l2 = arg; in l2_packet_rx_thread() local
203 wpa_printf(MSG_DEBUG, "L2(NDISUIO): RX thread started"); in l2_packet_rx_thread()
233 l2_packet_rx_thread_try_read(l2); in l2_packet_rx_thread()
245 wpa_printf(MSG_DEBUG, "L2(NDISUIO): RX thread stopped"); in l2_packet_rx_thread()
250 static int l2_ndisuio_start_read(struct l2_packet_data *l2, int recursive) in l2_ndisuio_start_read() argument
252 os_memset(&l2->rx_overlapped, 0, sizeof(l2->rx_overlapped)); in l2_ndisuio_start_read()
253 l2->rx_overlapped.hEvent = l2->rx_avail; in l2_ndisuio_start_read()
254 if (!ReadFile(driver_ndis_get_ndisuio_handle(), l2->rx_buf, in l2_ndisuio_start_read()
255 sizeof(l2->rx_buf), &l2->rx_written, &l2->rx_overlapped)) in l2_ndisuio_start_read()
259 wpa_printf(MSG_DEBUG, "L2(NDISUIO): ReadFile failed: " in l2_ndisuio_start_read()
268 wpa_printf(MSG_DEBUG, "L2(NDISUIO): ReadFile returned data " in l2_ndisuio_start_read()
271 l2_packet_callback(l2); in l2_ndisuio_start_read()
279 static void l2_packet_callback(struct l2_packet_data *l2) in l2_packet_callback() argument
283 struct l2_ethhdr *ethhdr = (struct l2_ethhdr *) l2->rx_buf; in l2_packet_callback()
285 wpa_printf(MSG_DEBUG, "L2(NDISUIO): Read %d bytes", in l2_packet_callback()
286 (int) l2->rx_written); in l2_packet_callback()
288 if (l2->l2_hdr || l2->rx_written < sizeof(*ethhdr)) { in l2_packet_callback()
290 rx_len = l2->rx_written; in l2_packet_callback()
293 rx_len = l2->rx_written - sizeof(*ethhdr); in l2_packet_callback()
297 if (l2->rx_callback) in l2_packet_callback()
298 l2->rx_callback(l2->rx_callback_ctx, rx_src, rx_buf, rx_len); in l2_packet_callback()
300 l2_ndisuio_start_read(l2, 1); in l2_packet_callback()
307 struct l2_packet_data *l2 = eloop_data; in l2_packet_rx_event() local
310 l2 = l2_ndisuio_global->l2[l2_ndisuio_global->refcount - 1]; in l2_packet_rx_event()
312 ResetEvent(l2->rx_avail); in l2_packet_rx_event()
316 &l2->rx_overlapped, &l2->rx_written, FALSE)) { in l2_packet_rx_event()
317 wpa_printf(MSG_DEBUG, "L2(NDISUIO): GetOverlappedResult " in l2_packet_rx_event()
323 l2_packet_callback(l2); in l2_packet_rx_event()
339 wpa_printf(MSG_ERROR, "L2(NDISUIO): " in l2_ndisuio_set_ether_type()
355 struct l2_packet_data *l2; in l2_packet_init() local
364 wpa_printf(MSG_ERROR, "L2(NDISUIO): Not more than two " in l2_packet_init()
370 l2 = os_zalloc(sizeof(struct l2_packet_data)); in l2_packet_init()
371 if (l2 == NULL) in l2_packet_init()
373 l2_ndisuio_global->l2[l2_ndisuio_global->refcount - 1] = l2; in l2_packet_init()
375 os_strlcpy(l2->ifname, ifname, sizeof(l2->ifname)); in l2_packet_init()
376 l2->rx_callback = rx_callback; in l2_packet_init()
377 l2->rx_callback_ctx = rx_callback_ctx; in l2_packet_init()
378 l2->l2_hdr = l2_hdr; in l2_packet_init()
381 os_memcpy(l2->own_addr, own_addr, ETH_ALEN); in l2_packet_init()
384 os_free(l2); in l2_packet_init()
389 wpa_printf(MSG_DEBUG, "L2(NDISUIO): Temporarily setting " in l2_packet_init()
391 if (l2_ndisuio_global->l2[0]) in l2_packet_init()
392 l2->rx_avail = l2_ndisuio_global->l2[0]->rx_avail; in l2_packet_init()
393 return l2; in l2_packet_init()
396 l2->rx_avail = CreateEvent(NULL, TRUE, FALSE, NULL); in l2_packet_init()
397 if (l2->rx_avail == NULL) { in l2_packet_init()
398 os_free(l2); in l2_packet_init()
402 eloop_register_event(l2->rx_avail, sizeof(l2->rx_avail), in l2_packet_init()
403 l2_packet_rx_event, l2, NULL); in l2_packet_init()
429 eloop_unregister_event(l2->rx_avail, sizeof(l2->rx_avail)); in l2_packet_init()
430 os_free(l2); in l2_packet_init()
435 l2_packet_rx_thread, l2, 0, in l2_packet_init()
438 wpa_printf(MSG_INFO, "L2(NDISUIO): Failed to create RX " in l2_packet_init()
440 eloop_unregister_event(l2->rx_avail, sizeof(l2->rx_avail)); in l2_packet_init()
443 os_free(l2); in l2_packet_init()
447 l2_ndisuio_start_read(l2, 0); in l2_packet_init()
450 return l2; in l2_packet_init()
466 void l2_packet_deinit(struct l2_packet_data *l2) in l2_packet_deinit() argument
468 if (l2 == NULL) in l2_packet_deinit()
473 l2_ndisuio_global->l2[l2_ndisuio_global->refcount] = NULL; in l2_packet_deinit()
475 wpa_printf(MSG_DEBUG, "L2(NDISUIO): restore filtering " in l2_packet_deinit()
484 wpa_printf(MSG_DEBUG, "L2(NDISUIO): Waiting for RX thread to " in l2_packet_deinit()
494 wpa_printf(MSG_DEBUG, "L2(NDISUIO): IOCTL_CANCEL_READ " in l2_packet_deinit()
500 wpa_printf(MSG_DEBUG, "L2(NDISUIO): RX thread exited"); in l2_packet_deinit()
515 eloop_unregister_event(l2->rx_avail, sizeof(l2->rx_avail)); in l2_packet_deinit()
516 CloseHandle(l2->rx_avail); in l2_packet_deinit()
517 os_free(l2); in l2_packet_deinit()
521 int l2_packet_get_ip_addr(struct l2_packet_data *l2, char *buf, size_t len) in l2_packet_get_ip_addr() argument
527 void l2_packet_notify_auth_start(struct l2_packet_data *l2) in l2_packet_notify_auth_start() argument
532 int l2_packet_set_packet_filter(struct l2_packet_data *l2, in l2_packet_set_packet_filter() argument