Lines Matching refs:ctrl
76 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
82 ctrl = os_malloc(sizeof(*ctrl)); in wpa_ctrl_open()
83 if (ctrl == NULL) in wpa_ctrl_open()
85 os_memset(ctrl, 0, sizeof(*ctrl)); in wpa_ctrl_open()
87 ctrl->s = socket(PF_UNIX, SOCK_DGRAM, 0); in wpa_ctrl_open()
88 if (ctrl->s < 0) { in wpa_ctrl_open()
89 os_free(ctrl); in wpa_ctrl_open()
93 ctrl->local.sun_family = AF_UNIX; in wpa_ctrl_open()
96 ret = os_snprintf(ctrl->local.sun_path, sizeof(ctrl->local.sun_path), in wpa_ctrl_open()
100 if (ret < 0 || (size_t) ret >= sizeof(ctrl->local.sun_path)) { in wpa_ctrl_open()
101 close(ctrl->s); in wpa_ctrl_open()
102 os_free(ctrl); in wpa_ctrl_open()
106 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open()
107 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open()
115 unlink(ctrl->local.sun_path); in wpa_ctrl_open()
118 close(ctrl->s); in wpa_ctrl_open()
119 os_free(ctrl); in wpa_ctrl_open()
124 chmod(ctrl->local.sun_path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); in wpa_ctrl_open()
125 chown(ctrl->local.sun_path, AID_SYSTEM, AID_WIFI); in wpa_ctrl_open()
136 ctrl->s, buf, in wpa_ctrl_open()
139 close(ctrl->s); in wpa_ctrl_open()
140 unlink(ctrl->local.sun_path); in wpa_ctrl_open()
141 os_free(ctrl); in wpa_ctrl_open()
144 return ctrl; in wpa_ctrl_open()
148 ctrl->dest.sun_family = AF_UNIX; in wpa_ctrl_open()
149 res = os_strlcpy(ctrl->dest.sun_path, ctrl_path, in wpa_ctrl_open()
150 sizeof(ctrl->dest.sun_path)); in wpa_ctrl_open()
151 if (res >= sizeof(ctrl->dest.sun_path)) { in wpa_ctrl_open()
152 close(ctrl->s); in wpa_ctrl_open()
153 os_free(ctrl); in wpa_ctrl_open()
156 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open()
157 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open()
158 close(ctrl->s); in wpa_ctrl_open()
159 unlink(ctrl->local.sun_path); in wpa_ctrl_open()
160 os_free(ctrl); in wpa_ctrl_open()
164 return ctrl; in wpa_ctrl_open()
168 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
170 if (ctrl == NULL) in wpa_ctrl_close()
172 unlink(ctrl->local.sun_path); in wpa_ctrl_close()
173 if (ctrl->s >= 0) in wpa_ctrl_close()
174 close(ctrl->s); in wpa_ctrl_close()
175 os_free(ctrl); in wpa_ctrl_close()
185 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
189 ctrl = os_malloc(sizeof(*ctrl)); in wpa_ctrl_open()
190 if (ctrl == NULL) in wpa_ctrl_open()
192 os_memset(ctrl, 0, sizeof(*ctrl)); in wpa_ctrl_open()
194 ctrl->s = socket(PF_INET, SOCK_DGRAM, 0); in wpa_ctrl_open()
195 if (ctrl->s < 0) { in wpa_ctrl_open()
197 os_free(ctrl); in wpa_ctrl_open()
201 ctrl->local.sin_family = AF_INET; in wpa_ctrl_open()
202 ctrl->local.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
203 if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, in wpa_ctrl_open()
204 sizeof(ctrl->local)) < 0) { in wpa_ctrl_open()
205 close(ctrl->s); in wpa_ctrl_open()
206 os_free(ctrl); in wpa_ctrl_open()
210 ctrl->dest.sin_family = AF_INET; in wpa_ctrl_open()
211 ctrl->dest.sin_addr.s_addr = htonl((127 << 24) | 1); in wpa_ctrl_open()
212 ctrl->dest.sin_port = htons(WPA_CTRL_IFACE_PORT); in wpa_ctrl_open()
213 if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, in wpa_ctrl_open()
214 sizeof(ctrl->dest)) < 0) { in wpa_ctrl_open()
216 close(ctrl->s); in wpa_ctrl_open()
217 os_free(ctrl); in wpa_ctrl_open()
222 if (wpa_ctrl_request(ctrl, "GET_COOKIE", 10, buf, &len, NULL) == 0) { in wpa_ctrl_open()
224 ctrl->cookie = os_strdup(buf); in wpa_ctrl_open()
227 return ctrl; in wpa_ctrl_open()
231 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
233 close(ctrl->s); in wpa_ctrl_close()
234 os_free(ctrl->cookie); in wpa_ctrl_close()
235 os_free(ctrl); in wpa_ctrl_close()
242 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
254 if (ctrl->cookie) { in wpa_ctrl_request()
256 _cmd_len = os_strlen(ctrl->cookie) + 1 + cmd_len; in wpa_ctrl_request()
262 os_strlcpy(pos, ctrl->cookie, _cmd_len); in wpa_ctrl_request()
263 pos += os_strlen(ctrl->cookie); in wpa_ctrl_request()
273 if (send(ctrl->s, _cmd, _cmd_len, 0) < 0) { in wpa_ctrl_request()
283 FD_SET(ctrl->s, &rfds); in wpa_ctrl_request()
284 res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_request()
287 if (FD_ISSET(ctrl->s, &rfds)) { in wpa_ctrl_request()
288 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_request()
317 static int wpa_ctrl_attach_helper(struct wpa_ctrl *ctrl, int attach) in wpa_ctrl_attach_helper() argument
323 ret = wpa_ctrl_request(ctrl, attach ? "ATTACH" : "DETACH", 6, in wpa_ctrl_attach_helper()
333 int wpa_ctrl_attach(struct wpa_ctrl *ctrl) in wpa_ctrl_attach() argument
335 return wpa_ctrl_attach_helper(ctrl, 1); in wpa_ctrl_attach()
339 int wpa_ctrl_detach(struct wpa_ctrl *ctrl) in wpa_ctrl_detach() argument
341 return wpa_ctrl_attach_helper(ctrl, 0); in wpa_ctrl_detach()
347 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
351 res = recv(ctrl->s, reply, *reply_len, 0); in wpa_ctrl_recv()
359 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
366 FD_SET(ctrl->s, &rfds); in wpa_ctrl_pending()
367 select(ctrl->s + 1, &rfds, NULL, NULL, &tv); in wpa_ctrl_pending()
368 return FD_ISSET(ctrl->s, &rfds); in wpa_ctrl_pending()
372 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument
374 return ctrl->s; in wpa_ctrl_get_fd()
389 struct wpa_ctrl *ctrl; in wpa_ctrl_open() local
394 ctrl = os_malloc(sizeof(*ctrl)); in wpa_ctrl_open()
395 if (ctrl == NULL) in wpa_ctrl_open()
397 os_memset(ctrl, 0, sizeof(*ctrl)); in wpa_ctrl_open()
413 os_free(ctrl); in wpa_ctrl_open()
418 ctrl->pipe = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, in wpa_ctrl_open()
427 if (ctrl->pipe != INVALID_HANDLE_VALUE || in wpa_ctrl_open()
432 if (ctrl->pipe == INVALID_HANDLE_VALUE) { in wpa_ctrl_open()
433 os_free(ctrl); in wpa_ctrl_open()
438 if (!SetNamedPipeHandleState(ctrl->pipe, &mode, NULL, NULL)) { in wpa_ctrl_open()
439 CloseHandle(ctrl->pipe); in wpa_ctrl_open()
440 os_free(ctrl); in wpa_ctrl_open()
444 return ctrl; in wpa_ctrl_open()
448 void wpa_ctrl_close(struct wpa_ctrl *ctrl) in wpa_ctrl_close() argument
450 CloseHandle(ctrl->pipe); in wpa_ctrl_close()
451 os_free(ctrl); in wpa_ctrl_close()
455 int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, in wpa_ctrl_request() argument
462 if (!WriteFile(ctrl->pipe, cmd, cmd_len, &written, NULL)) in wpa_ctrl_request()
465 if (!ReadFile(ctrl->pipe, reply, *reply_len, &readlen, NULL)) in wpa_ctrl_request()
473 int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) in wpa_ctrl_recv() argument
476 if (!ReadFile(ctrl->pipe, reply, *reply_len, &len, NULL)) in wpa_ctrl_recv()
483 int wpa_ctrl_pending(struct wpa_ctrl *ctrl) in wpa_ctrl_pending() argument
487 if (!PeekNamedPipe(ctrl->pipe, NULL, 0, NULL, &left, NULL)) in wpa_ctrl_pending()
493 int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) in wpa_ctrl_get_fd() argument