mirror of
https://github.com/mii443/qemu.git
synced 2025-12-17 01:28:52 +00:00
User Networking: Enable removal of redirections
Using the new host_net_redir command you can easily create redirections on the fly while your VM is running. While that's great, it's missing the removal of redirections, in case you want to have a port closed again at a later point in time. This patch adds support for removal of redirections. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
committed by
Anthony Liguori
parent
8a43b1ea7f
commit
c1261d8d16
43
net.c
43
net.c
@@ -568,7 +568,43 @@ static int net_slirp_init(VLANState *vlan, const char *model, const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void net_slirp_redir(Monitor *mon, const char *redir_str)
|
||||
static void net_slirp_redir_rm(Monitor *mon, const char *port_str)
|
||||
{
|
||||
int host_port;
|
||||
char buf[256] = "";
|
||||
const char *p = port_str;
|
||||
int is_udp = 0;
|
||||
int n;
|
||||
|
||||
if (!mon)
|
||||
return;
|
||||
|
||||
if (!port_str || !port_str[0])
|
||||
goto fail_syntax;
|
||||
|
||||
get_str_sep(buf, sizeof(buf), &p, ':');
|
||||
|
||||
if (!strcmp(buf, "tcp") || buf[0] == '\0') {
|
||||
is_udp = 0;
|
||||
} else if (!strcmp(buf, "udp")) {
|
||||
is_udp = 1;
|
||||
} else {
|
||||
goto fail_syntax;
|
||||
}
|
||||
|
||||
host_port = atoi(p);
|
||||
|
||||
n = slirp_redir_rm(is_udp, host_port);
|
||||
|
||||
monitor_printf(mon, "removed %d redirections to %s port %d\n", n,
|
||||
is_udp ? "udp" : "tcp", host_port);
|
||||
return;
|
||||
|
||||
fail_syntax:
|
||||
monitor_printf(mon, "invalid format\n");
|
||||
}
|
||||
|
||||
void net_slirp_redir(Monitor *mon, const char *redir_str, const char *redir_opt2)
|
||||
{
|
||||
int is_udp;
|
||||
char buf[256], *r;
|
||||
@@ -581,6 +617,11 @@ void net_slirp_redir(Monitor *mon, const char *redir_str)
|
||||
slirp_init(slirp_restrict, slirp_ip);
|
||||
}
|
||||
|
||||
if (!strcmp(redir_str, "remove")) {
|
||||
net_slirp_redir_rm(mon, redir_opt2);
|
||||
return;
|
||||
}
|
||||
|
||||
p = redir_str;
|
||||
if (get_str_sep(buf, sizeof(buf), &p, ':') < 0)
|
||||
goto fail_syntax;
|
||||
|
||||
Reference in New Issue
Block a user