Lines Matching full: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, ¶ms);
181 static void wpa_priv_get_scan_results2(struct wpa_priv_interface *iface,
190 if (iface->driver->get_scan_results)
191 res = iface->driver->get_scan_results(iface->drv_priv, NULL);
193 res = iface->driver->get_scan_results2(iface->drv_priv);
217 sendto(iface->fd, buf, pos - buf, 0, (struct sockaddr *) from, fromlen);
226 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
230 static void wpa_priv_cmd_get_scan_results(struct wpa_priv_interface *iface,
234 if (iface->drv_priv == NULL)
237 if (iface->driver->get_scan_results || iface->driver->get_scan_results2)
238 wpa_priv_get_scan_results2(iface, from, fromlen);
240 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
244 static void wpa_priv_cmd_authenticate(struct wpa_priv_interface *iface,
251 if (iface->drv_priv == NULL || iface->driver->authenticate == NULL)
291 res = iface->driver->authenticate(iface->drv_priv, ¶ms);
296 static void wpa_priv_cmd_associate(struct wpa_priv_interface *iface,
304 if (iface->drv_priv == NULL || iface->driver->associate == NULL)
339 res = iface->driver->associate(iface->drv_priv, ¶ms);
344 static void wpa_priv_cmd_get_bssid(struct wpa_priv_interface *iface,
349 if (iface->drv_priv == NULL)
352 if (iface->driver->get_bssid == NULL ||
353 iface->driver->get_bssid(iface->drv_priv, bssid) < 0)
356 sendto(iface->fd, bssid, ETH_ALEN, 0, (struct sockaddr *) from,
361 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
365 static void wpa_priv_cmd_get_ssid(struct wpa_priv_interface *iface,
371 if (iface->drv_priv == NULL)
374 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, fromlen);
392 static void wpa_priv_cmd_set_key(struct wpa_priv_interface *iface,
399 if (iface->drv_priv == NULL || iface->driver->set_key == NULL)
410 p.ifname = iface->ifname;
422 res = iface->driver->set_key(iface->drv_priv, &p);
427 static void wpa_priv_cmd_get_capa(struct wpa_priv_interface *iface,
432 if (iface->drv_priv == NULL)
435 if (iface->driver->get_capa == NULL ||
436 iface->driver->get_capa(iface->drv_priv, &capa) < 0)
443 sendto(iface->fd, &capa, sizeof(capa), 0, (struct sockaddr *) from,
448 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, fromlen);
456 struct wpa_priv_interface *iface = l2_ctx->parent;
468 msg.msg_name = &iface->l2_addr[l2_ctx->idx];
469 msg.msg_namelen = iface->l2_addr_len[l2_ctx->idx];
471 if (sendmsg(iface->fd, &msg, 0) < 0) {
484 static void wpa_priv_cmd_l2_register(struct wpa_priv_interface *iface,
509 if (!iface->l2[idx])
517 os_memcpy(&iface->l2_addr[idx], from, fromlen);
518 iface->l2_addr_len[idx] = fromlen;
520 iface->l2_ctx[idx].idx = idx;
521 iface->l2_ctx[idx].parent = iface;
522 iface->l2[idx] = l2_packet_init(iface->ifname, NULL, proto,
523 wpa_priv_l2_rx, &iface->l2_ctx[idx],
525 if (!iface->l2[idx]) {
531 if (l2_packet_get_own_addr(iface->l2[idx], own_addr) < 0) {
534 l2_packet_deinit(iface->l2[idx]);
535 iface->l2[idx] = NULL;
539 res = sendto(iface->fd, own_addr, ETH_ALEN, 0,
545 static void wpa_priv_cmd_l2_unregister(struct wpa_priv_interface *iface,
552 if (iface->l2_addr_len[idx] == fromlen &&
553 os_memcmp(&iface->l2_addr[idx], from, fromlen) == 0)
562 if (iface->l2[idx]) {
563 l2_packet_deinit(iface->l2[idx]);
564 iface->l2[idx] = NULL;
569 static void wpa_priv_cmd_l2_notify_auth_start(struct wpa_priv_interface *iface,
575 if (iface->l2[idx])
576 l2_packet_notify_auth_start(iface->l2[idx]);
581 static void wpa_priv_cmd_l2_send(struct wpa_priv_interface *iface,
591 if (iface->l2_addr_len[idx] == fromlen &&
592 os_memcmp(&iface->l2_addr[idx], from, fromlen) == 0)
601 if (iface->l2[idx] == NULL)
619 res = l2_packet_send(iface->l2[idx], dst_addr, proto,
626 static void wpa_priv_cmd_set_country(struct wpa_priv_interface *iface,
629 if (iface->drv_priv == NULL || iface->driver->set_country == NULL ||
633 iface->driver->set_country(iface->drv_priv, buf);
639 struct wpa_priv_interface *iface = eloop_ctx;
661 cmd, iface->ifname);
667 wpa_priv_cmd_register(iface, &from, fromlen);
670 wpa_priv_cmd_unregister(iface, &from);
673 wpa_priv_cmd_scan(iface, cmd_buf, cmd_len);
676 wpa_priv_cmd_get_scan_results(iface, &from, fromlen);
679 wpa_priv_cmd_associate(iface, cmd_buf, cmd_len);
682 wpa_priv_cmd_get_bssid(iface, &from, fromlen);
685 wpa_priv_cmd_get_ssid(iface, &from, fromlen);
688 wpa_priv_cmd_set_key(iface, cmd_buf, cmd_len);
691 wpa_priv_cmd_get_capa(iface, &from, fromlen);
694 wpa_priv_cmd_l2_register(iface, &from, fromlen,
698 wpa_priv_cmd_l2_unregister(iface, &from, fromlen);
701 wpa_priv_cmd_l2_notify_auth_start(iface, &from);
704 wpa_priv_cmd_l2_send(iface, &from, fromlen, cmd_buf, cmd_len);
711 wpa_priv_cmd_set_country(iface, pos);
714 wpa_priv_cmd_authenticate(iface, cmd_buf, cmd_len);
720 static void wpa_priv_interface_deinit(struct wpa_priv_interface *iface)
724 if (iface->drv_priv) {
725 if (iface->driver->deinit)
726 iface->driver->deinit(iface->drv_priv);
727 if (iface->drv_global_priv)
728 iface->driver->global_deinit(iface->drv_global_priv);
731 if (iface->fd >= 0) {
732 eloop_unregister_read_sock(iface->fd);
733 close(iface->fd);
734 unlink(iface->sock_name);
738 if (iface->l2[i])
739 l2_packet_deinit(iface->l2[i]);
742 os_free(iface->ifname);
743 os_free(iface->driver_name);
744 os_free(iface->sock_name);
745 os_free(iface);
752 struct wpa_priv_interface *iface;
762 iface = os_zalloc(sizeof(*iface));
763 if (iface == NULL)
765 iface->fd = -1;
766 iface->ctx = ctx;
769 iface->driver_name = dup_binstr(params, len);
770 if (iface->driver_name == NULL) {
771 wpa_priv_interface_deinit(iface);
776 if (os_strcmp(iface->driver_name,
778 iface->driver = wpa_drivers[i];
782 if (iface->driver == NULL) {
784 iface->driver_name);
785 wpa_priv_interface_deinit(iface);
790 iface->ifname = os_strdup(pos);
791 if (iface->ifname == NULL) {
792 wpa_priv_interface_deinit(iface);
796 len = os_strlen(dir) + 1 + os_strlen(iface->ifname);
797 iface->sock_name = os_malloc(len + 1);
798 if (iface->sock_name == NULL) {
799 wpa_priv_interface_deinit(iface);
803 os_snprintf(iface->sock_name, len + 1, "%s/%s", dir, iface->ifname);
804 if (os_strlen(iface->sock_name) >= sizeof(addr.sun_path)) {
805 wpa_priv_interface_deinit(iface);
809 iface->fd = socket(PF_UNIX, SOCK_DGRAM, 0);
810 if (iface->fd < 0) {
812 wpa_priv_interface_deinit(iface);
818 os_strlcpy(addr.sun_path, iface->sock_name, sizeof(addr.sun_path));
820 if (bind(iface->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
823 if (connect(iface->fd, (struct sockaddr *) &addr,
828 if (unlink(iface->sock_name) < 0) {
831 iface->sock_name, strerror(errno));
834 if (bind(iface->fd, (struct sockaddr *) &addr,
837 "wpa-priv-iface-init: bind(PF_UNIX): %s",
842 "socket '%s'", iface->sock_name);
847 "not used anymore", iface->sock_name);
852 if (chmod(iface->sock_name, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
857 eloop_register_read_sock(iface->fd, wpa_priv_receive, iface, NULL);
859 return iface;
862 wpa_priv_interface_deinit(iface);
867 static int wpa_priv_send_event(struct wpa_priv_interface *iface, int event,
881 msg.msg_name = &iface->drv_addr;
882 msg.msg_namelen = iface->drv_addr_len;
884 if (sendmsg(iface->fd, &msg, 0) < 0) {
894 static void wpa_priv_send_auth(struct wpa_priv_interface *iface,
918 wpa_priv_send_event(iface, PRIVSEP_EVENT_AUTH, buf, buflen);
924 static void wpa_priv_send_assoc(struct wpa_priv_interface *iface, int event,
979 wpa_priv_send_event(iface, event, buf, buflen);
985 static void wpa_priv_send_interface_status(struct wpa_priv_interface *iface,
1009 wpa_priv_send_event(iface, PRIVSEP_EVENT_INTERFACE_STATUS,
1017 static void wpa_priv_send_ft_response(struct wpa_priv_interface *iface,
1038 wpa_priv_send_event(iface, PRIVSEP_EVENT_FT_RESPONSE, buf, len);
1048 struct wpa_priv_interface *iface = ctx;
1052 if (!iface->wpas_registered) {
1060 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOC, data);
1063 wpa_priv_send_event(iface, PRIVSEP_EVENT_DISASSOC, NULL, 0);
1068 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOCINFO, data);
1073 wpa_priv_send_event(iface, PRIVSEP_EVENT_MICHAEL_MIC_FAILURE,
1078 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_STARTED, NULL,
1082 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_RESULTS, NULL,
1086 wpa_priv_send_interface_status(iface, data);
1091 wpa_priv_send_event(iface, PRIVSEP_EVENT_PMKID_CANDIDATE,
1096 wpa_priv_send_ft_response(iface, data);
1099 wpa_priv_send_auth(iface, data);
1113 struct wpa_priv_interface *iface;
1118 for (iface = global->interfaces; iface; iface = iface->next) {
1119 if (os_strcmp(iface->ifname, data->interface_status.ifname) ==
1123 if (iface && iface->driver->get_ifindex) {
1126 ifindex = iface->driver->get_ifindex(iface->drv_priv);
1130 iface->ifname, ifindex,
1135 if (iface)
1136 wpa_supplicant_event(iface, event, data);
1144 struct wpa_priv_interface *iface = ctx;
1160 msg.msg_name = &iface->drv_addr;
1161 msg.msg_namelen = iface->drv_addr_len;
1163 if (sendmsg(iface->fd, &msg, 0) < 0)
1218 struct wpa_priv_interface *iface;
1265 iface = wpa_priv_interface_init(&global, ctrl_dir, argv[i]);
1266 if (iface == NULL)
1268 iface->next = global.interfaces;
1269 global.interfaces = iface;
1281 iface = global.interfaces;
1282 while (iface) {
1283 struct wpa_priv_interface *prev = iface;
1284 iface = iface->next;