Lines Matching refs:drv

73 	struct wpa_driver_test_data *drv = eloop_ctx;
76 if (drv->associated && drv->hostapd_addr_set) {
78 if (stat(drv->hostapd_addr.sun_path, &st) < 0) {
81 drv->associated = 0;
82 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
87 eloop_register_timeout(1, 0, wpa_driver_test_poll, drv, NULL);
106 static void wpa_driver_scan_dir(struct wpa_driver_test_data *drv,
122 MAC2STR(drv->own_addr));
125 if (drv->probe_req_ie) {
129 pos += wpa_snprintf_hex(pos, end - pos, drv->probe_req_ie,
130 drv->probe_req_ie_len);
144 if (sendto(drv->test_socket, cmd, os_strlen(cmd), 0,
156 struct wpa_driver_test_data *drv = priv;
159 drv->num_scanres = 0;
162 if (drv->test_socket >= 0 && drv->test_dir)
163 wpa_driver_scan_dir(drv, drv->test_dir);
165 if (drv->test_socket >= 0 && drv->hostapd_addr_set &&
166 sendto(drv->test_socket, "SCAN", 4, 0,
167 (struct sockaddr *) &drv->hostapd_addr,
168 sizeof(drv->hostapd_addr)) < 0) {
173 if (drv->test_socket >= 0 && drv->hostapd_addr_udp_set &&
174 sendto(drv->test_socket, "SCAN", 4, 0,
175 (struct sockaddr *) &drv->hostapd_addr_udp,
176 sizeof(drv->hostapd_addr_udp)) < 0) {
180 eloop_cancel_timeout(wpa_driver_test_scan_timeout, drv, drv->ctx);
181 eloop_register_timeout(1, 0, wpa_driver_test_scan_timeout, drv,
182 drv->ctx);
189 struct wpa_driver_test_data *drv = priv;
197 res->res = os_zalloc(drv->num_scanres * sizeof(struct wpa_scan_res *));
203 for (i = 0; i < drv->num_scanres; i++) {
205 if (drv->scanres[i] == NULL)
207 r = os_malloc(sizeof(*r) + drv->scanres[i]->ie_len);
210 os_memcpy(r, drv->scanres[i],
211 sizeof(*r) + drv->scanres[i]->ie_len);
242 struct wpa_driver_test_data *drv = priv;
259 drv->assoc_wpa_ie_len = params->wpa_ie_len;
260 if (drv->assoc_wpa_ie_len > sizeof(drv->assoc_wpa_ie))
261 drv->assoc_wpa_ie_len = sizeof(drv->assoc_wpa_ie);
262 os_memcpy(drv->assoc_wpa_ie, params->wpa_ie,
263 drv->assoc_wpa_ie_len);
265 drv->assoc_wpa_ie_len = 0;
268 if (drv->test_dir && params->bssid) {
269 os_memset(&drv->hostapd_addr, 0, sizeof(drv->hostapd_addr));
270 drv->hostapd_addr.sun_family = AF_UNIX;
271 os_snprintf(drv->hostapd_addr.sun_path,
272 sizeof(drv->hostapd_addr.sun_path),
274 drv->test_dir, MAC2STR(params->bssid));
275 drv->hostapd_addr_set = 1;
279 if (drv->test_socket >= 0 &&
280 (drv->hostapd_addr_set || drv->hostapd_addr_udp_set)) {
286 MAC2STR(drv->own_addr));
298 if (drv->hostapd_addr_set &&
299 sendto(drv->test_socket, cmd, os_strlen(cmd), 0,
300 (struct sockaddr *) &drv->hostapd_addr,
301 sizeof(drv->hostapd_addr)) < 0) {
306 if (drv->hostapd_addr_udp_set &&
307 sendto(drv->test_socket, cmd, os_strlen(cmd), 0,
308 (struct sockaddr *) &drv->hostapd_addr_udp,
309 sizeof(drv->hostapd_addr_udp)) < 0) {
314 os_memcpy(drv->ssid, params->ssid, params->ssid_len);
315 drv->ssid_len = params->ssid_len;
317 drv->associated = 1;
318 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL);
327 struct wpa_driver_test_data *drv = priv;
328 os_memcpy(bssid, drv->bssid, ETH_ALEN);
335 struct wpa_driver_test_data *drv = priv;
336 os_memcpy(ssid, drv->ssid, 32);
337 return drv->ssid_len;
341 static int wpa_driver_test_send_disassoc(struct wpa_driver_test_data *drv)
344 if (drv->test_socket >= 0 &&
345 sendto(drv->test_socket, "DISASSOC", 8, 0,
346 (struct sockaddr *) &drv->hostapd_addr,
347 sizeof(drv->hostapd_addr)) < 0) {
352 if (drv->test_socket >= 0 && drv->hostapd_addr_udp_set &&
353 sendto(drv->test_socket, "DISASSOC", 8, 0,
354 (struct sockaddr *) &drv->hostapd_addr_udp,
355 sizeof(drv->hostapd_addr_udp)) < 0) {
366 struct wpa_driver_test_data *drv = priv;
369 os_memset(drv->bssid, 0, ETH_ALEN);
370 drv->associated = 0;
371 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
372 return wpa_driver_test_send_disassoc(drv);
379 struct wpa_driver_test_data *drv = priv;
382 os_memset(drv->bssid, 0, ETH_ALEN);
383 drv->associated = 0;
384 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
385 return wpa_driver_test_send_disassoc(drv);
389 static void wpa_driver_test_scanresp(struct wpa_driver_test_data *drv,
401 if (drv->num_scanres >= MAX_SCAN_RESULTS) {
471 os_free(drv->scanres[drv->num_scanres]);
472 drv->scanres[drv->num_scanres++] = res;
476 static void wpa_driver_test_assocresp(struct wpa_driver_test_data *drv,
482 if (hwaddr_aton(data, drv->bssid)) {
486 if (drv->use_associnfo) {
489 event.assoc_info.req_ies = drv->assoc_wpa_ie;
490 event.assoc_info.req_ies_len = drv->assoc_wpa_ie_len;
491 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &event);
493 drv->associated = 1;
494 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL);
498 static void wpa_driver_test_disassoc(struct wpa_driver_test_data *drv,
502 drv->associated = 0;
503 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
507 static void wpa_driver_test_eapol(struct wpa_driver_test_data *drv,
512 const u8 *src = drv->bssid;
520 wpa_supplicant_rx_eapol(drv->ctx, src, data, data_len);
524 static void wpa_driver_test_mlme(struct wpa_driver_test_data *drv,
532 wpa_supplicant_sta_rx(drv->ctx, data, data_len, &rx_status);
540 struct wpa_driver_test_data *drv = eloop_ctx;
562 wpa_driver_test_scanresp(drv, (struct sockaddr *) &from,
565 wpa_driver_test_assocresp(drv, (struct sockaddr *) &from,
568 wpa_driver_test_disassoc(drv, (struct sockaddr *) &from,
571 wpa_driver_test_disassoc(drv, (struct sockaddr *) &from,
574 wpa_driver_test_eapol(drv, (struct sockaddr *) &from, fromlen,
577 wpa_driver_test_mlme(drv, (struct sockaddr *) &from, fromlen,
590 struct wpa_driver_test_data *drv;
592 drv = os_zalloc(sizeof(*drv));
593 if (drv == NULL)
595 drv->global = global_priv;
596 drv->ctx = ctx;
597 drv->test_socket = -1;
600 drv->bssid[0] = 0x02;
601 drv->bssid[1] = 0x00;
602 drv->bssid[2] = 0x00;
603 drv->bssid[3] = 0x00;
604 drv->bssid[4] = 0x00;
605 drv->bssid[5] = 0x01;
606 os_memcpy(drv->ssid, "test", 5);
607 drv->ssid_len = 4;
610 drv->own_addr[0] = 0x02; /* locally administered */
613 NULL, 0, drv->own_addr + 1, ETH_ALEN - 1);
614 eloop_register_timeout(1, 0, wpa_driver_test_poll, drv, NULL);
616 return drv;
620 static void wpa_driver_test_close_test_socket(struct wpa_driver_test_data *drv)
622 if (drv->test_socket >= 0) {
623 eloop_unregister_read_sock(drv->test_socket);
624 close(drv->test_socket);
625 drv->test_socket = -1;
628 if (drv->own_socket_path) {
629 unlink(drv->own_socket_path);
630 os_free(drv->own_socket_path);
631 drv->own_socket_path = NULL;
638 struct wpa_driver_test_data *drv = priv;
640 wpa_driver_test_close_test_socket(drv);
641 eloop_cancel_timeout(wpa_driver_test_scan_timeout, drv, drv->ctx);
642 eloop_cancel_timeout(wpa_driver_test_poll, drv, NULL);
643 os_free(drv->test_dir);
645 os_free(drv->scanres[i]);
646 os_free(drv->probe_req_ie);
647 os_free(drv);
651 static int wpa_driver_test_attach(struct wpa_driver_test_data *drv,
659 os_free(drv->own_socket_path);
662 drv->own_socket_path = os_malloc(len);
663 if (drv->own_socket_path == NULL)
665 os_snprintf(drv->own_socket_path, len, "%s/STA-" MACSTR,
666 dir, MAC2STR(drv->own_addr));
668 drv->own_socket_path = os_malloc(100);
669 if (drv->own_socket_path == NULL)
671 os_snprintf(drv->own_socket_path, 100,
676 drv->test_socket = socket(PF_UNIX, SOCK_DGRAM, 0);
677 if (drv->test_socket < 0) {
679 os_free(drv->own_socket_path);
680 drv->own_socket_path = NULL;
686 os_strlcpy(addr.sun_path, drv->own_socket_path, sizeof(addr.sun_path));
687 if (bind(drv->test_socket, (struct sockaddr *) &addr,
690 close(drv->test_socket);
691 unlink(drv->own_socket_path);
692 os_free(drv->own_socket_path);
693 drv->own_socket_path = NULL;
697 eloop_register_read_sock(drv->test_socket,
698 wpa_driver_test_receive_unix, drv, NULL);
707 static int wpa_driver_test_attach_udp(struct wpa_driver_test_data *drv,
718 drv->test_socket = socket(PF_INET, SOCK_DGRAM, 0);
719 if (drv->test_socket < 0) {
724 os_memset(&drv->hostapd_addr_udp, 0, sizeof(drv->hostapd_addr_udp));
725 drv->hostapd_addr_udp.sin_family = AF_INET;
731 pos = (u8 *) &drv->hostapd_addr_udp.sin_addr;
738 inet_aton(dst, &drv->hostapd_addr_udp.sin_addr);
740 drv->hostapd_addr_udp.sin_port = htons(atoi(pos));
742 drv->hostapd_addr_udp_set = 1;
744 eloop_register_read_sock(drv->test_socket,
745 wpa_driver_test_receive_unix, drv, NULL);
753 struct wpa_driver_test_data *drv = priv;
760 wpa_driver_test_close_test_socket(drv);
774 if (len > sizeof(drv->hostapd_addr.sun_path))
776 os_memset(&drv->hostapd_addr, 0, sizeof(drv->hostapd_addr));
777 drv->hostapd_addr.sun_family = AF_UNIX;
778 os_memcpy(drv->hostapd_addr.sun_path, pos, len);
779 drv->hostapd_addr_set = 1;
786 os_free(drv->test_dir);
787 drv->test_dir = os_strdup(pos + 9);
788 if (drv->test_dir == NULL)
790 end = os_strchr(drv->test_dir, ' ');
793 if (wpa_driver_test_attach(drv, drv->test_dir))
805 if (wpa_driver_test_attach_udp(drv, dst))
808 } else if (wpa_driver_test_attach(drv, NULL))
814 drv->use_associnfo = 1;
820 drv->use_mlme = 1;
830 struct wpa_driver_test_data *drv = priv;
832 return drv->own_addr;
839 struct wpa_driver_test_data *drv = priv;
853 os_memcpy(eth.h_source, drv->own_addr, ETH_ALEN);
864 if (os_memcmp(dest, drv->bssid, ETH_ALEN) == 0 ||
865 drv->test_dir == NULL) {
866 if (drv->hostapd_addr_udp_set) {
867 addr = (struct sockaddr *) &drv->hostapd_addr_udp;
868 alen = sizeof(drv->hostapd_addr_udp);
871 addr = (struct sockaddr *) &drv->hostapd_addr;
872 alen = sizeof(drv->hostapd_addr);
884 "%s/STA-" MACSTR, drv->test_dir, MAC2STR(dest));
888 drv->test_dir, MAC2STR(dest));
898 if (sendto(drv->test_socket, msg, msg_len, 0, addr, alen) < 0) {
911 struct wpa_driver_test_data *drv = priv;
927 if (drv->use_mlme)
993 struct wpa_driver_test_data *drv = priv;
1014 if (os_memcmp(dest, drv->bssid, ETH_ALEN) == 0 ||
1015 drv->test_dir == NULL) {
1016 if (drv->hostapd_addr_udp_set) {
1017 msg.msg_name = &drv->hostapd_addr_udp;
1018 msg.msg_namelen = sizeof(drv->hostapd_addr_udp);
1021 msg.msg_name = &drv->hostapd_addr;
1022 msg.msg_namelen = sizeof(drv->hostapd_addr);
1027 dir = opendir(drv->test_dir);
1048 "%s/%s", drv->test_dir, dent->d_name);
1053 if (sendmsg(drv->test_socket, &msg, 0) < 0)
1063 "%s/AP-" MACSTR, drv->test_dir, MAC2STR(dest));
1067 drv->test_dir, MAC2STR(dest));
1073 if (sendmsg(drv->test_socket, &msg, 0) < 0) {
1117 struct wpa_driver_test_data *drv = priv;
1119 os_free(drv->probe_req_ie);
1121 drv->probe_req_ie = os_malloc(ies_len);
1122 if (drv->probe_req_ie == NULL) {
1123 drv->probe_req_ie_len = 0;
1126 os_memcpy(drv->probe_req_ie, ies, ies_len);
1127 drv->probe_req_ie_len = ies_len;
1129 drv->probe_req_ie = NULL;
1130 drv->probe_req_ie_len = 0;
1177 struct wpa_driver_test_data *drv = (struct wpa_driver_test_data *)priv;
1197 ret = os_snprintf(buf, buf_len, MACSTR " Rssi %d\n", MAC2STR(drv->bssid), -10);