Lines Matching +full:peer +full:- +full:hub

4  * Copyright (c) 2003-2008 Fabrice Bellard
37 #include "hub.h"
39 #include "qemu/error-report.h"
42 #include "chardev/char-fe.h"
50 #include "migration/qemu-file-types.h"
59 return -1; in get_str_sep()
60 len = p1 - p; in get_str_sep()
63 if (len > buf_size - 1) in get_str_sep()
64 len = buf_size - 1; in get_str_sep()
123 if (net_peer_needs_padding(&s->nc)) { in net_slirp_send_packet()
130 return qemu_send_packet(&s->nc, pkt, pkt_len); in net_slirp_send_packet()
137 slirp_input(s->slirp, buf, size); in net_slirp_receive()
152 qemu_chr_fe_deinit(&fwd->hd, true); in slirp_free_fwd()
160 g_slist_free_full(s->fwd, slirp_free_fwd); in net_slirp_cleanup()
161 main_loop_poll_remove_notifier(&s->poll_notifier); in net_slirp_cleanup()
162 unregister_savevm(NULL, "slirp", s->slirp); in net_slirp_cleanup()
163 slirp_cleanup(s->slirp); in net_slirp_cleanup()
164 if (s->exit_notifier.notify) { in net_slirp_cleanup()
165 qemu_remove_exit_notifier(&s->exit_notifier); in net_slirp_cleanup()
202 s->slirp = slirp; in net_slirp_init_completed()
208 slirp_handle_timer(t->slirp, t->id, t->cb_opaque); in net_slirp_timer_cb()
216 t->slirp = s->slirp; in net_slirp_timer_new_opaque()
217 t->id = id; in net_slirp_timer_new_opaque()
218 t->cb_opaque = cb_opaque; in net_slirp_timer_new_opaque()
219 timer_init_full(&t->timer, NULL, QEMU_CLOCK_VIRTUAL, in net_slirp_timer_new_opaque()
229 timer_init_full(&t->timer, NULL, QEMU_CLOCK_VIRTUAL, in net_slirp_timer_new()
239 timer_del(&t->timer); in net_slirp_timer_free()
247 timer_mod(&t->timer, expire_timer); in net_slirp_timer_mod()
262 if (WSAEventSelect(fd, event_notifier_get_handle(&ctxt->notifier), in net_slirp_register_poll_sock()
331 int idx = pollfds->len; in net_slirp_add_poll()
371 switch (poll->state) { in net_slirp_poll_notify()
373 slirp_pollfds_fill_socket(s->slirp, &poll->timeout, in net_slirp_poll_notify()
374 net_slirp_add_poll, poll->pollfds); in net_slirp_poll_notify()
378 slirp_pollfds_poll(s->slirp, poll->state == MAIN_LOOP_POLL_ERR, in net_slirp_poll_notify()
379 net_slirp_get_revents, poll->pollfds); in net_slirp_poll_notify()
401 return -1; in net_slirp_stream_write()
426 static int net_slirp_init(NetClientState *peer, const char *model, in net_slirp_init() argument
462 return -1; in net_slirp_init()
467 return -1; in net_slirp_init()
473 return -1; in net_slirp_init()
480 return -1; in net_slirp_init()
501 return -1; in net_slirp_init()
508 return -1; in net_slirp_init()
512 "Invalid netmask provided (must be in range 4-32)"); in net_slirp_init()
513 return -1; in net_slirp_init()
515 mask.s_addr = htonl(0xffffffff << (32 - shift)); in net_slirp_init()
526 return -1; in net_slirp_init()
530 return -1; in net_slirp_init()
535 return -1; in net_slirp_init()
539 return -1; in net_slirp_init()
543 return -1; in net_slirp_init()
548 return -1; in net_slirp_init()
552 return -1; in net_slirp_init()
556 return -1; in net_slirp_init()
562 return -1; in net_slirp_init()
571 return -1; in net_slirp_init()
581 return -1; in net_slirp_init()
587 return -1; in net_slirp_init()
591 return -1; in net_slirp_init()
601 return -1; in net_slirp_init()
605 return -1; in net_slirp_init()
614 return -1; in net_slirp_init()
619 return -1; in net_slirp_init()
624 return -1; in net_slirp_init()
628 error_setg(errp, "'tftp-server-name' parameter cannot exceed 255 bytes"); in net_slirp_init()
629 return -1; in net_slirp_init()
632 nc = qemu_new_net_client(&net_slirp_info, peer, model, name); in net_slirp_init()
660 s->slirp = slirp_new(&cfg, &slirp_cb, s); in net_slirp_init()
673 slirp_state_version(), &savevm_slirp_state, s->slirp); in net_slirp_init()
675 s->poll_notifier.notify = net_slirp_poll_notify; in net_slirp_init()
676 main_loop_poll_add_notifier(&s->poll_notifier); in net_slirp_init()
678 for (config = slirp_configs; config; config = config->next) { in net_slirp_init()
679 if (config->flags & SLIRP_CFG_HOSTFWD) { in net_slirp_init()
680 if (slirp_hostfwd(s, config->str, errp) < 0) { in net_slirp_init()
684 if (slirp_guestfwd(s, config->str, errp) < 0) { in net_slirp_init()
697 s->exit_notifier.notify = slirp_smb_exit; in net_slirp_init()
698 qemu_add_exit_notifier(&s->exit_notifier); in net_slirp_init()
703 return -1; in net_slirp_init()
714 if (strcmp(nc->model, "user")) { in slirp_lookup()
782 err = slirp_remove_hostxfwd(s->slirp, (struct sockaddr *) &host_addr, in hmp_hostfwd_remove()
785 err = slirp_remove_hostfwd(s->slirp, is_udp, host_addr.sin_addr, host_port); in hmp_hostfwd_remove()
841 if (get_str_sep(buf, sizeof(buf), &p, '-') < 0) { in slirp_hostfwd()
869 err = slirp_add_hostxfwd(s->slirp, in slirp_hostfwd()
874 err = slirp_add_hostfwd(s->slirp, is_udp, in slirp_hostfwd()
882 return -1; in slirp_hostfwd()
889 return -1; in slirp_hostfwd()
922 if (s->smb_dir) { in slirp_smb_cleanup()
923 gchar *cmd = g_strdup_printf("rm -rf %s", s->smb_dir); in slirp_smb_cleanup()
925 if (ret == -1 || !WIFEXITED(ret)) { in slirp_smb_cleanup()
932 g_free(s->smb_dir); in slirp_smb_cleanup()
933 s->smb_dir = NULL; in slirp_smb_cleanup()
948 return -1; in slirp_smb()
954 return -1; in slirp_smb()
960 return -1; in slirp_smb()
963 s->smb_dir = g_dir_make_tmp("qemu-smb.XXXXXX", NULL); in slirp_smb()
964 if (!s->smb_dir) { in slirp_smb()
966 return -1; in slirp_smb()
968 smb_conf = g_strdup_printf("%s/%s", s->smb_dir, "smb.conf"); in slirp_smb()
977 return -1; in slirp_smb()
1002 s->smb_dir, in slirp_smb()
1003 s->smb_dir, in slirp_smb()
1004 s->smb_dir, in slirp_smb()
1005 s->smb_dir, in slirp_smb()
1006 s->smb_dir, in slirp_smb()
1007 s->smb_dir, in slirp_smb()
1008 s->smb_dir, in slirp_smb()
1009 s->smb_dir, in slirp_smb()
1011 passwd->pw_name in slirp_smb()
1015 smb_cmdline = g_strdup_printf("%s -l %s -s %s", in slirp_smb()
1016 CONFIG_SMBD_COMMAND, s->smb_dir, smb_conf); in slirp_smb()
1019 if (slirp_add_exec(s->slirp, smb_cmdline, &vserver_addr, 139) < 0 || in slirp_smb()
1020 slirp_add_exec(s->slirp, smb_cmdline, &vserver_addr, 445) < 0) { in slirp_smb()
1024 return -1; in slirp_smb()
1035 return slirp_socket_can_recv(fwd->slirp, fwd->server, fwd->port); in guestfwd_can_read()
1041 slirp_socket_recv(fwd->slirp, fwd->server, fwd->port, buf, size); in guestfwd_read()
1072 if (get_str_sep(buf, sizeof(buf), &p, '-') < 0) { in slirp_guestfwd()
1083 if (slirp_add_exec(s->slirp, &p[4], &server, port) < 0) { in slirp_guestfwd()
1086 return -1; in slirp_guestfwd()
1099 return -1; in slirp_guestfwd()
1103 qemu_chr_fe_init(&fwd->hd, chr, &err); in slirp_guestfwd()
1108 return -1; in slirp_guestfwd()
1111 if (slirp_add_guestfwd(s->slirp, guestfwd_write, &fwd->hd, in slirp_guestfwd()
1115 qemu_chr_fe_deinit(&fwd->hd, true); in slirp_guestfwd()
1117 return -1; in slirp_guestfwd()
1119 fwd->server = server; in slirp_guestfwd()
1120 fwd->port = port; in slirp_guestfwd()
1121 fwd->slirp = s->slirp; in slirp_guestfwd()
1123 qemu_chr_fe_set_handlers(&fwd->hd, guestfwd_can_read, guestfwd_read, in slirp_guestfwd()
1125 s->fwd = g_slist_append(s->fwd, fwd); in slirp_guestfwd()
1131 return -1; in slirp_guestfwd()
1140 bool got_hub_id = net_hub_id_for_client(&s->nc, &id) == 0; in hmp_info_usernet()
1141 char *info = slirp_connection_info(s->slirp); in hmp_info_usernet()
1142 monitor_printf(mon, "Hub %d (%s):\n%s", in hmp_info_usernet()
1143 got_hub_id ? id : -1, in hmp_info_usernet()
1144 s->nc.name, info); in hmp_info_usernet()
1156 pstrcpy(config->str, sizeof(config->str), fwd->value->str); in net_init_slirp_configs()
1157 config->flags = flags; in net_init_slirp_configs()
1158 config->next = slirp_configs; in net_init_slirp_configs()
1161 fwd = fwd->next; in net_init_slirp_configs()
1173 c = c->next; in slirp_dnssearch()
1183 ret[i++] = c->value->str; in slirp_dnssearch()
1184 c = c->next; in slirp_dnssearch()
1191 NetClientState *peer, Error **errp) in net_init_slirp() argument
1200 assert(netdev->type == NET_CLIENT_DRIVER_USER); in net_init_slirp()
1201 user = &netdev->u.user; in net_init_slirp()
1203 if ((user->has_ipv6 && user->ipv6 && !user->has_ipv4) || in net_init_slirp()
1204 (user->has_ipv4 && !user->ipv4)) { in net_init_slirp()
1207 if ((user->has_ipv4 && user->ipv4 && !user->has_ipv6) || in net_init_slirp()
1208 (user->has_ipv6 && !user->ipv6)) { in net_init_slirp()
1212 vnet = user->net ? g_strdup(user->net) : in net_init_slirp()
1213 user->ip ? g_strdup_printf("%s/24", user->ip) : in net_init_slirp()
1216 dnssearch = slirp_dnssearch(user->dnssearch); in net_init_slirp()
1220 net_init_slirp_configs(user->hostfwd, SLIRP_CFG_HOSTFWD); in net_init_slirp()
1221 net_init_slirp_configs(user->guestfwd, 0); in net_init_slirp()
1223 ret = net_slirp_init(peer, "user", name, user->q_restrict, in net_init_slirp()
1224 ipv4, vnet, user->host, in net_init_slirp()
1225 ipv6, user->ipv6_prefix, user->ipv6_prefixlen, in net_init_slirp()
1226 user->ipv6_host, user->hostname, user->tftp, in net_init_slirp()
1227 user->bootfile, user->dhcpstart, in net_init_slirp()
1228 user->dns, user->ipv6_dns, user->smb, in net_init_slirp()
1229 user->smbserver, dnssearch, user->domainname, in net_init_slirp()
1230 user->tftp_server_name, errp); in net_init_slirp()
1234 slirp_configs = config->next; in net_init_slirp()