mirror of https://gitee.com/openkylin/qemu.git
slirp: Enhance host-guest redirection setup (Jan Kiszka)
Allow to establish a TCP/UDP connection redirection also via a monitor command 'host_net_redir'. Moreover, assume TCP as connection type if that parameter is omitted. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7204 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
764a4d1deb
commit
d4ebe1934a
|
@ -1735,6 +1735,10 @@ static const mon_cmd_t mon_cmds[] = {
|
|||
"tap|user|socket|vde|dump [options]", "add host VLAN client" },
|
||||
{ "host_net_remove", "is", net_host_device_remove,
|
||||
"vlan_id name", "remove host VLAN client" },
|
||||
#ifdef CONFIG_SLIRP
|
||||
{ "host_net_redir", "s", net_slirp_redir,
|
||||
"[tcp|udp]:host-port:[guest-host]:guest-port", "redirect TCP or UDP connections from host to guest (requires -net user)" },
|
||||
#endif
|
||||
{ "balloon", "i", do_balloon,
|
||||
"target", "request VM to change it's memory allocation (in MB)" },
|
||||
{ "set_link", "ss", do_set_link,
|
||||
|
|
35
net.c
35
net.c
|
@ -556,11 +556,11 @@ static int net_slirp_init(VLANState *vlan, const char *model, const char *name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void net_slirp_redir(const char *redir_str)
|
||||
void net_slirp_redir(Monitor *mon, const char *redir_str)
|
||||
{
|
||||
int is_udp;
|
||||
char buf[256], *r;
|
||||
const char *p;
|
||||
const char *p, *errmsg;
|
||||
struct in_addr guest_addr;
|
||||
int host_port, guest_port;
|
||||
|
||||
|
@ -571,41 +571,48 @@ void net_slirp_redir(const char *redir_str)
|
|||
|
||||
p = redir_str;
|
||||
if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
|
||||
goto fail;
|
||||
if (!strcmp(buf, "tcp")) {
|
||||
goto fail_syntax;
|
||||
if (!strcmp(buf, "tcp") || buf[0] == '\0') {
|
||||
is_udp = 0;
|
||||
} else if (!strcmp(buf, "udp")) {
|
||||
is_udp = 1;
|
||||
} else {
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
}
|
||||
|
||||
if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
host_port = strtol(buf, &r, 0);
|
||||
if (r == buf)
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
|
||||
if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
if (buf[0] == '\0') {
|
||||
pstrcpy(buf, sizeof(buf), "10.0.2.15");
|
||||
}
|
||||
if (!inet_aton(buf, &guest_addr))
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
|
||||
guest_port = strtol(p, &r, 0);
|
||||
if (r == p)
|
||||
goto fail;
|
||||
goto fail_syntax;
|
||||
|
||||
if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) {
|
||||
fprintf(stderr, "qemu: could not set up redirection\n");
|
||||
exit(1);
|
||||
errmsg = "could not set up redirection\n";
|
||||
goto fail;
|
||||
}
|
||||
return;
|
||||
|
||||
fail_syntax:
|
||||
errmsg = "invalid redirection format\n";
|
||||
fail:
|
||||
fprintf(stderr, "qemu: syntax: -redir [tcp|udp]:host-port:[guest-host]:guest-port\n");
|
||||
exit(1);
|
||||
if (mon) {
|
||||
monitor_printf(mon, errmsg);
|
||||
} else {
|
||||
fprintf(stderr, "qemu: %s", errmsg);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
|
|
2
net.h
2
net.h
|
@ -112,7 +112,7 @@ int net_client_init(const char *device, const char *p);
|
|||
void net_client_uninit(NICInfo *nd);
|
||||
int net_client_parse(const char *str);
|
||||
void net_slirp_smb(const char *exported_dir);
|
||||
void net_slirp_redir(const char *redir_str);
|
||||
void net_slirp_redir(Monitor *mon, const char *redir_str);
|
||||
void net_cleanup(void);
|
||||
int slirp_is_inited(void);
|
||||
void net_client_check(void);
|
||||
|
|
|
@ -943,7 +943,7 @@ When using the user mode network stack, redirect incoming TCP or UDP
|
|||
connections to the host port @var{host-port} to the guest
|
||||
@var{guest-host} on guest port @var{guest-port}. If @var{guest-host}
|
||||
is not specified, its value is 10.0.2.15 (default address given by the
|
||||
built-in DHCP server).
|
||||
built-in DHCP server). If no connection type is specified, TCP is used.
|
||||
|
||||
For example, to redirect host X11 connection from screen 1 to guest
|
||||
screen 0, use the following:
|
||||
|
|
Loading…
Reference in New Issue