Lines Matching +full:- +full:- +full:local

4  * Copyright (c) 2003-2008 Fabrice Bellard
32 #include "qemu/error-report.h"
36 #include "qemu/main-loop.h"
55 qemu_set_fd_handler(s->fd, in net_dgram_update_fd_handler()
56 s->read_poll ? net_dgram_send : NULL, in net_dgram_update_fd_handler()
57 s->write_poll ? net_dgram_writable : NULL, in net_dgram_update_fd_handler()
63 s->read_poll = enable; in net_dgram_read_poll()
69 s->write_poll = enable; in net_dgram_write_poll()
79 qemu_flush_queued_packets(&s->nc); in net_dgram_writable()
89 if (s->dest_addr) { in net_dgram_receive()
90 ret = sendto(s->fd, buf, size, 0, s->dest_addr, s->dest_len); in net_dgram_receive()
92 ret = send(s->fd, buf, size, 0); in net_dgram_receive()
94 } while (ret == -1 && errno == EINTR); in net_dgram_receive()
96 if (ret == -1 && errno == EAGAIN) { in net_dgram_receive()
107 if (!s->read_poll) { in net_dgram_send_completed()
116 if (qemu_send_packet_async(&s->nc, rs->buf, in net_dgram_rs_finalize()
117 rs->packet_len, in net_dgram_rs_finalize()
128 size = recv(s->fd, s->rs.buf, sizeof(s->rs.buf), 0); in net_dgram_send()
138 if (qemu_send_packet_async(&s->nc, s->rs.buf, size, in net_dgram_send()
157 if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) { in net_dgram_mcast_create()
160 inet_ntoa(mcastaddr->sin_addr), in net_dgram_mcast_create()
161 (int)ntohl(mcastaddr->sin_addr.s_addr)); in net_dgram_mcast_create()
162 return -1; in net_dgram_mcast_create()
168 return -1; in net_dgram_mcast_create()
187 inet_ntoa(mcastaddr->sin_addr)); in net_dgram_mcast_create()
192 imr.imr_multiaddr = mcastaddr->sin_addr; in net_dgram_mcast_create()
235 return -1; in net_dgram_mcast_create()
241 if (s->fd != -1) { in net_dgram_cleanup()
244 close(s->fd); in net_dgram_cleanup()
245 s->fd = -1; in net_dgram_cleanup()
247 g_free(s->dest_addr); in net_dgram_cleanup()
248 s->dest_addr = NULL; in net_dgram_cleanup()
249 s->dest_len = 0; in net_dgram_cleanup()
272 s->fd = fd; in net_dgram_fd_init()
273 net_socket_rs_init(&s->rs, net_dgram_rs_finalize, false); in net_dgram_fd_init()
283 SocketAddress *local, in net_dgram_mcast_init() argument
290 if (remote->type != SOCKET_ADDRESS_TYPE_INET) { in net_dgram_mcast_init()
292 return -1; in net_dgram_mcast_init()
296 if (convert_host_port(saddr, remote->u.inet.host, remote->u.inet.port, in net_dgram_mcast_init()
299 return -1; in net_dgram_mcast_init()
302 if (!local) { in net_dgram_mcast_init()
306 return -1; in net_dgram_mcast_init()
309 switch (local->type) { in net_dgram_mcast_init()
313 if (inet_aton(local->u.inet.host, &localaddr) == 0) { in net_dgram_mcast_init()
316 local->u.inet.host); in net_dgram_mcast_init()
317 return -1; in net_dgram_mcast_init()
323 return -1; in net_dgram_mcast_init()
330 fd = monitor_fd_param(monitor_cur(), local->u.fd.str, errp); in net_dgram_mcast_init()
331 if (fd == -1) { in net_dgram_mcast_init()
333 return -1; in net_dgram_mcast_init()
338 error_setg_errno(errp, -ret, "%s: Can't use file descriptor %d", in net_dgram_mcast_init()
340 return -1; in net_dgram_mcast_init()
347 * we must "clone" this dgram socket --jjo in net_dgram_mcast_init()
352 if (convert_host_port(saddr, local->u.inet.host, local->u.inet.port, in net_dgram_mcast_init()
356 return -1; in net_dgram_mcast_init()
360 if (saddr->sin_addr.s_addr == 0) { in net_dgram_mcast_init()
364 return -1; in net_dgram_mcast_init()
371 return -1; in net_dgram_mcast_init()
380 error_setg(errp, "only support inet or fd type for local"); in net_dgram_mcast_init()
381 return -1; in net_dgram_mcast_init()
388 return -1; in net_dgram_mcast_init()
391 g_assert(s->dest_addr == NULL); in net_dgram_mcast_init()
392 s->dest_addr = (struct sockaddr *)saddr; in net_dgram_mcast_init()
393 s->dest_len = sizeof(*saddr); in net_dgram_mcast_init()
395 if (!local) { in net_dgram_mcast_init()
396 qemu_set_info_str(&s->nc, "mcast=%s:%d", in net_dgram_mcast_init()
397 inet_ntoa(saddr->sin_addr), in net_dgram_mcast_init()
398 ntohs(saddr->sin_port)); in net_dgram_mcast_init()
400 switch (local->type) { in net_dgram_mcast_init()
402 qemu_set_info_str(&s->nc, "mcast=%s:%d", in net_dgram_mcast_init()
403 inet_ntoa(saddr->sin_addr), in net_dgram_mcast_init()
404 ntohs(saddr->sin_port)); in net_dgram_mcast_init()
407 qemu_set_info_str(&s->nc, "fd=%d (cloned mcast=%s:%d)", in net_dgram_mcast_init()
408 fd, inet_ntoa(saddr->sin_addr), in net_dgram_mcast_init()
409 ntohs(saddr->sin_port)); in net_dgram_mcast_init()
426 SocketAddress *remote, *local; in net_init_dgram() local
432 assert(netdev->type == NET_CLIENT_DRIVER_DGRAM); in net_init_dgram()
434 remote = netdev->u.dgram.remote; in net_init_dgram()
435 local = netdev->u.dgram.local; in net_init_dgram()
438 if (remote && remote->type == SOCKET_ADDRESS_TYPE_INET) { in net_init_dgram()
441 if (convert_host_port(&mcastaddr, remote->u.inet.host, in net_init_dgram()
442 remote->u.inet.port, errp) < 0) { in net_init_dgram()
443 return -1; in net_init_dgram()
447 return net_dgram_mcast_init(peer, "dram", name, remote, local, in net_init_dgram()
453 if (!local) { in net_init_dgram()
454 error_setg(errp, "dgram requires local= parameter"); in net_init_dgram()
455 return -1; in net_init_dgram()
459 if (local->type == SOCKET_ADDRESS_TYPE_FD) { in net_init_dgram()
460 error_setg(errp, "don't set remote with local.fd"); in net_init_dgram()
461 return -1; in net_init_dgram()
463 if (remote->type != local->type) { in net_init_dgram()
464 error_setg(errp, "remote and local types must be the same"); in net_init_dgram()
465 return -1; in net_init_dgram()
468 if (local->type != SOCKET_ADDRESS_TYPE_FD) { in net_init_dgram()
471 return -1; in net_init_dgram()
475 switch (local->type) { in net_init_dgram()
477 if (convert_host_port(&laddr_in, local->u.inet.host, local->u.inet.port, in net_init_dgram()
479 return -1; in net_init_dgram()
482 if (convert_host_port(&raddr_in, remote->u.inet.host, in net_init_dgram()
483 remote->u.inet.port, errp) < 0) { in net_init_dgram()
484 return -1; in net_init_dgram()
490 return -1; in net_init_dgram()
498 return -1; in net_init_dgram()
505 return -1; in net_init_dgram()
514 ret = unlink(local->u.q_unix.path); in net_init_dgram()
517 local->u.q_unix.path); in net_init_dgram()
518 return -1; in net_init_dgram()
523 local->u.q_unix.path); in net_init_dgram()
526 local->u.q_unix.path); in net_init_dgram()
533 remote->u.q_unix.path); in net_init_dgram()
536 remote->u.q_unix.path); in net_init_dgram()
544 return -1; in net_init_dgram()
552 return -1; in net_init_dgram()
561 fd = monitor_fd_param(monitor_cur(), local->u.fd.str, errp); in net_init_dgram()
562 if (fd == -1) { in net_init_dgram()
563 return -1; in net_init_dgram()
567 error_setg_errno(errp, -ret, "%s: Can't use file descriptor %d", in net_init_dgram()
569 return -1; in net_init_dgram()
575 error_setg(errp, "only support inet or fd type for local"); in net_init_dgram()
576 return -1; in net_init_dgram()
581 return -1; in net_init_dgram()
585 g_assert(s->dest_addr == NULL); in net_init_dgram()
586 s->dest_addr = dest_addr; in net_init_dgram()
587 s->dest_len = dest_len; in net_init_dgram()
590 switch (local->type) { in net_init_dgram()
592 qemu_set_info_str(&s->nc, "udp=%s:%d/%s:%d", in net_init_dgram()
599 qemu_set_info_str(&s->nc, "udp=%s:%s", in net_init_dgram()
608 sa_type = sa->type; in net_init_dgram()
611 qemu_set_info_str(&s->nc, "fd=%d %s", fd, in net_init_dgram()
614 qemu_set_info_str(&s->nc, "fd=%d", fd); in net_init_dgram()