Lines Matching refs:iface

49 static void wpa_priv_cmd_register(struct wpa_priv_interface *iface,
52 if (iface->drv_priv) {
54 if (iface->driver->deinit)
55 iface->driver->deinit(iface->drv_priv);
56 iface->drv_priv = NULL;
57 iface->wpas_registered = 0;
60 if (iface->l2) {
63 l2_packet_deinit(iface->l2);
64 iface->l2 = NULL;
67 if (iface->driver->init == NULL)
70 iface->drv_priv = iface->driver->init(iface, iface->ifname);
71 if (iface->drv_priv == NULL) {
77 "'%s'", iface->driver_name, iface->ifname);
79 os_memcpy(&iface->drv_addr, from, sizeof(iface->drv_addr));
80 iface->wpas_registered = 1;
82 if (iface->driver->set_param &&
83 iface->driver->set_param(iface->drv_priv, NULL) < 0) {
89 static void wpa_priv_cmd_unregister(struct wpa_priv_interface *iface,
92 if (iface->drv_priv) {
93 if (iface->driver->deinit)
94 iface->driver->deinit(iface->drv_priv);
95 iface->drv_priv = NULL;
96 iface->wpas_registered = 0;
101 static void wpa_priv_cmd_scan(struct wpa_priv_interface *iface,
106 if (iface->drv_priv == NULL)
116 if (iface->driver->scan2)
117 iface->driver->scan2(iface->drv_priv, &params);
121 static void wpa_priv_get_scan_results2(struct wpa_priv_interface *iface,
129 res = iface->driver->get_scan_results2(iface->drv_priv);
153 sendto(iface->fd, buf, pos - buf, 0, (struct sockaddr *) from,
163 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
167 static void wpa_priv_cmd_get_scan_results(struct wpa_priv_interface *iface,
170 if (iface->drv_priv == NULL)
173 if (iface->driver->get_scan_results2)
174 wpa_priv_get_scan_results2(iface, from);
176 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from,
181 static void wpa_priv_cmd_associate(struct wpa_priv_interface *iface,
189 if (iface->drv_priv == NULL || iface->driver->associate == NULL)
222 res = iface->driver->associate(iface->drv_priv, &params);
227 static void wpa_priv_cmd_get_bssid(struct wpa_priv_interface *iface,
232 if (iface->drv_priv == NULL)
235 if (iface->driver->get_bssid == NULL ||
236 iface->driver->get_bssid(iface->drv_priv, bssid) < 0)
239 sendto(iface->fd, bssid, ETH_ALEN, 0, (struct sockaddr *) from,
244 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
248 static void wpa_priv_cmd_get_ssid(struct wpa_priv_interface *iface,
254 if (iface->drv_priv == NULL)
257 if (iface->driver->get_ssid == NULL)
260 res = iface->driver->get_ssid(iface->drv_priv, &ssid[sizeof(int)]);
265 sendto(iface->fd, ssid, sizeof(ssid), 0, (struct sockaddr *) from,
270 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
274 static void wpa_priv_cmd_set_key(struct wpa_priv_interface *iface,
280 if (iface->drv_priv == NULL || iface->driver->set_key == NULL)
290 res = iface->driver->set_key(iface->ifname, iface->drv_priv,
302 static void wpa_priv_cmd_get_capa(struct wpa_priv_interface *iface,
307 if (iface->drv_priv == NULL)
310 if (iface->driver->get_capa == NULL ||
311 iface->driver->get_capa(iface->drv_priv, &capa) < 0)
314 sendto(iface->fd, &capa, sizeof(capa), 0, (struct sockaddr *) from,
319 sendto(iface->fd, "", 0, 0, (struct sockaddr *) from, sizeof(*from));
326 struct wpa_priv_interface *iface = ctx;
338 msg.msg_name = &iface->l2_addr;
339 msg.msg_namelen = sizeof(iface->l2_addr);
341 if (sendmsg(iface->fd, &msg, 0) < 0) {
347 static void wpa_priv_cmd_l2_register(struct wpa_priv_interface *iface,
369 if (iface->l2) {
372 l2_packet_deinit(iface->l2);
373 iface->l2 = NULL;
376 os_memcpy(&iface->l2_addr, from, sizeof(iface->l2_addr));
378 iface->l2 = l2_packet_init(iface->ifname, NULL, proto,
379 wpa_priv_l2_rx, iface, reg_cmd[1]);
380 if (iface->l2 == NULL) {
386 if (l2_packet_get_own_addr(iface->l2, own_addr) < 0) {
389 l2_packet_deinit(iface->l2);
390 iface->l2 = NULL;
394 res = sendto(iface->fd, own_addr, ETH_ALEN, 0,
400 static void wpa_priv_cmd_l2_unregister(struct wpa_priv_interface *iface,
403 if (iface->l2) {
404 l2_packet_deinit(iface->l2);
405 iface->l2 = NULL;
410 static void wpa_priv_cmd_l2_notify_auth_start(struct wpa_priv_interface *iface,
413 if (iface->l2)
414 l2_packet_notify_auth_start(iface->l2);
418 static void wpa_priv_cmd_l2_send(struct wpa_priv_interface *iface,
426 if (iface->l2 == NULL)
444 res = l2_packet_send(iface->l2, dst_addr, proto, buf + ETH_ALEN + 2,
450 static void wpa_priv_cmd_set_country(struct wpa_priv_interface *iface,
453 if (iface->drv_priv == NULL || iface->driver->set_country == NULL ||
457 iface->driver->set_country(iface->drv_priv, buf);
463 struct wpa_priv_interface *iface = eloop_ctx;
485 cmd, iface->ifname);
491 wpa_priv_cmd_register(iface, &from);
494 wpa_priv_cmd_unregister(iface, &from);
497 wpa_priv_cmd_scan(iface, cmd_buf, cmd_len);
500 wpa_priv_cmd_get_scan_results(iface, &from);
503 wpa_priv_cmd_associate(iface, cmd_buf, cmd_len);
506 wpa_priv_cmd_get_bssid(iface, &from);
509 wpa_priv_cmd_get_ssid(iface, &from);
512 wpa_priv_cmd_set_key(iface, cmd_buf, cmd_len);
515 wpa_priv_cmd_get_capa(iface, &from);
518 wpa_priv_cmd_l2_register(iface, &from, cmd_buf, cmd_len);
521 wpa_priv_cmd_l2_unregister(iface, &from);
524 wpa_priv_cmd_l2_notify_auth_start(iface, &from);
527 wpa_priv_cmd_l2_send(iface, &from, cmd_buf, cmd_len);
534 wpa_priv_cmd_set_country(iface, pos);
540 static void wpa_priv_interface_deinit(struct wpa_priv_interface *iface)
542 if (iface->drv_priv && iface->driver->deinit)
543 iface->driver->deinit(iface->drv_priv);
545 if (iface->fd >= 0) {
546 eloop_unregister_read_sock(iface->fd);
547 close(iface->fd);
548 unlink(iface->sock_name);
551 if (iface->l2)
552 l2_packet_deinit(iface->l2);
554 os_free(iface->ifname);
555 os_free(iface->driver_name);
556 os_free(iface->sock_name);
557 os_free(iface);
566 struct wpa_priv_interface *iface;
576 iface = os_zalloc(sizeof(*iface));
577 if (iface == NULL)
579 iface->fd = -1;
582 iface->driver_name = os_malloc(len + 1);
583 if (iface->driver_name == NULL) {
584 wpa_priv_interface_deinit(iface);
587 os_memcpy(iface->driver_name, params, len);
588 iface->driver_name[len] = '\0';
591 if (os_strcmp(iface->driver_name,
593 iface->driver = wpa_drivers[i];
597 if (iface->driver == NULL) {
599 iface->driver_name);
600 wpa_priv_interface_deinit(iface);
605 iface->ifname = os_strdup(pos);
606 if (iface->ifname == NULL) {
607 wpa_priv_interface_deinit(iface);
611 len = os_strlen(dir) + 1 + os_strlen(iface->ifname);
612 iface->sock_name = os_malloc(len + 1);
613 if (iface->sock_name == NULL) {
614 wpa_priv_interface_deinit(iface);
618 os_snprintf(iface->sock_name, len + 1, "%s/%s", dir, iface->ifname);
619 if (os_strlen(iface->sock_name) >= sizeof(addr.sun_path)) {
620 wpa_priv_interface_deinit(iface);
624 iface->fd = socket(PF_UNIX, SOCK_DGRAM, 0);
625 if (iface->fd < 0) {
627 wpa_priv_interface_deinit(iface);
633 os_strlcpy(addr.sun_path, iface->sock_name, sizeof(addr.sun_path));
635 if (bind(iface->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
638 if (connect(iface->fd, (struct sockaddr *) &addr,
643 if (unlink(iface->sock_name) < 0) {
647 iface->sock_name);
650 if (bind(iface->fd, (struct sockaddr *) &addr,
656 "socket '%s'", iface->sock_name);
661 "not used anymore", iface->sock_name);
666 if (chmod(iface->sock_name, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
671 eloop_register_read_sock(iface->fd, wpa_priv_receive, iface, NULL);
673 return iface;
676 wpa_priv_interface_deinit(iface);
681 static int wpa_priv_send_event(struct wpa_priv_interface *iface, int event,
695 msg.msg_name = &iface->drv_addr;
696 msg.msg_namelen = sizeof(iface->drv_addr);
698 if (sendmsg(iface->fd, &msg, 0) < 0) {
707 static void wpa_priv_send_assoc(struct wpa_priv_interface *iface, int event,
762 wpa_priv_send_event(iface, event, buf, buflen);
768 static void wpa_priv_send_interface_status(struct wpa_priv_interface *iface,
792 wpa_priv_send_event(iface, PRIVSEP_EVENT_INTERFACE_STATUS,
800 static void wpa_priv_send_ft_response(struct wpa_priv_interface *iface,
821 wpa_priv_send_event(iface, PRIVSEP_EVENT_FT_RESPONSE, buf, len);
831 struct wpa_priv_interface *iface = ctx;
835 if (!iface->wpas_registered) {
843 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOC, data);
846 wpa_priv_send_event(iface, PRIVSEP_EVENT_DISASSOC, NULL, 0);
851 wpa_priv_send_assoc(iface, PRIVSEP_EVENT_ASSOCINFO, data);
856 wpa_priv_send_event(iface, PRIVSEP_EVENT_MICHAEL_MIC_FAILURE,
861 wpa_priv_send_event(iface, PRIVSEP_EVENT_SCAN_RESULTS, NULL,
865 wpa_priv_send_interface_status(iface, data);
870 wpa_priv_send_event(iface, PRIVSEP_EVENT_PMKID_CANDIDATE,
877 wpa_priv_send_event(iface, PRIVSEP_EVENT_STKSTART,
881 wpa_priv_send_ft_response(iface, data);
894 struct wpa_priv_interface *iface = ctx;
910 msg.msg_name = &iface->drv_addr;
911 msg.msg_namelen = sizeof(iface->drv_addr);
913 if (sendmsg(iface->fd, &msg, 0) < 0)
966 struct wpa_priv_interface *interfaces = NULL, *iface;
1010 iface = wpa_priv_interface_init(ctrl_dir, argv[i]);
1011 if (iface == NULL)
1013 iface->next = interfaces;
1014 interfaces = iface;
1026 iface = interfaces;
1027 while (iface) {
1028 struct wpa_priv_interface *prev = iface;
1029 iface = iface->next;