Lines Matching full:ctrl
97 struct wpa_ctrl *ctrl; in wpa_ctrl_open2() local
107 ctrl = os_zalloc(sizeof(*ctrl)); in wpa_ctrl_open2()
108 if (ctrl == NULL) in wpa_ctrl_open2()
111 ctrl->s = socket(PF_UNIX, SOCK_DGRAM, 0); in wpa_ctrl_open2()
112 if (ctrl->s < 0) { in wpa_ctrl_open2()
113 os_free(ctrl); in wpa_ctrl_open2()
117 ctrl->local.sun_family = AF_UNIX; in wpa_ctrl_open2()
121 ret = os_snprintf(ctrl->local.sun_path, in wpa_ctrl_open2()
122 sizeof(ctrl->local.sun_path), in wpa_ctrl_open2()
126 ret = os_snprintf(ctrl->local.sun_path, in wpa_ctrl_open2()
127 sizeof(ctrl->local.sun_path), in wpa_ctrl_open2()
132 if (os_snprintf_error(sizeof(ctrl->local.sun_path), ret)) { in wpa_ctrl_open2()
133 close(ctrl->s); in wpa_ctrl_open2()
134 os_free(ctrl); in wpa_ctrl_open2()
149 fchmod(ctrl->s, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); in wpa_ctrl_open2()
151 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open2()
152 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open2()
160 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
163 close(ctrl->s); in wpa_ctrl_open2()
164 os_free(ctrl); in wpa_ctrl_open2()
170 lchown(ctrl->local.sun_path, -1, AID_WIFI); in wpa_ctrl_open2()
171 lchown(ctrl->local.sun_path, AID_SYSTEM, AID_WIFI); in wpa_ctrl_open2()
175 ctrl->s, ctrl_path + 9, in wpa_ctrl_open2()
178 close(ctrl->s); in wpa_ctrl_open2()
179 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
180 os_free(ctrl); in wpa_ctrl_open2()
183 return ctrl; in wpa_ctrl_open2()
196 ctrl->s, buf, in wpa_ctrl_open2()
199 close(ctrl->s); in wpa_ctrl_open2()
200 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
201 os_free(ctrl); in wpa_ctrl_open2()
204 return ctrl; in wpa_ctrl_open2()
208 ctrl->dest.sun_family = AF_UNIX; in wpa_ctrl_open2()
210 ctrl->dest.sun_path[0] = '\0'; in wpa_ctrl_open2()
211 os_strlcpy(ctrl->dest.sun_path + 1, ctrl_path + 10, in wpa_ctrl_open2()
212 sizeof(ctrl->dest.sun_path) - 1); in wpa_ctrl_open2()
214 res = os_strlcpy(ctrl->dest.sun_path, ctrl_path, in wpa_ctrl_open2()
215 sizeof(ctrl->dest.sun_path)); in wpa_ctrl_open2()
216 if (res >= sizeof(ctrl->dest.sun_path)) { in wpa_ctrl_open2()
217 close(ctrl->s); in wpa_ctrl_open2()
218 os_free(ctrl); in wpa_ctrl_open2()
222 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open2()
223 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open2()
224 close(ctrl->s); in wpa_ctrl_open2()
225 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
226 os_free(ctrl); in wpa_ctrl_open2()
234 flags = fcntl(ctrl->s, F_GETFL); in wpa_ctrl_open2()
237 if (fcntl(ctrl->s, F_SETFL, flags) < 0) { in wpa_ctrl_open2()
238 perror("fcntl(ctrl->s, O_NONBLOCK)"); in wpa_ctrl_open2()
243 return ctrl; in wpa_ctrl_open2()
247 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
249 if (ctrl == NULL) in wpa_ctrl_close()
251 unlink(ctrl->local.sun_path); in wpa_ctrl_close()
252 if (ctrl->s >= 0) in wpa_ctrl_close()
253 close(ctrl->s); in wpa_ctrl_close()
254 os_free(ctrl); in wpa_ctrl_close()
309 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
316 ctrl = os_zalloc(sizeof(*ctrl)); in wpa_ctrl_open()
317 if (ctrl == NULL) in wpa_ctrl_open()
321 ctrl->s = socket(PF_INET6, SOCK_DGRAM, 0); in wpa_ctrl_open()
323 ctrl->s = socket(PF_INET, SOCK_DGRAM, 0); in wpa_ctrl_open()
325 if (ctrl->s < 0) { in wpa_ctrl_open()
327 os_free(ctrl); in wpa_ctrl_open()
332 ctrl->local.sin6_family = AF_INET6; in wpa_ctrl_open()
334 ctrl->local.sin6_addr = in6addr_any; in wpa_ctrl_open()
336 inet_pton(AF_INET6, "::1", &ctrl->local.sin6_addr); in wpa_ctrl_open()
339 ctrl->local.sin_family = AF_INET; in wpa_ctrl_open()
341 ctrl->local.sin_addr.s_addr = INADDR_ANY; in wpa_ctrl_open()
343 ctrl->local.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
347 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open()
348 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open()
349 close(ctrl->s); in wpa_ctrl_open()
350 os_free(ctrl); in wpa_ctrl_open()
355 ctrl->dest.sin6_family = AF_INET6; in wpa_ctrl_open()
356 inet_pton(AF_INET6, "::1", &ctrl->dest.sin6_addr); in wpa_ctrl_open()
357 ctrl->dest.sin6_port = htons(WPA_CTRL_IFACE_PORT); in wpa_ctrl_open()
359 ctrl->dest.sin_family = AF_INET; in wpa_ctrl_open()
360 ctrl->dest.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
361 ctrl->dest.sin_port = htons(WPA_CTRL_IFACE_PORT); in wpa_ctrl_open()
375 close(ctrl->s); in wpa_ctrl_open()
376 os_free(ctrl); in wpa_ctrl_open()
401 ctrl->remote_ip = os_strdup(name); in wpa_ctrl_open()
405 close(ctrl->s); in wpa_ctrl_open()
406 os_free(ctrl->remote_ip); in wpa_ctrl_open()
407 os_free(ctrl); in wpa_ctrl_open()
411 ctrl->dest.sin6_scope_id = scope_id; in wpa_ctrl_open()
412 ctrl->dest.sin6_port = htons(port_id); in wpa_ctrl_open()
413 os_memcpy(&ctrl->dest.sin6_addr, h->h_addr, h->h_length); in wpa_ctrl_open()
415 ctrl->dest.sin_port = htons(port_id); in wpa_ctrl_open()
416 os_memcpy(&ctrl->dest.sin_addr.s_addr, h->h_addr, h->h_length); in wpa_ctrl_open()
419 ctrl->remote_ip = os_strdup("localhost"); in wpa_ctrl_open()
422 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open()
423 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open()
427 inet_ntop(AF_INET6, &ctrl->dest.sin6_addr, addr, in wpa_ctrl_open()
428 sizeof(ctrl->dest)), in wpa_ctrl_open()
429 ntohs(ctrl->dest.sin6_port), in wpa_ctrl_open()
433 inet_ntoa(ctrl->dest.sin_addr), in wpa_ctrl_open()
434 ntohs(ctrl->dest.sin_port), in wpa_ctrl_open()
437 close(ctrl->s); in wpa_ctrl_open()
438 os_free(ctrl->remote_ip); in wpa_ctrl_open()
439 os_free(ctrl); in wpa_ctrl_open()
444 if (wpa_ctrl_request(ctrl, "GET_COOKIE", 10, buf, &len, NULL) == 0) { in wpa_ctrl_open()
446 ctrl->cookie = os_strdup(buf); in wpa_ctrl_open()
449 if (wpa_ctrl_request(ctrl, "IFNAME", 6, buf, &len, NULL) == 0) { in wpa_ctrl_open()
451 ctrl->remote_ifname = os_strdup(buf); in wpa_ctrl_open()
454 return ctrl; in wpa_ctrl_open()
458 char * wpa_ctrl_get_remote_ifname(struct wpa_ctrl *ctrl) in wpa_ctrl_get_remote_ifname() argument
463 ctrl->remote_ip, ctrl->remote_ifname); in wpa_ctrl_get_remote_ifname()
468 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
470 close(ctrl->s); in wpa_ctrl_close()
471 os_free(ctrl->cookie); in wpa_ctrl_close()
472 os_free(ctrl->remote_ifname); in wpa_ctrl_close()
473 os_free(ctrl->remote_ip); in wpa_ctrl_close()
474 os_free(ctrl); in wpa_ctrl_close()
481 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
494 if (ctrl->cookie) { in wpa_ctrl_request()
496 _cmd_len = os_strlen(ctrl->cookie) + 1 + cmd_len; in wpa_ctrl_request()
502 os_strlcpy(pos, ctrl->cookie, _cmd_len); in wpa_ctrl_request()
503 pos += os_strlen(ctrl->cookie); in wpa_ctrl_request()
517 if (send(ctrl->s, _cmd, _cmd_len, 0) < 0) { in wpa_ctrl_request()
556 FD_SET(ctrl->s, &rfds); in wpa_ctrl_request()
557 res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_request()
562 if (FD_ISSET(ctrl->s, &rfds)) { in wpa_ctrl_request()
563 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_request()
593 static int wpa_ctrl_attach_helper(struct wpa_ctrl *ctrl, int attach) in wpa_ctrl_attach_helper() argument
599 ret = wpa_ctrl_request(ctrl, attach ? "ATTACH" : "DETACH", 6, in wpa_ctrl_attach_helper()
609 int wpa_ctrl_attach(struct wpa_ctrl *ctrl) in wpa_ctrl_attach() argument
611 return wpa_ctrl_attach_helper(ctrl, 1); in wpa_ctrl_attach()
615 int wpa_ctrl_detach(struct wpa_ctrl *ctrl) in wpa_ctrl_detach() argument
617 return wpa_ctrl_attach_helper(ctrl, 0); in wpa_ctrl_detach()
623 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
627 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_recv()
635 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
642 FD_SET(ctrl->s, &rfds); in wpa_ctrl_pending()
643 select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_pending()
644 return FD_ISSET(ctrl->s, &rfds); in wpa_ctrl_pending()
648 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument
650 return ctrl->s; in wpa_ctrl_get_fd()
665 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
670 ctrl = os_malloc(sizeof(*ctrl)); in wpa_ctrl_open()
671 if (ctrl == NULL) in wpa_ctrl_open()
673 os_memset(ctrl, 0, sizeof(*ctrl)); in wpa_ctrl_open()
689 os_free(ctrl); in wpa_ctrl_open()
694 ctrl->pipe = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, in wpa_ctrl_open()
703 if (ctrl->pipe != INVALID_HANDLE_VALUE || in wpa_ctrl_open()
708 if (ctrl->pipe == INVALID_HANDLE_VALUE) { in wpa_ctrl_open()
709 os_free(ctrl); in wpa_ctrl_open()
714 if (!SetNamedPipeHandleState(ctrl->pipe, &mode, NULL, NULL)) { in wpa_ctrl_open()
715 CloseHandle(ctrl->pipe); in wpa_ctrl_open()
716 os_free(ctrl); in wpa_ctrl_open()
720 return ctrl; in wpa_ctrl_open()
724 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
726 CloseHandle(ctrl->pipe); in wpa_ctrl_close()
727 os_free(ctrl); in wpa_ctrl_close()
731 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
738 if (!WriteFile(ctrl->pipe, cmd, cmd_len, &written, NULL)) in wpa_ctrl_request()
741 if (!ReadFile(ctrl->pipe, reply, *reply_len, &readlen, NULL)) in wpa_ctrl_request()
749 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
752 if (!ReadFile(ctrl->pipe, reply, *reply_len, &len, NULL)) in wpa_ctrl_recv()
759 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
763 if (!PeekNamedPipe(ctrl->pipe, NULL, 0, NULL, &left, NULL)) in wpa_ctrl_pending()
769 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument