aboutsummaryrefslogtreecommitdiff
path: root/slirp.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@web.de>2009-06-24 14:42:28 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-06-29 08:52:45 -0500
commit8e75c14210d99e1c671c62c5aff6c5ea846eb9a1 (patch)
tree80e39781dc61632b3bd9ca30414372f2b8520c7a /slirp.c
parentcecc828f6d3ae7e430844a6f8dc6486f46a33cba (diff)
downloadslirp-8e75c14210d99e1c671c62c5aff6c5ea846eb9a1.zip
slirp-8e75c14210d99e1c671c62c5aff6c5ea846eb9a1.tar.gz
slirp-8e75c14210d99e1c671c62c5aff6c5ea846eb9a1.tar.bz2
slirp: Bind support for host forwarding rules
Extend the hostfwd rule format so that the user can specify on which host interface qemu should listen for incoming connections. If omitted, binding will takes place against all interfaces. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'slirp.c')
-rw-r--r--slirp.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/slirp.c b/slirp.c
index f3d5824..b269634 100644
--- a/slirp.c
+++ b/slirp.c
@@ -759,7 +759,7 @@ void if_encap(const uint8_t *ip_data, int ip_data_len)
/* Unlistens a redirection
*
* Return value: number of redirs removed */
-int slirp_remove_hostfwd(int is_udp, int host_port)
+int slirp_remove_hostfwd(int is_udp, struct in_addr host_addr, int host_port)
{
struct socket *so;
struct socket *head = (is_udp ? &udb : &tcb);
@@ -772,7 +772,7 @@ loop_again:
for (so = head->so_next; so != head; so = so->so_next) {
addr_len = sizeof(addr);
if (getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 &&
- addr.sin_port == port) {
+ addr.sin_addr.s_addr == host_addr.s_addr && addr.sin_port == port) {
close(so->s);
sofree(so);
n++;
@@ -783,19 +783,19 @@ loop_again:
return n;
}
-int slirp_add_hostfwd(int is_udp, int host_port, struct in_addr guest_addr,
- int guest_port)
+int slirp_add_hostfwd(int is_udp, struct in_addr host_addr, int host_port,
+ struct in_addr guest_addr, int guest_port)
{
if (!guest_addr.s_addr) {
guest_addr = vdhcp_startaddr;
}
if (is_udp) {
- if (!udp_listen(htons(host_port), guest_addr.s_addr, htons(guest_port),
- 0))
+ if (!udp_listen(host_addr.s_addr, htons(host_port), guest_addr.s_addr,
+ htons(guest_port), 0))
return -1;
} else {
- if (!solisten(htons(host_port), guest_addr.s_addr, htons(guest_port),
- 0))
+ if (!tcp_listen(host_addr.s_addr, htons(host_port), guest_addr.s_addr,
+ htons(guest_port), 0))
return -1;
}
return 0;