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:
Alexander Graf 2009-05-26 13:03:26 +02:00 committed by Anthony Liguori
parent 8a43b1ea7f
commit c1261d8d16
6 changed files with 71 additions and 5 deletions

View file

@ -734,6 +734,29 @@ void if_encap(const uint8_t *ip_data, int ip_data_len)
}
}
/* Unlistens a redirection
*
* Return value: number of redirs removed */
int slirp_redir_rm(int is_udp, int host_port)
{
struct socket *so;
struct socket *head = (is_udp ? &udb : &tcb);
int fport = htons(host_port);
int n = 0;
loop_again:
for (so = head->so_next; so != head; so = so->so_next) {
if (so->so_fport == fport) {
close(so->s);
sofree(so);
n++;
goto loop_again;
}
}
return n;
}
int slirp_redir(int is_udp, int host_port,
struct in_addr guest_addr, int guest_port)
{