port redirection support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1054 c046a42c-6fe2-441c-8c8c-71466251a162
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 @@
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 @@
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 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 @@
} x;
};
-extern char *tftp_prefix;
-
void tftp_input(struct mbuf *m);