Home | History | Annotate | Download | only in wpa_supplicant

Lines Matching refs:iface

57 static void wpa_priv_cmd_register(struct wpa_priv_interface *iface,
60 if (iface->drv_priv) {
62 if (iface->driver->set_wpa)
63 iface->driver->set_wpa(iface->drv_priv, 0);
64 if (iface->driver->deinit)
65 iface->driver->deinit(iface->drv_priv);
66 iface->drv_priv = NULL;
67 iface->wpas_registered = 0;
70 if (iface->l2) {
73 l2_packet_deinit(iface->l2);
74 iface->l2 = NULL;
77 if (iface->driver->init == NULL)
80 iface->drv_priv = iface->driver->init(iface, iface->ifname);
81 if (iface->drv_priv == NULL) {
87 "'%s'", iface->driver_name, iface->ifname);
89 os_memcpy(&iface->drv_addr, from, sizeof(iface->drv_addr));
90 iface->wpas_registered = 1;
92 if (iface->driver->set_param &&
93 iface->driver->set_param(iface->drv_priv, NULL) < 0) {
97 if (iface->driver->set_wpa)
98 iface->driver->set_wpa(iface->drv_priv, 1);
102 static void wpa_priv_cmd_unregister(struct wpa_priv_interface *iface,
105 if (iface->drv_priv) {
106 if (iface->driver->set_wpa)
107 iface->driver->set_wpa(iface->drv_priv, 0);
108 if (iface->driver->deinit)
109 iface->driver->deinit(iface->drv_priv);
110 iface->drv_priv = NULL;
111 iface->wpas_registered = 0;
116 static void wpa_priv_cmd_set_wpa(struct wpa_priv_interface *iface,
119 if (iface->drv_priv == NULL || len != sizeof(int))
122 if (iface->driver->set_wpa)
123 iface->driver->set_wpa(iface->drv_priv, *((int *) buf));
127 static void wpa_priv_cmd_scan(struct wpa_priv_interface *iface,
130 if (iface->drv_priv == NULL)
133 if (iface->driver->scan)
134 iface->driver->scan(iface->drv_priv, len ? (u8 *) buf : NULL,
139 static void wpa_priv_get_scan_results2(struct wpa_priv_interface *iface,
147 res = iface->driver->get_scan_results2(iface->drv_priv);
171 sendto(iface->fd, buf, pos - buf, 0, (struct sockaddr *) from,
181 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
185 static void wpa_priv_send_old_scan_results(struct wpa_priv_interface *iface,
198 res = iface->driver->get_scan_results(iface->drv_priv, results,
269 sendto(iface->fd, buf, pos - buf, 0, (struct sockaddr *) from,
279 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
283 static void wpa_priv_cmd_get_scan_results(struct wpa_priv_interface *iface,
286 if (iface->drv_priv == NULL)
289 if (iface->driver->get_scan_results2)
290 wpa_priv_get_scan_results2(iface, from);
291 else if (iface->driver->get_scan_results)
292 wpa_priv_send_old_scan_results(iface, from);
294 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from,
299 static void wpa_priv_cmd_associate(struct wpa_priv_interface *iface,
307 if (iface->drv_priv == NULL || iface->driver->associate == NULL)
340 res = iface->driver->associate(iface->drv_priv, &params);
345 static void wpa_priv_cmd_get_bssid(struct wpa_priv_interface *iface,
350 if (iface->drv_priv == NULL)
353 if (iface->driver->get_bssid == NULL ||
354 iface->driver->get_bssid(iface->drv_priv, bssid) < 0)
357 sendto(iface->fd, bssid, ETH_ALEN, 0, (struct sockaddr *) from,
362 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
366 static void wpa_priv_cmd_get_ssid(struct wpa_priv_interface *iface,
372 if (iface->drv_priv == NULL)
375 if (iface->driver->get_ssid == NULL)
378 res = iface->driver->get_ssid(iface->drv_priv, &ssid[sizeof(int)]);
383 sendto(iface->fd, ssid, sizeof(ssid), 0, (struct sockaddr *) from,
388 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
392 static void wpa_priv_cmd_set_key(struct wpa_priv_interface *iface,
398 if (iface->drv_priv == NULL || iface->driver->set_key == NULL)
408 res = iface->driver->set_key(iface->drv_priv, params->alg,
419 static void wpa_priv_cmd_get_capa(struct wpa_priv_interface *iface,
424 if (iface->drv_priv == NULL)
427 if (iface->driver->get_capa == NULL ||
428 iface->driver->get_capa(iface->drv_priv, &capa) < 0)
431 sendto(iface->fd, &capa, sizeof(capa), 0, (struct sockaddr *) from,
436 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
443 struct wpa_priv_interface *iface = ctx;
455 msg.msg_name = &iface->l2_addr;
456 msg.msg_namelen = sizeof(iface->l2_addr);
458 if (sendmsg(iface->fd, &msg, 0) < 0) {
464 static void wpa_priv_cmd_l2_register(struct wpa_priv_interface *iface,
486 if (iface->l2) {
489 l2_packet_deinit(iface->l2);
490 iface->l2 = NULL;
493 os_memcpy(&iface->l2_addr, from, sizeof(iface->l2_addr));
495 iface->l2 = l2_packet_init(iface->ifname, NULL, proto,
496 wpa_priv_l2_rx, iface, reg_cmd[1]);
497 if (iface->l2 == NULL) {
503 if (l2_packet_get_own_addr(iface->l2, own_addr) < 0) {
506 l2_packet_deinit(iface->l2);
507 iface->l2 = NULL;
511 res = sendto(iface->fd, own_addr, ETH_ALEN, 0,
517 static void wpa_priv_cmd_l2_unregister(struct wpa_priv_interface *iface,
520 if (iface->l2) {
521 l2_packet_deinit(iface->l2);
522 iface->l2 = NULL;
527 static void wpa_priv_cmd_l2_notify_auth_start(struct wpa_priv_interface *iface,
530 if (iface->l2)
531 l2_packet_notify_auth_start(iface->l2);
535 static void wpa_priv_cmd_l2_send(struct wpa_priv_interface *iface,
543 if (iface->l2 == NULL)
561 res = l2_packet_send(iface->l2, dst_addr, proto, buf + ETH_ALEN + 2,
567 static void wpa_priv_cmd_set_mode(struct wpa_priv_interface *iface,
570 if (iface->drv_priv == NULL || iface->driver->set_mode == NULL ||
574 iface->driver->set_mode(iface->drv_priv, *((int *) buf));
578 static void wpa_priv_cmd_set_country(struct wpa_priv_interface *iface,
581 if (iface->drv_priv == NULL || iface->driver->set_country == NULL ||
585 iface->driver->set_country(iface->drv_priv, buf);
591 struct wpa_priv_interface *iface = eloop_ctx;
613 cmd, iface->ifname);
619 wpa_priv_cmd_register(iface, &from);
622 wpa_priv_cmd_unregister(iface, &from);
625 wpa_priv_cmd_set_wpa(iface, cmd_buf, cmd_len);
628 wpa_priv_cmd_scan(iface, cmd_buf, cmd_len);
631 wpa_priv_cmd_get_scan_results(iface, &from);
634 wpa_priv_cmd_associate(iface, cmd_buf, cmd_len);
637 wpa_priv_cmd_get_bssid(iface, &from);
640 wpa_priv_cmd_get_ssid(iface, &from);
643 wpa_priv_cmd_set_key(iface, cmd_buf, cmd_len);
646 wpa_priv_cmd_get_capa(iface, &from);
649 wpa_priv_cmd_l2_register(iface, &from, cmd_buf, cmd_len);
652 wpa_priv_cmd_l2_unregister(iface, &from);
655 wpa_priv_cmd_l2_notify_auth_start(iface, &from);
658 wpa_priv_cmd_l2_send(iface, &from, cmd_buf, cmd_len);
661 wpa_priv_cmd_set_mode(iface, cmd_buf, cmd_len);
668 wpa_priv_cmd_set_country(iface, pos);
674 static void wpa_priv_interface_deinit(struct wpa_priv_interface *iface)
676 if (iface->drv_priv && iface->driver->deinit)
677 iface->driver->deinit(iface->drv_priv);
679 if (iface->fd >= 0) {
680 eloop_unregister_read_sock(iface->fd);
681 close(iface->fd);
682 unlink(iface->sock_name);
685 if (iface->l2)
686 l2_packet_deinit(iface->l2);
688 os_free(iface->ifname);
689 os_free(iface->driver_name);
690 os_free(iface->sock_name);
691 os_free(iface);
700 struct wpa_priv_interface *iface;
710 iface = os_zalloc(sizeof(*iface));
711 if (iface == NULL)
713 iface->fd = -1;
716 iface->driver_name = os_malloc(len + 1);
717 if (iface->driver_name == NULL) {
718 wpa_priv_interface_deinit(iface);
721 os_memcpy(iface->driver_name, params, len);
722 iface->driver_name[len] = '\0';
725 if (os_strcmp(iface->driver_name,
727 iface->driver = wpa_supplicant_drivers[i];
731 if (iface->driver == NULL) {
733 iface->driver_name);
734 wpa_priv_interface_deinit(iface);
739 iface->ifname = os_strdup(pos);
740 if (iface->ifname == NULL) {
741 wpa_priv_interface_deinit(iface);
745 len = os_strlen(dir) + 1 + os_strlen(iface->ifname);
746 iface->sock_name = os_malloc(len + 1);
747 if (iface->sock_name == NULL) {
748 wpa_priv_interface_deinit(iface);
752 os_snprintf(iface->sock_name, len + 1, "%s/%s", dir, iface->ifname);
753 if (os_strlen(iface->sock_name) >= sizeof(addr.sun_path)) {
754 wpa_priv_interface_deinit(iface);
758 iface->fd = socket(PF_UNIX, SOCK_DGRAM, 0);
759 if (iface->fd < 0) {
761 wpa_priv_interface_deinit(iface);
767 os_strlcpy(addr.sun_path, iface->sock_name, sizeof(addr.sun_path));
769 if (bind(iface->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
772 if (connect(iface->fd, (struct sockaddr *) &addr,
777 if (unlink(iface->sock_name) < 0) {
781 iface->sock_name);
784 if (bind(iface->fd, (struct sockaddr *) &addr,
790 "socket '%s'", iface->sock_name);
795 "not used anymore", iface->sock_name);
800 if (chmod(iface->sock_name, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
805 eloop_register_read_sock(iface->fd, wpa_priv_receive, iface, NULL);
807 return iface;
810 wpa_priv_interface_deinit(iface);
815 static int wpa_priv_send_event(struct wpa_priv_interface *iface, int event,
829 msg.msg_name = &iface->drv_addr;
830 msg.msg_namelen = sizeof(iface->drv_addr);
832 if (sendmsg(iface->fd, &msg, 0) < 0) {
841 static void wpa_priv_send_assoc(struct wpa_priv_interface *iface, int event,
896 wpa_priv_send_event(iface, event, buf, buflen);
902 static void wpa_priv_send_interface_status(struct wpa_priv_interface *iface,
926 wpa_priv_send_event(iface, PRIVSEP_EVENT_INTERFACE_STATUS,
934 static void wpa_priv_send_ft_response(struct wpa_priv_interface *iface,
955 wpa_priv_send_event(iface, PRIVSEP_EVENT_FT_RESPONSE, buf, len);
965 struct wpa_priv_interface *iface = ctx;
969 if (!iface->wpas_registered) {
977 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOC, data);
980 wpa_priv_send_event(iface, PRIVSEP_EVENT_DISASSOC, NULL, 0);
985 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOCINFO, data);
990 wpa_priv_send_event(iface, PRIVSEP_EVENT_MICHAEL_MIC_FAILURE,
995 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_RESULTS, NULL,
999 wpa_priv_send_interface_status(iface, data);
1004 wpa_priv_send_event(iface, PRIVSEP_EVENT_PMKID_CANDIDATE,
1011 wpa_priv_send_event(iface, PRIVSEP_EVENT_STKSTART,
1015 wpa_priv_send_ft_response(iface, data);
1028 struct wpa_priv_interface *iface = ctx;
1044 msg.msg_name = &iface->drv_addr;
1045 msg.msg_namelen = sizeof(iface->drv_addr);
1047 if (sendmsg(iface->fd, &msg, 0) < 0)
1073 struct wpa_priv_interface *iface = ctx;
1089 msg.msg_name = &iface->drv_addr;
1090 msg.msg_namelen = sizeof(iface->drv_addr);
1092 if (sendmsg(iface->fd, &msg, 0) < 0)
1146 struct wpa_priv_interface *interfaces = NULL, *iface;
1190 iface = wpa_priv_interface_init(ctrl_dir, argv[i]);
1191 if (iface == NULL)
1193 iface->next = interfaces;
1194 interfaces = iface;
1206 iface = interfaces;
1207 while (iface) {
1208 struct wpa_priv_interface *prev = iface;
1209 iface = iface->next;