Lines Matching refs:ctrl
105 struct wpa_ctrl *ctrl; in wpa_ctrl_open2() local
115 ctrl = os_zalloc(sizeof(*ctrl)); in wpa_ctrl_open2()
116 if (ctrl == NULL) in wpa_ctrl_open2()
119 ctrl->s = socket(PF_UNIX, SOCK_DGRAM, 0); in wpa_ctrl_open2()
120 if (ctrl->s < 0) { in wpa_ctrl_open2()
121 os_free(ctrl); in wpa_ctrl_open2()
125 ctrl->local.sun_family = AF_UNIX; in wpa_ctrl_open2()
129 ret = os_snprintf(ctrl->local.sun_path, in wpa_ctrl_open2()
130 sizeof(ctrl->local.sun_path), in wpa_ctrl_open2()
134 ret = os_snprintf(ctrl->local.sun_path, in wpa_ctrl_open2()
135 sizeof(ctrl->local.sun_path), in wpa_ctrl_open2()
140 if (os_snprintf_error(sizeof(ctrl->local.sun_path), ret)) { in wpa_ctrl_open2()
141 close(ctrl->s); in wpa_ctrl_open2()
142 os_free(ctrl); in wpa_ctrl_open2()
157 fchmod(ctrl->s, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); in wpa_ctrl_open2()
159 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open2()
160 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open2()
168 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
171 close(ctrl->s); in wpa_ctrl_open2()
172 os_free(ctrl); in wpa_ctrl_open2()
178 lchown(ctrl->local.sun_path, -1, AID_WIFI); in wpa_ctrl_open2()
179 lchown(ctrl->local.sun_path, AID_SYSTEM, AID_WIFI); in wpa_ctrl_open2()
183 ctrl->s, ctrl_path + 9, in wpa_ctrl_open2()
186 close(ctrl->s); in wpa_ctrl_open2()
187 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
188 os_free(ctrl); in wpa_ctrl_open2()
191 return ctrl; in wpa_ctrl_open2()
204 ctrl->s, buf, in wpa_ctrl_open2()
207 close(ctrl->s); in wpa_ctrl_open2()
208 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
209 os_free(ctrl); in wpa_ctrl_open2()
212 return ctrl; in wpa_ctrl_open2()
216 ctrl->dest.sun_family = AF_UNIX; in wpa_ctrl_open2()
218 ctrl->dest.sun_path[0] = '\0'; in wpa_ctrl_open2()
219 os_strlcpy(ctrl->dest.sun_path + 1, ctrl_path + 10, in wpa_ctrl_open2()
220 sizeof(ctrl->dest.sun_path) - 1); in wpa_ctrl_open2()
222 res = os_strlcpy(ctrl->dest.sun_path, ctrl_path, in wpa_ctrl_open2()
223 sizeof(ctrl->dest.sun_path)); in wpa_ctrl_open2()
224 if (res >= sizeof(ctrl->dest.sun_path)) { in wpa_ctrl_open2()
225 close(ctrl->s); in wpa_ctrl_open2()
226 os_free(ctrl); in wpa_ctrl_open2()
230 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open2()
231 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open2()
232 close(ctrl->s); in wpa_ctrl_open2()
233 unlink(ctrl->local.sun_path); in wpa_ctrl_open2()
234 os_free(ctrl); in wpa_ctrl_open2()
242 flags = fcntl(ctrl->s, F_GETFL); in wpa_ctrl_open2()
245 if (fcntl(ctrl->s, F_SETFL, flags) < 0) { in wpa_ctrl_open2()
251 return ctrl; in wpa_ctrl_open2()
255 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
257 if (ctrl == NULL) in wpa_ctrl_close()
259 unlink(ctrl->local.sun_path); in wpa_ctrl_close()
260 if (ctrl->s >= 0) in wpa_ctrl_close()
261 close(ctrl->s); in wpa_ctrl_close()
262 os_free(ctrl); in wpa_ctrl_close()
317 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
324 ctrl = os_zalloc(sizeof(*ctrl)); in wpa_ctrl_open()
325 if (ctrl == NULL) in wpa_ctrl_open()
329 ctrl->s = socket(PF_INET6, SOCK_DGRAM, 0); in wpa_ctrl_open()
331 ctrl->s = socket(PF_INET, SOCK_DGRAM, 0); in wpa_ctrl_open()
333 if (ctrl->s < 0) { in wpa_ctrl_open()
335 os_free(ctrl); in wpa_ctrl_open()
340 ctrl->local.sin6_family = AF_INET6; in wpa_ctrl_open()
342 ctrl->local.sin6_addr = in6addr_any; in wpa_ctrl_open()
344 inet_pton(AF_INET6, "::1", &ctrl->local.sin6_addr); in wpa_ctrl_open()
347 ctrl->local.sin_family = AF_INET; in wpa_ctrl_open()
349 ctrl->local.sin_addr.s_addr = INADDR_ANY; in wpa_ctrl_open()
351 ctrl->local.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
355 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open()
356 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open()
357 close(ctrl->s); in wpa_ctrl_open()
358 os_free(ctrl); in wpa_ctrl_open()
363 ctrl->dest.sin6_family = AF_INET6; in wpa_ctrl_open()
364 inet_pton(AF_INET6, "::1", &ctrl->dest.sin6_addr); in wpa_ctrl_open()
365 ctrl->dest.sin6_port = htons(WPA_CTRL_IFACE_PORT); in wpa_ctrl_open()
367 ctrl->dest.sin_family = AF_INET; in wpa_ctrl_open()
368 ctrl->dest.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
369 ctrl->dest.sin_port = htons(WPA_CTRL_IFACE_PORT); in wpa_ctrl_open()
383 close(ctrl->s); in wpa_ctrl_open()
384 os_free(ctrl); in wpa_ctrl_open()
409 ctrl->remote_ip = os_strdup(name); in wpa_ctrl_open()
413 close(ctrl->s); in wpa_ctrl_open()
414 os_free(ctrl->remote_ip); in wpa_ctrl_open()
415 os_free(ctrl); in wpa_ctrl_open()
419 ctrl->dest.sin6_scope_id = scope_id; in wpa_ctrl_open()
420 ctrl->dest.sin6_port = htons(port_id); in wpa_ctrl_open()
421 os_memcpy(&ctrl->dest.sin6_addr, h->h_addr, h->h_length); in wpa_ctrl_open()
423 ctrl->dest.sin_port = htons(port_id); in wpa_ctrl_open()
424 os_memcpy(&ctrl->dest.sin_addr.s_addr, h->h_addr, h->h_length); in wpa_ctrl_open()
427 ctrl->remote_ip = os_strdup("localhost"); in wpa_ctrl_open()
430 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open()
431 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open()
435 inet_ntop(AF_INET6, &ctrl->dest.sin6_addr, addr, in wpa_ctrl_open()
436 sizeof(ctrl->dest)), in wpa_ctrl_open()
437 ntohs(ctrl->dest.sin6_port), in wpa_ctrl_open()
441 inet_ntoa(ctrl->dest.sin_addr), in wpa_ctrl_open()
442 ntohs(ctrl->dest.sin_port), in wpa_ctrl_open()
445 close(ctrl->s); in wpa_ctrl_open()
446 os_free(ctrl->remote_ip); in wpa_ctrl_open()
447 os_free(ctrl); in wpa_ctrl_open()
452 if (wpa_ctrl_request(ctrl, "GET_COOKIE", 10, buf, &len, NULL) == 0) { in wpa_ctrl_open()
454 ctrl->cookie = os_strdup(buf); in wpa_ctrl_open()
457 if (wpa_ctrl_request(ctrl, "IFNAME", 6, buf, &len, NULL) == 0) { in wpa_ctrl_open()
459 ctrl->remote_ifname = os_strdup(buf); in wpa_ctrl_open()
462 return ctrl; in wpa_ctrl_open()
466 char * wpa_ctrl_get_remote_ifname(struct wpa_ctrl *ctrl) in wpa_ctrl_get_remote_ifname() argument
471 ctrl->remote_ip, ctrl->remote_ifname); in wpa_ctrl_get_remote_ifname()
476 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
478 close(ctrl->s); in wpa_ctrl_close()
479 os_free(ctrl->cookie); in wpa_ctrl_close()
480 os_free(ctrl->remote_ifname); in wpa_ctrl_close()
481 os_free(ctrl->remote_ip); in wpa_ctrl_close()
482 os_free(ctrl); in wpa_ctrl_close()
489 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
502 if (ctrl->cookie) { in wpa_ctrl_request()
504 _cmd_len = os_strlen(ctrl->cookie) + 1 + cmd_len; in wpa_ctrl_request()
510 os_strlcpy(pos, ctrl->cookie, _cmd_len); in wpa_ctrl_request()
511 pos += os_strlen(ctrl->cookie); in wpa_ctrl_request()
525 if (send(ctrl->s, _cmd, _cmd_len, 0) < 0) { in wpa_ctrl_request()
564 FD_SET(ctrl->s, &rfds); in wpa_ctrl_request()
565 res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_request()
570 if (FD_ISSET(ctrl->s, &rfds)) { in wpa_ctrl_request()
571 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_request()
603 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
610 ctrl = os_zalloc(sizeof(*ctrl)); in wpa_ctrl_open()
611 if (ctrl == NULL) { in wpa_ctrl_open()
612 wpa_printf(MSG_ERROR, "Failed to allocate memory: %d\n", sizeof(*ctrl)); in wpa_ctrl_open()
617 ctrl->s = sock; in wpa_ctrl_open()
619 return ctrl; in wpa_ctrl_open()
622 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
624 close(ctrl->s); in wpa_ctrl_close()
625 os_free(ctrl); in wpa_ctrl_close()
629 static int wpa_ctrl_attach_helper(struct wpa_ctrl *ctrl, int attach) in wpa_ctrl_attach_helper() argument
635 ret = wpa_ctrl_request(ctrl, attach ? "ATTACH" : "DETACH", 6, in wpa_ctrl_attach_helper()
645 int wpa_ctrl_attach(struct wpa_ctrl *ctrl) in wpa_ctrl_attach() argument
647 return wpa_ctrl_attach_helper(ctrl, 1); in wpa_ctrl_attach()
651 int wpa_ctrl_detach(struct wpa_ctrl *ctrl) in wpa_ctrl_detach() argument
653 return wpa_ctrl_attach_helper(ctrl, 0); in wpa_ctrl_detach()
659 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
663 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_recv()
671 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
678 FD_SET(ctrl->s, &rfds); in wpa_ctrl_pending()
679 select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_pending()
680 return FD_ISSET(ctrl->s, &rfds); in wpa_ctrl_pending()
684 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument
686 return ctrl->s; in wpa_ctrl_get_fd()
701 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
706 ctrl = os_malloc(sizeof(*ctrl)); in wpa_ctrl_open()
707 if (ctrl == NULL) in wpa_ctrl_open()
709 os_memset(ctrl, 0, sizeof(*ctrl)); in wpa_ctrl_open()
725 os_free(ctrl); in wpa_ctrl_open()
730 ctrl->pipe = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, in wpa_ctrl_open()
739 if (ctrl->pipe != INVALID_HANDLE_VALUE || in wpa_ctrl_open()
744 if (ctrl->pipe == INVALID_HANDLE_VALUE) { in wpa_ctrl_open()
745 os_free(ctrl); in wpa_ctrl_open()
750 if (!SetNamedPipeHandleState(ctrl->pipe, &mode, NULL, NULL)) { in wpa_ctrl_open()
751 CloseHandle(ctrl->pipe); in wpa_ctrl_open()
752 os_free(ctrl); in wpa_ctrl_open()
756 return ctrl; in wpa_ctrl_open()
760 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
762 CloseHandle(ctrl->pipe); in wpa_ctrl_close()
763 os_free(ctrl); in wpa_ctrl_close()
767 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
774 if (!WriteFile(ctrl->pipe, cmd, cmd_len, &written, NULL)) in wpa_ctrl_request()
777 if (!ReadFile(ctrl->pipe, reply, *reply_len, &readlen, NULL)) in wpa_ctrl_request()
785 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
788 if (!ReadFile(ctrl->pipe, reply, *reply_len, &len, NULL)) in wpa_ctrl_recv()
795 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
799 if (!PeekNamedPipe(ctrl->pipe, NULL, 0, NULL, &left, NULL)) in wpa_ctrl_pending()
805 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument