Lines Matching refs:iface

56 static void wpa_priv_cmd_register(struct wpa_priv_interface *iface,
61 if (iface->drv_priv) {
63 if (iface->driver->deinit)
64 iface->driver->deinit(iface->drv_priv);
65 iface->drv_priv = NULL;
66 if (iface->drv_global_priv) {
67 iface->driver->global_deinit(iface->drv_global_priv);
68 iface->drv_global_priv = NULL;
70 iface->wpas_registered = 0;
74 if (iface->l2[i]) {
77 l2_packet_deinit(iface->l2[i]);
78 iface->l2[i] = NULL;
82 if (iface->driver->init2) {
83 if (iface->driver->global_init) {
84 iface->drv_global_priv =
85 iface->driver->global_init(iface->ctx);
86 if (!iface->drv_global_priv) {
92 iface->drv_global_priv = NULL;
94 iface->drv_priv = iface->driver->init2(iface, iface->ifname,
95 iface->drv_global_priv);
96 } else if (iface->driver->init) {
97 iface->drv_priv = iface->driver->init(iface, iface->ifname);
101 if (iface->drv_priv == NULL) {
107 "'%s'", iface->driver_name, iface->ifname);
109 os_memcpy(&iface->drv_addr, from, fromlen);
110 iface->drv_addr_len = fromlen;
111 iface->wpas_registered = 1;
113 if (iface->driver->set_param &&
114 iface->driver->set_param(iface->drv_priv, NULL) < 0) {
120 static void wpa_priv_cmd_unregister(struct wpa_priv_interface *iface,
123 if (iface->drv_priv) {
124 if (iface->driver->deinit)
125 iface->driver->deinit(iface->drv_priv);
126 iface->drv_priv = NULL;
127 if (iface->drv_global_priv) {
128 iface->driver->global_deinit(iface->drv_global_priv);
129 iface->drv_global_priv = NULL;
131 iface->wpas_registered = 0;
136 static void wpa_priv_cmd_scan(struct wpa_priv_interface *iface,
144 if (iface->drv_priv == NULL)
176 if (iface->driver->scan2)
177 iface->driver->scan2(iface->drv_priv, &params);
181 static void wpa_priv_get_scan_results2(struct wpa_priv_interface *iface,
190 res = iface->driver->get_scan_results2(iface->drv_priv);
214 sendto(iface->fd, buf, pos - buf, 0, (struct sockaddr *) from, fromlen);
223 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
227 static void wpa_priv_cmd_get_scan_results(struct wpa_priv_interface *iface,
231 if (iface->drv_priv == NULL)
234 if (iface->driver->get_scan_results2)
235 wpa_priv_get_scan_results2(iface, from, fromlen);
237 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
241 static void wpa_priv_cmd_authenticate(struct wpa_priv_interface *iface,
248 if (iface->drv_priv == NULL || iface->driver->authenticate == NULL)
288 res = iface->driver->authenticate(iface->drv_priv, &params);
293 static void wpa_priv_cmd_associate(struct wpa_priv_interface *iface,
301 if (iface->drv_priv == NULL || iface->driver->associate == NULL)
336 res = iface->driver->associate(iface->drv_priv, &params);
341 static void wpa_priv_cmd_get_bssid(struct wpa_priv_interface *iface,
346 if (iface->drv_priv == NULL)
349 if (iface->driver->get_bssid == NULL ||
350 iface->driver->get_bssid(iface->drv_priv, bssid) < 0)
353 sendto(iface->fd, bssid, ETH_ALEN, 0, (struct sockaddr *) from,
358 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
362 static void wpa_priv_cmd_get_ssid(struct wpa_priv_interface *iface,
368 if (iface->drv_priv == NULL)
371 if (iface->driver->get_ssid == NULL)
375 res = iface->driver->get_ssid(iface->drv_priv, &ssid[sizeof(int)]);
380 sendto(iface->fd, ssid, sizeof(ssid), 0, (struct sockaddr *) from,
385 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
389 static void wpa_priv_cmd_set_key(struct wpa_priv_interface *iface,
396 if (iface->drv_priv == NULL || iface->driver->set_key == NULL)
407 p.ifname = iface->ifname;
418 res = iface->driver->set_key(iface->drv_priv, &p);
423 static void wpa_priv_cmd_get_capa(struct wpa_priv_interface *iface,
428 if (iface->drv_priv == NULL)
431 if (iface->driver->get_capa == NULL ||
432 iface->driver->get_capa(iface->drv_priv, &capa) < 0)
439 sendto(iface->fd, &capa, sizeof(capa), 0, (struct sockaddr *) from,
444 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
452 struct wpa_priv_interface *iface = l2_ctx->parent;
464 msg.msg_name = &iface->l2_addr[l2_ctx->idx];
465 msg.msg_namelen = iface->l2_addr_len[l2_ctx->idx];
467 if (sendmsg(iface->fd, &msg, 0) < 0) {
480 static void wpa_priv_cmd_l2_register(struct wpa_priv_interface *iface,
505 if (!iface->l2[idx])
513 os_memcpy(&iface->l2_addr[idx], from, fromlen);
514 iface->l2_addr_len[idx] = fromlen;
516 iface->l2_ctx[idx].idx = idx;
517 iface->l2_ctx[idx].parent = iface;
518 iface->l2[idx] = l2_packet_init(iface->ifname, NULL, proto,
519 wpa_priv_l2_rx, &iface->l2_ctx[idx],
521 if (!iface->l2[idx]) {
527 if (l2_packet_get_own_addr(iface->l2[idx], own_addr) < 0) {
530 l2_packet_deinit(iface->l2[idx]);
531 iface->l2[idx] = NULL;
535 res = sendto(iface->fd, own_addr, ETH_ALEN, 0,
541 static void wpa_priv_cmd_l2_unregister(struct wpa_priv_interface *iface,
548 if (iface->l2_addr_len[idx] == fromlen &&
549 os_memcmp(&iface->l2_addr[idx], from, fromlen) == 0)
558 if (iface->l2[idx]) {
559 l2_packet_deinit(iface->l2[idx]);
560 iface->l2[idx] = NULL;
565 static void wpa_priv_cmd_l2_notify_auth_start(struct wpa_priv_interface *iface,
571 if (iface->l2[idx])
572 l2_packet_notify_auth_start(iface->l2[idx]);
577 static void wpa_priv_cmd_l2_send(struct wpa_priv_interface *iface,
587 if (iface->l2_addr_len[idx] == fromlen &&
588 os_memcmp(&iface->l2_addr[idx], from, fromlen) == 0)
597 if (iface->l2[idx] == NULL)
615 res = l2_packet_send(iface->l2[idx], dst_addr, proto,
622 static void wpa_priv_cmd_set_country(struct wpa_priv_interface *iface,
625 if (iface->drv_priv == NULL || iface->driver->set_country == NULL ||
629 iface->driver->set_country(iface->drv_priv, buf);
635 struct wpa_priv_interface *iface = eloop_ctx;
657 cmd, iface->ifname);
663 wpa_priv_cmd_register(iface, &from, fromlen);
666 wpa_priv_cmd_unregister(iface, &from);
669 wpa_priv_cmd_scan(iface, cmd_buf, cmd_len);
672 wpa_priv_cmd_get_scan_results(iface, &from, fromlen);
675 wpa_priv_cmd_associate(iface, cmd_buf, cmd_len);
678 wpa_priv_cmd_get_bssid(iface, &from, fromlen);
681 wpa_priv_cmd_get_ssid(iface, &from, fromlen);
684 wpa_priv_cmd_set_key(iface, cmd_buf, cmd_len);
687 wpa_priv_cmd_get_capa(iface, &from, fromlen);
690 wpa_priv_cmd_l2_register(iface, &from, fromlen,
694 wpa_priv_cmd_l2_unregister(iface, &from, fromlen);
697 wpa_priv_cmd_l2_notify_auth_start(iface, &from);
700 wpa_priv_cmd_l2_send(iface, &from, fromlen, cmd_buf, cmd_len);
707 wpa_priv_cmd_set_country(iface, pos);
710 wpa_priv_cmd_authenticate(iface, cmd_buf, cmd_len);
716 static void wpa_priv_interface_deinit(struct wpa_priv_interface *iface)
720 if (iface->drv_priv) {
721 if (iface->driver->deinit)
722 iface->driver->deinit(iface->drv_priv);
723 if (iface->drv_global_priv)
724 iface->driver->global_deinit(iface->drv_global_priv);
727 if (iface->fd >= 0) {
728 eloop_unregister_read_sock(iface->fd);
729 close(iface->fd);
730 unlink(iface->sock_name);
734 if (iface->l2[i])
735 l2_packet_deinit(iface->l2[i]);
738 os_free(iface->ifname);
739 os_free(iface->driver_name);
740 os_free(iface->sock_name);
741 os_free(iface);
748 struct wpa_priv_interface *iface;
758 iface = os_zalloc(sizeof(*iface));
759 if (iface == NULL)
761 iface->fd = -1;
762 iface->ctx = ctx;
765 iface->driver_name = dup_binstr(params, len);
766 if (iface->driver_name == NULL) {
767 wpa_priv_interface_deinit(iface);
772 if (os_strcmp(iface->driver_name,
774 iface->driver = wpa_drivers[i];
778 if (iface->driver == NULL) {
780 iface->driver_name);
781 wpa_priv_interface_deinit(iface);
786 iface->ifname = os_strdup(pos);
787 if (iface->ifname == NULL) {
788 wpa_priv_interface_deinit(iface);
792 len = os_strlen(dir) + 1 + os_strlen(iface->ifname);
793 iface->sock_name = os_malloc(len + 1);
794 if (iface->sock_name == NULL) {
795 wpa_priv_interface_deinit(iface);
799 os_snprintf(iface->sock_name, len + 1, "%s/%s", dir, iface->ifname);
800 if (os_strlen(iface->sock_name) >= sizeof(addr.sun_path)) {
801 wpa_priv_interface_deinit(iface);
805 iface->fd = socket(PF_UNIX, SOCK_DGRAM, 0);
806 if (iface->fd < 0) {
808 wpa_priv_interface_deinit(iface);
814 os_strlcpy(addr.sun_path, iface->sock_name, sizeof(addr.sun_path));
816 if (bind(iface->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
819 if (connect(iface->fd, (struct sockaddr *) &addr,
824 if (unlink(iface->sock_name) < 0) {
827 iface->sock_name, strerror(errno));
830 if (bind(iface->fd, (struct sockaddr *) &addr,
833 "wpa-priv-iface-init: bind(PF_UNIX): %s",
838 "socket '%s'", iface->sock_name);
843 "not used anymore", iface->sock_name);
848 if (chmod(iface->sock_name, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
853 eloop_register_read_sock(iface->fd, wpa_priv_receive, iface, NULL);
855 return iface;
858 wpa_priv_interface_deinit(iface);
863 static int wpa_priv_send_event(struct wpa_priv_interface *iface, int event,
877 msg.msg_name = &iface->drv_addr;
878 msg.msg_namelen = iface->drv_addr_len;
880 if (sendmsg(iface->fd, &msg, 0) < 0) {
890 static void wpa_priv_send_auth(struct wpa_priv_interface *iface,
914 wpa_priv_send_event(iface, PRIVSEP_EVENT_AUTH, buf, buflen);
920 static void wpa_priv_send_assoc(struct wpa_priv_interface *iface, int event,
975 wpa_priv_send_event(iface, event, buf, buflen);
981 static void wpa_priv_send_interface_status(struct wpa_priv_interface *iface,
1005 wpa_priv_send_event(iface, PRIVSEP_EVENT_INTERFACE_STATUS,
1013 static void wpa_priv_send_ft_response(struct wpa_priv_interface *iface,
1034 wpa_priv_send_event(iface, PRIVSEP_EVENT_FT_RESPONSE, buf, len);
1044 struct wpa_priv_interface *iface = ctx;
1048 if (!iface->wpas_registered) {
1056 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOC, data);
1059 wpa_priv_send_event(iface, PRIVSEP_EVENT_DISASSOC, NULL, 0);
1064 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOCINFO, data);
1069 wpa_priv_send_event(iface, PRIVSEP_EVENT_MICHAEL_MIC_FAILURE,
1074 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_STARTED, NULL,
1078 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_RESULTS, NULL,
1082 wpa_priv_send_interface_status(iface, data);
1087 wpa_priv_send_event(iface, PRIVSEP_EVENT_PMKID_CANDIDATE,
1092 wpa_priv_send_ft_response(iface, data);
1095 wpa_priv_send_auth(iface, data);
1109 struct wpa_priv_interface *iface;
1114 for (iface = global->interfaces; iface; iface = iface->next) {
1115 if (os_strcmp(iface->ifname, data->interface_status.ifname) ==
1119 if (iface && iface->driver->get_ifindex) {
1122 ifindex = iface->driver->get_ifindex(iface->drv_priv);
1126 iface->ifname, ifindex,
1131 if (iface)
1132 wpa_supplicant_event(iface, event, data);
1139 struct wpa_priv_interface *iface = ctx;
1155 msg.msg_name = &iface->drv_addr;
1156 msg.msg_namelen = iface->drv_addr_len;
1158 if (sendmsg(iface->fd, &msg, 0) < 0)
1213 struct wpa_priv_interface *iface;
1260 iface = wpa_priv_interface_init(&global, ctrl_dir, argv[i]);
1261 if (iface == NULL)
1263 iface->next = global.interfaces;
1264 global.interfaces = iface;
1276 iface = global.interfaces;
1277 while (iface) {
1278 struct wpa_priv_interface *prev = iface;
1279 iface = iface->next;