diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-08-25 22:12:49 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-08-25 22:12:49 +0000 |
commit | 9bf05444b24f10616b9e9b9f296bcfdcba4ff0df (patch) | |
tree | fa571208d3a955ff6fc96a0c2343ad2b113dbf36 /slirp | |
parent | a3504c87cac0248996bc07d732761ad37ba45f34 (diff) | |
download | hqemu-9bf05444b24f10616b9e9b9f296bcfdcba4ff0df.zip hqemu-9bf05444b24f10616b9e9b9f296bcfdcba4ff0df.tar.gz |
port redirection support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1054 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'slirp')
-rw-r--r-- | slirp/libslirp.h | 7 | ||||
-rw-r--r-- | slirp/slirp.c | 15 | ||||
-rw-r--r-- | slirp/tftp.c | 2 | ||||
-rw-r--r-- | slirp/tftp.h | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/slirp/libslirp.h b/slirp/libslirp.h index 47824b2..772427d 100644 --- a/slirp/libslirp.h +++ b/slirp/libslirp.h @@ -3,8 +3,10 @@ #ifdef _WIN32 #include <winsock2.h> +int inet_aton(const char *cp, struct in_addr *ia); #else #include <sys/select.h> +#include <arpa/inet.h> #endif void slirp_init(void); @@ -20,4 +22,9 @@ void slirp_input(const uint8_t *pkt, int pkt_len); int slirp_can_output(void); void slirp_output(const uint8_t *pkt, int pkt_len); +int slirp_redir(int is_udp, int host_port, + struct in_addr guest_addr, int guest_port); + +extern const char *tftp_prefix; + #endif diff --git a/slirp/slirp.c b/slirp/slirp.c index 405647b..bc2b155 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -617,3 +617,18 @@ void if_encap(const uint8_t *ip_data, int ip_data_len) memcpy(buf + sizeof(struct ethhdr), ip_data, ip_data_len); slirp_output(buf, ip_data_len + ETH_HLEN); } + +int slirp_redir(int is_udp, int host_port, + struct in_addr guest_addr, int guest_port) +{ + if (is_udp) { + if (!udp_listen(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)) + return -1; + } + return 0; +} diff --git a/slirp/tftp.c b/slirp/tftp.c index e50d255..9052662 100644 --- a/slirp/tftp.c +++ b/slirp/tftp.c @@ -36,7 +36,7 @@ struct tftp_session { struct tftp_session tftp_sessions[TFTP_SESSIONS_MAX]; -char *tftp_prefix; +const char *tftp_prefix; static void tftp_session_update(struct tftp_session *spt) { diff --git a/slirp/tftp.h b/slirp/tftp.h index 3ee666a..f0560b6 100644 --- a/slirp/tftp.h +++ b/slirp/tftp.h @@ -29,6 +29,4 @@ struct tftp_t { } x; }; -extern char *tftp_prefix; - void tftp_input(struct mbuf *m); |