Change SLiRP port forwarding config syntax to make more sense

This commit is contained in:
RichardG867
2020-10-17 00:42:41 -03:00
parent 02ca6493e5
commit 239730a793

View File

@@ -36,8 +36,8 @@
#include <86box/config.h>
/* SLiRP can use poll() or select() for socket polling. While poll() is
better, it's slow and limited on Windows, so use select() there. */
/* SLiRP can use poll() or select() for socket polling.
poll() is best on *nix but slow and limited on Windows. */
#ifndef _WIN32
# define SLIRP_USE_POLL 1
#endif
@@ -93,7 +93,7 @@ slirp_log(const char *fmt, ...)
static void
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;
uint8_t *mac = slirp->mac;
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))) {
slirp_log("SLiRP: received %d-byte packet\n", pkt_len);
@@ -252,7 +252,7 @@ net_slirp_get_revents(int idx, void *opaque)
static void
slirp_tic(slirp_t *slirp)
{
int ret2;
int ret;
uint32_t tmo;
/* 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. */
#ifdef SLIRP_USE_POLL
ret2 = poll(slirp->pfd, slirp->pfd_len, tmo);
ret = poll(slirp->pfd, slirp->pfd_len, tmo);
#else
if (tmo < 0)
tmo = 500;
@@ -278,11 +278,11 @@ slirp_tic(slirp_t *slirp)
tv.tv_sec = 0;
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
/* 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 dns = { .s_addr = htonl(0x0a000203) }; /* 10.0.2.3 */
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. */
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. */
int udp, from, to, i = 0;
int udp, external, internal, i = 0;
char *category = "SLiRP Port Forwarding";
char key[16];
char key[20];
while (1) {
sprintf(key, "%d_udp", i);
udp = config_get_int(category, key, 0);
sprintf(key, "%d_from", i);
from = config_get_int(category, key, 0);
if (from < 1)
sprintf(key, "%d_protocol", i);
udp = strncmp(config_get_string(category, key, "tcp"), "udp", -1) == 0;
sprintf(key, "%d_external", i);
external = config_get_int(category, key, 0);
sprintf(key, "%d_internal", i);
internal = config_get_int(category, key, 0);
if ((external <= 0) && (internal <= 0))
break;
sprintf(key, "%d_to", i);
to = config_get_int(category, key, from);
else if (internal <= 0)
internal = external;
else if (external <= 0)
external = internal;
if (slirp_add_hostfwd(slirp->slirp, udp, bind, from, dhcp, to) == 0)
pclog("SLiRP: Forwarded %s port host:%d to guest:%d\n", udp ? "UDP" : "TCP", from, to);
if (slirp_add_hostfwd(slirp->slirp, udp, bind, external, dhcp, internal) == 0)
pclog("SLiRP: Forwarded %s port external:%d to internal:%d\n", udp ? "UDP" : "TCP", external, internal);
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++;
}