Lines Matching defs:wgu
104 close_tun(struct wg_user *wgu)
109 close(wgu->wgu_fd);
114 strcpy(ifr.ifr_name, wgu->wgu_tun_name);
122 struct wg_user *wgu = aaargh;
129 pfd[0].fd = wgu->wgu_fd;
131 pfd[1].fd = wgu->wgu_pipe[0];
133 pfd[2].fd = wgu->wgu_sock4;
135 pfd[3].fd = wgu->wgu_sock6;
138 while (!wgu->wgu_dying) {
147 wgu->wgu_tun_name, errno);
156 nn = read(wgu->wgu_fd, wgu->wgu_rcvbuf, sizeof(wgu->wgu_rcvbuf));
163 wgu->wgu_tun_name);
168 iov[0].iov_base = wgu->wgu_rcvbuf;
169 iov[0].iov_len = ((struct sockaddr *)wgu->wgu_rcvbuf)->sa_len;
171 iov[1].iov_base = (char *)wgu->wgu_rcvbuf + iov[0].iov_len;
175 rumpkern_wg_recv_user(wgu->wgu_sc, iov, 2);
183 nn = recvfrom(wgu->wgu_sock4, wgu->wgu_rcvbuf,
184 sizeof(wgu->wgu_rcvbuf), 0, (struct sockaddr *)&sin,
193 iov[1].iov_base = wgu->wgu_rcvbuf;
197 rumpkern_wg_recv_peer(wgu->wgu_sc, iov, 2);
205 nn = recvfrom(wgu->wgu_sock6, wgu->wgu_rcvbuf,
206 sizeof(wgu->wgu_rcvbuf), 0, (struct sockaddr *)&sin6,
215 iov[1].iov_base = wgu->wgu_rcvbuf;
219 rumpkern_wg_recv_peer(wgu->wgu_sc, iov, 2);
224 assert(wgu->wgu_dying);
234 struct wg_user *wgu = NULL;
240 wgu = malloc(sizeof(*wgu));
241 if (wgu == NULL) {
246 if (strlcpy(wgu->wgu_tun_name, tun_name, sizeof(wgu->wgu_tun_name))
247 >= sizeof(wgu->wgu_tun_name)) {
251 wgu->wgu_sc = wg;
253 wgu->wgu_fd = open_tun(tun_name);
254 if (wgu->wgu_fd == -1) {
259 if (pipe(wgu->wgu_pipe) == -1) {
264 wgu->wgu_sock4 = socket(AF_INET, SOCK_DGRAM, 0);
265 wgu->wgu_sock6 = socket(AF_INET6, SOCK_DGRAM, 0);
266 if (wgu->wgu_sock4 == -1 || wgu->wgu_sock6 == -1) {
271 rv = pthread_create(&wgu->wgu_rcvthr, NULL, wg_user_rcvthread, wgu);
276 *wgup = wgu;
280 if (wgu->wgu_sock4 != -1)
281 close(wgu->wgu_sock4);
282 if (wgu->wgu_sock6 != -1)
283 close(wgu->wgu_sock6);
285 close(wgu->wgu_pipe[0]);
286 close(wgu->wgu_pipe[1]);
288 close_tun(wgu);
290 free(wgu);
300 rumpuser_wg_send_user(struct wg_user *wgu, struct iovec *iov, size_t iovlen)
315 idontcare = writev(wgu->wgu_fd, iov, iovlen);
324 rumpuser_wg_send_peer(struct wg_user *wgu, struct sockaddr *sa,
333 s = wgu->wgu_sock4;
335 s = wgu->wgu_sock6;
352 rumpuser_wg_ioctl(struct wg_user *wgu, u_long cmd, void *data, int af)
369 rumpuser_wg_sock_bind(struct wg_user *wgu, const uint16_t port)
381 error = bind(wgu->wgu_sock4, (struct sockaddr *)&sin, sizeof(sin));
391 error = bind(wgu->wgu_sock6, (struct sockaddr *)&sin6, sizeof(sin6));
399 rumpuser_wg_destroy(struct wg_user *wgu)
403 wgu->wgu_dying = 1;
404 if (write(wgu->wgu_pipe[1],
405 &wgu->wgu_dying, sizeof(wgu->wgu_dying)) == -1) {
411 wgu->wgu_tun_name);
413 pthread_join(wgu->wgu_rcvthr, NULL);
414 close_tun(wgu);
415 close(wgu->wgu_pipe[0]);
416 close(wgu->wgu_pipe[1]);
417 free(wgu);
423 rumpuser_wg_get_tunname(struct wg_user *wgu)
426 return wgu->wgu_tun_name;