diff options
author | Alexander Graf <agraf@suse.de> | 2009-05-26 13:03:27 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-05-28 02:14:56 -0500 |
commit | 1c6ed9f3379faac83da0ed3e95cbd49003ac0dd1 (patch) | |
tree | a00f486a54b46a346b25c73d217bfde0704a5df4 /slirp/slirp.c | |
parent | c1261d8d1617d8cf5722039a59ebb66c310f3aea (diff) |
User networking: Show active connections
In case you're wondering what connections exactly you have open
or maybe redir'ed in the past, you can't really find out from qemu
right now.
This patch enables you to see all current connections the host
only networking holds open, so you can kill them using the previous
patch.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'slirp/slirp.c')
-rw-r--r-- | slirp/slirp.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/slirp/slirp.c b/slirp/slirp.c index 33397c07dc..9cab73124e 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -734,6 +734,30 @@ void if_encap(const uint8_t *ip_data, int ip_data_len) } } +static void _slirp_redir_loop(void (*func)(void *opaque, int is_udp, + struct in_addr *laddr, u_int lport, + struct in_addr *faddr, u_int fport), + void *opaque, int is_udp) +{ + struct socket *head = (is_udp ? &udb : &tcb); + struct socket *so; + + for (so = head->so_next; so != head; so = so->so_next) { + func(opaque, is_udp, + &so->so_laddr, ntohs(so->so_lport), + &so->so_faddr, ntohs(so->so_fport)); + } +} + +void slirp_redir_loop(void (*func)(void *opaque, int is_udp, + struct in_addr *laddr, u_int lport, + struct in_addr *faddr, u_int fport), + void *opaque) +{ + _slirp_redir_loop(func, opaque, 0); + _slirp_redir_loop(func, opaque, 1); +} + /* Unlistens a redirection * * Return value: number of redirs removed */ |