Change SLiRP port forwarding config syntax to make more sense
This commit is contained in:
@@ -36,8 +36,8 @@
|
|||||||
#include <86box/config.h>
|
#include <86box/config.h>
|
||||||
|
|
||||||
|
|
||||||
/* SLiRP can use poll() or select() for socket polling. While poll() is
|
/* SLiRP can use poll() or select() for socket polling.
|
||||||
better, it's slow and limited on Windows, so use select() there. */
|
poll() is best on *nix but slow and limited on Windows. */
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
# define SLIRP_USE_POLL 1
|
# define SLIRP_USE_POLL 1
|
||||||
#endif
|
#endif
|
||||||
@@ -93,7 +93,7 @@ slirp_log(const char *fmt, ...)
|
|||||||
static void
|
static void
|
||||||
net_slirp_guest_error(const char *msg, void *opaque)
|
net_slirp_guest_error(const char *msg, void *opaque)
|
||||||
{
|
{
|
||||||
slirp_log("SLiRP: guest_error: %s\n", msg);
|
slirp_log("SLiRP: guest_error(): %s\n", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ net_slirp_send_packet(const void *qp, size_t pkt_len, void *opaque)
|
|||||||
slirp_t *slirp = (slirp_t *) opaque;
|
slirp_t *slirp = (slirp_t *) opaque;
|
||||||
uint8_t *mac = slirp->mac;
|
uint8_t *mac = slirp->mac;
|
||||||
uint32_t mac_cmp32[2];
|
uint32_t mac_cmp32[2];
|
||||||
uint16_t mac_cmp16[2];
|
uint16_t mac_cmp16[2];
|
||||||
|
|
||||||
if (!(slirp->card->set_link_state && slirp->card->set_link_state(slirp->card->priv)) && !(slirp->card->wait && slirp->card->wait(slirp->card->priv))) {
|
if (!(slirp->card->set_link_state && slirp->card->set_link_state(slirp->card->priv)) && !(slirp->card->wait && slirp->card->wait(slirp->card->priv))) {
|
||||||
slirp_log("SLiRP: received %d-byte packet\n", pkt_len);
|
slirp_log("SLiRP: received %d-byte packet\n", pkt_len);
|
||||||
@@ -252,7 +252,7 @@ net_slirp_get_revents(int idx, void *opaque)
|
|||||||
static void
|
static void
|
||||||
slirp_tic(slirp_t *slirp)
|
slirp_tic(slirp_t *slirp)
|
||||||
{
|
{
|
||||||
int ret2;
|
int ret;
|
||||||
uint32_t tmo;
|
uint32_t tmo;
|
||||||
|
|
||||||
/* Let SLiRP create a list of all open sockets. */
|
/* Let SLiRP create a list of all open sockets. */
|
||||||
@@ -269,7 +269,7 @@ slirp_tic(slirp_t *slirp)
|
|||||||
|
|
||||||
/* Now wait for something to happen, or at most 'tmo' usec. */
|
/* Now wait for something to happen, or at most 'tmo' usec. */
|
||||||
#ifdef SLIRP_USE_POLL
|
#ifdef SLIRP_USE_POLL
|
||||||
ret2 = poll(slirp->pfd, slirp->pfd_len, tmo);
|
ret = poll(slirp->pfd, slirp->pfd_len, tmo);
|
||||||
#else
|
#else
|
||||||
if (tmo < 0)
|
if (tmo < 0)
|
||||||
tmo = 500;
|
tmo = 500;
|
||||||
@@ -278,11 +278,11 @@ slirp_tic(slirp_t *slirp)
|
|||||||
tv.tv_sec = 0;
|
tv.tv_sec = 0;
|
||||||
tv.tv_usec = tmo;
|
tv.tv_usec = tmo;
|
||||||
|
|
||||||
ret2 = select(slirp->nfds + 1, &slirp->rfds, &slirp->wfds, &slirp->xfds, &tv);
|
ret = select(slirp->nfds + 1, &slirp->rfds, &slirp->wfds, &slirp->xfds, &tv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* If something happened, let SLiRP handle it. */
|
/* If something happened, let SLiRP handle it. */
|
||||||
slirp_pollfds_poll(slirp->slirp, (ret2 <= 0), net_slirp_get_revents, slirp);
|
slirp_pollfds_poll(slirp->slirp, (ret <= 0), net_slirp_get_revents, slirp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -316,7 +316,7 @@ poll_thread(void *arg)
|
|||||||
struct in_addr dhcp = { .s_addr = htonl(0x0a00020f) }; /* 10.0.2.15 */
|
struct in_addr dhcp = { .s_addr = htonl(0x0a00020f) }; /* 10.0.2.15 */
|
||||||
struct in_addr dns = { .s_addr = htonl(0x0a000203) }; /* 10.0.2.3 */
|
struct in_addr dns = { .s_addr = htonl(0x0a000203) }; /* 10.0.2.3 */
|
||||||
struct in_addr bind = { .s_addr = htonl(0x00000000) }; /* 0.0.0.0 */
|
struct in_addr bind = { .s_addr = htonl(0x00000000) }; /* 0.0.0.0 */
|
||||||
struct in6_addr ipv6dummy; /* contents don't matter; we're not doing IPv6 */
|
struct in6_addr ipv6dummy; /* contents don't matter; we're not using IPv6 */
|
||||||
|
|
||||||
/* Initialize SLiRP. */
|
/* Initialize SLiRP. */
|
||||||
slirp->slirp = slirp_init(0, 1, net, mask, host, 0, ipv6dummy, 0, ipv6dummy, NULL, NULL, NULL, NULL, dhcp, dns, ipv6dummy, NULL, NULL, &slirp_cb, arg);
|
slirp->slirp = slirp_init(0, 1, net, mask, host, 0, ipv6dummy, 0, ipv6dummy, NULL, NULL, NULL, NULL, dhcp, dns, ipv6dummy, NULL, NULL, &slirp_cb, arg);
|
||||||
@@ -326,23 +326,27 @@ poll_thread(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set up port forwarding. */
|
/* Set up port forwarding. */
|
||||||
int udp, from, to, i = 0;
|
int udp, external, internal, i = 0;
|
||||||
char *category = "SLiRP Port Forwarding";
|
char *category = "SLiRP Port Forwarding";
|
||||||
char key[16];
|
char key[20];
|
||||||
while (1) {
|
while (1) {
|
||||||
sprintf(key, "%d_udp", i);
|
sprintf(key, "%d_protocol", i);
|
||||||
udp = config_get_int(category, key, 0);
|
udp = strncmp(config_get_string(category, key, "tcp"), "udp", -1) == 0;
|
||||||
sprintf(key, "%d_from", i);
|
sprintf(key, "%d_external", i);
|
||||||
from = config_get_int(category, key, 0);
|
external = config_get_int(category, key, 0);
|
||||||
if (from < 1)
|
sprintf(key, "%d_internal", i);
|
||||||
|
internal = config_get_int(category, key, 0);
|
||||||
|
if ((external <= 0) && (internal <= 0))
|
||||||
break;
|
break;
|
||||||
sprintf(key, "%d_to", i);
|
else if (internal <= 0)
|
||||||
to = config_get_int(category, key, from);
|
internal = external;
|
||||||
|
else if (external <= 0)
|
||||||
|
external = internal;
|
||||||
|
|
||||||
if (slirp_add_hostfwd(slirp->slirp, udp, bind, from, dhcp, to) == 0)
|
if (slirp_add_hostfwd(slirp->slirp, udp, bind, external, dhcp, internal) == 0)
|
||||||
pclog("SLiRP: Forwarded %s port host:%d to guest:%d\n", udp ? "UDP" : "TCP", from, to);
|
pclog("SLiRP: Forwarded %s port external:%d to internal:%d\n", udp ? "UDP" : "TCP", external, internal);
|
||||||
else
|
else
|
||||||
pclog("SLiRP: Failed to forward %s port host:%d to guest:%d\n", udp ? "UDP" : "TCP", from, to);
|
pclog("SLiRP: Failed to forward %s port external:%d to internal:%d\n", udp ? "UDP" : "TCP", external, internal);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user